Ë
    cç(jp­  ã                   óö
  — 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  G d„ dee«      Z G d„ de«      Z G d	„ d
e«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ d e«      Z G d!„ d"e«      Z G d#„ d$e«      Z G d%„ d&e«      Z G d'„ d(e«      Z G d)„ d*e«      Z G d+„ d,e«      Z  G d-„ d.e«      Z! G d/„ d0e«      Z" G d1„ d2e«      Z# G d3„ d4e«      Z$ G d5„ d6e«      Z% G d7„ d8e«      Z& G d9„ d:e«      Z' G d;„ d<e«      Z( G d=„ d>e«      Z) G d?„ d@e«      Z* G dA„ dBe«      Z+ G dC„ dDe«      Z, G dE„ dFe«      Z- G dG„ dHe«      Z. G dI„ dJee«      Z/ G dK„ dLe«      Z0 G dM„ dNe«      Z1 G dO„ dPe«      Z2 G dQ„ dRee«      Z3 G dS„ dTe«      Z4 G dU„ dVe«      Z5 G dW„ dXe«      Z6 G dY„ dZe«      Z7 G d[„ d\e«      Z8 G d]„ d^e«      Z9 G d_„ d`e«      Z: G da„ dbe«      Z; G dc„ dde«      Z< G de„ dfe«      Z= G dg„ dhe«      Z> G di„ dje«      Z? G dk„ dle«      Z@ G dm„ dne«      ZA G do„ dpe«      ZB G dq„ dre«      ZC G ds„ dte«      ZD G du„ dve«      ZE G dw„ dxe«      ZF G dy„ dze«      ZG G d{„ d|e«      ZH G d}„ d~e«      ZI G d„ d€e«      ZJ G d�„ d‚e«      ZK G dƒ„ d„e«      ZL G d…„ d†e«      ZM G d‡„ dˆe«      ZN G d‰„ dŠe«      ZO G d‹„ dŒe«      ZP G d�„ dŽe«      ZQ G d�„ d�e«      ZR G d‘„ d’e«      ZS G d“„ d”e«      ZT G d•„ d–e«      ZU G d—„ d˜e«      ZV G d™„ dše«      ZW G d›„ dœe«      ZX G d�„ dže«      ZY G dŸ„ d e«      ZZ G d¡„ d¢e«      Z[ G d£„ d¤e«      Z\ G d¥„ d¦e«      Z] G d§„ d¨e«      Z^ G d©„ dªe«      Z_ G d«„ d¬e«      Z` G d­„ d®e«      Za G d¯„ d°e«      Zb G d±„ d²e«      Zc G d³„ d´e«      Zd G dµ„ d¶e«      Ze G d·„ d¸e«      Zf G d¹„ dºe«      Zg G d»„ d¼e«      Zh G d½„ d¾e«      Zi G d¿„ dÀe«      Zj G dÁ„ dÂe«      Zk G dÃ„ dÄe«      Zl G dÅ„ dÆe«      Zm G dÇ„ dÈe«      Zn G dÉ„ dÊe«      Zo G dË„ dÌe«      Zp G dÍ„ dÎe«      Zq G dÏ„ dÐe«      Zr G dÑ„ dÒe«      Zs G dÓ„ dÔe«      Zt G dÕ„ dÖe«      Zu G d×„ dØe«      Zv G dÙ„ dÚe«      Zw G dÛ„ dÜe«      Zx G dÝ„ dÞe«      Zy G dß„ dàe«      Zz G dá„ dâe«      Z{ G dã„ däe«      Z| G då„ dæe«      Z} G dç„ dèe«      Z~ G dé„ dêe«      Z G dë„ dìe«      Z€ G dí„ dîe«      Z� G dï„ dðe«      Z‚ G dñ„ dòe«      Zƒ G dó„ dôe«      Z„ G dõ„ döe«      Z… G d÷„ døe«      Z† G dù„ dúe«      Z‡ G dû„ düe«      Zˆyý)þé    )Údatetime)ÚEnum)ÚAliasChoicesÚ	BaseModelÚEmailStrÚFieldÚfield_validator)ÚGOOGLE_DRIVE_LINK_ERRORÚ!validate_google_drive_folder_linkc                   ó   — e Zd ZdZdZy)ÚRoleEnumÚadminÚuserN)Ú__name__Ú
__module__Ú__qualname__r   r   © ó    ú0/var/www/html/kelly/kelly-backend/app/schemas.pyr   r   	   s   „ Ø€EØ�Dr   r   c                   ó&   — e Zd ZU eed<   dZeed<   y)ÚTokenÚaccess_tokenÚbearerÚ
token_typeN)r   r   r   ÚstrÚ__annotations__r   r   r   r   r   r      s   … ØÓØ€J�Ôr   r   c                   ó>   — e Zd ZU dZeed<   dZeed<   eed<   eed<   y)ÚUserTokenResponsez,User login response with verification state.r   r   r   ÚemailÚemail_verifiedN)	r   r   r   Ú__doc__r   r   r   r   Úboolr   r   r   r   r      s    … Ù6àÓØ€J�ÓØƒOØÔr   r   c                   ó6   — e Zd ZU eed<   eed<   dZedz  ed<   y)ÚTokenPayloadÚsubÚroleNÚexp)r   r   r   Úintr   r   r'   r   r   r   r$   r$      s   … Ø	ƒHØ
ƒNØ€Cˆˆt‰Ôr   r$   c                   ó"   — e Zd ZU eed<   eed<   y)ÚLoginRequestr   ÚpasswordN)r   r   r   r   r   r   r   r   r   r*   r*   #   s   … ØƒOØ„Mr   r*   c                   ó   — e Zd ZU eed<   y)ÚForgotPasswordRequestr   N)r   r   r   r   r   r   r   r   r-   r-   (   s   … Ø„Or   r-   c                   ó8   — e Zd ZU eed<    eddd¬«      Zeed<   y)ÚVerifyEmailRequestr   .é   é
   ©Ú
