use left-join when fetching alias

This commit is contained in:
Son NK 2020-02-04 23:00:55 +07:00
parent 14e82ca7a3
commit f3c61f9a61
1 changed files with 8 additions and 23 deletions

View File

@ -148,13 +148,14 @@ def get_alias_info(user_id, query=None, highlight_gen_email_id=None) -> [AliasIn
query = query.strip().lower()
aliases = {} # dict of alias and AliasInfo
q = (
db.session.query(GenEmail, ForwardEmail, ForwardEmailLog)
.filter(
GenEmail.user_id == user_id,
GenEmail.id == ForwardEmail.gen_email_id,
ForwardEmail.id == ForwardEmailLog.forward_id,
.join(ForwardEmail, GenEmail.id == ForwardEmail.gen_email_id, isouter=True)
.join(
ForwardEmailLog, ForwardEmail.id == ForwardEmailLog.forward_id, isouter=True
)
.filter(GenEmail.user_id == user_id)
.order_by(GenEmail.created_at.desc())
)
@ -172,6 +173,9 @@ def get_alias_info(user_id, query=None, highlight_gen_email_id=None) -> [AliasIn
)
alias_info = aliases[ge.email]
if not fel:
continue
if fel.is_reply:
alias_info.nb_reply += 1
elif fel.blocked:
@ -179,25 +183,6 @@ def get_alias_info(user_id, query=None, highlight_gen_email_id=None) -> [AliasIn
else:
alias_info.nb_forward += 1
# also add alias that has no forward email or log
q = (
db.session.query(GenEmail)
.filter(GenEmail.email.notin_(aliases.keys()))
.filter(GenEmail.user_id == user_id)
).order_by(GenEmail.created_at.desc())
if query:
q = q.filter(GenEmail.email.contains(query))
for ge in q:
aliases[ge.email] = AliasInfo(
gen_email=ge,
nb_blocked=0,
nb_forward=0,
nb_reply=0,
highlight=ge.id == highlight_gen_email_id,
)
ret = list(aliases.values())
# make sure the highlighted alias is the first element