Ë
    >È'j�$  ã                   óÔ  — d dl mZmZmZ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mZmZ d dlmZ d dlmZ d dlmZmZmZmZ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(m)Z)m*Z*  ed
g¬«      Z+dede,e   de,e-   fd„Z.e+j_                  deej`                  d¬«       ee«       ee«       edd¬«       edd¬«       edd¬«       edd¬«      fdedede1de1de1dedz  fd „«       Z2e+j_                  d!ed"¬#«       ee«       ee«       edd$d%¬&«       edd'¬«       edd¬«       edd¬«       edd(¬«       ed)d*¬«      fded+ed,e3de1de1de1dedz  d-e4fd.„«       Z5e+jm                  d/ed0¬#«       ee«       ee«      fded+efd1„«       Z%e+j_                  d2ed3¬#«       ee«       ee«      fd4eded+efd5„«       Z#e+j_                  d6ed7¬#«       ee«       ee«      fd4eded+efd8„«       Z7y)9é    )Ú	APIRouterÚDependsÚFileÚFormÚHTTPExceptionÚ
UploadFileÚstatus)Úfunc)ÚSessionÚ
joinedload)ÚSessionLocalÚget_dbÚrelease_db_connection)Úrequire_admin_token)ÚUser)ÚCommunityPostCommentIdRequestÚCommunityPostIdRequestÚCommunityPostListResponseÚCommunityPostOutÚMessage)ÚCommunityPostÚCommunityPostCommentÚCommunityPostLikeÚCommunityPostShare)Úcreate_community_postÚdelete_community_commentÚdelete_community_postÚlist_community_postsÚsave_community_mediaÚserialize_community_commentÚserialize_community_postÚupdate_community_postzadmin-community)ÚtagsÚdbÚpostsÚreturnc                 ó6
  — |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                  «       «      }|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 «      j/                  |«       Œ/ g }|D ]ë  }t1        |«      }t        |j3                  |j                   d«      «      |d<   t        |j3                  |j                   d«      «      |d<   t        |j3                  |j                   d«      «      |d<   |j3                  |j                   i «      |d<   |j3                  |j                   g «      D �cg c]  }t5        |«      ‘Œ c}|d<   |j/                  |«       Œí |S c c}w c c}w c c}w c c}w )Nr   Úlikes_countÚcomments_countÚshares_countÚshare_countsÚcomments)ÚidÚdictÚqueryr   Úpost_idr
   ÚcountÚfilterÚin_Úgroup_byÚallr   r   ÚplatformÚintÚ
setdefaultÚstrÚoptionsr   ÚuserÚorder_byÚascÚ
created_atÚappendr!   Úgetr    )r$   r%   ÚpostÚpost_idsÚlikes_by_postÚcomments_by_postÚshares_by_postr0   r+   r6   r1   Úcomments_by_post_idÚall_commentsÚcommentÚ
serializedÚdatas                   ú@/var/www/html/kelly/kelly-backend/app/routers/admin/community.pyÚ_posts_with_engagementrL      sí  € ÙØˆ	á$)Ó*¡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ñ 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ˆˆ^ÑØ+×/Ñ/°·±¸Ó<ˆˆ^Ñð /×2Ñ2°4·7±7¸BÔ?ó
á?�ô (¨Õ0Ø?ñ
ˆˆZÑð 	×Ñ˜$Õð ð Ðùòy +ùò( /Tùò Bgùò,
s   ‰TÈ
TË;
TÓTz/add-community-postz@Create a community post (multipart: title, media, type, content))Úresponse_modelÚstatus_codeÚsummary.zPost title, e.g. Hurray!)Údescriptionz)Post type/category from the Type dropdownzPost body textNzOptional image or video)ÚdefaultrP   ÚadminÚtitleÚ	post_typeÚcontentÚmediac           	   ƒ   óš  K  — |j                  «       }|j                  «       }|j                  «       }|st        t        j                  d¬«      ‚|st        t        j                  d¬«      ‚|st        t        j                  d¬«      ‚|j                  }	t        | «       d }
d }|r"|j                  rt        |«      ƒ d {  –—† \  }
}t        «       }	 |j                  t        |	«      }|€t        t        j                  d¬«      ‚t        ||||||
|¬«      }t        |«      |j                  «        S 7 Œr# |j                  «        w xY w­w)NúTitle is required©rN   ÚdetailúType is requiredúContent is requiredzAdmin not found)r$   rR   rS   rT   rU   Ú
media_pathÚmedia_content_type)Ústripr   r	   ÚHTTP_400_BAD_REQUESTr-   r   Úfilenamer   r   r@   r   ÚHTTP_404_NOT_FOUNDr   r!   Úclose)r$   rR   rS   rT   rU   rV   Útitle_cleanÚpost_type_cleanÚcontent_cleanÚadmin_idr]   r^   Úwrite_dbÚ
admin_userrA   s                  rK   Úadd_community_postrj   a   s#  è ø€ ð —+‘+“-€KØ—o‘oÓ'€OØ—M‘M“O€MÙÜ¬×(CÑ(CÐL_Ô`Ð`ÙÜ¬×(CÑ(CÐL^Ô_Ð_ÙÜ¬×(CÑ(CÐLaÔbÐbà�x‰x€HÜ˜"ÔØ!€JØ%)ÐÙ�—’Ü/CÀEÓ/J×)JÑ&ˆ
Ð&ä‹~€HðØ—\‘\¤$¨Ó1ˆ
ØÐÜ¬F×,EÑ,EÐN_Ô`Ð`Ü$ØØØØ%Ø!Ø!Ø1ô
ˆô (¨Ó-à�‰Õð% *Kùð$ 	�‰Õüs+   ‚B?EÃD4ÃEÃAD6 Ä#EÄ6EÅEz/edit-community-postzIUpdate a community post (multipart: post_id, title, media, type, content))rM   rO   é   zCommunity post id to update)ÚgerP   z
Post titlezOptional new image or videoFz>Set true to remove existing media without uploading a new fileÚ_r0   Úremove_mediac              ƒ   ó  K  — |j                  «       }|j                  «       }	|j                  «       }
|st        t        j                  d¬«      ‚|	st        t        j                  d¬«      ‚|
st        t        j                  d¬«      ‚| j	                  t
        j                  «      j                  t
        j                  |k(  «      j                  «       }|st        t        j                  d¬«      ‚d}d }d }t        | «       |r$|j                  rt        |«      ƒ d {  –—† \  }}d}t        «       }	 |j	                  t
        «      j                  t        t
        j                   «      «      j                  t
        j                  |k(  «      j                  «       }|st        t        j                  d¬«      ‚t#        ||||	|
||||xr | ¬«	      }t%        |«      |j'                  «        S 7 ŒÎ# |j'                  «        w xY w­w)	NrX   rY   r[   r\   úCommunity post not foundFT)	r$   rA   rS   rT   rU   r]   r^   Úreplace_mediaÚclear_media)r_   r   r	   r`   r/   r   r-   r2   Úfirstrb   r   ra   r   r   r:   r   Ú
created_byr"   r!   rc   )r$   rm   r0   rS   rT   rU   rV   rn   rd   re   rf   Úexistsrq   r]   r^   rh   rA   s                    rK   Úedit_community_postrv   “   s­  è ø€ ð —+‘+“-€KØ—o‘oÓ'€OØ—M‘M“O€MÙÜ¬×(CÑ(CÐL_Ô`Ð`ÙÜ¬×(CÑ(CÐL^Ô_Ð_ÙÜ¬×(CÑ(CÐLaÔbÐbà�X‰X”m×&Ñ&Ó'×.Ñ.¬}×/?Ñ/?À7Ñ/JÓK×QÑQÓS€FÙÜ¬×(AÑ(AÐJdÔeÐeà€MØ!€JØ%)ÐÜ˜"ÔÙ�—’Ü/CÀEÓ/J×)JÑ&ˆ
Ð&Øˆä‹~€Hðà�N‰Nœ=Ó)ß‰W”Z¤× 8Ñ 8Ó9Ó:ß‰V”M×$Ñ$¨Ñ/Ó0ß‰U‹Wð	 	ñ Ü¬F×,EÑ,EÐNhÔiÐiÜ$ØØØØ%Ø!Ø!Ø1Ø'Ø$Ò:¨]Ð):ô

