Ë
    >È'jQ   ã                   ó	  — d dl Z d dlZd dlmZ d dlmZ d dlmZmZ d dl	m
Z
 d dlmZ d dl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mZ 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% d dl&m$Z' d dl(m$Z) d dl*m+Z+m,Z, d dl-m.Z.  ej^                  e0«      Z1 G d„ dejd                  «      Z3dId„Z4 e4«        dId„Z5edefd„«       Z6 e«       Z7 ede6¬«      Z8e8js                  e
dgddgdg¬«       e8ju                  e%e7jv                  ¬«       e8ju                  e)e7jv                  ¬«       e8ju                  e'e7jv                  ¬«        ee7jx                  «      Z=e=j}                  «       s- ee?«      j�                  «       j‚                  j‚                  e=z  Z=e=j…                  dd¬«       e8j‡                  e7jv                  › de7jˆ                  j‹                  d«      › � e eFe=«      ¬«      d¬ «       e8j�                  e7j�                  d!¬"«      d#„ «       ZId d$lJmKZKmLZLmMZM d d%lNmOZOmPZPmQZQmRZRmSZS d d&lTmUZU d d'lVmWZW e8j±                  d(ed!¬)«       ee«      fd*ed+efd,„«       ZYe8j±                  d-ed!¬)«       ee«      fd*ed+efd.„«       ZZe8j±                  d/ed!¬)«       ee«      fd*ed+efd0„«       Z[e8j±                  d1ed!¬)«       ee«      fd*ed+efd2„«       Z\e8j±                  d3ed!¬)«       ee«      fd*ed+efd4„«       Z]e8j±                  d5ed!¬)«       ee«      fd*ed+efd6„«       Z^e8j±                  d7ed!¬)«       ee«      fd*ed+efd8„«       Z_e8j±                  d9ed!¬)«       ee«      fd*ed+efd:„«       Z`e8j±                  d;ed!¬)«       ee«      fd*ed+efd<„«       Zae8j±                  d=ed!¬)«       ee«      fd*ed+efd>„«       Zbe8j±                  d?ed!¬)«       ee«      fd*ed+efd@„«       Zce8j±                  dAed!¬)«       ee«      fd*ed+efdB„«       Zde8j±                  dCed!¬)«       ee«      fd*ed+efdD„«       Zee8j±                  dEed!¬)«       ee«      fd*ed+efdF„«       Zfe8j±                  dGed!¬)«       ee«      fd*ed+efdH„«       Zgy)Jé    N)Úasynccontextmanager)ÚPath)ÚDependsÚFastAPI)ÚCORSMiddleware)ÚStaticFiles)ÚSession)Úget_settings)Úget_db)ÚForgotPasswordRequestÚMessageÚResetPasswordRequestÚUserTokenResponseÚVerifyEmailRequestÚVerifyOTPRequest)ÚSessionLocalÚengineÚinit_dbÚsync_user_profile_columnsÚsync_user_track_traces_tableÚsync_users_list_indexesÚ sync_users_email_verified_column)Úsync_programme_string_columns)Úrouter)Úbackfill_admin_profilesÚsync_admin_table)Úsync_admin_schemasc                   ó4   — e Zd ZdZdej
                  defd„Zy)Ú_IgnoredAccessPathFilter)z./api/v1/user/member-notifications-unread-countz/healthÚrecordÚreturnc                 ób   ‡— |j                  «       Št        ˆfd„| j                  D «       «       S )Nc              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­w©N© )Ú.0ÚpathÚmessages     €ú-/var/www/html/kelly/kelly-backend/app/main.pyÚ	<genexpr>z2_IgnoredAccessPathFilter.filter.<locals>.<genexpr>1   s   øè ø€ ÐFÑ3E¨4�t˜w”Ñ3Eùs   ƒ)Ú
getMessageÚanyÚignored_paths)Úselfr    r(   s     @r)   Úfilterz_IgnoredAccessPathFilter.filter/   s+   ø€ Ø×#Ñ#Ó%ˆÜÓF°4×3EÒ3EÓFÓFÐFÐFó    N)Ú__name__Ú
__module__Ú__qualname__r-   ÚloggingÚ	LogRecordÚboolr/   r%   r0   r)   r   r   )   s%   „ ð€Mð
G˜W×.Ñ.ð G°4ô Gr0   r   c                  óš   — t        j                  d«      } t        d„ | j                  D «       «      s| j	                  t        «       «       y y )Nzuvicorn.accessc              3   ó<   K  — | ]  }t        |t        «      –— Œ y ­wr$   )Ú
isinstancer   )r&   Úitems     r)   r*   z-_install_access_log_filter.<locals>.<genexpr>6   s   è ø€ Ð\ÑF[¸dŒz˜$Ô 8×9ÑF[ùs   ‚)r4   Ú	getLoggerr,   ÚfiltersÚ	addFilterr   )Úaccess_loggers    r)   Ú_install_access_log_filterr?   4   s?   € Ü×%Ñ%Ð&6Ó7€MÜÑ\Àm×F[ÒF[Ó\Ô\Ø×ÑÔ 8Ó :Õ;ð ]r0   c                  ó`  — t        t        «       t        «        t        t        «       t	        t        «       t        t        «       t        t        «       t        t        «       t        t        «       t        «       } 	 t        | «       | j                  «        y# | j                  «        w xY w)uO   Blocking DB bootstrap â€” run off the event loop so reload/shutdown stay clean.N)r   r   r   r   r   r   r   r   r   r   r   Úclose)Údbs    r)   Ú_run_startup_syncrC   =   sh   € ô "¤&Ô)Ü„IÜ ¤Ô(Ü$¤VÔ,ÜœfÔ%ÜœFÔ#Ü”VÔÜ”vÔÜ	‹€BðÜ Ô#à
�‰�
øˆ�‰�
ús   Á?B ÂB-Úappc                óŽ  K  — 	 t        j                  t        «      ƒ d {  –—†  	 d ­–— t        j                  d«      ƒ d {  –—†  t        j                  «        y 7 Œ<# t         j                  $ r t        j                  d«       ‚ w xY w7 ŒH# t        j                  d«      ƒ d {  –—†7   t        j                  «        w xY w­w)Nz-Startup cancelled (server reload or shutdown)r   )	ÚasyncioÚ	to_threadrC   ÚCancelledErrorÚloggerÚinfoÚsleepr   Údispose)rD   s    r)   ÚlifespanrM   O   s‘   è ø€ ðÜ×ÑÔ 1Ó2×2Ð2ðÜô �m‰m˜AÓ×ÐÜ�‰Õð 	3ùÜ×!Ñ!ò Ü�‰ÐCÔDØðúð 	ùŒg�m‰m˜AÓ×ÑÜ�‰ÕüsT   ‚C„A  A¡A ¦B «CÁBÁCÁA Á*B	Â	CÂCÂ'B*Â(CÃCzAdmin & User API)ÚtitlerM   Ú*T)Úallow_originsÚallow_credentialsÚallow_methodsÚallow_headers)Úprefix)ÚparentsÚexist_okÚ/)Ú	directoryÚuploads)ÚnameF)Úinclude_in_schemac                  ó
   — ddiS )NÚstatusÚokr%   r%   r0   r)   Úhealthr_   x   s   € à�dÐÐr0   )Úadmin_forgot_password_handlerÚadmin_reset_passwordÚadmin_verify_otp)Ú_user_forgot_password_handlerÚ_user_verification_otp_handlerÚuser_reset_passwordÚuser_verify_emailÚuser_verify_otp)Úfind_user_by_email)ÚUserRolez/v1/admin/auth/forgot-password)Úresponse_modelr[   ÚbodyrB   c              ƒ   ó6   K  — t        | |«      ƒ d {  –—† S 7 Œ­wr$   )r`   ©rk   rB   s     r)   Úadmin_forgot_password_alias_v1rn   Ž   ó   è ø€ ô
 /¨t°RÓ8×8Ð8Ð8úó   ‚’“z/v1/admin/auth/reset-passwordc                 ó   — t        | |«      S r$   )ra   rm   s     r)   Úadmin_reset_password_alias_v1rr   –   s   € ô
    bÓ)Ð)r0   z/v1/admin/auth/verify-otpc                 ó   — t        | |«      S r$   )rb   rm   s     r)   Úadmin_verify_otp_alias_v1rt   ž   s   € ô
 ˜D "Ó%Ð%r0   z/v1/user/auth/forgot-passwordc              ƒ   ó6   K  — t        | |«      ƒ d {  –—† S 7 Œ­wr$   )rc   rm   s     r)   Úuser_forgot_password_alias_v1rv   ¦   ro   rp   z/v1/user/auth/send-otpc              ƒ   ó6   K  — t        | |«      ƒ d {  –—† S 7 Œ­wr$   )rd   rm   s     r)   Úuser_send_otp_alias_v1rx   ®   s   è ø€ ô
 0°°bÓ9×9Ð9Ð9úrp   z/v1/user/auth/verify-emailc                 ó   — t        | |«      S r$   ©rf   rm   s     r)   Úuser_verify_email_alias_v1r{   ¶   ó   € ô
 ˜T 2Ó&Ð&r0   z/v1/user/auth/verify-otpc                 ó   — t        | |«      S r$   )rg   rm   s     r)   Úuser_verify_otp_alias_v1r~   ¾   s   € ô
 ˜4 Ó$Ð$r0   z/api/auth/forgot-passwordc              ƒ   óÄ   K  — t        | j                  «      }t        ||t        j                  ¬«      rt        | |«      ƒ d {  –—† S t        | |«      ƒ d {  –—† S 7 Œ7 Œ­w©N)Úrole)ÚstrÚemailrh   ri   Úadminr`   rc   ©rk   rB   rƒ   s      r)   Úauth_forgot_password_aliasr†   Æ   sN   è ø€ ô
 �—
