
    i                      b   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
mZ d dl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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)SnsPostSnsLike
SnsCommentFollowNsnsz
/sns/postsGET)methodsc                     	 t         j                  j                  ddt              } t         j                  j                  ddt              }t         j                  j                  dt              }t        j
                  }|r"|j                  t        j                  |k(        }|j                  t        j                  j                               j                  | |d      }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   SNS 게시글 피드 조회page   typeper_page
   user_idFr   r   	error_out)poststotalpagescurrent_pageerror  N)r   argsgetintr   queryfilter	author_idorder_by
created_atdescpaginater   itemsto_dictr   r   	Exceptionstr)r   r   r   r"   r   postes          C/home/kdj-ubuntu1/mlink_AI_Server/mlink-backend/./src/routes/sns.pyget_sns_postsr0      s!   /||4<<##J#=,,""93"7 LL!2!2g!=>Ew116689BBE C 
 16=dlln=[[[[ 	
  	=
  /Q()3../s0   C7D5 9D0D5 0D5 5	E >EE E POSTc                     	 t        j                         } ddg}|D ]  }|| vst        d| di      dfc S  t        j                  j                  | d         }|st        ddi      dfS t        | d   | d   t        j                  | j                  dg             t        j                  | j                  d	g             
      }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   SNS 게시글 작성contentr$   r    is required  zUser not foundi  
image_urlshashtags)r3   r$   r6   r7      r   N)r   get_jsonr   r   r"   r    r   jsondumpsr   sessionaddcommitr*   r+   rollbackr,   )datarequired_fieldsfielduserr-   r.   s         r/   create_sns_postrD   #   s9   /! %k2$ED E7,)?@A3FF %
 zz~~d;/0G%567<<O;'zz$((<"<=ZZR 89	
 	

t


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


Q()3../s.   !D D 3D ,B2D 	E((5E#E(#E(z/sns/posts/<int:post_id>c                 N   	 t         j                  j                  |       }|j                         }|j                  D cg c]  }|j
                  |j                         ! c}|d<   t        |      S c c}w # t        $ r"}t        dt        |      i      dfcY d}~S d}~ww xY w)u   SNS 게시글 상세 조회Ncommentsr   r   )	r   r"   
get_or_404r*   rF   	parent_idr   r+   r,   )post_idr-   	post_datacommentr.   s        r/   get_sns_postrL   C   s    /}}''0LLN	BF-- m-wSZSdSdSl!2- m	*y!! !n  /Q()3../s4   =A9 A4A4#A9 4A9 9	B$BB$B$z/sns/posts/<int:post_id>/likec                 (   	 t         j                  j                  |       }t        j                         }d|vrt        ddi      dfS t        j                  j                  | |d         j                         }|r^t        j                  j                  |       t        j                  j                          t        dt        |j                        d      S t        | |d         }t        j                  j                  |       t        j                  j                          t        dt        |j                        d      S # t         $ r@}t        j                  j#                          t        dt%        |      i      d	fcY d
}~S d
}~ww xY w)u   SNS 게시글 좋아요r   r   zuser_id is requiredr5   )rI   r   F)liked
like_countTr   N)r   r"   rG   r   r9   r   r	   	filter_byfirstr   r<   deleter>   lenlikesr=   r+   r?   r,   )rI   r-   r@   existing_likeliker.   s         r/   like_sns_postrW   P   s@   /}}''0!D G%:;<cAA  //O 0 
 %' 	
 JJm,JJU#djj/JKK YD JJNN4 JJTTZZIJJ /


Q()3../s,   AE BE A-E 	F5FFFz!/sns/posts/<int:post_id>/commentsc                 @   	 t         j                  j                  |       }t        j                         }ddg}|D ]  }||vst        d| di      dfc S  t        |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   SNS 게시글 댓글 작성r3   r$   r   r4   r5   rH   )r3   rI   r$   rH   r8   r   N)r   r"   rG   r   r9   r   r
   r    r   r<   r=   r>   r*   r+   r?   r,   )rI   r-   r@   rA   rB   rK   r.   s          r/   create_sns_commentrY   r   s    /}}''0! %k2$ED E7,)?@A3FF % O;'hh{+	
 	

