
    Bi                        d dl mZmZmZ d dlmZmZ d dlmZ d dl	m
Z
mZmZ d dlmZ  ede          Ze                    ddg	          d
             Ze                    ddg	          d             Ze                    ddg	          d             Ze                    ddg	          d             Ze                    ddg	          d             Ze                    ddg	          d             ZdS )    )	Blueprintrequestjsonify)dbUser)resolve_user_ref)ChatRoomChatMessageChatParticipant)datetimechatz/chat/roomsGET)methodsc                     	 t           j                            dt                    } | st	          ddi          dfS t
          j                            |                                           }g }|D ]}|j	        
                                }|j	        j        rdt
          j                            t
          j        |j        k    t
          j        | k                                              }|r|j        j        |d<   |                    |           t	          |          S # t&          $ r*}t	          dt          |          i          dfcY d	}~S d	}~ww xY w)
u   채팅방 목록 조회user_idtypeerroruser_id is required  )r   
other_user  N)r   argsgetstrr   r   query	filter_byallroomto_dict
is_privatefilterroom_idr   firstuserusernameappend	Exception)r   participationsroomsparticipation	room_dataother_participantes          H/var/www/html/web/mlink/mlink_AI_Server/mlink-backend/src/routes/chat.pyget_chat_roomsr0   	   sh   /,""93"77 	BG%:;<<cAA ).888IIMMOO+ 
	$ 
	$M%*2244I!, N$3$9$@$@#+}/DD#+w6% % %'' " % N.?.D.MIl+LL####u~~ / / /Q())3......./s#   :D# C%D# #
E-EEEPOSTc                     	 t          j                    } d| vst          | d                   dk     rt          ddi          dfS g }| d         D ]F}t	          |          }|st          dd| di          dfc S |                    |j                   Gt          |          dk    }|rt          j        	                    t                                        t                                        t          j        d	k    t          j                            |                                        t          j                                      t          j                            t          j                  dk                                              }|r!t          |                                          S t          |                     d
          |          }t          j                            |           t          j                                         |D ]7}t          |j        |          }t          j                            |           8t          j                                         t          |                                          dfS # t6          $ rH}	t          j                                         t          dt;          |	          i          dfcY d}	~	S d}	~	ww xY w)u   채팅방 생성participants   r   z At least 2 participants requiredr   zUser z
 not found  Tname)r6   r!   r#   r      r   N)r   get_jsonlenr   r   r'   r   r   sessionr   r	   joinr   r"   r!   in_group_byidhavingfunccountr$   r    r   addflushcommitr(   rollbackr   )
dataparticipant_idsridur!   existing_roomr   pidparticipantr.   s
             r/   create_chat_roomrN   %   s   1/!! %%T.-A)B)BQ)F)FG%GHII3NN' 	. 	.C %%A H)@)@)@)@ABBCGGGG""19---- ))Q.
  		8J,,X66;;OLLSS#t+'++O<<  hx{##FFo566!;% %egg   8}4466777 &!!!
 
 
 	
t

 # 	( 	(C)  K JNN;''''

t||~~&&++ / / /

Q())3......./s2   AJ 5J ;D;J 7CJ 
K%=K K% K%z"/chat/rooms/<int:room_id>/messagesc                    	 t           j                            |           }t          j                            ddt                    }t          j                            ddt                    }t          j                            |           	                    t          j
                                                                      ||d          }t          d	 t          |j                  D             |j        |j        |d
          S # t$          $ r*}t          dt'          |          i          dfcY d}~S d}~ww xY w)u   채팅방 메시지 조회page   r   per_page2   )r#   F)rP   rR   	error_outc                 6    g | ]}|                                 S  r    ).0msgs     r/   
<listcomp>z get_messages.<locals>.<listcomp>h   s     KKK3KKK    )messagestotalpagescurrent_pager   r   N)r	   r   
get_or_404r   r   r   intr
   r   order_by