min_lengthÚ
max_lengthÚotpN©r   r   r   r   r   r   r5   r   r   r   r   r/   r/   ,   ó   … ØƒOÙ�S Q°2Ô6€CˆÔ6r   r/   c                   ó8   — e Zd ZU eed<    eddd¬«      Zeed<   y)ÚVerifyOTPRequestr   .r0   r1   r2   r5   Nr6   r   r   r   r9   r9   1   r7   r   r9   c                   ó¶   — e Zd ZU ddiZeed<    eddd eddd	d
«      ¬«      Ze	ed<    eddd eddd«      ¬«      Z
e	ed<    ed«      ede	de	fd„«       «       Zy)ÚResetPasswordRequestÚpopulate_by_nameTr   .r0   r1   r5   ÚcodeÚverification_codeÚverificationCode©r3   r4   Úvalidation_aliasé   é€   Únew_passwordÚnewPasswordr+   ÚvÚreturnc                 ó4  — |j                  «       }d|v rt        d«      ‚dd l}|j                  d|«      st        d«      ‚|j                  d|«      st        d«      ‚|j                  d|«      st        d	«      ‚|j                  d
|«      st        d«      ‚|S ©NÚ zPassword cannot contain spacesr   z[a-z]z3Password must include at least one lowercase letterz[A-Z]z3Password must include at least one uppercase letterz\dz)Password must include at least one numberz[^A-Za-z0-9]z4Password must include at least one special character©ÚstripÚ
ValueErrorÚreÚsearch©ÚclsrF   rN   s      r   Ú_strong_reset_passwordz+ResetPasswordRequest._strong_reset_passwordG   ó’   € ð �G‰G‹IˆØ�!‰8ÜÐ=Ó>Ð>Ûà�y‰y˜ 1Ô%ÜÐRÓSÐSØ�y‰y˜ 1Ô%ÜÐRÓSÐSØ�y‰y˜ Ô"ÜÐHÓIÐIØ�y‰y˜¨!Ô,ÜÐSÓTÐTØˆr   N)r   r   r   Úmodel_configr   r   r   r   r5   r   rD   r	   ÚclassmethodrR   r   r   r   r;   r;   6   s’   … Ø&¨Ð-€LàƒOÙØØØÙ% e¨VÐ5HÐJ\Ó]ô	€Cˆó ñ ØØØÙ% n°mÀZÓPô	€L�#ó ñ �^Ó$Øð sð ¨sò ó ó %ñr   r;   c                   ó  — e Zd ZU dZddiZ edd edddd	d
«      ¬«      Zee	d<    eddd edd«      ¬«      Z
ee	d<    eddd edddd«      ¬«      Zee	d<    ed«      ededefd„«       «       Z ed«      ededefd„«       «       Zy)ÚChangePasswordRequestz:Logged-in user changes password (current + new + confirm).r<   T.é   Úcurrent_passwordÚcurrentPasswordr+   Úold_passwordÚoldPassword)r3   rA   rB   rC   rD   rE   r@   Úconfirm_passwordÚconfirmPasswordÚpassword_confirmationÚpasswordConfirmationrF   rG   c                 ó4  — |j                  «       }d|v rt        d«      ‚dd l}|j                  d|«      st        d«      ‚|j                  d|«      st        d«      ‚|j                  d|«      st        d	«      ‚|j                  d
|«      st        d«      ‚|S rI   rK   rP   s      r   Ú_strong_new_passwordz*ChangePasswordRequest._strong_new_password|   rS   r   c                 ó`   — |j                   j                  d«      }|�||k7  rt        d«      ‚|S )NrD   z.New password and confirm password do not match)ÚdataÚgetrM   )rQ   rF   ÚinforD   s       r   Úpasswords_matchz%ChangePasswordRequest.passwords_matchŽ   s4   € ð —y‘y—}‘} ^Ó4ˆØÐ#¨¨\Ò(9ÜÐMÓNÐNØˆr   N)r   r   r   r!   rT   r   r   rY   r   r   rD   r]   r	   rU   rb   rg   r   r   r   rW   rW   Z   sô   … ÙDà&¨Ð-€Lá!ØØÙ%ØØØØØó
ô
Ð�có 
ñ ØØØÙ% n°mÓDô	€L�#ó ñ "ØØØÙ%ØØØ#Ø"ó	
ô	
Ð�có 
ñ �^Ó$Øð Sð ¨Sò ó ó %ðñ  Ð'Ó(Øð ð ¨cò ó ó )ñr   rW   c                   ó4   — e Zd ZU eed<   dZeed<   dZeed<   y)ÚUserBaser   Ú Ú	full_nameTÚ	is_activeN)	r   r   r   r   r   rk   r   rl   r"   r   r   r   ri   ri   ˜   s   … ØƒOØ€IˆsÓØ€IˆtÔr   ri   c                   óN   — e Zd ZU  edd¬«      Zeed<   ej                  Z	eed<   y)Ú
UserCreate.rB   ©r3   r+   r&   N)
r   r   r   r   r+   r   r   r   r   r&   r   r   r   rn   rn   ž   s!   … Ù˜#¨!Ô,€HˆcÓ,Ø—]‘]€Dˆ(Ô"r   rn   c                   ó‚   — e Zd ZU dZedz  ed<   dZedz  ed<   dZe	dz  ed<    e
dd¬«      Zedz  ed<   dZedz  ed<   y)	Ú
UserUpdateNr   rk   rl   rB   ro   r+   r&   )r   r   r   r   r   r   rk   r   rl   r"   r   r+   r&   r   r   r   r   rq   rq   £   sO   … Ø!€Eˆ8�d‰?Ó!Ø €Iˆs�T‰zÓ Ø!€Iˆt�d‰{Ó!Ù  °!Ô4€Hˆc�D‰jÓ4Ø €Dˆ(�T‰/Ô r   rq   c                   ó.   — e Zd ZU  eddd¬«      Zeed<   y)ÚUserIdRequest.rX   zTarget user primary key©ÚgeÚdescriptionÚuser_idN©r   r   r   r   rw   r(   r   r   r   r   rs   rs   «   s   … Ù˜ Ð0IÔJ€GˆSÔJr   rs   c                   ó.   — e Zd ZU  eddd¬«      Zeed<   y)ÚUpdateUserRequest.rX   zUser to updatert   rw   Nrx   r   r   r   rz   rz   ¯   s   … Ù˜ Ð0@ÔA€GˆSÔAr   rz   c                   óÖ   — e Zd ZU dZedz  ed<   dZedz  ed<   dZedz  ed<   dZedz  ed<   dZ	e
dz  ed<   dZedz  ed<   dZe
dz  ed<   dZedz  ed	<   dZe
dz  ed
<   dZe
dz  ed<   y)ÚUserProgrammeProgressPublicNÚ
level_slugÚlevel_display_nameÚmodule_kindÚmodule_display_nameÚ
week_indexÚ
week_labelÚsession_numberÚsession_titleÚ prior_completed_assessment_countÚ%prior_completed_session_markers_count)r   r   r   r}   r   r   r~   r   r€   r�   r(   r‚   rƒ   r„   r…   r†   r   r   r   r|   r|   ³   s’   … Ø!€J��d‘
Ó!Ø%)Ð˜˜d™
Ó)Ø"€K��t‘Ó"Ø&*Ð˜˜t™Ó*Ø!€J��d‘
Ó!Ø!€J��d‘
Ó!Ø!%€N�C˜$‘JÓ%Ø $€M�3˜‘:Ó$Ø37Ð$ c¨D¡jÓ7Ø8<Ð)¨3°©:Ô<r   r|   c                   óJ  — e Zd ZU eed<   eed<   eed<   dZedz  ed<   dZedz  ed<   dZ	edz  ed<   dZ
edz  ed<   dZedz  ed	<   d
Zeed<   eed<   eed<   d
Zeed<   eed<   dZedz  ed<   dZedz  ed<   dZedz  ed<   dZedz  ed<   dZedz  ed<   dZedz  ed<   ddiZy)Ú
UserPublicÚidr   rk   NÚphone_numberÚaddressÚpostal_codeÚprofile_imageÚprofile_image_urlFÚhas_profile_imager&   rl   r    Ú
created_atÚ	programmeÚtotal_pointsÚassigned_points_totalÚavailable_pointsÚprogress_percentÚgoogle_drive_linkÚfrom_attributesT)r   r   r   r(   r   r   r   rŠ   r‹   rŒ   r�   rŽ   r�   r"   r   r    r   r‘   r|   r’   r“   r”   r•   r–   rT   r   r   r   rˆ   rˆ   À   sá   … ØƒGØƒOØƒNØ#€L�#˜‘*Ó#Ø€GˆS�4‰ZÓØ"€K��t‘Ó"Ø $€M�3˜‘:Ó$Ø$(Ð�s˜T‘zÓ(Ø#Ð�tÓ#Ø
ƒNØƒOØ €N�DÓ ØÓØ48€IÐ*¨TÑ1Ó8Ø#€L�#˜‘*Ó#Ø(,Ð˜3 ™:Ó,Ø#'Ð�c˜D‘jÓ'Ø#'Ð�c˜D‘jÓ'Ø$(Ð�s˜T‘zÓ(à% tÐ,�Lr   rˆ   c                   ó(   — e Zd ZU eed<   ee   ed<   y)ÚAdminUsersListResponseÚtotalÚusersN)r   r   r   r(   r   Úlistrˆ   r   r   r   r™   r™   Ø   s   … ØƒJØ�
ÑÔr   r™   c            
       óÈ  — e Zd ZU ddiZ edd¬«      Zeed<   dZe	dz  ed<    ed e
d	d
d«      ¬«      Ze	dz  ed	<    ed e
ddd«      ¬«      Ze	dz  ed<    eddd e
ddd«      ¬«      Zedz  ed<    edd e
ddd«      ¬«      Zedz  ed<    ed e
ddd«      ¬«      Ze	dz  ed<    edd e
ddd «      ¬!«      Ze	dz  ed<    edd"¬#«      ed$e	dz  d%e	dz  fd&„«       «       Zy)'Ú$AdminMemberPersonalInfoUpdateRequestr<   T.rX   ©ru   rw   Nrk   Úprogramme_level_slugr}   Úlevel©ÚdefaultrA   Úprogramme_module_kindr   Úmoduler   é   Úprogramme_week_indexr�   Úweek©r£   ru   ÚlerA   Úprogramme_session_numberrƒ   Úsession©r£   ru   rA   r–   ÚgoogleDriveLinkÚ
drive_linké    rŠ   ÚphoneNumberÚphone©r£   r4   rA   Úbefore©ÚmodeÚvaluerG   c                 ó´   — |� t        |t        «      r|j                  «       sy 	 t        t        |«      «      S # t        $ r}t	        t
        «      |‚d }~ww xY w©N©Ú
isinstancer   rL   r   rM   r
   ©rQ   r·   Úexcs      r   Úvalidate_google_drive_linkz?AdminMemberPersonalInfoUpdateRequest.validate_google_drive_linkÿ   óO   € ð ˆ=œZ¨¬sÔ3¸E¿K¹K¼MØð	?Ü4´S¸³ZÓ@Ð@øÜò 	?ÜÔ4Ó5¸3Ð>ûð	?úó   ¥9 ¹	AÁAÁA)r   r   r   rT   r   rw   r(   r   rk   r   r   r    r¤   r§   r«   r–   rŠ   r	   rU   r¾   r   r   r   rž   rž   Ý   s`  … Ø&¨Ð-€Lá˜ Ô#€GˆSÓ#Ø €Iˆs�T‰zÓ Ù',ØÙ%Ð&<¸lÈGÓTô(Ð˜# ™*ó ñ ).ØÙ%Ð&=¸}ÈhÓWô)Ð˜3 ™:ó ñ (-ØØØÙ%Ð&<¸lÈFÓSô	(Ð˜# ™*ó ñ ,1ØØÙ%Ð&@ÐBRÐT]Ó^ô,Ð˜c D™jó ñ
 %*ØÙ%Ð&9Ð;LÈlÓ[ô%Ð�s˜T‘zó ñ  %ØØÙ% n°mÀWÓMô €L�#˜‘*ó ñ Ð(¨xÔ8Øð?¨s°T©zð ?¸cÀD¹jò ?ó ó 9ñ?r   rž   c            	       ó®   — e Zd ZU dZddiZ edd¬«      Zeed<    edd	 e	d
dd«      ¬«      Z
edz  ed
<    ed
d¬«      ededz  dedz  fd„«       «       Zy)Ú#AdminMemberGoogleDriveUpdateRequestz\Attach or update a member's personalized Google Drive folder for WhatsApp video submissions.r<   T.rX   rŸ   rw   Né   r–   r®   r¯   r³   r´   rµ   r·   rG   c                 ó´   — |� t        |t        «      r|j                  «       sy 	 t        t        |«      «      S # t        $ r}t	        t
        «      |‚d }~ww xY wr¹   rº   r¼   s      r   r¾   z>AdminMemberGoogleDriveUpdateRequest.validate_google_drive_link  r¿   rÀ   )r   r   r   r!   rT   r   rw   r(   r   r   r–   r   r	   rU   r¾   r   r   r   rÂ   rÂ   
  s„   … Ùfà&¨Ð-€Lá˜ Ô#€GˆSÓ#Ù$)ØØÙ%Ð&9Ð;LÈlÓ[ô%Ð�s˜T‘zó ñ Ð(¨xÔ8Øð?¨s°T©zð ?¸cÀD¹jò ?ó ó 9ñ?r   rÂ   c                   óž   — e Zd ZU eed<   eed<   eed<   dZedz  ed<   dZedz  ed<   dZe	ed<   dZ
edz  ed	<   dZedz  ed
<   dZedz  ed<   y)ÚMemberGoogleDriveEntryOutr‰   rk   r   NrŠ   r–   FÚhas_google_drive_linkr‚   r~   r€   )r   r   r   r(   r   r   rŠ   r–   rÇ   r"   r‚   r~   r€   r   r   r   rÆ   rÆ   !  se   … ØƒGØƒNØƒJØ#€L�#˜‘*Ó#Ø$(Ð�s˜T‘zÓ(Ø"'Ð˜4Ó'Ø!€J��d‘
Ó!Ø%)Ð˜˜d™
Ó)Ø&*Ð˜˜t™Ô*r   rÆ   c                   ó(   — e Zd ZU eed<   ee   ed<   y)ÚMemberGoogleDriveListResponserš   ÚmembersN)r   r   r   r(   r   rœ   rÆ   r   r   r   rÉ   rÉ   -  s   … ØƒJØÐ+Ñ,Ô,r   rÉ   c                   óŠ   — e Zd ZU eed<   eed<   eed<   eed<   dZedz  ed<   eed<   dZe	ed	<   dZ
edz  ed
<   dZedz  ed<   y)ÚMemberInactiveFollowUpOutr‰   rw   rk   r   NÚlast_active_atÚdays_inactiveFÚfollow_up_sentÚfollow_up_sent_atÚmember)r   r   r   r(   r   r   rÍ   r   rÏ   r"   rÐ   rÑ   rˆ   r   r   r   rÌ   rÌ   2  sR   … ØƒGØƒLØƒNØƒJØ&*€N�H˜t‘OÓ*ØÓØ €N�DÓ Ø)-Ð�x $‘Ó-Ø $€FˆJ˜ÑÔ$r   rÌ   c                   ó6   — e Zd ZU eed<   dZeed<   ee   ed<   y)Ú"MemberInactiveFollowUpListResponserš   r1   Úinactive_daysrÊ   N)r   r   r   r(   r   rÔ   rœ   rÌ   r   r   r   rÓ   rÓ   >  s   … ØƒJØ€M�3ÓØÐ+Ñ,Ô,r   rÓ   c                   ó,   — e Zd ZU  edd¬«      Zeed<   y)Ú#MemberInactiveFollowUpUserIdRequest.rX   rŸ   rw   Nrx   r   r   r   rÖ   rÖ   D  s   … Ù˜ Ô#€GˆSÔ#r   rÖ   c                   óp   — e Zd ZU dZddiZ edd¬«      Zeed<   dZ	e
dz  ed	<    edd
¬«      Zedz  ed<   y)ÚAdminMemberAccountUpdateRequestz9Admin-only account controls for member login credentials.r<   T.rX   rŸ   rw   Nr   rB   )r£   r3   r+   )r   r   r   r!   rT   r   rw   r(   r   r   r   r+   r   r   r   r   rØ   rØ   H  sC   … ÙCà&¨Ð-€Lá˜ Ô#€GˆSÓ#Ø!€Eˆ8�d‰?Ó!Ù ¨¸!Ô<€Hˆc�D‰jÔ<r   rØ   c            
       óî   — e Zd ZU ddiZ edd¬«      Zeed<    e eddd	«      ¬
«      Z	e
ed<    e eddd«      ¬
«      Ze
ed<    eddd eddd«      ¬«      Zeed<    edd eddd«      ¬«      Zeed<   y)ÚUpdateUserProgrammeRequestr<   T.rX   rŸ   rw   r    r}   r¡   )rA   r¤   r   r¥   r   r¦   r§   r�   r¨   r©   r«   rƒ   r¬   r­   N)r   r   r   rT   r   rw   r(   r   r   r    r   r¤   r§   r«   r   r   r   rÚ   rÚ   R  s°   … Ø&¨Ð-€Lá˜ Ô#€GˆSÓ#Ù %Ù%Ð&<¸lÈGÓTô!Ð˜#ó ñ "'Ù%Ð&=¸}ÈhÓWô"Ð˜3ó ñ !&ØØØÙ%Ð&<¸lÈFÓSô	!Ð˜#ó ñ %*ØØÙ%Ð&@ÐBRÐT]Ó^ô%Ð˜cô r   rÚ   c                   óè   — e Zd ZU eed<   eed<   eed<   eed<   eed<   eed<   eed<   dZedz  ed	<   d
Zeed<   dZ	edz  ed<   dZ
edz  ed<    ee¬«      Zee   ed<   dZedz  ed<   dZedz  ed<   y)ÚMemberWeekSessionDetailOutÚ
session_idrƒ   ÚtitleÚstatusÚvideo_submittedÚis_completedÚhas_feedbackNÚfeedbackr   Úassigned_pointsÚprogress_idÚ	image_url©Údefault_factoryÚ
image_urlsÚfirst_assessment_idÚfirst_assessment_title)r   r   r   r(   r   r   r"   rã   rä   rå   ræ   r   rœ   ré   rê   rë   r   r   r   rÜ   rÜ   i  sŽ   … ØƒOØÓØƒJØƒKØÓØÓØÓØ€Hˆc�D‰jÓØ€O�SÓØ"€K��t‘Ó"Ø €Iˆs�T‰zÓ Ù!°$Ô7€J��S‘	Ó7Ø&*Ð˜˜t™Ó*Ø)-Ð˜C $™JÔ-r   rÜ   c                   ó€   — e Zd ZU eed<   eed<   eed<   eed<   eed<   eed<   eed<   dZeed	<   dZeed
<   e	e
   ed<   y)ÚMemberWeekDetailOutÚweek_idr�   Úweek_numberÚdisplay_labelÚtotal_sessionsÚcompleted_sessionsrá   FÚweek_point_awardedÚexpandedÚsessionsN)r   r   r   r(   r   r   r"   ró   rô   rœ   rÜ   r   r   r   rí   rí   z  sK   … ØƒLØƒOØÓØÓØÓØÓØÓØ$Ð˜Ó$Ø€HˆdÓØÐ-Ñ.Ô.r   rí   c                   ó´   — e Zd ZU eed<   dZedz  ed<   dZedz  ed<   dZedz  ed<   dZ	edz  ed<   dZ
edz  ed<   dZedz  ed<   dZedz  ed	<   ee   ed
<   y)ÚMemberWeeksDetailResponserw   Nr}   r~   r   r€   Úcurrent_week_indexr“   r”   Úweeks)r   r   r   r(   r   r}   r   r~   r   r€   rø   r“   r”   rœ   rí   r   r   r   r÷   r÷   ‡  sz   … ØƒLØ!€J��d‘
Ó!Ø%)Ð˜˜d™
Ó)Ø"€K��t‘Ó"Ø&*Ð˜˜t™Ó*Ø%)Ð˜˜d™
Ó)Ø(,Ð˜3 ™:Ó,Ø#'Ð�c˜D‘jÓ'ØÐ#Ñ$Ô$r   r÷   c                   óp   — e Zd ZU ddiZ edd¬«      Zeed<    eddd¬	«      Zeed
<    ed¬«      Z	e
ed<   y)ÚMarkMemberWeekCompleteRequestr<   T.rX   rŸ   rw   r   r¦   ©ru   rª   r�   ©r£   rá   N)r   r   r   rT   r   rw   r(   r   r�   rá   r"   r   r   r   rû   rû   “  s?   … Ø&¨Ð-€Lá˜ Ô#€GˆSÓ#Ù˜C A¨"Ô-€J�Ó-Ù tÔ,€L�$Ô,r   rû   c                   ój   — e Zd ZU eed<    edd¬«      Zeed<    ed edd«      ¬	«      Z	eed<   d
diZ
y)ÚUserRegisterRequestr   .rB   ro   r+   rj   rk   Únamer¢   r<   TN)r   r   r   r   r   r   r+   r   r   rk   rT   r   r   r   rÿ   rÿ   ›  sB   … ØƒOÙ˜#¨!Ô,€HˆcÓ,ÙØÙ% k°6Ó:ô€Iˆsó ð
 '¨Ð-�Lr   rÿ   c                   ó²  — e Zd ZU dZddiZ edd edd«      ¬«      Zedz  e	d<    ed ed	d