w


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


Q()3../s+   A C C A<C 	D5DDDz/sns/followc                     	 t        j                         } ddg}|D ]  }|| vst        d| di      dfc S  | d   | d   k(  rt        ddi      dfS t        j                  j                  | d   | d         j                         }|rJt        j                  j                  |       t        j                  j                          t        dd	i      S t        | d   | 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   사용자 팔로우follower_idfollowing_idr   r4   r5   zCannot follow yourself)r[   r\   	followingFTr   N)r   r9   r   r   r"   rP   rQ   r   r<   rR   r>   r=   r+   r?   r,   )r@   rA   rB   existing_followfollowr.   s         r/   follow_userr`      sl   !/!(.9$ED E7,)?@A3FF % $~"66G%=>?DD !,,00]+n- 1 
 %' 	
 JJo.JJK/00  /!.1F JJNN6"JJK.// /


Q()3../s5   !D1 D1 D1 B D1 AD1 1	E::5E5/E:5E:z /sns/users/<int:user_id>/profilec                    	 t         j                  j                  |       }t        j                  j	                  |       j                         }t        j                  j	                  |       j                         }t        j                  j	                  |       j                         }|j                         |||d}t        |      S # t        $ r"}t        dt        |      i      dfcY d}~S d}~ww xY w)u   사용자 프로필 조회r\   r[   )r$   )rC   follower_countfollowing_count
post_countr   r   N)r   r"   rG   r   rP   countr   r*   r   r+   r,   )r   rC   rd   re   rf   profiler.   s          r/   get_user_profileri      s    /zz$$W-  //W/EKKM ,,00W0EKKM ]],,w,?EEG
 LLN,.$	
 w /Q()3../s   CC 	C6C1+C61C6z"/sns/users/<int:user_id>/followersc                 *   	 t         j                  j                  |       j                         }|D cg c]  }|j                  j                          }}t        |      S c c}w # t        $ r"}t        dt        |      i      dfcY d}~S d}~ww xY w)u   팔로워 목록 조회rb   r   r   N)	r   r"   rP   allfollowerr*   r   r+   r,   )r   followsr_   	followersr.   s        r/   get_followersro      s    /,,((g(>BBD=DEW6V__,,.W	Ey!! F /Q()3../.   2A' !A"A' "A' '	B0BBBz"/sns/users/<int:user_id>/followingc                 *   	 t         j                  j                  |       j                         }|D cg c]  }|j                  j                          }}t        |      S c c}w # t        $ r"}t        dt        |      i      dfcY d}~S d}~ww xY w)u   팔로잉 목록 조회rc   r   r   N)	r   r"   rP   rk   r]   r*   r   r+   r,   )r   rm   r_   r]   r.   s        r/   get_followingrr      s    /,,((W(=AAC>EFgFV%%--/g	Fy!! G /Q()3../rp   z/sns/hashtags/<hashtag>c                    	 t         j                  j                  ddt              }t         j                  j                  ddt              }t        j
                  j                  t        j                  j                  d|  d            j                  t        j                  j                               j                  ||d	      }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    해시태그별 게시글 조회r   r   r   r   r   z%"z"%Fr   )r   r   r   r   hashtagr   r   N)r   r   r    r!   r   r"   r#   r7   rV   r%   r&   r'   r(   r   r)   r*   r   r   r+   r,   )rt   r   r   r   r-   r.   s         r/   get_posts_by_hashtagru      s   /||4<<##J#= $$!!Bwir"23

(7%%**,
-hhE /7 /
 	 16=dlln=[[[[ 
  	=  /Q()3../s0   CD D5 D D 	E$E;EE)flaskr   r   r   src.models.userr   r   src.models.snsr   r	   r
   r   r:   __name__sns_bprouter0   rD   rL   rW   rY   r`   ri   ro   rr   ru        r/   <module>r~      s   - - $ ? ? 	5(	#lUG,/ -/4 lVH-/ ./> (5':
/ ;
/ -x@/ A/B 1F8D/ E/6 mfX.#/ /#/J 05'B/ C/. 2UGD/ E/ 2UGD/ E/ '%9/ :/r}   