ˆô (¨Ó-à�‰Õð5 *Kùð4 	�‰Õüs+   ‚DHÄ!G0Ä"HÄ6B)G2 ÇHÇ2HÈHz/list-community-postsz;List all community posts with full card data (newest first)c                 ó\   — t        | «      }t        | |«      }t        t        |«      |¬«      S )N)Útotalr%   )Úfetch_community_postsrL   r   Úlen)r$   rm   r%   rI   s       rK   r   r   Ò   s+   € ô " "Ó%€EÜ'¨¨EÓ2€JÜ$¬3¨z«?À*ÔMÐMó    z/delete-community-postzDelete a community post by idÚbodyc                 ó|   — t        || j                  «      st        t        j                  d¬«      ‚t        d¬«      S )Nrp   rY   zCommunity post deleted©Úmessage)Úremove_community_postr0   r   r	   rb   r   ©r|   r$   rm   s      rK   r   r   à   s2   € ô !  T§\¡\Ô2Ü¬×(AÑ(AÐJdÔeÐeÜÐ3Ô4Ð4r{   z/delete-community-commentz"Delete one community comment by idc                 ó|   — t        || j                  «      st        t        j                  d¬«      ‚t        d¬«      S )NzComment not foundrY   zComment deletedr~   )r   Ú
comment_idr   r	   rb   r   r�   s      rK   Údelete_commentr„   ï   s2   € ô $ B¨¯©Ô8Ü¬×(AÑ(AÐJ]Ô^Ð^ÜÐ,Ô-Ð-r{   )8Úfastapir   r   r   r   r   r   r	   Ú
sqlalchemyr
   Úsqlalchemy.ormr   r   Úapp.databaser   r   r   Úapp.dependenciesr   Ú
app.modelsr   Úapp.schemasr   r   r   r   r   Úapp.models_adminr   r   r   r   Úapp.services.admin_servicer   r   r   r€   r   ry   r   r    r!   r"   ÚrouterÚlistr.   rL   rA   ÚHTTP_201_CREATEDr9   rj   r7   Úboolrv   r@   r„   © r{   rK   Ú<module>r“      sû  ðß U× UÑ UÝ ß .ç DÑ DÝ 0Ý ÷õ ÷ hÓ g÷	÷ 	ó 	ñ 
Ð*Ð+Ô	,€ð@˜wð @¨t°MÑ/Bð @ÀtÈDÁzó @ðF ‡�ØØ#Ø×'Ñ'ØNð	 ó ñ ˜&“/ÙÐ-Ó.Ù�cÐ'AÔBÙ˜#Ð+VÔWÙ˜Ð)9Ô:Ù#¨DÐ>WÔXñ)Øð)àð)ð ð)ð ð	)ð
 ð)ð ˜Ñò)óð)ðX ‡�ØØ#ØWð ó ñ ˜&“/ÙÐ)Ó*Ù˜ Ð/LÔMÙ�c |Ô4Ù˜#Ð+VÔWÙ˜Ð)9Ô:Ù#¨DÐ>[Ô\Ù eÐ9yÔzñ7Øð7àð7ð ð7ð ð	7ð
 ð7ð ð7ð ˜Ñð7ð ò7óð
7ðt ‡�ØØ,ØIð ó ñ ˜&“/ÙÐ)Ó*ñNØðNàòNóð
Nð ‡�ØØØ+ð ó ñ ˜&“/ÙÐ)Ó*ñ5Ø
 ð5àð5ð ò5óð
5ð ‡�ØØØ0ð ó ñ ˜&“/ÙÐ)Ó*ñ.Ø
'ð.àð.ð ò.óñ
.r{   