Ë
    |Ñj!  ã                   ó"  — d dl Z d dlmZ d dlmZ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  G d„ dee j
                  «      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)é    N)Údatetime)ÚBooleanÚDateTimeÚEnumÚ
ForeignKeyÚIntegerÚStringÚfunc)ÚMappedÚmapped_columnÚrelationship)ÚBasec                   ó   — e Zd ZdZdZy)ÚUserRoleÚadminÚuserN)Ú__name__Ú
__module__Ú__qualname__r   r   © ó    ú//var/www/html/kelly/kelly-backend/app/models.pyr   r   
   s   „ Ø€EØ�Dr   r   c                   óÒ  — e Zd ZU dZ edd¬«      Zee   ed<    e e	d«      ddd¬«      Z
ee   ed<    e e	d«      d¬	«      Zee   ed
<    e e	d«      d¬«      Zee   ed<    e e	d«      d¬	«      Zeedz     ed<    e e	d«      d¬	«      Zeedz     ed<    e e	d«      d¬	«      Zeedz     ed<    e e	d«      d¬	«      Zeedz     ed<    e ee«      dej(                  ¬«      Zee   ed<    eed¬«      Zee   ed<    eedd¬«      Zee   ed<    e e	d«      d¬	«      Zeedz     ed<    e e	d«      d¬	«      Zeedz     ed<    e edd¬«      d¬	«      Zeedz     ed<    e ed d¬«      d¬	«      Zeedz     ed!<    e ed¬"«      d¬	«      Z ee!dz     ed#<    e ed¬"«       e"jF                  «       ¬$«      Z$ee!   ed%<    e ed¬"«       e"jF                  «        e"jF                  «       ¬&«      Z%ee!   ed'<    e&d(d)d*¬+«      Z'ee(d(      ed,<    e&d-d)dd*¬.«      Z)ed/   ed0<    e&d1d)dd*¬.«      Z*ed2   ed3<    e&d4eg¬5«      Z+ed6   ed7<    e&d8eg¬5«      Z,ed9   ed:<   y);ÚUserÚusersT©Úprimary_keyÚindexÚidéÿ   F)Úuniquer   ÚnullableÚemail©r"   Úhashed_passwordÚ ©ÚdefaultÚ	full_nameé    NÚphone_numberé   ÚaddressÚpostal_codeÚprofile_image©r"   r(   ÚroleÚ	is_active©r(   r"   Úemail_verifiedÚotpÚgoogle_drive_linkúprogramme_sessions.idzSET NULL©ÚondeleteÚprogramme_session_idúprogramme_assessments.idÚprogramme_assessment_id©ÚtimezoneÚlast_active_at©Úserver_defaultÚ
created_at©rA   ÚonupdateÚ
updated_atÚPasswordResetTokenr   zall, delete-orphan)Úback_populatesÚcascadeÚpassword_resetsÚAdmin)rG   ÚuselistrH   zAdmin | NoneÚadmin_profileÚUserRegisterStepzUserRegisterStep | NoneÚregister_stepÚProgrammeSession)Úforeign_keyszProgrammeSession | NoneÚprogramme_sessionÚProgrammeAssessmentzProgrammeAssessment | NoneÚprogramme_assessment)-r   r   r   Ú__tablename__r   r   r   ÚintÚ__annotations__r	   r#   Ústrr%   r)   r+   r-   r.   r/   r   r   r   r1   r   r2   Úboolr4   r5   r6   r   r:   r<   r   r?   r   r
   ÚnowrB   rE   r   rI   ÚlistrL   rN   rQ   rS   r   r   r   r   r      sú  … Ø€Má#°¸DÔA€Bˆˆs‰ÓAÙ&¡v¨c£{¸4ÀtÐV[Ô\€Eˆ6�#‰;Ó\Ù#0±¸³ÀuÔ#M€O�V˜C‘[ÓMÙ*©6°#«;ÀÔC€Iˆv�c‰{ÓCÙ'4±V¸B³ZÈ$Ô'O€L�&˜˜t™Ñ$ÓOÙ"/±°s³ÀdÔ"K€GˆV�C˜$‘JÑÓKÙ&3±F¸2³JÈÔ&N€K�˜˜d™
