Ë
    Íµ&j…(  ã            	       ó  — d dl mZmZmZmZ d dlmZ d dl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mZ d dlmZmZmZmZmZmZ d d	lmZmZm Z  d d
l!m"Z"m#Z#m$Z$  edg¬«      Z%dedede&de'fd„Z(dede)e   de&de)e'   fd„Z*e%jW                  ded¬«       ee«       ee«      fdedefd„«       Ze%jY                  ded¬«       ee«       ee«      fdededefd„«       Z-e%jY                  ded¬«       ee«       ee«      fdededefd„«       Z.e%jY                  d ed!d"¬#«      e%jY                  d$ed%d&¬'«       ee«       ee«      fdededefd(„«       «       Z/e%jY                  d)ed*¬«       ee«       ee«      fdededefd+„«       Z0y,)-é    )Ú	APIRouterÚDependsÚHTTPExceptionÚstatus)Úfunc)ÚSessionÚ
joinedload)Úget_db)Úrequire_user_token)ÚUser)ÚCommunityPostÚCommunityPostCommentÚCommunityPostLikeÚCommunityPostShare)ÚCommunityPostCommentIdRequestÚCommunityPostCommentRequestÚCommunityPostIdRequestÚCommunityPostListResponseÚCommunityPostOutÚCommunityPostShareRequest)Úlist_community_postsÚserialize_community_commentÚserialize_community_post)Únotify_admin_community_commentÚnotify_admin_community_likeÚnotify_admin_community_sharezuser-community)ÚtagsÚdbÚpostÚuser_idÚreturnc                 ó*  — t        |«      }| j                  t        j                  t        j
                  «      «      j                  t        j                  |j
                  k(  «      j                  «       xs d}| j                  t        j                  t        j
                  «      «      j                  t        j                  |j
                  k(  «      j                  «       xs d}| j                  t        j                  t        j
                  «      «      j                  t        j                  |j
                  k(  «      j                  «       xs d}| j                  t        j                  t        j                  t        j
                  «      «      j                  t        j                  |j
                  k(  «      j                  t        j                  «      j                  «       }| j                  t        j
                  «      j                  t        j                  |j
                  k(  t        j                  |k(  «      j                  «       d u}| j                  t        «      j!                  t#        t        j$                  «      «      j                  t        j                  |j
                  k(  «      j'                  t        j(                  j+                  «       t        j
                  j+                  «       «      j                  «       }	t-        |«      |d<   t-        |«      |d<   t-        |«      |d<   |D �
�ci c]  \  }
}t/        |
«      t-        |«      “Œ c}}
|d<   ||d<   |	D �cg c]  }t1        |«      ‘Œ c}|d<   |S c c}}
w c c}w ©Nr   Úlikes_countÚcomments_countÚshares_countÚshare_countsÚliked_by_meÚcomments)r   Úqueryr   Úcountr   ÚidÚfilterÚpost_idÚscalarr   r   ÚplatformÚgroup_byÚallr    ÚfirstÚoptionsr	   ÚuserÚorder_byÚ
created_atÚascÚintÚstrr   )r   r   r    Údatar$   r%   r&   Ú
share_rowsr(   r)   r0   r+   Úcomments                úE/var/www/html/kelly/kelly-backend/app/routers/user_panel/community.pyÚ_post_with_engagementr?      s¬  € Ü# DÓ)€Dà
�‰”—‘Ô-×0Ñ0Ó1Ó2ß	‰Ô!×)Ñ)¨T¯W©WÑ4Ó	5ß	‰‹ò	ð ð	 ð 	�‰”—‘Ô0×3Ñ3Ó4Ó5ß	‰Ô$×,Ñ,°·±Ñ7Ó	8ß	‰‹ò	ð ð	 ð 	�‰”—‘Ô.×1Ñ1Ó2Ó3ß	‰Ô"×*Ñ*¨d¯g©gÑ5Ó	6ß	‰‹ò	ð ð	 ð 	�‰Ô#×,Ñ,¬d¯j©jÔ9K×9NÑ9NÓ.OÓPß	‰Ô"×*Ñ*¨d¯g©gÑ5Ó	6ß	‰Ô$×-Ñ-Ó	.ß	‰‹ð	 ð 	�‰Ô"×%Ñ%Ó&ß	‰Ô!×)Ñ)¨T¯W©WÑ4Ô6G×6OÑ6OÐSZÑ6ZÓ	[ß	‰‹Øð	ð ð 	�‰Ô%Ó&ß	‰”Ô0×5Ñ5Ó6Ó	7ß	‰Ô$×,Ñ,°·±Ñ7Ó	8ß	‰Ô&×1Ñ1×5Ñ5Ó7Ô9M×9PÑ9P×9TÑ9TÓ9VÓ	Wß	‰‹ð ô ˜kÓ*€DˆÑÜ  Ó0€DÐ	ÑÜ˜|Ó,€DˆÑÙMWÔXÉZ¹/¸(ÀEœC ›M¬3¨u«:Ñ5ÈZÒX€DˆÑØ%€DˆÑÙLTÓUÉHÀÔ3°GÕ<ÈHÑU€DˆÑØ€Kùó YùâUs   ÍN
Í0NÚpostsc                 óV  — |sg S |D �cg c]  }|j                   ‘Œ }}t        | j                  t        j                  t        j                  t        j                   «      «      j                  t        j                  j                  |«      «      j                  t        j                  «      j                  «       «      }t        | j                  t        j                  t        j                  t        j                   «      «      j                  t        j                  j                  |«      «      j                  t        j                  «      j                  «       «      }t        | j                  t        j                  t        j                  t        j                   «      «      j                  t        j                  j                  |«      «      j                  t        j                  «      j                  «       «      }| j                  t        j                  «      j                  t        j                  j                  |«      t        j                  |k(  «      j                  «       D �ch c]  \  }|’Œ }	}|D �ci c]  }|i “Œ }
}| j                  t        j                  t        j                  t        j                  t        j                   «      «      j                  t        j                  j                  |«      «      j                  t        j                  t        j                  «      j                  «       D ]-  \  }}}t        |«      |
j!                  |i «      t#        |«      <   Œ/ |D �ci c]  }|g “Œ }}| j                  t        «      j%                  t'        t        j(                  «      «      j                  t        j                  j                  |«      «      j+                  t        j                  j-                  «       t        j.                  j-                  «       t        j                   j-                  «       «      j                  «       }|D ]-  }|j!                  |j                  g «      j1                  |«       Œ/ g }|D ]ü  }t3        |«      }t        |j5                  |j                   d«      «      |d<   t        |j5                  |j                   d«      «      |d<   t        |j5                  |j                   d«      «      |d<   |
j5                  |j                   i «      |d<   |j                   |	v |d<   |j5                  |j                   g «      D �cg c]  }t7        |«      ‘Œ c}|d<   |j1                  |«       Œþ |S c c}w c c}w c c}w c c}w c c}w r#   )r,   Údictr*   r   r.   r   r+   r-   Úin_r1   r2   r   r   r    r0   r9   Ú
setdefaultr:   r4   r	   r5   r6   r8   r7   Úappendr   Úgetr   )r   r@   r    r   Úpost_idsÚlikes_by_postÚcomments_by_postÚshares_by_postr.   Úliked_post_idsr'   r0   r+   Úcomments_by_post_idÚall_commentsr=   Ú
serializedr;   s                     r>   Ú_posts_with_engagementrO   O   sw  € ÙØˆ	á$)Ó*¡E˜D�—“ E€HÐ*ÜØ
�‰Ô"×*Ñ*¬D¯J©JÔ7H×7KÑ7KÓ,LÓMß	‰Ô!×)Ñ)×-Ñ-¨hÓ7Ó	8ß	‰Ô#×+Ñ+Ó	,ß	‰‹ó	€Mô Ø
�‰Ô%×-Ñ-¬t¯z©zÔ:N×:QÑ:QÓ/RÓSß	‰Ô$×,Ñ,×0Ñ0°Ó:Ó	;ß	‰Ô&×.Ñ.Ó	/ß	‰‹ó	Ðô Ø
�‰Ô#×+Ñ+¬T¯Z©ZÔ8J×8MÑ8MÓ-NÓOß	‰Ô"×*Ñ*×.Ñ.¨xÓ8Ó	9ß	‰Ô$×,Ñ,Ó	-ß	‰‹ó	€Nð Ÿ(™(Ô#4×#<Ñ#<Ó=ß	‰Ü×%Ñ%×)Ñ)¨(Ó3Ü×%Ñ%¨Ñ0ó