«      ¬«      Z
edz  e	d	<    edd edd«      ¬«      Zedz  e	d<    ed edd«      ¬«      Zedz  e	d<    edd edd«      ¬«      Zedz  e	d<    ed edd«      ¬«      Zedz  e	d<    edd edd«      ¬«      Zedz  e	d<    ed edd«      ¬«      Zedz  e	d<   y)ÚUserRegisterStepSaveRequestuZ   Draft selections only â€” cannot set current_step or is_completed (server controls those).r<   TNrX   Úlevel_idÚlevelIdr­   Ú
level_nameÚ	levelNamer¢   Ú	module_idÚmoduleIdÚmodule_nameÚ
moduleNamerî   ÚweekIdÚ	week_nameÚweekNamerÝ   Ú	sessionIdÚsession_nameÚsessionName©r   r   r   r!   rT   r   r   r  r(   r   r  r   r  r	  rî   r  rÝ   r  r   r   r   r  r  ¦  s  … Ùdà&¨Ð-€Lá ¨°!ÁlÐS]Ð_hÓFiÔj€Hˆc�D‰jÓjÙ"¨4Á,È|Ð]hÓBiÔj€J��d‘
ÓjÙ!¨$°1Á|ÐT_ÐakÓGlÔm€Iˆs�T‰zÓmÙ#¨DÁ<ÐP]Ð_kÓClÔm€K��t‘ÓmÙ¨°Á\ÐR[Ð]eÓEfÔg€GˆS�4‰ZÓgÙ!¨$ÁÈkÐ[eÓAfÔg€Iˆs�T‰zÓgÙ"¨4°AÉÐUaÐcnÓHoÔp€J��d‘
ÓpÙ$¨TÁLÐQ_ÐanÓDoÔp€L�#˜‘*Ôpr   r  c                   óò   — e Zd ZU eed<   eed<   dZedz  ed<   dZedz  ed<   dZedz  ed<   dZ	edz  ed<   dZ
edz  ed<   dZedz  ed	<   dZedz  ed
<   dZedz  ed<   eed<   eed<   eed<   eed<   ddiZy)ÚUserRegisterStepOutr‰   rw   Nr  r  r  r	  rî   r  rÝ   r  Úcurrent_steprá   r�   Ú
updated_atr—   T)r   r   r   r(   r   r  r  r   r  r	  rî   r  rÝ   r  r"   r   rT   r   r   r   r  r  µ  sž   … ØƒGØƒLØ€Hˆc�D‰jÓØ!€J��d‘
Ó!Ø €Iˆs�T‰zÓ Ø"€K��t‘Ó"Ø€GˆS�4‰ZÓØ €Iˆs�T‰zÓ Ø!€J��d‘
Ó!Ø#€L�#˜‘*Ó#ØÓØÓØÓØÓà% tÐ,�Lr   r  c                   ó   — e Zd ZdZdZdZy)ÚRegisterStepStatusÚlockedÚopenÚ	completedN©r   r   r   r  r  r  r   r   r   r  r  È  ó   „ Ø€FØ€DØ�Ir   r  c                   óX   — e Zd ZU dZeed<   eed<   eed<   dZedz  ed<   dZ	edz  ed<   y)ÚRegisterStepItemOutu\   One onboarding step (level â†’ module â†’ week â†’ session) and whether the user can use it.ÚstepÚlabelrß   NÚselected_idÚselected_name)
r   r   r   r!   r   r   r  r!  r(   r"  r   r   r   r  r  Î  s1   … Ùfà
ƒIØƒJØÓØ"€K��t‘Ó"Ø $€M�3˜‘:Ô$r   r  c                   óT   — e Zd ZU dZeed<   eed<   eed<   ee   ed<   dZ	e
dz  ed<   y)ÚUserRegisterStepStateResponsezKFrontend-friendly register-step state: which step is open, locked, or done.r  rá   Úcan_proceedÚstepsNÚ	selection)r   r   r   r!   r   r   r"   rœ   r  r'  r  r   r   r   r$  r$  Ø  s3   … ÙUàÓØÓØÓØÐ#Ñ$Ó$Ø,0€IÐ" TÑ)Ô0r   r$  c                   ó²  — e Zd ZU dZddiZ edd edd«      ¬«      Zedz  e	d<    ed ed	d
«      ¬«      Z
edz  e	d	<    edd edd«      ¬«      Zedz  e	d<    ed edd«      ¬«      Zedz  e	d<    edd edd«      ¬«      Zedz  e	d<    ed edd«      ¬«      Zedz  e	d<    edd edd«      ¬«      Zedz  e	d<    ed edd«      ¬«      Zedz  e	d<   y)ÚUserRegisterStepAcceptRequestzKSave the user's choice for the current open step and move to the next step.r<   TNrX   r  r  r­   r  r  r¢   r  r  r	  r
  rî   r  r  r  rÝ   r  r  r  r  r   r   r   r)  r)  â  s  … ÙUà&¨Ð-€Lá ¨°!ÁlÐS]Ð_hÓFiÔj€Hˆc�D‰jÓjÙ"¨4Á,È|Ð]hÓBiÔj€J��d‘
