+
    »`j¥  ã                   ó°  € R t ^ RIHt ^ RIHtHtHtHt ^ RIH	t	 ^ RI
HtHt ^ RIHtHt ^ RIHtHt ^ RIHt ]! 4       t]P-                  R4      ]! ^^R	7      ]! ^
^^dR
7      ]! R4      ]! R4      ]! ]	4      3R R ll4       t]P1                  R4      ]! ]	4      3R R ll4       t]P-                  R4      ]! ]	4      3R R ll4       t]P7                  R4      ]! ]	4      3R R ll4       t]P;                  R4      ]! ]	4      3R R ll4       t]P1                  R4      ]! ]	4      3R R ll4       t]P-                  R4      ]! ]	4      3R R ll4       t R# )uz   
Projects route â€“ full CRUD + generate action.
Generate now dispatches a real BackgroundTask instead of a TODO comment.
)ÚOptional)Ú	APIRouterÚDependsÚQueryÚBackgroundTasks)Úrequire_auth)Úprojects_storeÚavatars_store)ÚProjectCreateÚProjectUpdate)ÚokÚerr)Úrun_pipelineÚ/)Úge)r   ÚleNc          
      ó€   € V ^8„  d   QhR\         R\         R\        \        ,          R\        \        ,          R\        /# )é   ÚpageÚper_pageÚsearchÚstatusÚ_)Úintr   Ústr)Úformats   "ÚED:\Python_Codes\gen_ai\new\gols-v2-new\backend\app\routes\projects.pyÚ__annotate__r      sB   € ÷ ñ Ü
ðäðô ”S�Mðô ”S�Mð	ô
 ñó    c              ƒ   óp   "  € \         P                  ! V'       d   R V/MRV. ROWR7      p\        V4      # 5i)r   N)Úfiltersr   Úsearch_fieldsr   r   )ÚtitleÚscriptÚdescription)r   Úlistr   )r   r   r   r   r   Úresults   &&&&& r   Úlist_projectsr'      s8   é € ô × Ò ß&,�˜6Ñ"°$ØÒ%GØô€Fô
 ˆf‹:Ðùs   ‚46c                ó0   € V ^8„  d   QhR\         R\        /# )r   Úbodyr   )r
   r   )r   s   "r   r   r   !   s   € ÷ *ñ *œ}ð *´ñ *r   c              ƒ   óö   "  € \         P                  ! V P                  4      '       g   \        R R4      # \        P
                  ! / V P                  4       CRRRRRRR^ R	R
RR
RR
RR
/C4      p\        VR4      # 5i)zAvatar not foundé”  r   ÚdraftÚstageÚidleÚstage_labelzNot startedÚprogressÚ
output_urlNÚvideo_idÚduration_secÚerrorzProject created)r	   ÚgetÚ	avatar_idr   r   ÚcreateÚ
model_dumpr   )r)   r   Úprojects   && r   Úcreate_projectr:       s‰   é € ä×Ò˜TŸ^™^×,Ò,ÜÐ% sÓ+Ð+Ü×#Ò#ð 
%Ø
�/‰/Ó
ð
%à�'Ø�Ø�}Ø�AØ�dØ�DØ˜Ø�ñ
%ó 
€Gô ˆgÐ(Ó)Ð)ùs   ‚A7A9z/{pid}c                ó0   € V ^8„  d   QhR\         R\         /# ©r   Úpidr   ©r   )r   s   "r   r   r   3   s   € ÷ 1ñ 1œ3ð 1¤3ñ 1r   c              ƒ   ót   "  € \         P                  ! V 4      pV'       d   \        V4      # \        R R4      # 5i)ú	Not foundr+   )r   r5   r   r   ©r=   r   Úps   && r   Úget_projectrC   2   s-   é € ä×Ò˜3Ó€AßŒ2ˆa‹5Ð0œ3˜{¨CÓ0Ð0ùs   ‚68c                ó<   € V ^8„  d   QhR\         R\        R\         /# )r   r=   r)   r   )r   r   )r   s   "r   r   r   9   s!   € ÷ <ñ <œcð <¬ð <¼3ñ <r   c              ƒ   óð   "  € VP                  4       P                  4        UUu/ uF  w  r4Vf   K  W4bK  	  ppp\        P                  ! W4      pV'       d   \	        VR4      # \        RR4      # u uppi 5i)NÚUpdatedr@   r+   )r8   Úitemsr   Úupdater   r   )r=   r)   r   ÚkÚvÚupdatesrB   s   &&&    r   Úupdate_projectrL   8   sd   é € à $§¡Ó 1× 7Ñ 7Ô 9ÔKÑ 9™˜¸QŒtˆqŠtÑ 9€GÑKÜ×Ò˜cÓ+€Aß Œ2ˆa�ÓÐ;¤c¨+°sÓ&;Ð;ùó Lùs   ‚"A6¤A0±A0·?A6c                ó0   € V ^8„  d   QhR\         R\         /# r<   r>   )r   s   "r   r   r   @   s   € ÷ Xñ Xœcð X¤cñ Xr   c              ƒ   ór   "  € \         P                  ! V 4      '       d   \        R R4      # \        RR4      # 5i)NÚDeletedr@   r+   )r   Údeleter   r   )r=   r   s   &&r   Údelete_projectrQ   ?   s/   é € ä"0×"7Ò"7¸×"<Ò"<Œ2ˆd�IÓÐWÄ#ÀkÐSVÓBWÐWùs   ‚57z/{pid}/generatec                ó<   € V ^8„  d   QhR\         R\        R\         /# )r   r=   Úbackground_tasksr   )r   r   )r   s   "r   r   r   E   s&   € ÷ Eñ Eœð E¬ð EÄ3ñ Er   c              ƒ  óP  "  € \         P                  ! V 4      pV'       g   \        RR4      # VR,          R8X  d   \        R4      # VR,          R8X  d   \        R4      # \         P                  ! V RRR	RR
RR^ RR/4       VP	                  \
        V 4       \        RV RR/R4      # 5i)zx
Kick off video generation as a background task.
Returns immediately with status=queued; client should poll GET /{pid}.
zProject not foundr+   r   Ú
processingzAlready processingÚ	completedu:   Already completed â€“ duplicate or re-create to regenerateÚqueuedr-   r/   u   Queued â€“ starting soonâ€¦r0   r4   NÚidzGeneration started)r   r5   r   rH   Úadd_taskr   r   )r=   rS   r   rB   s   &&& r   ÚgeneraterZ   D   s²   é € ô 	×Ò˜3Ó€AßÜÐ&¨Ó,Ð,Øˆ…{�lÔ"ÜÐ'Ó(Ð(Øˆ…{�kÔ!ÜÐOÓPÐPô ×Ò˜#Ø�(Ø�ØÐ4Ø�AØ�ð ô ð ×Ñœl¨CÔ0Üˆt�S˜( HÐ-Ð/CÓDÐDùs   ‚B$B&z/{pid}/statusc                ó0   € V ^8„  d   QhR\         R\         /# r<   r>   )r   s   "r   r   r   a   s   € ÷ ñ œ#ð ¤#ñ r   c              ƒ  óš  "  € \         P                  ! V 4      pV'       g   \        RR4      # \        RVR,          RVP                  R4      RVP                  R4      RVP                  RR4      RVP                  R^ 4      R	VP                  R	4      R
VP                  R
4      RVP                  R4      RVP                  R4      /	4      # 5i)uE   Lightweight polling endpoint â€“ returns just status/progress fields.r@   r+   rX   r   r-   r/   Ú r0   r4   r2   r1   r3   )r   r5   r   r   rA   s   && r   Ú
get_statusr^   `   s³   é € ô 	×Ò˜3Ó€AßÜ�; Ó$Ð$ÜØ�q˜•wØ�q—u‘u˜X“Ø�q—u‘u˜W“~Ø�q—u‘u˜]¨BÓ/Ø�q—u‘u˜Z¨Ó+Ø�q—u‘u˜W“~Ø�q—u‘u˜ZÓ(Ø�q—u‘u˜\Ó*Ø�q—u‘u˜^Ó,ð
ó 
ð 
ùs   ‚C	C)!Ú__doc__Útypingr   Úfastapir   r   r   r   Úapp.middleware.authr   Úapp.repository.storer   r	   Úapp.schemas.schemasr
   r   Úapp.utils.responser   r   Úapp.services.pipeliner   Úrouterr5   r'   Úpostr:   rC   ÚputrL   rP   rQ   rZ   r^   © r   r   Ú<module>rk      sV  ðñõ ß >Ó >Ý ,ß >ß <ß &Ý .á	‹€ð ‡�ˆCƒá�a˜A”Ù˜"  sÔ+Ù! $›KÙ! $›KÙ�\Ó"öó ðð ‡�ˆSÓÙ7>¸|Ó7Lö *ó ð*ð" ‡�ˆHÓÙ)0°Ó)>ö 1ó ð1ð
 ‡�ˆHÓÙAHÈÓAVö <ó ð<ð ‡�ˆxÓÙ,3°LÓ,Aö Xó ðXð ‡�ÐÓÙIPÐQ]ÓI^ö Eó  ðEð6 ‡�ˆOÓÙ(/°Ó(=ö ó òr   