created_atdescpaginater   reverseditemsr]   r^   r(   r   )r#   r   rP   rR   r\   r.   s         r/   get_messagesrh   [   s9   /~((11|44<##J#==$..w.??HH"''))
 

(x5(
A
A 	 KK(8>2J2JKKK^^ 	
 
   	  / / /Q())3......./s   DD 
ED=7E=Ec           	         	 t           j                            |           }t          j                    }ddg}|D ]}||vrt          d| di          dfc S t          |d                   }|st          ddi          dfS |j        }t          j        	                    | |          
                                }|st          dd	i          d
fS t          | ||d         |                    dd          |                    d                    }t          j                            |           t          j                                         t          |                                          dfS # t$          $ rH}	t          j                                         t          dt)          |	          i          dfcY d}	~	S d}	~	ww xY w)u   메시지 전송	sender_idcontentr   z is requiredr   zSender not foundr5   r7   z&User is not a participant of this roomi  message_typetextfile_url)r#   rj   rk   rl   rn   r8   r   N)r	   r   r`   r   r9   r   r   r   r   r   r$   r
   r   r   r;   rC   rE   r    r(   rF   r   )
r#   r   rG   required_fieldsfieldsendersidrM   messager.   s
             r/   send_messagert   p   s   $/~((11!! '	2$ 	G 	GED  E)?)?)?@AA3FFFF ! "${"344 	?G%78993>>n%+55 6 
 
 %'' 	  	UG%MNOOQTTTO.&99XXj))
 
 
 	
w

w(())3.. / / /

Q())3......./s2   AE3 *E3 AE3 B E3 3
G==G :G Gz/chat/public-roomsc                  f   	 t           j                            d                              t           j                                                                                  } t          d | D                       S # t          $ r*}t          dt          |          i          dfcY d}~S d}~ww xY w)u   공개 채팅방 목록F)r!   c                 6    g | ]}|                                 S rV   rW   )rX   r   s     r/   rZ   z$get_public_rooms.<locals>.<listcomp>   s     9994999r[   r   r   N)
r	   r   r   rb   rc   rd   r   r   r(   r   )r*   r.   s     r/   get_public_roomsrw      s    /((E(::CC$$&&
 

#%% 	 995999::: / / /Q())3......./s   A9A< <
B0B+%B0+B0z/chat/rooms/<int:room_id>/joinc                    	 t           j                            |           }t          j                    }d|vrt          ddi          dfS t          |d                   }|st          ddi          dfS |j        }t          j        	                    | |          
                                }|rt          dd	i          S t          | |          }t          j                            |           t          j                                         t          dd
i          S # t          $ rH}t          j                                         t          dt#          |          i          dfcY d}~S d}~ww xY w)u   채팅방 참여r   r   r   r   zUser not foundr5   r7   rs   zAlready joinedzJoined successfullyr   N)r	   r   r`   r   r9   r   r   r   r   r   r$   r   r;   rC   rE   r(   rF   r   )r#   r   rG   	join_userjidexistingrM   r.   s           r/   	join_roomr|      s   /~((11!!D  G%:;<<cAA$T)_55	 	=G%5677<< #(22 3 
 
 %'' 	  	:I'78999%
 
 
 	
{###

	#89::: / / /

Q())3......./s2   AD! )D! 5AD! AD! !
E3+=E.(E3.E3N)flaskr   r   r   src.models.userr   r   src.utils.user_refr   src.models.chatr	   r
   r   r   __name__chat_bprouter0   rN   rh   rt   rw   r|   rV   r[   r/   <module>r      s   - - - - - - - - - - $ $ $ $ $ $ $ $ / / / / / / B B B B B B B B B B      
)FH
%
%}ug../ / /./6 	}vh//3/ 3/ 0/3/j 	3eWEE/ / FE/( 	3fXFF&/ &/ GF&/P 	#eW55	/ 	/ 65	/ 	/&BB /  / CB /  /  /r[   