ÓjÙ!¨$°1Á|ÐT_ÐakÓGlÔm€Iˆs�T‰zÓmÙ#¨DÁ<ÐP]Ð_kÓClÔm€K��t‘ÓmÙ¨°Á\ÐR[Ð]eÓEfÔg€GˆS�4‰ZÓgÙ!¨$ÁÈkÐ[eÓAfÔg€Iˆs�T‰zÓgÙ"¨4°AÉÐUaÐcnÓHoÔp€J��d‘
ÓpÙ$¨TÁLÐQ_ÐanÓDoÔp€L�#˜‘*Ôpr   r)  c                   ó   — e Zd ZdZdZdZy)ÚTrackProgressStatusr  r  r  Nr  r   r   r   r+  r+  ñ  r  r   r+  c                   ó6   — e Zd ZU eed<   eed<   eed<   eed<   y)ÚTrackAssessmentOutr‰   Ú
sort_orderrÞ   rß   N)r   r   r   r(   r   r   r+  r   r   r   r-  r-  ÷  s   … ØƒGØƒOØƒJØÔr   r-  c                   óZ   — e Zd ZU eed<   eed<   eed<   eed<   eed<   eed<   ee	   ed<   y)	ÚTrackSessionOutr‰   rƒ   rÞ   Úadmin_checkedrß   Úassessments_countÚassessmentsN)
r   r   r   r(   r   r   r"   r+  rœ   r-  r   r   r   r0  r0  þ  s0   … ØƒGØÓØƒJØÓØÓØÓØÐ(Ñ)Ô)r   r0  c                   óZ   — e Zd ZU eed<   eed<   eed<   eed<   eed<   eed<   ee   ed<   y)	ÚTrackWeekOutr‰   r�   rð   rß   Úsessions_countÚcompleted_sessions_countrõ   N)	r   r   r   r(   r   r   r+  rœ   r0  r   r   r   r5  r5    s/   … ØƒGØƒOØÓØÓØÓØ!Ó!Ø�?Ñ#Ô#r   r5  c                   óZ   — e Zd ZU eed<   eed<   eed<   eed<   ee   ed<   eed<   eed<   y)	ÚTrackModuleOutr‰   ÚkindÚdisplay_namerß   rù   rò   rñ   N)	r   r   r   r(   r   r   r+  rœ   r5  r   r   r   r9  r9    s/   … ØƒGØ
ƒIØÓØÓØ�ÑÓØÓØÔr   r9  c                   óP   — e Zd ZU eed<   eed<   eed<   ee   ed<   eed<   eed<   y)ÚTrackLevelOutr‰   Úslugr;  Úmodulesrò   rñ   N)r   r   r   r(   r   r   rœ   r9  r   r   r   r=  r=    s)   … ØƒGØ
ƒIØÓØ�.Ñ!Ó!ØÓØÔr   r=  c                   óp   — e Zd ZU eed<   dZeed<   dZeed<   dZedz  ed<   dZ	edz  ed<   dZ
edz  ed	<   y)
ÚProgrammeTrackResponseÚregistration_completedFÚlevel_unlockedTÚmodule_unlockedNÚcurrent_openÚregistration_selectionr¡   )r   r   r   r"   r   rC  rD  rE  ÚdictrF  r¡   r=  r   r   r   rA  rA  %  sH   … Ø Ó Ø €N�DÓ Ø €O�TÓ Ø $€L�$˜‘+Ó$Ø*.Ð˜D 4™KÓ.Ø"&€Eˆ=˜4ÑÔ&r   rA  c                   óÔ   — e Zd ZU ddiZ edd edd«      ¬«      Zedz  ed<    edd edd	«      ¬«      Z	edz  ed<    edd
¬«      Z
edz  ed<    ed edd«      ¬«      Zedz  ed<   y)ÚTrackCompleteRequestr<   TNrX   Úassessment_idÚassessmentIdr­   rÝ   r  z)Optional level slug filter, e.g. beginner©r£   rv   r¡   r   Ú
moduleKindr¢   )r   r   r   rT   r   r   rJ  r(   r   rÝ   r¡   r   r   r   r   r   rI  rI  .  s€   … Ø&¨Ð-€Lá %¨d°qÉ<ÐXgÐiwÓKxÔ y€M�3˜‘:ÓyÙ"¨4°AÉÐUaÐcnÓHoÔp€J��d‘
ÓpÙ dÐ8cÔd€Eˆ3�‰:ÓdÙ#¨DÁ<ÐP]Ð_kÓClÔm€K��t‘Ômr   rI  c                   ó`  — e Zd ZU eed<   eed<   dZedz  ed<   dZedz  ed<   dZedz  ed<   dZ	edz  ed<   dZ
edz  ed<   dZedz  ed	<   dZedz  ed
<   dZedz  ed<   dZedz  ed<   dZedz  ed<   dZedz  ed<   dZedz  ed<   dZedz  ed<   dZedz  ed<   eed<   eed<   eed<   ddiZy)ÚUserTrackTraceOutr‰   rw   Nr  r}   r  r  r   r	  rî   r  r�   rÝ   r  rƒ   rJ  Úassessment_titleÚactionÚsession_fully_completedr�   r—   T)r   r   r   r(   r   r  r}   r   r  r  r   r	  rî   r  r�   rÝ   r  rƒ   rJ  rP  r"   r   rT   r   r   r   rO  rO  7  sì   … ØƒGØƒLØ€Hˆc�D‰jÓØ!€J��d‘
Ó!Ø!€J��d‘
Ó!Ø €Iˆs�T‰zÓ Ø"€K��t‘Ó"Ø"€K��t‘Ó"Ø€GˆS�4‰ZÓØ €Iˆs�T‰zÓ Ø!€J��d‘
Ó!Ø!€J��d‘
Ó!Ø#€L�#˜‘*Ó#Ø!%€N�C˜$‘JÓ%Ø $€M�3˜‘:Ó$Ø#'Ð�c˜D‘jÓ'ØƒKØ!Ó!ØÓà% tÐ,�Lr   rO  c                   ó(   — e Zd ZU eed<   ee   ed<   y)ÚUserTrackTraceListResponserš   ÚtracesN)r   r   r   r(   r   rœ   rO  r   r   r   rT  rT  O  s   … ØƒJØÐ"Ñ#Ô#r   rT  c                   ó,   — e Zd ZU eed<   eed<   eed<   y)ÚProgrammeAssessmentOutr‰   r.  rÞ   N©r   r   r   r(   r   r   r   r   r   rW  rW  T  s   … ØƒGØƒOØ„Jr   rW  c                   óP   — e Zd ZU eed<   eed<   eed<   eed<   eed<   ee   ed<   y)ÚProgrammeSessionOutr‰   rƒ   rÞ   r1  r2  r3  N)	r   r   r   r(   r   r   r"   rœ   rW  r   r   r   rZ  rZ  Z  s*   … ØƒGØÓØƒJØÓØÓØÐ,Ñ-Ô-r   rZ  c                   óP   — e Zd ZU eed<   eed<   eed<   eed<   eed<   ee   ed<   y)ÚProgrammeWeekOutr‰   r�   rð   r6  r2  rõ   N)r   r   r   r(   r   r   rœ   rZ  r   r   r   r\  r\  c  s*   … ØƒGØƒOØÓØÓØÓØÐ&Ñ'Ô'r   r\  c                   ó4   — e Zd ZU eed<   eed<   eed<   ddiZy)ÚMemberPointsOutrw   r“   r”   r—   TN)r   r   r   r(   r   rT   r   r   r   r^  r^  m  s   … ØƒLØÓØÓà% tÐ,�Lr   r^  c                   ód   — e Zd ZU eed<   eed<   eed<   eed<   eed<   eed<   eed<   ee   ed<   y	)
ÚProgrammeModuleOutr‰   r:  r;  r.  Úweeks_countr6  r2  rù   N)r   r   r   r(   r   r   rœ   r\  r   r   r   r`  r`  u  s5   … ØƒGØ
ƒIØÓØƒOØÓØÓØÓØÐ Ñ!Ô!r   r`  c                   ón   — e Zd ZU eed<   eed<   eed<   eed<   eed<   eed<   eed<   eed<   ee   ed	<   y
)ÚProgrammeLevelOutr‰   r>  r;  r.  Úmodules_countra  r6  r2  r?  N)r   r   r   r(   r   r   rœ   r`  r   r   r   rc  rc  €  s;   … ØƒGØ
ƒIØÓØƒOØÓØÓØÓØÓØÐ$Ñ%Ô%r   rc  c                   óP   — e Zd ZU eed<   eed<   eed<   eed<   eed<   ee   ed<   y)ÚProgrammeCatalogResponseÚtotal_levelsÚtotal_modulesÚtotal_weeksrñ   Útotal_assessmentsÚlevelsN)r   r   r   r(   r   rœ   rc  r   r   r   rf  rf  Œ  s,   … ØÓØÓØÓØÓØÓØÐ"Ñ#Ô#r   rf  c            
       ó˜   — e Zd ZU ddiZ eddd¬«      Zeed<    eddd ed	d
d«      ¬«      Z	eed	<    edd eddd«      ¬«      Z
eed<   y)ÚProgrammeLevelCreateRequestr<   T.rX   r°   r2   r>  éÿ   r;  ÚdisplayNamer   r@   r   r.  Ú	sortOrderÚsortr­   N)r   r   r   rT   r   r>  r   r   r   r;  r.  r(   r   r   r   rm  rm  –  sj   … Ø&¨Ð-€Lá�c a°BÔ7€Dˆ#Ó7ÙØØØÙ% n°mÀVÓLô	€L�#ó ñ ØØÙ% l°KÀÓHô€J�ô r   rm  c            	       óv   — e Zd ZU ddiZ eddd edd«      ¬«      Zeed<    ed	d	 ed
dd«      ¬«      Z	e
ed
<   y)Ú$ProgrammeAssessmentTreeCreateRequestr<   T.rX   rÃ   rÞ   r   r@   r   r.  rp  rq  r­   N)r   r   r   rT   r   r   rÞ   r   r   r.  r(   r   r   r   rs  rs  §  sM   … Ø&¨Ð-€Lá�s q°SÉ<ÐX_ÐagÓKhÔi€Eˆ3ÓiÙØØÙ% l°KÀÓHô€J�ô r   rs  c            	       óÄ   — e Zd ZU ddiZ edd eddd«      ¬«      Zeed<    eddd	 ed
d«      ¬«      Z	e
ed
<    ed edd«      ¬«      Zeed<    ee¬«      Zee   ed<   y)Ú!ProgrammeSessionTreeCreateRequestr<   T.rX   rƒ   ÚsessionNumberÚnumber©ru   rA   rÃ   rÞ   r   r@   Fr1  ÚadminCheckedr¢   rç   r3  N)r   r   r   rT   r   r   rƒ   r(   r   rÞ   r   r1  r"   rœ   r3  rs  r   r   r   ru  ru  ²  s   … Ø&¨Ð-€LáØØÙ%Ð&6¸ÈÓRô€N�Có ñ
 �s q°SÉ<ÐX_ÐagÓKhÔi€Eˆ3ÓiÙ¨ÁÈ_Ð^lÓ@mÔn€M�4ÓnÙ>CÐTXÔ>Y€K�Ð:Ñ;ÔYr   ru  c                   óž   — e Zd ZU ddiZ eddd eddd«      ¬	«      Zeed<    edd
d edddd«      ¬«      Z	e
ed<    ee¬«      Zee   ed<   y)ÚProgrammeWeekTreeCreateRequestr<   T.r   r¦   r�   Ú	weekIndexÚindex)ru   rª   rA   rX   é@   rð   ÚdisplayLabelr   r   r@   rç   rõ   N)r   r   r   rT   r   r   r�   r(   r   rð   r   rœ   rõ   ru  r   r   r   r{  r{  ¿  st   … Ø&¨Ð-€LáØØØÙ% l°KÀÓIô	€J�ó ñ ØØØÙ% o°~ÀwÐPVÓWô	€M�3ó ñ 9>ÈdÔ8S€HˆdÐ4Ñ5ÔSr   r{  c            
       óº   — e Zd ZU ddiZ eddd¬«      Zeed<    eddd ed	d
d«      ¬«      Z	eed	<    edd eddd«      ¬«      Z
eed<    ee¬«      Zee   ed<   y)Ú ProgrammeModuleTreeCreateRequestr<   T.rX   r~  r2   r:  rn  r;  ro  r   r@   r   r.  rp  rq  r­   rç   rù   N)r   r   r   rT   r   r:  r   r   r   r;  r.  r(   rœ   rù   r{  r   r   r   r�  r�  Ñ  s�   … Ø&¨Ð-€Lá�c a°BÔ7€Dˆ#Ó7ÙØØØÙ% n°mÀVÓLô	€L�#ó ñ ØØÙ% l°KÀÓHô€J�ó ñ
 38ÈÔ2M€Eˆ4Ð.Ñ/ÔMr   r�  c            
       ó¾   — e Zd ZU dZddiZ eddd¬«      Zeed<    eddd	 e	d
dd«      ¬«      Z
eed
<    edd e	ddd«      ¬«      Zeed<    ee¬«      Zee   ed<   y)ÚProgrammeLevelTreeCreateRequestzU
    Payload for `/admin/programme/levels/full` (one request creates full tree).
    r<   T.rX   r°   r2   r>  rn  r;  ro  r   r@   r   r.  rp  rq  r­   rç   r?  N)r   r   r   r!   rT   r   r>  r   r   r   r;  r.  r(   rœ   r?  r�  r   r   r   rƒ  rƒ  ã  sˆ   … ñð '¨Ð-€Lá�c a°BÔ7€Dˆ#Ó7ÙØØØÙ% n°mÀVÓLô	€L�#ó ñ ØØÙ% l°KÀÓHô€J�ó ñ
 7<ÈDÔ6Q€GˆTÐ2Ñ3ÔQr   rƒ  c            	       ó²   — e Zd ZU ddiZ edd eddd«      ¬«      Zeed<    ed	d
 eddd«      ¬«      Z	e
d	z  ed<    ed	d eddd«      ¬«      Zed	z  ed<   y	)ÚProgrammeLevelUpdateRequestr<   T.rX   r  r  r‰   rx  Nrn  r;  ro  r   r³   r   r.  rp  rq  r­   )r   r   r   rT   r   r   r  r(   r   r;  r   r.  r   r   r   r…  r…  ù  s�   … Ø&¨Ð-€LáØØÙ% j°)¸TÓBô€Hˆcó ñ
  %ØØÙ% n°mÀVÓLô €L�#˜‘*ó ñ
 #ØØÙ% l°KÀÓHô€J��d‘
ô r   r…  c            
       óÆ   — e Zd ZU ddiZ edd edd«      ¬«      Zeed<    eddd¬	«      Z	e
ed
<    eddd eddd«      ¬«      Ze
ed<    edd eddd«      ¬«      Zeed<   y)ÚProgrammeModuleCreateRequestr<   T.rX   r  r  rx  r~  r2   r:  rn  r;  ro  r   r@   r   r.  rp  rq  r­   N)r   r   r   rT   r   r   r  r(   r   r:  r   r;  r.  r   r   r   r‡  r‡    s�   … Ø&¨Ð-€LáØØÙ% j°)Ó<ô€Hˆcó ñ
 �c a°BÔ7€Dˆ#Ó7ÙØØØÙ% n°mÀVÓLô	€L�#ó ñ ØØÙ% l°KÀÓHô€J�ô r   r‡  c            	       ó²   — e Zd ZU ddiZ edd eddd«      ¬«      Zeed<    ed	d
 eddd«      ¬«      Z	e