Ñ#ÓNÙ(5±f¸S³kÈDÔ(Q€M�6˜# ™*Ñ%ÓQÙ*©4°«>ÀEÐS[×S`ÑS`Ôa€Dˆ&�Ñ
ÓaÙ+¨G¸TÔB€Iˆv�d‰|ÓBÙ#0°À%ÐRWÔ#X€N�F˜4‘LÓXÙ+©F°2«JÀÔF€Cˆ��d‘
Ñ	ÓFÙ,9¹&À»+ÐPTÔ,UÐ�v˜c D™jÑ)ÓUÙ/<ÙÐ*°ZÔ@Øô0Ð˜&  t¡Ñ,ó ñ 3@ÙÐ-¸
ÔCØô3Ð˜V C¨$¡JÑ/ó ñ /<¹HÈdÔ<SÐ^bÔ.c€N�F˜8 d™?Ñ+ÓcÙ#0±À4Ô1HÐYaÐY]×YaÑYaÓYcÔ#d€J��xÑ ÓdÙ#0Ù˜$Ô°°·±³
ÀXÀTÇXÁXÃZô$€J��xÑ ó ñ ;GØ¨VÐ=Qô;€O�V˜DÐ!5Ñ6Ñ7ó ñ -9Ø °Ð?Sô-€M�6˜.Ñ)ó ñ 8DØ¨6¸5ÐJ^ô8€M�6Ð3Ñ4ó ñ <HØÐ*>Ð)?ô<Ð�vÐ7Ñ8ó ñ BNØÐ-DÐ,EôBÐ˜&Ð!=Ñ>ô r   r   c                   óX  — e Zd ZU dZdZ edd¬«      Zee   e	d<    e e
dd¬«      dd	d¬
«      Zee   e	d<    e ed«      dd	¬«      Zee   e	d<    e ed«      dd	¬«      Zee   e	d<    e ed«      d¬«      Zeedz     e	d<    e ed«      d	d¬«      Zee   e	d<    e ed«      d¬«      Zeedz     e	d<    e ed¬«       ej*                  «       ¬«      Zee   e	d<    e ed¬«       ej*                  «        ej*                  «       ¬«      Zee   e	d<    edd ¬!«      Zed   e	d"<   y)#rJ   z;Admin profile details (separate from auth fields on users).r   Tr   r   úusers.idÚCASCADEr8   F©r!   r"   r   Úuser_idé€   r&   r3   Ú
first_nameÚ	last_namer*   r$   Nr+   r    ©r"   r   r#   r,   r/   r=   r@   rB   rC   rE   r   rL   ©rG   r   )r   r   r   Ú__doc__rT   r   r   r   rU   rV   r   r_   r	   ra   rW   rb   r+   r#   r/   r   r
   rY   rB   r   rE   r   r   r   r   r   rJ   rJ   >   sE  … ÙEà€Má#°¸DÔA€Bˆˆs‰ÓAÙ(Ù�:¨	Ô2¸4È%ÐW[ô€GˆV�C‰[ó ñ ,©F°3«KÀÈeÔT€J��s‘ÓTÙ*©6°#«;ÀÈUÔS€Iˆv�c‰{ÓSÙ'4±V¸B³ZÈ$Ô'O€L�&˜˜t™Ñ$ÓOÙ&¡v¨c£{¸UÈ$ÔO€Eˆ6�#‰;ÓOÙ(5±f¸S³kÈDÔ(Q€M�6˜# ™*Ñ%ÓQÙ#0±À4Ô1HÐYaÐY]×YaÑYaÓYcÔ#d€J��xÑ ÓdÙ#0Ù˜$Ô°°·±³
ÀXÀTÇXÁXÃZô$€J��xÑ ó ñ (¨¸ÔO€Dˆ&�‰.ÔOr   rJ   c                   ób  — e Zd ZU dZ ed¬«      Zee   ed<    e e	dd¬«      d¬	«      Z
ee   ed
<    e ed«      d¬	«      Zee   ed<    e ed¬«      d¬	«      Zee   ed<    eed¬«      Zee   ed<    e ed¬«       ej*                  «       ¬«      Zee   ed<    edd¬«      Zed   ed<   y)rF   Úpassword_reset_tokensT©r   r   r\   r]   r8   Fr$   r_   r    Úotp_hashr=   Ú
expires_atr'   Úusedr@   rB   r   rI   rd   r   N)r   r   r   rT   r   r   r   rU   rV   r   r_   r	   ri   rW   r   rj   r   r   rk   rX   r
   rY   rB   r   r   r   r   r   rF   rF   T   s¿   … Ø+€Má#°Ô5€Bˆˆs‰Ó5Ù(©°JÈÔ)SÐ^cÔd€GˆV�C‰[ÓdÙ)©&°«+ÀÔF€Hˆf�S‰kÓFÙ#0±À4Ô1HÐSXÔ#Y€J��xÑ ÓYÙ& w¸Ô>€Dˆ&�‰,Ó>Ù#0±À4Ô1HÐYaÐY]×YaÑYaÓYcÔ#d€J��xÑ Ódá'¨Ð?PÔQ€Dˆ&�‰.ÔQr   rF   c                   ó*  — e Zd ZU dZ edd¬«      Zee   ed<    e e	dd¬«      ddd¬	«      Z
