From f3c61f9a6184628468155090fe9a3ad37f3efd47 Mon Sep 17 00:00:00 2001 From: Son NK Date: Tue, 4 Feb 2020 23:00:55 +0700 Subject: [PATCH] use left-join when fetching alias --- app/dashboard/views/index.py | 31 ++++++++----------------------- 1 file changed, 8 insertions(+), 23 deletions(-) diff --git a/app/dashboard/views/index.py b/app/dashboard/views/index.py index 4eee7e80..4ca67d74 100644 --- a/app/dashboard/views/index.py +++ b/app/dashboard/views/index.py @@ -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