d	z  ed<    ed	d eddd«      ¬«      Zed	z  ed<   y	)ÚProgrammeModuleUpdateRequestr<   T.rX   r  r  r‰   rx  Nrn  r;  ro  r   r³   r   r.  rp  rq  r­   )r   r   r   rT   r   r   r  r(   r   r;  r   r.  r   r   r   r‰  r‰  #  s�   … Ø&¨Ð-€LáØØÙ% k°:¸tÓDô€Iˆsó ñ
  %ØØÙ% n°mÀVÓLô €L�#˜‘*ó ñ
 #ØØÙ% l°KÀÓHô€J��d‘
ô r   r‰  c                   ó˜   — e Zd ZU ddiZ edd edd«      ¬«      Zeed<    eddd	¬
«      Z	eed<    eddd edddd«      ¬«      Z
eed<   y)ÚProgrammeWeekCreateRequestr<   T.rX   r  r  rx  r   r¦   rü   r�   r~  rð   r  r   r   r@   N)r   r   r   rT   r   r   r  r(   r   r�   rð   r   r   r   r   r‹  r‹  7  sk   … Ø&¨Ð-€LáØØÙ% k°:Ó>ô€Iˆsó ñ
 ˜C A¨"Ô-€J�Ó-ÙØØØÙ% o°~ÀwÐPVÓWô	€M�3ô r   r‹  c            
       ó¶   — e Zd ZU ddiZ edd eddd«      ¬«      Zeed<    ed	d
 edddd«      ¬«      Z	e
d	z  ed<    ed	dd eddd«      ¬«      Zed	z  ed<   y	)ÚProgrammeWeekUpdateRequestr<   T.rX   rî   r  r‰   rx  Nr~  rð   r  r   r   r³   r   r¦   r�   r|  r}  r©   )r   r   r   rT   r   r   rî   r(   r   rð   r   r�   r   r   r   r�  r�  H  s‡   … Ø&¨Ð-€LáØØÙ% i°¸4Ó@ô€GˆSó ñ
 !&ØØÙ% o°~ÀwÐPVÓWô!€M�3˜‘:ó ñ
 #ØØØÙ% l°KÀÓIô	€J��d‘
ô r   r�  c            	       ó    — e Zd ZU ddiZ edd edd«      ¬«      Zeed<    edd¬«      Z	eed	<    eddd
 edd«      ¬«      Z
eed<   dZeed<   y)ÚProgrammeSessionCreateRequestr<   T.rX   rî   r  rx  rŸ   rƒ   rÃ   rÞ   r   r@   Fr1  N)r   r   r   rT   r   r   rî   r(   r   rƒ   rÞ   r   r1  r"   r   r   r   r�  r�  ]  sh   … Ø&¨Ð-€LáØØÙ% i°Ó:ô€GˆSó ñ
   ¨Ô*€N�CÓ*Ù�s q°SÉ<ÐX_ÐagÓKhÔi€Eˆ3ÓiØ€M�4Ôr   r�  c            	       óÄ   — e Zd ZU ddiZ edd eddd«      ¬«      Zeed<    ed	d
 edd«      ¬«      Z	e
d	z  ed<    ed	d eddd«      ¬«      Zed	z  ed<   d	Zed	z  ed<   y	)ÚProgrammeSessionUpdateRequestr<   T.rX   rÝ   r  r‰   rx  NrÃ   rÞ   r   r³   rƒ   rv  rw  r­   r1  )r   r   r   rT   r   r   rÝ   r(   r   rÞ   r   rƒ   r1  r"   r   r   r   r‘  r‘  j  s�   … Ø&¨Ð-€LáØØÙ% l°KÀÓFô€J�ó ñ
 ØØÙ% g¨vÓ6ô€Eˆ3�‰:ó ñ
 "'ØØÙ%Ð&6¸ÈÓRô"€N�C˜$‘Jó ð
 "&€M�4˜$‘;Ô%r   r‘  c            	       ó¤   — e Zd ZU ddiZ edd edd«      ¬«      Zeed<    eddd ed	d
«      ¬«      Z	e
ed	<    edd eddd«      ¬«      Zeed<   y)Ú ProgrammeAssessmentCreateRequestr<   T.rX   rÝ   r  rx  rÃ   rÞ   r   r@   r   r.  rp  rq  N)r   r   r   rT   r   r   rÝ   r(   r   rÞ   r   r.  r   r   r   r“  r“    sp   … Ø&¨Ð-€LáØØÙ% l°KÓ@ô€J�ó ñ
 �s q°SÉ<ÐX_ÐagÓKhÔi€Eˆ3ÓiÙØØÙ% l°KÀÓHô€J�ô r   r“  c            	       ó°   — e Zd ZU ddiZ edd eddd«      ¬«      Zeed<    ed	d
 edd«      ¬«      Z	e
d	z  ed<    ed	d eddd«      ¬«      Zed	z  ed<   y	)Ú ProgrammeAssessmentUpdateRequestr<   T.rX   rJ  rK  r‰   rx  NrÃ   rÞ   r   r³   r   r.  rp  rq  r­   )r   r   r   rT   r   r   rJ  r(   r   rÞ   r   r.  r   r   r   r•  r•  �  s   … Ø&¨Ð-€LáØØÙ% o°~ÀtÓLô€M�3ó ñ
 ØØÙ% g¨vÓ6ô€Eˆ3�‰:ó ñ
 #ØØÙ% l°KÀÓHô€J��d‘
ô r   r•  c                   ó0   — e Zd ZU dZ edd¬«      Zeed<   y)ÚProgrammeIdRequestzJGeneric single-id request for level/module/week/session/assessment delete..rX   rŸ   r‰   N)r   r   r   r!   r   r‰   r(   r   r   r   r   r—  r—  £  s   … ÙTÙ�C˜AÔ€BˆÔr   r—  c                   óÖ   — e Zd ZU dZeed<   eed<   eed<   eed<   eed<   dZedz  ed<   eed	<   e	j                  Ze	ed
<   dZedz  ed<   dZedz  ed<   dZeed<   eed<   eed<   ddiZy)ÚAdminProfilePublicz+Admin profile row returned to the admin UI.r‰   rw   Ú
first_nameÚ	last_namerk   NrŠ   r   r&   r�   rŽ   Fr�   r�   r  r—   T)r   r   r   r!   r(   r   r   rŠ   r   r   r   r&   r�   rŽ   r�   r"   r   rT   r   r   r   r™  r™  ¨  s}   … Ù5àƒGØƒLØƒOØƒNØƒNØ#€L�#˜‘*Ó#ØƒOØ—^‘^€Dˆ(Ó#Ø $€M�3˜‘:Ó$Ø$(Ð�s˜T‘zÓ(Ø#Ð�tÓ#ØÓØÓà% tÐ,�Lr   r™  c            	       ó†  — e Zd ZU dZddiZ edd eddd«      ¬	«      Zedz  e	d<    edd
 edd«      ¬	«      Z
edz  e	d<    edd
 edd«      ¬	«      Zedz  e	d<    edd eddd«      ¬	«      Zedz  e	d<   dZedz  e	d<    edddd¬«      ededz  dedz  fd„«       «       Z edd¬«      ededz  dedz  fd„«       «       Zy)ÚAdminProfileUpdatez/Admin profile edit form (name + email + phone).r<   TNrn  rk   ÚfullNamer   r³   rC   rš  Ú	firstNamer›  ÚlastNamer°   rŠ   r±   r²   r   Úafterrµ   rF   rG   c                 ó4   — |€y |j                  «       }|xs d S r¹   ©rL   ©rQ   rF   s     r   Ú_strip_nameszAdminProfileUpdate._strip_names×  ó!   € ð ˆ9ØØ�G‰G‹IˆØŠy�DÐr   c                 ót   — |€y |j                  «       }|sy dd l}|j                  d|«      st        d«      ‚|S ©Nr   z[0-9+()\-\.\s]{7,32}zInvalid phone number format©rL   rN   Ú	fullmatchrM   rP   s      r   Ú_validate_phonez"AdminProfileUpdate._validate_phoneß  s@   € ð ˆ9ØØ�G‰G‹IˆÙØãà�|‰|Ð3°QÔ7ÜÐ:Ó;Ð;Øˆr   )r   r   r   r!   rT   r   r   rk   r   r   rš  r›  rŠ   r   r   r	   rU   r¥  r«  r   r   r   r�  r�  ¼  s2  … Ù9à&¨Ð-€Lá!ØØÙ% k°:¸vÓFô€Iˆs�T‰zó ñ
 #ØØÙ% l°KÓ@ô€J��d‘
ó ñ
 "ØØÙ% k°:Ó>ô€Iˆs�T‰zó ñ
  %ØØÙ% n°mÀWÓMô €L�#˜‘*ó ð
 "€Eˆ8�d‰?Ó!á�\ ;°À'ÔJØð˜S 4™Zð ¨C°$©Jò ó ó Kðñ �^¨'Ô2Øð  d¡
ð ¨s°T©zò ó ó 3ñr   r�  c            
       ó¨  — e Zd ZU  edd eddd«      ¬«      Zedz  ed<    edd¬«      Ze	dz  ed<    edd	 ed
