refactor: move get_alias_infos_with_pagination, get_alias_info to alias.py
This commit is contained in:
parent
f3244eb274
commit
f15488f96b
|
@ -1,9 +1,9 @@
|
||||||
from email.utils import parseaddr
|
|
||||||
|
|
||||||
from flask import g
|
from flask import g
|
||||||
from flask import jsonify
|
from flask import jsonify
|
||||||
from flask import request
|
from flask import request
|
||||||
from flask_cors import cross_origin
|
from flask_cors import cross_origin
|
||||||
|
from sqlalchemy import or_
|
||||||
|
from sqlalchemy.orm import joinedload
|
||||||
|
|
||||||
from app.api.base import api_bp, verify_api_key
|
from app.api.base import api_bp, verify_api_key
|
||||||
from app.config import EMAIL_DOMAIN
|
from app.config import EMAIL_DOMAIN
|
||||||
|
@ -11,8 +11,6 @@ from app.config import PAGE_LIMIT
|
||||||
from app.dashboard.views.alias_log import get_alias_log
|
from app.dashboard.views.alias_log import get_alias_log
|
||||||
from app.dashboard.views.index import (
|
from app.dashboard.views.index import (
|
||||||
AliasInfo,
|
AliasInfo,
|
||||||
get_alias_infos_with_pagination,
|
|
||||||
get_alias_info,
|
|
||||||
)
|
)
|
||||||
from app.email_utils import parseaddr_unicode
|
from app.email_utils import parseaddr_unicode
|
||||||
from app.extensions import db
|
from app.extensions import db
|
||||||
|
@ -384,3 +382,53 @@ def delete_contact(contact_id):
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
|
||||||
return jsonify(deleted=True), 200
|
return jsonify(deleted=True), 200
|
||||||
|
|
||||||
|
|
||||||
|
def get_alias_infos_with_pagination(user, page_id=0, query=None) -> [AliasInfo]:
|
||||||
|
ret = []
|
||||||
|
q = (
|
||||||
|
db.session.query(Alias)
|
||||||
|
.options(joinedload(Alias.mailbox))
|
||||||
|
.filter(Alias.user_id == user.id)
|
||||||
|
.order_by(Alias.created_at.desc())
|
||||||
|
)
|
||||||
|
|
||||||
|
if query:
|
||||||
|
q = q.filter(
|
||||||
|
or_(Alias.email.ilike(f"%{query}%"), Alias.note.ilike(f"%{query}%"))
|
||||||
|
)
|
||||||
|
|
||||||
|
q = q.limit(PAGE_LIMIT).offset(page_id * PAGE_LIMIT)
|
||||||
|
|
||||||
|
for alias in q:
|
||||||
|
ret.append(get_alias_info(alias))
|
||||||
|
|
||||||
|
return ret
|
||||||
|
|
||||||
|
|
||||||
|
def get_alias_info(alias: Alias) -> AliasInfo:
|
||||||
|
q = (
|
||||||
|
db.session.query(Contact, EmailLog)
|
||||||
|
.filter(Contact.alias_id == alias.id)
|
||||||
|
.filter(EmailLog.contact_id == Contact.id)
|
||||||
|
)
|
||||||
|
|
||||||
|
alias_info = AliasInfo(
|
||||||
|
id=alias.id,
|
||||||
|
alias=alias,
|
||||||
|
mailbox=alias.mailbox,
|
||||||
|
note=alias.note,
|
||||||
|
nb_blocked=0,
|
||||||
|
nb_forward=0,
|
||||||
|
nb_reply=0,
|
||||||
|
)
|
||||||
|
|
||||||
|
for _, el in q:
|
||||||
|
if el.is_reply:
|
||||||
|
alias_info.nb_reply += 1
|
||||||
|
elif el.blocked:
|
||||||
|
alias_info.nb_blocked += 1
|
||||||
|
else:
|
||||||
|
alias_info.nb_forward += 1
|
||||||
|
|
||||||
|
return alias_info
|
|
@ -3,10 +3,9 @@ from flask import jsonify, request
|
||||||
from flask_cors import cross_origin
|
from flask_cors import cross_origin
|
||||||
|
|
||||||
from app.api.base import api_bp, verify_api_key
|
from app.api.base import api_bp, verify_api_key
|
||||||
from app.api.views.alias import serialize_alias_info
|
from app.api.views.alias import serialize_alias_info, get_alias_info
|
||||||
from app.config import MAX_NB_EMAIL_FREE_PLAN, ALIAS_DOMAINS
|
from app.config import MAX_NB_EMAIL_FREE_PLAN, ALIAS_DOMAINS
|
||||||
from app.dashboard.views.custom_alias import verify_prefix_suffix
|
from app.dashboard.views.custom_alias import verify_prefix_suffix
|
||||||
from app.dashboard.views.index import get_alias_info
|
|
||||||
from app.extensions import db
|
from app.extensions import db
|
||||||
from app.log import LOG
|
from app.log import LOG
|
||||||
from app.models import Alias, AliasUsedOn, User, CustomDomain
|
from app.models import Alias, AliasUsedOn, User, CustomDomain
|
||||||
|
|
|
@ -3,9 +3,8 @@ from flask import jsonify, request
|
||||||
from flask_cors import cross_origin
|
from flask_cors import cross_origin
|
||||||
|
|
||||||
from app.api.base import api_bp, verify_api_key
|
from app.api.base import api_bp, verify_api_key
|
||||||
from app.api.views.alias import serialize_alias_info
|
from app.api.views.alias import serialize_alias_info, get_alias_info
|
||||||
from app.config import MAX_NB_EMAIL_FREE_PLAN
|
from app.config import MAX_NB_EMAIL_FREE_PLAN
|
||||||
from app.dashboard.views.index import get_alias_info
|
|
||||||
from app.extensions import db
|
from app.extensions import db
|
||||||
from app.log import LOG
|
from app.log import LOG
|
||||||
from app.models import Alias, AliasUsedOn, AliasGeneratorEnum
|
from app.models import Alias, AliasUsedOn, AliasGeneratorEnum
|
||||||
|
|
|
@ -184,61 +184,11 @@ def index():
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def get_alias_info(alias: Alias) -> AliasInfo:
|
|
||||||
q = (
|
|
||||||
db.session.query(Contact, EmailLog)
|
|
||||||
.filter(Contact.alias_id == alias.id)
|
|
||||||
.filter(EmailLog.contact_id == Contact.id)
|
|
||||||
)
|
|
||||||
|
|
||||||
alias_info = AliasInfo(
|
|
||||||
id=alias.id,
|
|
||||||
alias=alias,
|
|
||||||
mailbox=alias.mailbox,
|
|
||||||
note=alias.note,
|
|
||||||
nb_blocked=0,
|
|
||||||
nb_forward=0,
|
|
||||||
nb_reply=0,
|
|
||||||
)
|
|
||||||
|
|
||||||
for _, el in q:
|
|
||||||
if el.is_reply:
|
|
||||||
alias_info.nb_reply += 1
|
|
||||||
elif el.blocked:
|
|
||||||
alias_info.nb_blocked += 1
|
|
||||||
else:
|
|
||||||
alias_info.nb_forward += 1
|
|
||||||
|
|
||||||
return alias_info
|
|
||||||
|
|
||||||
|
|
||||||
def get_alias_infos_with_pagination(user, page_id=0, query=None) -> [AliasInfo]:
|
|
||||||
ret = []
|
|
||||||
q = (
|
|
||||||
db.session.query(Alias)
|
|
||||||
.options(joinedload(Alias.mailbox))
|
|
||||||
.filter(Alias.user_id == user.id)
|
|
||||||
.order_by(Alias.created_at.desc())
|
|
||||||
)
|
|
||||||
|
|
||||||
if query:
|
|
||||||
q = q.filter(
|
|
||||||
or_(Alias.email.ilike(f"%{query}%"), Alias.note.ilike(f"%{query}%"))
|
|
||||||
)
|
|
||||||
|
|
||||||
q = q.limit(PAGE_LIMIT).offset(page_id * PAGE_LIMIT)
|
|
||||||
|
|
||||||
for alias in q:
|
|
||||||
ret.append(get_alias_info(alias))
|
|
||||||
|
|
||||||
return ret
|
|
||||||
|
|
||||||
|
|
||||||
def get_alias_infos(user, query=None, highlight_alias_id=None) -> [AliasInfo]:
|
def get_alias_infos(user, query=None, highlight_alias_id=None) -> [AliasInfo]:
|
||||||
if query:
|
if query:
|
||||||
query = query.strip().lower()
|
query = query.strip().lower()
|
||||||
|
|
||||||
aliases = {} # dict of alias and AliasInfo
|
aliases = {} # dict of alias email and AliasInfo
|
||||||
|
|
||||||
q = (
|
q = (
|
||||||
db.session.query(Alias, Contact, EmailLog, Mailbox)
|
db.session.query(Alias, Contact, EmailLog, Mailbox)
|
||||||
|
|
Loading…
Reference in a new issue