‘
‹O€EÜ˜"˜e¬(¯.©.Õ9Ü2°4¸Ó<×<Ð<Ü.¨t°RÓ8×8Ð8ð =øØ8úó$   ‚AA ÁAÁA ÁAÁA ÁA z/api/v1/auth/forgot-passwordc              ƒ   ó6   K  — t        | |«      ƒ d {  –—† S 7 Œ­wr$   )r†   rm   s     r)   Ú!auth_forgot_password_alias_api_v1r‰   Ñ   s   è ø€ ô
 ,¨D°"Ó5×5Ð5Ð5úrp   z/api/auth/send-otpc              ƒ   óÄ   K  — t        | j                  «      }t        ||t        j                  ¬«      rt        | |«      ƒ d {  –—† S t        | |«      ƒ d {  –—† S 7 Œ7 Œ­wr€   )r‚   rƒ   rh   ri   r„   r`   rd   r…   s      r)   Úauth_send_otp_aliasr‹   Ù   sN   è ø€ ô
 �—
‘
‹O€EÜ˜"˜e¬(¯.©.Õ9Ü2°4¸Ó<×<Ð<Ü/°°bÓ9×9Ð9ð =øØ9úr‡   z/api/v1/auth/send-otpc              ƒ   ó6   K  — t        | |«      ƒ d {  –—† S 7 Œ­wr$   )r‹   rm   s     r)   Úauth_send_otp_alias_api_v1r�   ä   s   è ø€ ô
 % T¨2Ó.×.Ð.Ð.úrp   z/api/auth/verify-emailc                 ó   — t        | |«      S r$   rz   rm   s     r)   Úauth_verify_email_aliasr�   ì   r|   r0   z/api/v1/auth/verify-emailc                 ó   — t        | |«      S r$   )r�   rm   s     r)   Úauth_verify_email_alias_api_v1r‘   ô   s   € ô
 # 4¨Ó,Ð,r0   z/api/auth/verify-otpc                 ó”   — t        | j                  «      }t        ||t        j                  ¬«      rt        | |«      S t        | |«      S r€   )r‚   rƒ   rh   ri   r„   rb   rg   r…   s      r)   Úauth_verify_otp_aliasr“   ü   s;   € ô
 �—