dd«      ¬«      Z
edz  ed
<    edd¬«      Zedz  ed<    edd	 edddd«      ¬«      Zedz  ed<    eddd¬«      Zedz  ed<   ddiZ ed
d¬«      ededz  dedz  fd„«       «       Z edd¬«      ededz  dedz  fd„«       «       Zy)ÚProfileUpdateNrn  rk   rž  r   r³   ©r£   r4   r   r°   rŠ   r±   r²   rÃ   r‹   rŒ   Ú
postalCodeÚzipÚzipcoderB   rC   )r£   r3   r4   r+   r<   Tr¡  rµ   rF   rG   c                 ót   — |€y |j                  «       }|sy dd l}|j                  d|«      st        d«      ‚|S r¨  r©  rP   s      r   Ú_validate_user_phonez"ProfileUpdate._validate_user_phone  s@   € ð ˆ9ØØ�G‰G‹IˆÙØÛà�|‰|Ð3°QÔ7ÜÐ:Ó;Ð;Øˆr   c                 ót   — |€y |j                  «       }|sy dd l}|j                  d|«      st        d«      ‚|S )Nr   z [A-Za-z0-9][A-Za-z0-9\s\-]{1,31}zInvalid postal code formatr©  rP   s      r   Ú_validate_postalzProfileUpdate._validate_postal  s@   € ð ˆ9ØØ�G‰G‹IˆÙØÛà�|‰|Ð?ÀÔCÜÐ9Ó:Ð:Øˆr   )r   r   r   r   r   rk   r   r   r   r   rŠ   r‹   rŒ   r+   rT   r	   rU   r³  rµ  r   r   r   r­  r­  ï  s:  … Ù!ØØÙ% k°:¸vÓFô€Iˆs�T‰zó ñ
 #¨4¸CÔ@€Eˆ8�d‰?Ó@Ù$ØØÙ% n°mÀWÓMô €L�#˜‘*ó ñ
  ¨¸Ô=€GˆS�4‰ZÓ=Ù#ØØÙ% m°\À5È)ÓTô€K��t‘ó ñ
 !¨¸!ÈÔL€Hˆc�D‰jÓLà&¨Ð-€Lá�^¨'Ô2Øð
 S¨4¡Zð 
°C¸$±Jò 
ó ó 3ð
ñ �]¨Ô1Øð
  t¡ð 
°°d±
ò 
ó ó 2ñ
r   r­  c                   ó   — e Zd ZU eed<   y)ÚMessageÚmessageN)r   r   r   r   r   r   r   r   r·  r·  "  s   … Ø„Lr   r·  c            
       ó  — e Zd ZU ddiZ eddd eddd«      ¬	«      Zeed<   e	ed
<    edd eddd«      ¬«      Z
edz  ed<    eddd¬«      Zeed<    eddd¬«      Zeed<    edd¬«      ededz  dedz  fd„«       «       Zy)ÚContactMessageCreateRequestr<   T.rX   rn  rk   rž  r   r@   r   Nr°   rŠ   r±   r²   r³   r2   Úsubjectiˆ  r¸  r¡  rµ   rF   rG   c                 ó4   — |€y |j                  «       }|xs d S r¹   r£  r¤  s     r   Ú_strip_phonez(ContactMessageCreateRequest._strip_phone8  r¦  r   )r   r   r   rT   r   r   rk   r   r   r   rŠ   r»  r¸  r	   rU   r½  r   r   r   rº  rº  &  s¿   … Ø&¨Ð-€LáØØØÙ% k°:¸vÓFô	€Iˆsó ð ƒOÙ$ØØÙ% n°mÀWÓMô €L�#˜‘*ó ñ
 ˜¨°sÔ;€GˆSÓ;Ù˜¨°tÔ<€GˆSÓ<á�^¨'Ô2Øð˜S 4™Zð ¨C°$©Jò ó ó 3ñr   rº  c                   óp   — e Zd ZU eed<   eed<   eed<   dZedz  ed<   eed<   eed<   eed<   e	ed	<   d
diZ
y)ÚContactMessageOutr‰   rk   r   NrŠ   r»  r¸  Ú
email_sentr�   r—   T)r   r   r   r(   r   r   r   rŠ   r"   r   rT   r   r   r   r¿  r¿  A  s?   … ØƒGØƒNØƒOØ#€L�#˜‘*Ó#ØƒLØƒLØÓØÓà% tÐ,�Lr   r¿  c                   ó(   — e Zd ZU eed<   ee   ed<   y)ÚContactMessageListResponserš   ÚmessagesN)r   r   r   r(   r   rœ   r¿  r   r   r   rÂ  rÂ  N  s   … ØƒJØÐ$Ñ%Ô%r   rÂ  c                   ó"   — e Zd ZU eed<   eed<   y)ÚContactMessageSubmitResponser¸  ÚcontactN)r   r   r   r   r   r¿  r   r   r   rÅ  rÅ  S  s   … ØƒLØÔr   rÅ  c                   ó^   — e Zd ZU eed<   eed<   eed<   dZedz  ed<   eed<   eed<   eed<   y)	ÚCommunityPostCommentOutr‰   Úpost_idrw   NÚ	user_nameÚcommentr�   r  )r   r   r   r(   r   rÊ  r   r   r   r   r   rÈ  rÈ  Y  s0   … ØƒGØƒLØƒLØ €Iˆs�T‰zÓ ØƒLØÓØÔr   rÈ  c                   ó(  — e Zd ZU eed<   eed<   eed<   eed<   dZedz  ed<   dZedz  ed<   dZe	ed	<   dZ
edz  ed
<   dZedz  ed<   eed<   eed<   dZeed<   dZeed<   dZeed<    ee¬«      Zeeef   ed<   dZe	ed<    ee¬«      Zee   ed<   y)ÚCommunityPostOutr‰   rÞ   Ú	post_typeÚcontentNÚ	media_urlÚmedia_content_typeFÚ	has_mediaÚcreated_by_idÚcreated_by_namer�   r  r   Úlikes_countÚcomments_countÚshares_countrç   Úshare_countsÚliked_by_meÚcomments)r   r   r   r(   r   r   rÐ  rÑ  rÒ  r"   rÓ  rÔ  r   rÕ  rÖ  r×  r   rG  rØ  rÙ  rœ   rÚ  rÈ  r   r   r   rÍ  rÍ  c  s¹   … ØƒGØƒJØƒNØƒLØ €Iˆs�T‰zÓ Ø%)Ð˜˜d™
Ó)Ø€IˆtÓØ $€M�3˜‘:Ó$Ø"&€O�S˜4‘ZÓ&ØÓØÓØ€K�ÓØ€N�CÓØ€L�#ÓÙ#(¸Ô#>€L�$�s˜C�x‘.Ó>Ø€K�ÓÙ.3ÀDÔ.I€HˆdÐ*Ñ+ÔIr   rÍ  c                   ó(   — e Zd ZU eed<   ee   ed<   y)ÚCommunityPostListResponserš   ÚpostsN)r   r   r   r(   r   rœ   rÍ  r   r   r   rÜ  rÜ  w  s   … ØƒJØÐ Ñ!Ô!r   rÜ  c                   ó.   — e Zd ZU  eddd¬«      Zeed<   y)ÚCommunityPostIdRequest.rX   z$Community post primary key to deletert   rÉ  N)r   r   r   r   rÉ  r(   r   r   r   r   rß  rß  |  s   … Ù˜ Ð0VÔW€GˆSÔWr   rß  c                   óN   — e Zd ZU  eddd¬«      Zeed<    eddd¬«      Zeed<   y	)
ÚCommunityPostCommentRequest.rX   úCommunity post primary keyrt   rÉ  iè  r2   rË  N)	r   r   r   r   rÉ  r(   r   rË  r   r   r   r   rá  rá  €  s)   … Ù˜ Ð0LÔM€GˆSÓMÙ˜¨°tÔ<€GˆSÔ<r   rá  c            	       ó|   — e Zd ZU ddiZ eddd edd«      ¬«      Zeed<    ed	dd
 edd«      ¬«      Z	ed	z  ed<   y	)ÚCommunityPostCommentIdRequestr<   T.rX   z'Community comment primary key to deleteÚ