÷ 
‰‹ðóñ‰JˆWò 	ðð ð ñ KSÓ.SÉ(¸w¨w¸©{È(€LÐ.Sà
�‰Ü×&Ñ&Ü×'Ñ'Ü�J‰JÔ)×,Ñ,Ó-ó	
÷
 
‰Ô"×*Ñ*×.Ñ.¨xÓ8Ó	9ß	‰Ô$×,Ñ,Ô.@×.IÑ.IÓ	Jß	‰‹ò	ñ 	!ˆ�˜5ô ?BÀ%»jˆ×Ñ ¨Ó,¬S°«]Ò;ð	ñ ^fÓAfÑ]eÐRYÀ'È2Á+Ð]eÐÐAfà
�‰Ô%Ó&ß	‰”Ô0×5Ñ5Ó6Ó	7ß	‰Ô$×,Ñ,×0Ñ0°Ó:Ó	;ß	‰Ü ×(Ñ(×,Ñ,Ó.Ü ×+Ñ+×/Ñ/Ó1Ü ×#Ñ#×'Ñ'Ó)ó

÷
 
‰‹ð ó  ˆØ×&Ñ& w§¡¸Ó;×BÑBÀ7ÕKð  ð  €JÛˆÜ'¨Ó-ˆÜ! -×"3Ñ"3°D·G±G¸QÓ"?Ó@ˆˆ]ÑÜ!$Ð%5×%9Ñ%9¸$¿'¹'À1Ó%EÓ!FˆÐÑÜ" >×#5Ñ#5°d·g±g¸qÓ#AÓBˆˆ^ÑØ+×/Ñ/°·±¸Ó<ˆˆ^ÑØ"Ÿg™g¨Ð7ˆˆ]Ñð /×2Ñ2°4·7±7¸BÔ?ó
á?�ô (¨Õ0Ø?ñ
ˆˆZÑð 	×Ñ˜$Õð ð ÐùòK +ùò&ùò /Tùò Bgùò.
s   ‰VÉ.VÉ?
VÍ5
V!Õ%V&z/list-community-postsz4List community posts for the user app (newest first))Úresponse_modelÚsummaryr5   c                 ór   — t        | «      }t        | ||j                  «      }t        t	        |«      |¬«      S )N)Útotalr@   )Úfetch_community_postsrO   r,   r   Úlen)r   r5   r@   rN   s       r>   r   r   ›   s1   € ô " "Ó%€EÜ'¨¨E°4·7±7Ó;€JÜ$¬3¨z«?À*ÔMÐMó    z/toggle-community-post-likezLike or unlike a community postÚbodyc                 ó´  — |j                  t        | j                  «      }|€t        t        j
                  d¬«      ‚|j                  t        «      j                  t        j                  | j                  k(  t        j                  |j                  k(  «      j                  «       }|�|j                  |«       ng|j                  t        | j                  |j                  ¬«      «       |j                  «        t        |||j                  |j                   xs d¬«       |j#                  «        |j%                  |«       t'        |||j                  «      S )NúCommunity post not found©Ústatus_codeÚdetail)r.   r    Ú )r.   Ú
post_title)rF   r   r.   r   r   ÚHTTP_404_NOT_FOUNDr*   r   r-   r    r,   r3   ÚdeleteÚaddÚflushr   ÚtitleÚcommitÚrefreshr?   )rW   r   r5   r   Úexistings        r>   Útoggle_community_post_likerg   ©   sÿ   € ð �6‰6”- §¡Ó.€DØ€|Ü¬×(AÑ(AÐJdÔeÐeð 	�‰Ô"Ó#ß	‰Ô!×)Ñ)¨T¯\©\Ñ9Ô;L×;TÑ;TÐX\×X_ÑX_Ñ;_Ó	`ß	‰‹ð ð
 ÐØ
�	‰	�(Õà
�‰Ô ¨¯©¸t¿w¹wÔGÔHØ
�‰Œ
Ü#ØØØ—G‘GØ—z‘zÒ' Rõ		
ð ‡I�I„KØ‡J�JˆtÔÜ   T¨4¯7©7Ó3Ð3rV   z/add-community-post-commentz!Add a comment to a community postc                 ó,  — |j                  t        | j                  «      }|€t        t        j
                  d¬«      ‚| j                  j                  «       }|st        t        j                  d¬«      ‚|j                  t        | j                  |j                  |¬«      «       |j                  «        t        |||j                  |j                  xs d|¬«       |j                  «        |j!                  |«       t#        |||j                  «      S )NrY   rZ   zComment is required)r.   r    r=   r]   )r.   r^   Úcomment_preview)rF   r   r.   r   r   r_   r=   ÚstripÚHTTP_400_BAD_REQUESTra   r   r,   rb   r   rc   rd   re   r?   )rW   r   r5   r   Úcomment_texts        r>   Úadd_community_post_commentrm   Í   sÏ   € ð �6‰6”- §¡Ó.€DØ€|Ü¬×(AÑ(AÐJdÔeÐeà—<‘<×%Ñ%Ó'€LÙÜ¬×(CÑ(CÐLaÔbÐbà‡F�FÔ¨¯©¸d¿g¹gÈ|Ô\Ô]Ø‡H�H„JÜ"Ø
ØØ—‘Ø—:‘:Ò# Ø$õð ‡I�I„KØ‡J�JˆtÔÜ   T¨4¯7©7Ó3Ð3rV   z/delete-community-commentz+Delete your own comment on a community postÚ!delete_own_community_post_comment)rP   rQ   Únamez/delete-community-post-commentz3Delete your own comment on a community post (alias)F)rP   rQ   Úinclude_in_schemac                 ó^  — |j                  t        | j                  «      }|€u| j                  �i|j	                  t        «      j                  t        j                  | j                  k(  t        j                  | j                  k(  «      j                  «       }|€t        t        j                  d¬«      ‚| j                  �4|j                  | j                  k7  rt        t        j                  d¬«      ‚|j                  |j                  k7  rt        t        j                  d¬«      ‚|j                  t        |j                  «      }|€t        t        j                  d¬«      ‚|j                  |«       |j                  «        |j!                  |«       t#        |||j                  «      S )NzComment not foundrZ   z%You can only delete your own commentsrY   )rF   r   Ú
comment_idr.   r*   r-   r,   r3   r   r   r_   r    ÚHTTP_403_FORBIDDENr   r`   rd   re   r?   )rW   r   r5   Úrowr   s        r>   rn   rn   í   sC  € ð" �&‰&Ô% t§¡Ó
7€CØ
€{�t—|‘|Ð/à�H‰HÔ)Ó*ß‰VÜ$×'Ñ'¨4¯?©?Ñ:Ü$×,Ñ,°·±Ñ<ó÷ ‰U‹Wð 	ð €{Ü¬×(AÑ(AÐJ]Ô^Ð^Ø‡|�|Ð C§K¡K°4·<±<Ò$?Ü¬×(AÑ(AÐJ]Ô^Ð^Ø
‡{�{�d—g‘gÒÜÜ×1Ñ1Ø:ô
ð 	
ð
 �6‰6”- §¡Ó-€DØ€|Ü¬×(AÑ(AÐJdÔeÐeà‡I�Iˆc„NØ‡I�I„KØ‡J�JˆtÔÜ   T¨4¯7©7Ó3Ð3rV   z/share-community-postz)Record a community post share by platformc                 óæ  — |j                  t        | j                  «      }|€t        t        j
                  d¬«      ‚|j                  t        | j                  |j                  | j                  ¬«      «       |j                  «        t        |||j                  |j                  xs d| j                  ¬«       |j                  «        |j                  |«       t        |||j                  «      S )NrY   rZ   )r.   r    r0   r]   )r.   r^   r0   )rF   r   r.   r   r   r_   ra   r   r,   r0   rb   r   rc   rd   re   r?   )rW   r   r5   r   s       r>   Úshare_community_postrv     s®   € ð �6‰6”- §¡Ó.€DØ€|Ü¬×(AÑ(AÐJdÔeÐeà‡F�FÔ d§l¡l¸D¿G¹GÈdÏmÉmÔ\Ô]Ø‡H�H„JÜ Ø
ØØ—‘Ø—:‘:Ò# Ø—‘õð ‡I�I„KØ‡J�JˆtÔÜ   T¨4¯7©7Ó3Ð3rV   N)1Úfastapir   r   r   r   Ú
sqlalchemyr   Úsqlalchemy.ormr   r	   Úapp.databaser
   Úapp.dependenciesr   Ú
app.modelsr   Úapp.models_adminr   r   r   r   Úapp.schemasr   r   r   r   r   r   Úapp.services.admin_servicer   rT   r   r   Ú'app.services.admin_notification_servicer   r   r   Úrouterr9   rB   r?   ÚlistrO   rF   r   rg   rm   rn   rv   © rV   r>   Ú<module>r„      sx  ðß =Ó =Ý ß .å Ý /Ý ß gÓ g÷÷ ÷ñ ÷
ñ ñ 
Ð)Ð*Ô	+€ð-˜gð -¨]ð -ÀSð -ÈTó -ð`I˜wð I¨t°MÑ/Bð IÈSð IÐUYÐZ^ÑU_ó IðX ‡�ØØ,ØBð ó ñ ˜&“/ÙÐ+Ó,ñNØðNà
òNóð
Nð ‡�Ø!Ø#Ø-ð ó ñ ˜&“/ÙÐ+Ó,ñ4Ø
 ð4àð4ð ò4óð
4ð> ‡�Ø!Ø#Ø/ð ó ñ ˜&“/ÙÐ+Ó,ñ4Ø
%ð4àð4ð ò4óð
4ð6 ‡�ØØ#Ø9Ø	,ð	 ó ð ‡�Ø$Ø#ØAØð	 ó ñ ˜&“/ÙÐ+Ó,ñ 4Ø
'ð 4àð 4ð ò 4óóð 4ðF ‡�ØØ#Ø7ð ó ñ ˜&“/ÙÐ+Ó,ñ4Ø
#ð4àð4ð ò4óñ
4rV   