Ë
    t{j  ã                   óÜ  — d Z ddlmZ 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mZ ddlmZmZ ddlmZ  e«       Zej-                  d	«       ed
d
¬«       edd
d¬«       ed«       ed«       ee	«      fdededee   dee   def
d„«       Zej5                  d	«       ee	«      fdedefd„«       Zej-                  d«       ee	«      fdedefd„«       Zej;                  d«       ee	«      fdededefd„«       Zej?                  d«       ee	«      fdedefd„«       Z ej5                  d«       ee	«      fdededefd„«       Z!ej-                  d «       ee	«      fdedefd!„«       Z"y)"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é
   éd   )r   ÚleNÚpageÚper_pageÚsearchÚstatusÚ_c              ƒ   ód   K  — t        j                  |rd|ind |g d¢| |¬«      }t        |«      S ­w)Nr   )ÚtitleÚscriptÚdescription)Úfiltersr   Úsearch_fieldsr   r   )r	   Úlistr   )r   r   r   r   r   Úresults         úk/Users/priyanka/Documents/AI_Agent_Assessment/ai-video-generator-gols-v2-new/backend/app/routes/projects.pyÚlist_projectsr$      s;   è ø€ ô × Ñ Ù&,�˜6Ñ"°$ØÒ%GØ˜Hô€Fô
 ˆf‹:Ðùó   ‚.0Úbodyc              ƒ   óØ   K  — t        j                  | j                  «      st        dd«      S t	        j
                  i | j                  «       ¥ddddd d d d dœ¥«      }t        |d«      S ­w)	NzAvatar not foundé”  ÚdraftÚidlezNot startedr   )r   ÚstageÚstage_labelÚprogressÚ
output_urlÚvideo_idÚduration_secÚerrorzProject created)r
   ÚgetÚ	avatar_idr   r	   ÚcreateÚ
model_dumpr   )r&   r   Úprojects      r#   Úcreate_projectr7       sw   è ø€ ä×Ñ˜TŸ^™^Ô,ÜÐ% sÓ+Ð+Ü×#Ñ#ð 
%Ø
�/‰/Ó
ð
%àØØ$ØØØØØò
%ó 
€Gô ˆgÐ(Ó)Ð)ùs   ‚A(A*z/{pid}Úpidc              ƒ   óf   K  — t        j                  | «      }|rt        |«      S t        dd«      S ­w)Nú	Not foundr(   )r	   r2   r   r   ©r8   r   Úps      r#   Úget_projectr=   2   s.   è ø€ ä×Ñ˜3Ó€AÙŒ2ˆa‹5Ð0œ3˜{¨CÓ0Ð0ùs   ‚/1c              ƒ   óÞ   K  — |j                  «       j                  «       D ��ci c]  \  }}|€Œ	||“Œ }}}t        j                  | |«      }|rt	        |d«      S t        dd«      S c c}}w ­w)NÚUpdatedr:   r(   )r5   Úitemsr	   Úupdater   r   )r8   r&   r   ÚkÚvÚupdatesr<   s          r#   Úupdate_projectrE   8   sk   è ø€ à $§¡Ó 1× 7Ñ 7Ô 9ÔKÑ 9™˜˜1¸Q¹]ˆq�!‰tÐ 9€GÑKÜ×Ñ˜c 7Ó+€AÙ Œ2ˆa�ÓÐ;¤c¨+°sÓ&;Ð;ùó Lùs   ‚"A-¤
A'¯A'´9A-c              ƒ   ód   K  — t        j                  | «      rt        d d«      S t        dd«      S ­w)NÚDeletedr:   r(   )r	   Údeleter   r   )r8   r   s     r#   Údelete_projectrI   ?   s-   è ø€ ä"0×"7Ñ"7¸Ô"<Œ2ˆd�IÓÐWÄ#ÀkÐSVÓBWÐWùr%   z/{pid}/generateÚbackground_tasksc           	   ƒ   ó  K  — t        j                  | «      }|st        dd«      S |d   dk(  rt        d«      S |d   dk(  rt        d«      S t        j                  | ddd	d
ddœ«       |j	                  t
        | «       t        | ddœd«      S ­w)z„
    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Úqueuedu   Queued â€“ starting soonâ€¦r   N)r   r+   r,   r-   r1   )Úidr   zGeneration started)r	   r2   r   rA   Úadd_taskr   r   )r8   rJ   r   r<   s       r#   ÚgeneraterQ   D   s¤   è ø€ ô 	×Ñ˜3Ó€AÙÜÐ&¨Ó,Ð,Øˆ�{�lÒ"ÜÐ'Ó(Ð(Øˆ�{�kÒ!ÜÐOÓPÐPô ×Ñ˜#ØØØ4ØØñ ô ð ×Ñœl¨CÔ0Ü�S HÑ-Ð/CÓDÐDùs   ‚BBz/{pid}/statusc              ƒ   ó´  K  — t        j                  | «      }|st        dd«      S t        |d   |j                  d«      |j                  d«      |j                  dd«      |j                  dd	«      |j                  d
«      |j                  d«      |j                  d«      |j                  d«      |j                  d«      |j                  d«      dœ«      S ­w)uE   Lightweight polling endpoint â€“ returns just status/progress fields.r:   r(   rO   r   r+   r,   Ú r-   r   r1   Ú	did_errorÚvoice_warningr/   r.   r0   )rO   r   r+   r,   r-   r1   rT   rU   r/   r.   r0   )r	   r2   r   r   r;   s      r#   Ú
get_statusrV   `   sº   è ø€ ô 	×Ñ˜3Ó€AÙÜ�; Ó$Ð$ÜØ˜‘wØ—u‘u˜X“Ø—u‘u˜W“~Ø—u‘u˜]¨BÓ/Ø—u‘u˜Z¨Ó+Ø—u‘u˜W“~Ø—u‘u˜[Ó)ØŸ™˜Ó/Ø—u‘u˜ZÓ(Ø—u‘u˜\Ó*Ø—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   Úrouterr2   ÚintÚstrr$   Úpostr7   r=   ÚputrE   rH   rI   rQ   rV   © ó    r#   Ú<module>rf      só  ðñõ ß >Ó >Ý ,ß >ß <ß &Ý .á	‹€ð ‡�ˆCƒá�a˜A”Ù˜"  sÔ+Ù! $›KÙ! $›KÙ�\Ó"ñØ
ðàðð �S‰Mðð �S‰Mð	ð
 òó ðð ‡�ˆSÓÙ7>¸|Ó7Lñ *˜}ð *°ò *ó ð*ð" ‡�ˆHÓÙ)0°Ó)>ñ 1˜3ð 1 3ò 1ó ð1ð
 ‡�ˆHÓÙAHÈÓAVñ <˜cð <¨ð <¸3ò <ó ð<ð ‡�ˆxÓÙ,3°LÓ,Añ X˜cð X cò Xó ðXð ‡�ÐÓÙIPÐQ]ÓI^ñ E˜ð E¨ð EÀ3ò Eó  ðEð6 ‡�ˆOÓÙ(/°Ó(=ñ ˜#ð  #ò ó ñre   