ee   ed
<    eed¬«      Zeedz     ed<    e ed«      d¬«      Zeedz     ed<    eed¬«      Zeedz     ed<    e ed«      d¬«      Zeedz     ed<    eed¬«      Zeedz     ed<    e ed«      d¬«      Zeedz     ed<    eed¬«      Zeedz     ed<    e ed«      d¬«      Zeedz     ed<    e ed«      dd¬«      Zee   ed<    eedd¬«      Zee   ed<    e ed¬«       ej8                  «       ¬«      Zee   ed<    e ed¬«       ej8                  «        ej8                  «       ¬«      Zee   ed<    e d d!¬"«      Z!ed    ed#<   y)$rM   Úuser_register_stepsTr   r   r\   r]   r8   Fr^   r_   r$   NÚlevel_idr    Ú
level_nameÚ	module_idÚmodule_nameÚweek_idÚ	week_nameÚ
session_idÚsession_namer*   Úlevelr3   Úcurrent_stepÚis_completedr=   r@   rB   rC   rE   r   rN   rd   r   )"r   r   r   rT   r   r   r   rU   rV   r   r_   r   rn   r	   ro   rW   rp   rq   rr   rs   rt   ru   rw   r   rx   rX   r   r
   rY   rB   r   rE   r   r   r   r   r   rM   rM   a   sÉ  … Ø)€Má#°¸DÔA€Bˆˆs‰ÓAÙ(Ù�:¨	Ô2¸4È%ÐW[ô€GˆV�C‰[ó ñ $1°À4Ô#H€Hˆf�S˜4‘ZÑ ÓHÙ%2±6¸#³;ÈÔ%N€J��s˜T‘zÑ"ÓNÙ$1°'ÀDÔ$I€Iˆv�c˜D‘jÑ!ÓIÙ&3±F¸3³KÈ$Ô&O€K�˜˜d™