comment_idÚ	commentId)ru   rv   rA   Nz+Optional post id to scope the delete lookuprÉ  ÚpostId)r£   ru   rv   rA   )
r   r   r   rT   r   r   rå  r(   r   rÉ  r   r   r   rä  rä  …  sZ   … Ø&¨Ð-€LáØØØ=Ù% l°KÓ@ô	€J�ó ñ  ØØØAÙ% i°Ó:ô	€GˆS�4‰Zô r   rä  c                   óL   — e Zd ZU  eddd¬«      Zeed<    edd¬«      Zeed<   y	)
ÚCommunityPostShareRequest.rX   râ  rt   rÉ  z^(instagram|facebook|whatsapp)$)ÚpatternÚplatformN)	r   r   r   r   rÉ  r(   r   rë  r   r   r   r   ré  ré  –  s(   … Ù˜ Ð0LÔM€GˆSÓMÙ˜#Ð'HÔI€HˆcÔIr   ré  c                   ó²   — e Zd ZU eed<   eed<   eed<   eed<   eed<   dZedz  ed<   dZedz  ed<   d	Ze	ed
<   dZ
edz  ed<   dZedz  ed<   eed<   eed<   y)Ú	RewardOutr‰   r   rv   Úpoints_requiredÚcategoryNrÐ  rÑ  FrÒ  rÓ  rÔ  r�   r  )r   r   r   r(   r   r   rÐ  rÑ  rÒ  r"   rÓ  rÔ  r   r   r   r   rí  rí  œ  sl   … ØƒGØ
ƒIØÓØÓØƒMØ €Iˆs�T‰zÓ Ø%)Ð˜˜d™
Ó)Ø€IˆtÓØ $€M�3˜‘:Ó$Ø"&€O�S˜4‘ZÓ&ØÓØÔr   rí  c                   ód   — e Zd ZU eed<   ee   ed<   dZedz  ed<   dZedz  ed<   dZ	edz  ed<   y)ÚRewardListResponserš   ÚrewardsNr”   r’   r“   )
r   r   r   r(   r   rœ   rí  r”   r’   r“   r   r   r   rñ  rñ  «  s=   … ØƒJØ�)‰_ÓØ#'Ð�c˜D‘jÓ'Ø#€L�#˜‘*Ó#Ø(,Ð˜3 ™:Ô,r   rñ  c                   ó.   — e Zd ZU  eddd¬«      Zeed<   y)ÚRewardIdRequest.rX   zReward primary key to deletert   Ú	reward_idN)r   r   r   r   rõ  r(   r   r   r   r   rô  rô  ³  s   … Ù˜3 1Ð2PÔQ€IˆsÔQr   rô  c                   óœ   — e Zd ZU  eddd¬«      Zeed<    edd¬«      Zedz  ed	<    edd
¬«      Z	edz  ed<    eddd¬«      Z
edz  ed<   y)ÚRewardClaimRequest.rX   zReward product to claimrt   rõ  Nr°   r®  rŠ   rn  Úlocationr   zCOptional user total points. Defaults to the reward points_required.©r£   ru   rv   r’   )r   r   r   r   rõ  r(   r   rŠ   r   rø  r’   r   r   r   r÷  r÷  ·  s^   … Ù˜3 1Ð2KÔL€IˆsÓLÙ$¨T¸bÔA€L�#˜‘*ÓAÙ ¨¸#Ô>€Hˆc�D‰jÓ>Ù$ØØØYô €L�#˜‘*ô r   r÷  c                   ó.   — e Zd ZU  eddd¬«      Zeed<   y)ÚRewardClaimIdRequest.rX   zReward claim primary keyrt   Úclaim_idN)r   r   r   r   rü  r(   r   r   r   r   rû  rû  Â  s   … Ù˜# !Ð1KÔL€HˆcÔLr   rû  c                   óz   — e Zd ZU  edd¬«      Zeed<    edd¬«      Zeed<    e	d«      e
ded	efd
„«       «       Zy)ÚRewardClaimStatusRequest.rX   rŸ   rü  z/accept | accepted | reject | rejected | pending©rv   rß   r·   rG   c                 óz   — |j                  «       j                  «       }ddddddddœ}||vrt        d«      ‚||   S )NÚacceptedÚrejectedÚpending)Úacceptr  ÚapproveÚapprovedÚrejectr  r  z2status must be one of: accepted, rejected, pending)rL   ÚlowerrM   )rQ   r·   Ú
normalizedÚaliasess       r   Úvalidate_statusz(RewardClaimStatusRequest.validate_statusÊ  sU   € ð —[‘[“]×(Ñ(Ó*ˆ
à Ø"Ø!Ø"Ø Ø"Ø ñ
ˆð ˜WÑ$ÜÐQÓRÐRØ�zÑ"Ð"r   N)r   r   r   r   rü  r(   r   rß   r   r	   rU   r  r   r   r   rþ  rþ  Æ  sR   … Ù˜# !Ô$€HˆcÓ$Ù˜Ð)ZÔ[€FˆCÓ[á�XÓØð# Cð #¨Cò #ó ó ñ#r   rþ  c                   ó  — e Zd ZU eed<   dZedz  ed<   eed<   eed<   eed<   eed<   dZedz  ed<   dZ	edz  ed	<   dZ
edz  ed
<   eed<   dZedz  ed<   dZedz  ed<   dZedz  ed<   eed<   dZedz  ed<   eed<   eed<   y)ÚRewardClaimOutr‰   Nrõ  Úproduct_namerw   rÊ  r   rŠ   rø  Úsent_tor’   Úremaining_pointsr“   r”   rß   Úproduct_image_urlr�   r  )r   r   r   r(   r   rõ  r   r   rŠ   rø  r  r  r“   r”   r  r   r   r   r   r  r  Ü  s§   … ØƒGØ €Iˆs�T‰zÓ ØÓØƒLØƒNØƒOØ#€L�#˜‘*Ó#Ø€Hˆc�D‰jÓØ€GˆS�4‰ZÓØÓØ#'Ð�c˜D‘jÓ'Ø(,Ð˜3 ™:Ó,Ø#'Ð�c˜D‘jÓ'ØƒKØ$(Ð�s˜T‘zÓ(ØÓØÔr   r  c                   ó(   — e Zd ZU eed<   ee   ed<   y)ÚRewardClaimListResponserš   ÚclaimsN)r   r   r   r(   r   rœ   r  r   r   r   r  r  ð  s   … ØƒJØ�Ñ Ô r   r  c            	       ó  — e Zd ZU ddiZ eddd¬«      Zeed<    edd ed	d
«      ¬«      Z	edz  ed	<    ed edd«      ¬«      Z
edz  ed<    edd edd«      ¬«      Zedz  ed<    edd edd«      ¬«      Zedz  ed<    ed edd«      ¬«      Zedz  ed<    edd edd«      ¬«      Zedz  ed<    edd eddd«      ¬«      Zeed<   dZedz  ed<    ed eddd«      ¬«      Zeed<    ed ed d!d"d#«      ¬«      Zeed <   y)$Ú MemberSessionProgressSaveRequestr<   T.rX   zMember user idrt   rw   Nrî   r  r­   r  r  r¢   r   r�   r|  rÝ   r  r  r  rƒ   rv  rä   ÚassignedPointsÚpointsrã   Frá   ÚisCompletedr  Úadd_to_existingÚaddToExistingÚincrement_pointsÚincrementPoints)r   r   r   rT   r   rw   r(   r   r   rî   r  r   r�   rÝ   r  rƒ   rä   rã   rá   r"   r  r   r   r   r  r  õ  s_  … Ø&¨Ð-€Lá˜ Ð0@ÔA€GˆSÓAÙ¨°Á\ÐR[Ð]eÓEfÔg€GˆS�4‰ZÓgÙ!¨$ÁÈkÐ[eÓAfÔg€Iˆs�T‰zÓgÙ"¨4°AÉÐUaÐcnÓHoÔp€J��d‘
ÓpÙ"¨4°AÉÐUaÐcnÓHoÔp€J��d‘
ÓpÙ$¨TÁLÐQ_ÐanÓDoÔp€L�#˜‘*ÓpÙ!&ØØÙ%Ð&6¸ÓHô"€N�C˜$‘Jó ñ
 !ØØÙ%Ð&7Ð9IÈ8ÓTô€O�Só ð
  €Hˆc�D‰jÓÙØÙ% n°mÀ[ÓQô€L�$ó ñ "ØÙ%Ð&7¸ÐJ\Ð^oÓpô€O�Tô r   r  c                   ó\  — e Zd ZU eed<   eed<   dZedz  ed<   dZedz  ed<   dZedz  ed<   dZ	edz  ed<   dZ
edz  ed<   dZedz  ed	<   eed
<   dZedz  ed<   dZedz  ed<    ee¬«      Zee   ed<   eed<   dZedz  ed<   dZedz  ed<   dZedz  ed<   dZedz  ed<   eed<   eed<   y)ÚMemberSessionProgressOutr‰   rw   Nrî   r  r�   rÝ   r  rƒ   rä   rã   ræ   rç   ré   rá   Úassigned_by_idÚassigned_by_namer“   r”   r�   r  )r   r   r   r(   r   rî   r  r   r�   rÝ   r  rƒ   rã   ræ   r   rœ   ré   r"   r   r!  r“   r”   r   r   r   r   r  r    sâ   … ØƒGØƒLØ€GˆS�4‰ZÓØ €Iˆs�T‰zÓ Ø!€J��d‘
Ó!Ø!€J��d‘
Ó!Ø#€L�#˜‘*Ó#Ø!%€N�C˜$‘JÓ%ØÓØ€Hˆc�D‰jÓØ €Iˆs�T‰zÓ Ù!°$Ô7€J��S‘	Ó7ØÓØ!%€N�C˜$‘JÓ%Ø#'Ð�c˜D‘jÓ'Ø(,Ð˜3 ™:Ó,Ø#'Ð�c˜D‘jÓ'ØÓØÔr   r  c                   ó(   — e Zd ZU eed<   ee   ed<   y)Ú!MemberSessionProgressListResponserš   ÚprogressN)r   r   r   r(   r   rœ   r  r   r   r   r#  r#  )  s   … ØƒJØÐ+Ñ,Ô,r   r#  c                   ó<   — e Zd ZU eed<   eez  ed<   dZedz  ed<   y)ÚUserDashboardStatOutr   r·   NÚhelper_text)r   r   r   r   r   r(   r'  r   r   r   r&  r&  .  s   … ØƒJØ�‰9ÓØ"€K��t‘Ô"r   r&  c                   óò   — e Zd ZU dZedz  ed<   dZedz  ed<   dZedz  ed<   dZ	edz  ed<   dZ
edz  ed<   dZedz  ed<   dZedz  ed<   d	Zeed
<   dZedz  ed<   dZedz  ed<   dZeed<   dZedz  ed<   y)ÚUserDashboardLastProgressOutNr‰   rî   r  r�   rÝ   r  rƒ   r   rä   rã   ræ   Frá   r  )r   r   r   r‰   r(   r   rî   r  r   r�   rÝ   r  rƒ   rä   rã   ræ   rá   r"   r  r   r   r   r   r)  r)  4  s¢   … Ø€Bˆˆd‰
ÓØ€GˆS�4‰ZÓØ €Iˆs�T‰zÓ Ø!€J��d‘
Ó!Ø!€J��d‘
Ó!Ø#€L�#˜‘*Ó#Ø!%€N�C˜$‘JÓ%Ø€O�SÓØ€Hˆc�D‰jÓØ €Iˆs�T‰zÓ Ø€L�$ÓØ"&€J�˜4‘Ô&r   r)  c                   óT   — e Zd ZU eed<   eed<   eed<   eed<   eed<   eed<   eed<   y)	ÚUserDashboardModuleProgressOutr  r   r	  rò   rñ   r•   ri  NrX  r   r   r   r+  r+  C  s+   … ØƒNØÓØÓØÓØÓØÓØÔr   r+  c                   óÎ   — e Zd ZU eed<   eed<   dZedz  ed<   dZedz  ed<   dZedz  ed<   eed<   eed<   eed	<   eed
<   eed<   eed<   e	e
   ed<   e	e   ed<   dZedz  ed<   y)ÚUserDashboardResponserw   rk   Nr  r}   r  r’   r“   r”   rò   rñ   Úlast_progress_percentÚstatsÚcurrent_level_progressÚlast_progress)r   r   r   r(   r   r   r  r}   r  rœ   r&  r+  r1  r)  r   r   r   r-  r-  M  s‚   … ØƒLØƒNØ€Hˆc�D‰jÓØ!€J��d‘
