
    i0                        d dl mZmZmZ d dlmZmZ d dlmZm	Z	m
Z
 d dlmZ  ede      Zej                  ddg      d	        Zej                  dd
g      d        Zej                  ddg      d        Zej                  dd
g      d        Zej                  ddg      d        Zej                  dd
g      d        Zy)    )	Blueprintrequestjsonify)dbUser)ChatRoomChatMessageChatParticipant)datetimechatz/chat/roomsGET)methodsc                     	 t         j                  j                  dt              } | st	        ddi      dfS t
        j                  j                  |       j                         }g }|D ]  }|j                  j                         }|j                  j                  rut
        j                  j                  t
        j                  |j                  k(  t
        j                  | k7        j                         }|r|j                   j"                  |d<   |j%                  |        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intr   r
   query	filter_byallroomto_dict
is_privatefilterroom_idr   firstuserusernameappend	Exceptionstr)r   participationsroomsparticipation	room_dataother_participantes          D/home/kdj-ubuntu1/mlink_AI_Server/mlink-backend/./src/routes/chat.pyget_chat_roomsr0      s/   /,,""93"7G%:;<cAA )..888IMMO+M%**224I!!,,$3$9$9$@$@#++}/D/DD#++w6% %' " %.?.D.D.M.MIl+LL# , u~ /Q()3../s#   5D0 C7D0 0	E9EEEPOSTc                  6   	 t        j                         } d| vst        | d         dk  rt        ddi      dfS t        | d         dk(  }|rt        j
                  j                  t              j                  t              j                  t        j                  dk(  t        j                  j                  | d               j                  t        j                        j!                  t        j"                  j%                  t        j                        dk(        j'                         }|rt        |j)                               S t        | j+                  d      |      }t        j
                  j-                  |       t        j
                  j/                          | d   D ]n  }t0        j                  j+                  |      }|st        dd	| d
i      dfc S t        |j                  |      }t        j
                  j-                  |       p t        j
                  j3                          t        |j)                               dfS # t4        $ r@}t        j
                  j7                          t        dt9        |      i      dfcY d}~S d}~ww xY w)u   채팅방 생성participants   r   z At least 2 participants requiredr   Tname)r5   r    zUser z
 not foundi  r"   r      r   N)r   get_jsonlenr   r   sessionr   r   joinr
   r!   r    r   in_group_byidhavingfunccountr#   r   r   addflushr   commitr'   rollbackr(   )datar    existing_roomr   r   r$   participantr.   s           r/   create_chat_roomrI   $   s   ./! %T.-A)BQ)FG%GHI3NN n-.!3
 JJ,,X6;;OLSS##t+''++D,@A hx{{#FFo556!;%eg  }44677 &!!
 	

t


 N+G::>>'*D5	)DEFKK)K JJNN;' , 	

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


Q()3../s1   7I DI BI A0I 	J5JJJz"/chat/rooms/<int:room_id>/messagesc                    	 t         j                  j                  |       }t        j                  j                  ddt              }t        j                  j                  ddt              }t        j                  j                  |       j                  t        j                  j                               j                  ||d      }t        t        |j                        D cg c]  }|j!                          c}|j"                  |j$                  |d	      S c c}w # 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)rK   rM   	error_out)messagestotalpagescurrent_pager   r   N)r   r   
get_or_404r   r   r   r   r	   r   order_by
created_atdescpaginater   reverseditemsr   rQ   rR   r'   r(   )r"   r   rK   rM   rP   msgr.   s          r/   get_messagesr\   W   s   /~~((1||4<<##J#=$$..w.?HH""'')

(x5(
A 	 2:8>>2JK2J32JK^^^^ 	
  	K
  /Q()3../s0   C$D" &D=D" D" "	E+EEEc           	         	 t         j                  j                  |       }t        j                         }ddg}|D ]  }||vst        d| di      dfc S  t        j                  j                  | |d         j                         }|st        ddi      dfS t        | |d   |d   |j                  d	d
      |j                  d            }t        j                  j                  |       t        j                  j                          t        |j                               dfS # t         $ r@}t        j                  j#                          t        dt%        |      i      dfcY d}~S d}~ww xY w)u   메시지 전송	sender_idcontentr   z is requiredr   r6   z&User is not a participant of this roomi  message_typetextfile_url)r"   r^   r_   r`   rb   r7   r   N)r   r   rT   r   r8   r   r
   r   r#   r	   r   r   r:   rB   rD   r   r'   rE   r(   )r"   r   rF   required_fieldsfieldrH   messager.   s           r/   send_messagerf   l   s[    /~~((1! '	2$ED E7,)?@A3FF %
 &++55% 6 
 %' 	 G%MNOQTTT;'O.&9XXj)
 	

w


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


Q()3../s2   A D( D( AD( BD( (	E115E,&E1,E1z/chat/public-roomsc                  j   	 t         j                  j                  d      j                  t         j                  j                               j                         } t        | D cg c]  }|j                          c}      S c c}w # t        $ r"}t        dt        |      i      dfcY d}~S d}~ww xY w)u   공개 채팅방 목록F)r    r   r   N)r   r   r   rU   rV   rW   r   r   r   r'   r(   )r*   r   r.   s      r/   get_public_roomsrh      s    /((E(:CC$$&

#% 	 595459::9 /Q()3../s0   A"B $B;B B 	B2B-'B2-B2z/chat/rooms/<int:room_id>/joinc                 ^   	 t         j                  j                  |       }t        j                         }d|vrt        ddi      dfS t        j                  j                  | |d         j                         }|rt        ddi      S t        | |d         }t        j                  j                  |       t        j                  j                          t        ddi      S # t        $ r@}t        j                  j                          t        dt        |      i      d	fcY d
}~S d
}~ww xY w)u   채팅방 참여r   r   r   r   r6   re   zAlready joinedzJoined successfullyr   N)r   r   rT   r   r8   r   r
   r   r#   r   r:   rB   rD   r'   rE   r(   )r"   r   rF   existingrH   r.   s         r/   	join_roomrk      s   /~~((1!D G%:;<cAA #((22O 3 
 %' 	 I'7899%O
 	

{#


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


Q()3../s,   AC# A C# 	AC# #	D,,5D'!D,'D,N)flaskr   r   r   src.models.userr   r   src.models.chatr   r	   r
   r   __name__chat_bprouter0   rI   r\   rf   rh   rk        r/   <module>rt      s    - - $ B B 
FH
%}ug./ //6 	}vh/0/ 00/d 	3eWE/ F/( 	3fXF"/ G"/H 	#eW5	/ 6	/ 	/&B/ C/rs   