Ñ#ÓOÙ"/°À$Ô"G€GˆV�C˜$‘JÑÓGÙ$1±&¸³+ÈÔ$M€Iˆv�c˜D‘jÑ!ÓMÙ%2°7ÀTÔ%J€J��s˜T‘zÑ"ÓJÙ'4±V¸C³[È4Ô'P€L�&˜˜t™Ñ$ÓPÙ -©f°R«jÀ'ÐTYÔ Z€L�&˜‘+ÓZÙ!.¨wÀÐPUÔ!V€L�&˜‘,ÓVÙ#0±À4Ô1HÐYaÐY]×YaÑYaÓYcÔ#d€J��xÑ ÓdÙ#0Ù˜$Ô°°·±³
ÀXÀTÇXÁXÃZô$€J��xÑ ó ñ (¨¸ÔO€Dˆ&�‰.ÔOr   rM   c                   ó~   — e Zd ZU dZdZ e edd¬«      d¬«      Zee	   e
d<    e ed	d¬«      d¬«      Zee	   e
d
<   y)ÚUserCompletedAssessmentzCAssessment milestones marked completed for user programme progress.Úuser_completed_assessmentsr\   r]   r8   Trh   r_   r;   Úassessment_idN)r   r   r   re   rT   r   r   r_   r   rU   rV   r|   r   r   r   rz   rz   z   sJ   … ÙMà0€Má(©°JÈÔ)SÐaeÔf€GˆV�C‰[ÓfÙ!.ÙÐ-¸	ÔBÐPTô"€M�6˜#‘;ô r   rz   c                   ó~   — e Zd ZU dZdZ e edd¬«      d¬«      Zee	   e
d<    e ed	d¬«      d¬«      Zee	   e
d
<   y)ÚUserCompletedSessionz5Session milestones when a session has no assessments.Úuser_completed_sessionsr\   r]   r8   Trh   r_   r7   rt   N)r   r   r   re   rT   r   r   r_   r   rU   rV   rt   r   r   r   r~   r~   …   sI   … Ù?à-€Má(©°JÈÔ)SÐaeÔf€GˆV�C‰[ÓfÙ+ÙÐ*°YÔ?ÈTô€J��s‘ô r   r~   c                   ó¼  — e Zd ZU dZdZ edd¬«      Zee   e	d<    e e
dd¬«      d	d¬
«      Zee   e	d<    eed¬«      Zeedz     e	d<    e ed«      d¬«      Zeedz     e	d<    e ed«      d¬«      Zeedz     e	d<    eed¬«      Zeedz     e	d<    e ed«      d¬«      Zeedz     e	d<    e ed«      d¬«      Zeedz     e	d<    eed¬«      Zeedz     e	d<    e ed«      d¬«      Zeedz     e	d<    eed¬«      Zeedz     e	d<    eedd¬
«      Zeedz     e	d<    e ed«      d¬«      Zeedz     e	d<    eed¬«      Zeedz     e	d<    eedd¬
«      Zeedz     e	d<    e ed«      d¬«      Zeedz     e	d<    e ed«      d	d¬«      Zee   e	d <    eed	d	¬!«      Zee    e	d"<    e e!d¬#«       e"jF                  «       ¬$«      Z$ee%   e	d%<   y)&ÚUserTrackTraceuL   One row per track click â€” assessment/session completed on the Tracks page.Úuser_track_tracesTr   r   r\   r]   r8   Frc   r_   r$   Nrn   é@   Ú
level_slugr    ro   rp   Úmodule_kindrq   rr   rs   Ú
week_indexrt   ru   Úsession_numberr|   Úassessment_titleÚassessment_completedr0   Úactionr3   Úsession_fully_completedr=   r@   rB   )&r   r   r   re   rT   r   r   r   rU   rV   r   r_   r   rn   r	   r„   rW   ro   rp   r…   rq   rr   rs   r†   rt   ru   r‡   r|   rˆ   rŠ   r   r‹   rX   r   r
   rY   rB   r   r   r   r   r�   r�   �   s0  … ÙVà'€Má#°¸DÔA€Bˆˆs‰ÓAÙ(Ù�:¨	Ô2¸UÈ$ô€GˆV�C‰[ó ñ $1°À4Ô#H€Hˆf�S˜4‘ZÑ ÓHÙ%2±6¸"³:ÈÔ%M€J��s˜T‘zÑ"ÓMÙ%2±6¸#³;ÈÔ%N€J��s˜T‘zÑ"ÓNÙ$1°'ÀDÔ$I€Iˆv�c˜D‘jÑ!ÓIÙ&3±F¸2³JÈÔ&N€K�˜˜d™
Ñ#ÓNÙ&3±F¸3³KÈ$Ô&O€K�˜˜d™
Ñ#ÓOÙ"/°À$Ô"G€GˆV�C˜$‘JÑÓGÙ$1±&¸³+ÈÔ$M€Iˆv�c˜D‘jÑ!ÓMÙ%2°7ÀTÔ%J€J��s˜T‘zÑ"ÓJÙ%2°7ÀTÐQUÔ%V€J��s˜T‘zÑ"ÓVÙ'4±V¸C³[È4Ô'P€L�&˜˜t™Ñ$ÓPÙ)6°wÈÔ)N€N�F˜3 ™:Ñ&ÓNÙ(5°gÈÐTXÔ(Y€M�6˜# ™*Ñ%ÓYÙ+8¹À»ÈtÔ+TÐ�f˜S 4™ZÑ(ÓTÙ'©¨r«
¸UÐLbÔc€FˆF�3‰KÓcÙ,9¸'È5Ð[`Ô,aÐ˜V D™\ÓaÙ#0±À4Ô1HÐYaÐY]×YaÑYaÓYcÔ#d€J��xÑ Ôdr   r�   )Úenumr   Ú
sqlalchemyr   r   r   r   r   r	   r
   Úsqlalchemy.ormr   r   r   Úapp.databaser   rW   r   r   rJ   rF   rM   rz   r~   r�   r   r   r   Ú<module>r�      sŒ   ðÛ Ý ç Q× QÑ Qß >Ñ >å ôˆs�D—I‘Iô ô
,ˆ4ô ,ô^PˆDô Pô,
R˜ô 
RôP�tô Pô2˜dô ô˜4ô ôe�Tõ er   