Ó!Ø!€J��d‘
Ó!ØÓØÓØÓØÓØÓØÓØÐ$Ñ%Ó%Ø Ð!?Ñ@Ó@Ø9=€MÐ/°$Ñ6Ô=r   r-  c                   ó6   — e Zd ZU eed<   eed<   eed<   eed<   y)ÚDashboardSummaryOutÚtotal_membersÚsessions_completedÚtotal_badgesÚtotal_communityN©r   r   r   r(   r   r   r   r   r3  r3  _  s   … ØÓØÓØÓØÔr   r3  c                   óB   — e Zd ZU dZedz  ed<   ee   ed<   ee   ed<   y)ÚDashboardChartOutNÚperiodÚlabelsÚvalues)r   r   r   r;  r   r   rœ   r(   r   r   r   r:  r:  f  s$   … Ø€FˆC�$‰JÓØ�‰IÓØ�‰IÔr   r:  c                   óŠ   — e Zd ZU eed<   eed<   eed<   eed<   dZedz  ed<   dZeed<   e	ed	<   dZ
edz  ed
<   dZedz  ed<   y)ÚDashboardActivityOutr‰   rÞ   rv   rÎ  NrÐ  FrÒ  r�   Úcreated_at_labelrÔ  )r   r   r   r(   r   r   rÐ  rÒ  r"   r   r@  rÔ  r   r   r   r?  r?  l  sR   … ØƒGØƒJØÓØƒNØ €Iˆs�T‰zÓ Ø€IˆtÓØÓØ#'Ð�c˜D‘jÓ'Ø"&€O�S˜4‘ZÔ&r   r?  c                   óF   — e Zd ZU eed<   eed<   eed<   eed<   ee   ed<   y)ÚAdminDashboardResponser;  ÚsummaryÚsession_completionsÚmembers_by_levelÚrecent_community_activityN)	r   r   r   r   r   r3  r:  rœ   r?  r   r   r   rB  rB  x  s%   … ØƒKØ Ó Ø*Ó*Ø'Ó'Ø#Ð$8Ñ9Ô9r   rB  c                   ó�   — e Zd ZU  eddd¬«      Zedz  ed<    edd¬«      Zeed	<    eddd
¬«      Z	eed<    edd¬«      Z
eed<   y)ÚSendMemberNotificationRequestNrX   z=Member to notify. Omit or null to send to all active members.rù  rw   .z;One of: announcement, reward, feedback, system, achievementrÿ  Únotification_typern  r2   rÞ   ro   r¸  )r   r   r   r   rw   r(   r   rI  r   rÞ   r¸  r   r   r   rH  rH  �  s`   … ÙØØØSô€GˆS�4‰Zó ñ
 #ØØQôÐ�só ñ �s q°SÔ9€Eˆ3Ó9Ù˜¨Ô+€GˆSÔ+r   rH  c                   ó@   — e Zd ZU eed<   eed<   eed<   eed<   eed<   y)ÚSendMemberNotificationResponser¸  Úrecipients_countrI  rÞ   Úrecipient_labelN)r   r   r   r   r   r(   r   r   r   rK  rK  �  s   … ØƒLØÓØÓØƒJØÔr   rK  c                   ó,   — e Zd ZU eed<   eed<   eed<   y)ÚNotificationRecipientOutr‰   rk   r   NrX  r   r   r   rO  rO  —  s   … ØƒGØƒNØ„Jr   rO  c                   ó(   — e Zd ZU eed<   ee   ed<   y)Ú!NotificationRecipientListResponserš   rÊ   N)r   r   r   r(   r   rœ   rO  r   r   r   rQ  rQ  �  s   … ØƒJØÐ*Ñ+Ô+r   rQ  c                   ó¼   — e Zd ZU eed<   eed<   eed<   eed<   eed<   eed<   eed<   eed<   eed	<   d
Zeed<   dZedz  ed<   dZ	edz  ed<   e
ed<   dZedz  ed<   y)ÚMemberNotificationOutr‰   rw   rÊ  Ú	recipientrI  Ú
type_labelrÞ   r¸  Úis_readFÚadmin_clearedNÚ
sent_by_idÚsent_by_namer�   r@  )r   r   r   r(   r   r   r"   rW  rX  rY  r   r@  r   r   r   rS  rS  ¢  sk   … ØƒGØƒLØƒNØƒNØÓØƒOØƒJØƒLØƒMØ€M�4ÓØ!€J��d‘
Ó!Ø#€L�#˜‘*Ó#ØÓØ#'Ð�c˜D‘jÔ'r   rS  c                   ó(   — e Zd ZU eed<   ee   ed<   y)ÚMemberNotificationListResponserš   ÚnotificationsN)r   r   r   r(   r   rœ   rS  r   r   r   r[  r[  ³  s   … ØƒJØÐ-Ñ.Ô.r   r[  c                   ó.   — e Zd ZU  eddd¬«      Zeed<   y)ÚMemberNotificationIdRequest.rX   zmember_notifications.idrt   Únotification_idN©r   r   r   r   r_  r(   r   r   r   r   r^  r^  ¸  s   … Ù  ¨Ð8QÔR€O�SÔRr   r^  c                   ó   — e Zd ZU eed<   y)Ú%MemberNotificationUnreadCountResponseÚunread_countNr8  r   r   r   rb  rb  ¼  ó   … ØÔr   rb  c                   ó®   — e Zd ZU eed<   eed<   eed<   eed<   eed<   eed<   eed<   eed<   d	Zed	z  ed
<   d	Zed	z  ed<   eed<   e	ed<   d	Z
ed	z  ed<   y	)ÚAdminNotificationOutr‰   rw   rÊ  Úmember_namerI  rU  rÞ   r¸  NÚreference_typeÚreference_idrV  r�   r@  )r   r   r   r(   r   r   rh  ri  r"   r   r@  r   r   r   rf  rf  Á  sb   … ØƒGØƒLØƒNØÓØÓØƒOØƒJØƒLØ!%€N�C˜$‘JÓ%Ø#€L�#˜‘*Ó#ØƒMØÓØ#'Ð�c˜D‘jÔ'r   rf  c                   ó(   — e Zd ZU eed<   ee   ed<   y)ÚAdminNotificationListResponserš   r\  N)r   r   r   r(   r   rœ   rf  r   r   r   rk  rk  Ñ  s   … ØƒJØÐ,Ñ-Ô-r   rk  c                   ó.   — e Zd ZU  eddd¬«      Zeed<   y)ÚAdminNotificationIdRequest.rX   zadmin_notifications.idrt   r_  Nr`  r   r   r   rm  rm  Ö  s   … Ù  ¨Ð8PÔQ€O�SÔQr   rm  c                   ó   — e Zd ZU eed<   y)Ú$AdminNotificationUnreadCountResponserc  Nr8  r   r   r   ro  ro  Ú  rd  r   ro  c                   ó@   — e Zd ZU eed<   eed<   eed<   eed<   eed<   y)ÚContentPageOutÚcontent_typerÞ   rÏ  Úlast_updatedÚlast_updated_labelN)r   r   r   r   r   r   r   r   r   rq  rq  ß  s   … ØÓØƒJØƒLØÓØÔr   rq  c                   ój   — e Zd ZU  edd¬«      Zeed<    eddd¬«      Zeed<    edd¬	«      Zeed
<   y)ÚSaveContentRequest.z"privacy_policy or terms_conditionsrÿ  rr  rX   rn  r2   rÞ   ro   rÏ  N)	r   r   r   r   rr  r   r   rÞ   rÏ  r   r   r   rv  rv  ç  s8   … Ù˜cÐ/SÔT€L�#ÓTÙ�s q°SÔ9€Eˆ3Ó9Ù˜¨Ô+€GˆSÔ+r   rv  c                   óh   — e Zd ZU eed<   eed<   eed<   eed<   eed<   eed<   eed<   eed<   eed	<   y
)ÚFaqOutr‰   ÚquestionÚanswerrß   Ústatus_labelÚ
view_countrs  rt  r�   N)r   r   r   r(   r   r   r   r   r   r   rx  rx  í  s3   … ØƒGØƒMØƒKØƒKØÓØƒOØÓØÓØÔr   rx  c                   ó<   — e Zd ZU eed<   eed<   eed<   ee   ed<   y)ÚFaqListResponserš   ÚskipÚlimitÚfaqsN)r   r   r   r(   r   rœ   rx  r   r   r   r~  r~  ù  s   … ØƒJØ
ƒIØƒJØ
ˆv‰,Ôr   r~  c                   óp   — e Zd ZU  eddd¬«      Zeed<    edd¬«      Zeed<    edd	¬
«      Zedz  ed<   y)ÚFaqCreateRequest.rX   rÃ   r2   ry  ro   rz  r  zcompleted or draftrL  Nrß   )	r   r   r   r   ry  r   r   rz  rß   r   r   r   rƒ  rƒ     s<   … Ù˜#¨!¸Ô<€HˆcÓ<Ù˜¨Ô*€FˆCÓ*Ù {Ð@TÔU€FˆC�$‰JÔUr   rƒ  c                   óŒ   — e Zd ZU  edd¬«      Zeed<    eddd¬«      Zeed<    edd¬«      Z	eed	<    ed
¬«      Z
edz  ed<   y)ÚFaqUpdateRequest.rX   rŸ   Úfaq_idrÃ   r2   ry  ro   rz  r  rý   Nrß   )r   r   r   r   r†  r(   r   ry  r   rz  rß   r   r   r   r…  r…    sJ   … Ù˜ Ô"€FˆCÓ"Ù˜#¨!¸Ô<€HˆcÓ<Ù˜¨Ô*€FˆCÓ*Ù {Ô3€FˆC�$‰JÔ3r   r…  c                   ó,   — e Zd ZU  edd¬«      Zeed<   y)ÚFaqIdRequest.rX   rŸ   r†  N)r   r   r   r   r†  r(   r   r   r   r   rˆ  rˆ    s   … Ù˜ Ô"€FˆCÔ"r   rˆ  N)‰r   Úenumr   Úpydanticr   r   r   r   r	   Úapp.google_drive_linkr
   r   r   r   r   r   r$   r*   r-   r/   r9   r;   rW   ri   rn   rq   rs   rz   r|   rˆ   r™   rž   rÂ   rÆ   rÉ   rÌ   rÓ   rÖ   rØ   rÚ   rÜ   rí   r÷   rû   rÿ   r  r  r  r  r$  r)  r+  r-  r0  r5  r9  r=  rA  rI  rO  rT  rW  rZ  r\  r^  r`  rc  rf  rm  rs  ru  r{  r�  rƒ  r…  r‡  r‰  r‹  r�  r�  r‘  r“  r•  r—  r™  r�  r­  r·  rº  r¿  rÂ  rÅ  rÈ  rÍ  rÜ  rß  rá  rä  ré  rí  rñ  rô  r÷  rû  rþ  r  r  r  r  r#  r&  r)  r+  r-  r3  r:  r?  rB  rH  rK  rO  rQ  rS  r[  r^  rb  rf  rk  rm  ro  rq  rv  rx  r~  rƒ  r…  rˆ  r   r   r   Ú<module>rŒ     s  ðÝ Ý ç NÕ Nç \ôˆs�Dô ôˆIô ô
˜	ô ô�9ô ô�9ô ô
˜Iô ô7˜ô 7ô
7�yô 7ô
!˜9ô !ôH:˜Iô :ô|ˆyô ô#�ô #ô
!�ô !ôK�Iô KôB˜
ô Bô
= )ô 
=ô-�ô -ô0˜Yô ô
*?¨9ô *?ôZ?¨)ô ?ô.	+ 	ô 	+ô- Iô -ô
	% 	ô 	%ô-¨ô -ô$¨)ô $ô= iô =ô ô ô.. ô .ô"
/˜)ô 
/ô	% 	ô 	%ô- Iô -ô.˜)ô .ôq )ô qô-˜)ô -ô&˜˜dô ô%˜)ô %ô1 Iô 1ôq Iô qô˜#˜tô ô ˜ô  ô*�iô *ô$�9ô $ô�Yô ô�Iô ô'˜Yô 'ôn˜9ô nô-˜	ô -ô0$ ô $ô
˜Yô ô.˜)ô .ô(�yô (ô-�iô -ô"˜ô "ô	&˜	ô 	&ô$˜yô $ô )ô ô"¨9ô ô
Z¨	ô 
ZôT Yô Tô$N yô Nô$R iô Rô, )ô ô( 9ô ô, 9ô ô( ô ô" ô ô*
  Iô 
 ô& Iô &ô* yô ô  yô ô(˜ô ô
-˜ô -ô(0˜ô 0ôf0�Iô 0ôfˆiô ô )ô ô6
-˜	ô 
-ô& ô &ô
 9ô ô˜iô ôJ�yô Jô(" 	ô "ô
X˜Yô Xô= )ô =ô
 Iô ô"J 	ô Jô�	ô ô-˜ô -ôR�iô Rô˜ô ôM˜9ô Mô#˜yô #ô,�Yô ô(!˜iô !ô
 yô ô<˜yô ô,-¨	ô -ô
#˜9ô #ô' 9ô 'ô Yô ô>˜Iô >ô$˜)ô ô˜	ô ô	'˜9ô 	'ô:˜Yô :ô, Iô ,ô Yô ô˜yô ô,¨	ô ,ô
(˜Iô (ô"/ Yô /ô
S )ô Sô¨Iô ô
(˜9ô (ô . Iô .ô
R ô Rô¨9ô ô
�Yô ô,˜ô ,ô	ˆYô 	ô�iô ôV�yô Vô4�yô 4ô#�9õ #r   