
    wg                         d dl mZ d dlmZmZmZmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZmZmZ d dlmZ  G d d	e
          Zd
e
fdZdS )    )Iterable)OuterRefQQuerySetSubquery)ChatUserInterface)MessangerRepositoryInterface)ReferralInterface)ChatChatUserMessage)Userc                       e Zd Zdedee         fdZdededefdZdedefdZ	defdZ
dedee         fd	Zd
edefdZdeeef         fdZdefdZdedefdZdedefdZdefdZdS )MessangerRepositoryuser_idreturnc                 B    t           j                            |          S )N)chat_users__user_id)r   objectsfilterselfr   s     Q/var/www/html/cms/infrastructure/persistence/repositories/messanger_repositroy.py__get_chats_queryz%MessangerRepository.__get_chats_query   s    |""w"???    chat_idc                 D    t           j                            ||          S )Nr   r   )r   r   get)r   r   r   s      r   get_chat_userz!MessangerRepository.get_chat_user   s    ##GW#EEEr   c                     t           j                            ||          }t          j                            |          S )N)r   id)chat_user__chat)r   r   r   r   r   )r   r   r   chats       r   get_chat_messagesz%MessangerRepository.get_chat_messages   s5    |GHH%%d%;;;r   c                 ,    |                      |          S N)%_MessangerRepository__get_chats_queryr   s     r   	get_chatszMessangerRepository.get_chats   s    %%g...r   userc                 4   |                      |j                  }t          |j                  }|j        r|t          |j        j                  z  }t          j                            |                              |                              d          S )Nr   )chat__inmessages__time)	r(   r"   r   sponsorr   r   r   excludeorder_by)r   r*   chatsexclude_querys       r   get_last_chatted_withz)MessangerRepository.get_last_chatted_with   s    &&tw//$'***< 	8Qt|7777M&&&66>>}MMVVWghhhr   chat_user_idtextc                 D    t           j                            ||          S )N)r5   r6   )r   r   create)r   r5   r6   s      r   create_messagez"MessangerRepository.create_message#   s    %%<d%KKKr   c                     t           j                                        }t          j                            ||j                  \  }}t          j                            ||j                  \  }}||fS )N)r   r   )r   r   r8   r   get_or_creater"   )r   r   interlocuter_idr$   	chat_user_chat_interlocuters          r   create_chatzMessangerRepository.create_chat&   sg    |""$$'55gtw5WW	1'/==o_c_f=gg1+++r   c                     t           j                            |d                              |                                          S )NF)$chat_user__chat__chat_users__user_idreaden)chat_user__user_id)r   r   r   r0   countr   s     r   count_unreadablez$MessangerRepository.count_unreadable,   s8    O""X]"^^WW00UWW	
r   referral_idc                    t           j                            t          ||g                                                     }|r&t
          j                            |j        |          S |                     ||          \  }}|S )N)chat_users__user_id__inr   )	r   r   r0   r   firstr   r   r"   r@   )r   r   rG   r$   r=   chat_referrals         r   get_referral_chatz%MessangerRepository.get_referral_chat3   s}    |##Q?U%V%V%V$VWW]]__ 	N#'''MMM#'#3#3G[#I#I 	=r   c                     t           j                            |                              |          j        }t
          j                            ddddd                              |          S )	Nr,   )r   usernameprofile_picture
last_loginsecond_namer"   )r"   )r   r   r0   r   r   r   values)r   r   r   r<   s       r   get_interlocuterz$MessangerRepository.get_interlocuter<   sl    "*2272CCGGPWGXX`|"":/@,P]_cddhh i 
 
 	
r   c                    t           j                            t          d                                        d          }t
          j                            t          d                                        |          }|                     |                              t          |
                    d          d d                   t          |
                    d          d d                                                             }t          |d	           d
 |D             }t           j                            |          fd|D             }||fS )Nchat_users__chat__id)chat_user__chat__idz-timer"   )r$   r,      )last_messageinterlocutorr2   c                 *    g | ]}|j         	|j         S r'   )rX   ).0xs     r   
<listcomp>z4MessangerRepository.get_messages.<locals>.<listcomp>Q   s!    OOOaAN4N1>4N4N4Nr   c                 V    g | ]%}|j                             |j                   nd &S r'   )rX   r   )r[   r"   r   s     r   r]   z4MessangerRepository.get_messages.<locals>.<listcomp>U   s5    hhh\^"/2M'++bo...SWhhhr   )r   r   r   r   r1   r   r0   r(   annotater   rR   distinctprintin_bulk)r   r   messages_qsusers_qsr2   id_listresultr   s          @r   get_messagesz MessangerRepository.get_messagesB   sB   o,,J`AaAa,bbkklstt#***??GGPWGXX ""7++X%k&8&8&>&>rr&BCCRZ[c[j[jko[p[pqsrsqs[tRuRu    XZZ 	 	eWOO5OOO/))'22hhhhbghhhf}r   N)__name__
__module____qualname__intr   r   r(   r   r    r%   r)   r
   r   r4   strr9   tupler   r@   rF   rL   rS   rg    r   r   r   r      s       @ @$ @ @ @ @FS F3 F;L F F F F< <s < < < </ / / / /i*; iIZ@[ i i i iL3 Lc L L L L,uXx=O7P , , , ,
3 
 
 
 
 3    
 
c 
 
 
 
C      r   r   r   c                      t                      S r'   )r   rn   r   r   get_messanger_repositoryrp   Z   s       r   N)collections.abcr   django.db.modelsr   r   r   r   domain.messanger.entitiesr   domain.messanger.repositoryr	   domain.referrals.referralr
   +infrastructure.persistence.models.messangerr   r   r   +infrastructure.persistence.models.user.userr   r   rp   rn   r   r   <module>rx      s    $ $ $ $ $ $ < < < < < < < < < < < < 7 7 7 7 7 7 D D D D D D 7 7 7 7 7 7 O O O O O O O O O O < < < < < <K K K K K6 K K K\!"> ! ! ! ! ! !r   