‘
‹O€EÜ˜"˜e¬(¯.©.Õ9Ü  bÓ)Ð)Ü˜4 Ó$Ð$r0   z/api/v1/auth/verify-otpc                 ó   — t        | |«      S r$   )r“   rm   s     r)   Úauth_verify_otp_alias_api_v1r•     s   € ô
 !  rÓ*Ð*r0   )r!   N)hrF   r4   Ú
contextlibr   Úpathlibr   Úfastapir   r   Úfastapi.middleware.corsr   Úfastapi.staticfilesr   Úsqlalchemy.ormr	   Ú
app.configr
   Úapp.databaser   Úapp.schemasr   r   r   r   r   r   r   r   r   r   r   r   r   Ú(app.programme.services.programme_servicer   Úapp.routers.adminr   Úadmin_routerÚapp.routers.contactÚcontact_routerÚapp.routers.user_panelÚuser_routerÚ"app.services.admin_profile_servicer   r   Úapp.services.admin_servicer   r;   r1   rI   ÚFilterr   r?   rC   rM   ÚsettingsrD   Úadd_middlewareÚinclude_routerÚhttp_api_prefixÚcommunity_upload_dirÚ_upload_rootÚis_absoluteÚ__file__ÚresolveÚparentÚmkdirÚmountÚcommunity_uploads_url_segmentÚstripr‚   ÚgetÚhealth_url_pathr_   Úapp.routers.admin.authr`   ra   rb   Úapp.routers.user_panel.authrc   rd   re   rf   rg   Ú#app.services.password_reset_servicerh   Ú
app.modelsri   Úpostrn   rr   rt   rv   rx   r{   r~   r†   r‰   r‹   r�   r�   r‘   r“   r•   r%   r0   r)   Ú<module>r¾      s¼  ðÛ Û Ý *Ý ç $Ý 2Ý +Ý "å #Ý ÷÷ ÷÷ ñ õ SÝ 4Ý 8Ý 8ß XÝ 9ð 
ˆ×	Ñ	˜8Ó	$€ôG˜wŸ~™~ô Gó<ñ Ô óð$ ð˜ò ó ðñ ‹>€ÙÐ&°Ô:€à × Ñ ØØ�%ØØ�%Ø�%ð ô ð × Ñ �<¨×(@Ñ(@Ð Ô AØ × Ñ �; x×'?Ñ'?Ð Ô @Ø × Ñ �>¨(×*BÑ*BÐ Ô Cá�H×1Ñ1Ó2€Ø×ÑÔ!Ù˜“>×)Ñ)Ó+×2Ñ2×9Ñ9¸LÑH€LØ × Ñ ˜4¨$Ð Ô /Ø ‡	�	Ø×ÑÐ   (×"HÑ"H×"NÑ"NÈsÓ"SÐ!TÐUÙ™#˜lÓ+Ô,Ø	ð 
ô ð ‡�ˆ×	!Ñ	!°U€Ó;ñó <ð÷
ñ ÷
õ õ CÝ ð ‡�Ð
*¸7ÐV[€Ó\ñ ˜&“/ñ9Ø
ð9àò9ó ]ð9ð ‡�Ð
)¸'ÐUZ€Ó[ñ ˜&“/ñ*Ø
ð*àò*ó \ð*ð ‡�Ð
%°gÐQV€ÓWñ ˜&“/ñ&Ø
ð&àò&ó Xð&ð ‡�Ð
)¸'ÐUZ€Ó[ñ ˜&“/ñ9Ø
ð9àò9ó \ð9ð ‡�Ð
"°7Èe€ÓTñ ˜&“/ñ:Ø
ð:àò:ó Uð:ð ‡�Ð
&Ð7HÐ\a€Óbñ ˜&“/ñ'Ø
ð'àò'ó cð'ð ‡�Ð
$°WÐPU€ÓVñ ˜&“/ñ%Ø
ð%àò%ó Wð%ð ‡�Ð
%°gÐQV€ÓWñ ˜&“/ñ9Ø
ð9àò9ó Xð9ð ‡�Ð
(¸ÐTY€ÓZñ ˜&“/ñ6Ø
ð6àò6ó [ð6ð ‡�Ð
¨wÈ%€ÓPñ ˜&“/ñ:Ø
ð:àò:ó Qð:ð ‡�Ð
!°'ÈU€ÓSñ ˜&“/ñ/Ø
ð/àò/ó Tð/ð ‡�Ð
"Ð3DÐX]€Ó^ñ ˜&“/ñ'Ø
ð'àò'ó _ð'ð ‡�Ð
%Ð6GÐ[`€Óañ ˜&“/ñ-Ø
ð-àò-ó bð-ð ‡�Ð
 °ÈE€ÓRñ ˜&“/ñ%Ø
ð%àò%ó Sð%ð ‡�Ð
#°GÈu€ÓUñ ˜&“/ñ+Ø
ð+àò+ó Vñ+r0   