Ë
    >È'jÛ  ã                   óÌ   — d dl mZ d dlmZ d dlmZmZmZ d dlm	Z	  G d„ de«      Z
d„ Z e«       Z edde¬	«      Zd
eddfd„Zdeeddf   fd„Zdd„Zdd„Zdd„Zdd„Zdd„Zy)é    )Ú	Generator)Úcreate_engine)ÚDeclarativeBaseÚSessionÚsessionmaker)Úget_settingsc                   ó   — e Zd Zy)ÚBaseN)Ú__name__Ú
__module__Ú__qualname__© ó    ú1/var/www/html/kelly/kelly-backend/app/database.pyr
   r
   	   s   „ Ør   r
   c                  ó$  — t        «       } | j                  }i }ddi}|j                  d«      rd|d<   nP|j                  | j                  | j
                  | j                  ¬«       | j                  dkD  r| j                  |d<   t        |fd	|i|¤ŽS )
NÚpool_pre_pingTÚsqliteFÚcheck_same_thread)Ú	pool_sizeÚmax_overflowÚpool_timeoutr   Úpool_recycleÚconnect_args)	r   Údatabase_urlÚ
startswithÚupdateÚdb_pool_sizeÚdb_max_overflowÚdb_pool_timeoutÚdb_pool_recycler   )ÚsettingsÚurlr   Úengine_kwargss       r   Ú_create_enginer$      s�   € Ü‹~€HØ
×
Ñ
€CØ€LØ*¨DÐ1€MØ
‡~�~�hÔØ,1ˆÐ(Ò)à×ÑØ×+Ñ+Ø!×1Ñ1Ø!×1Ñ1ð 	ô 	
ð
 ×#Ñ# aÒ'Ø,4×,DÑ,DˆM˜.Ñ)Ü˜ÑI¨<ÐI¸=ÑIÐIr   F)Ú
autocommitÚ	autoflushÚbindÚdbÚreturnNc                 ó$   — | j                  «        y)zKReturn a request session to the pool before slow async I/O (SMTP, uploads).N)Úclose©r(   s    r   Úrelease_db_connectionr-   #   s   € à‡H�H…Jr   c               #   ó²   K  — t        «       } 	 | –— 	 | j                  «        y # t        $ r | j                  «        ‚ w xY w# | j                  «        w xY w­w)N)ÚSessionLocalÚ	ExceptionÚrollbackr+   r,   s    r   Úget_dbr2   (   sJ   è ø€ Ü	‹€BðØ‹ð
 	�‰�
øô	 ò Ø
�‰ŒØðûð 	�‰�
üs#   ‚AŽ$ “A¤?¿A ÁAÁAc                 óÖ  — ddl m}m} t        | j                  «      j                  «       }	  || «      }d|j                  «       vry|j                  d«      D �ch c]  }|d   ’Œ	 }}d|v ry| j                  «       5 }d|v r|j                   |d«      «       n	 |j                   |d	«      «       ddd«       yc c}w # t        $ r Y yw xY w# t        $ r Y Œ(w xY w# 1 sw Y   yxY w)
zTAdd users.email_verified for existing databases (existing rows default to verified).r   ©ÚinspectÚtextÚusersNÚnameÚemail_verifiedÚ
postgresqlzWALTER TABLE users ADD COLUMN IF NOT EXISTS email_verified BOOLEAN NOT NULL DEFAULT truezFALTER TABLE users ADD COLUMN email_verified BOOLEAN NOT NULL DEFAULT 1)Ú
sqlalchemyr5   r6   Ústrr"   ÚlowerÚget_table_namesÚget_columnsr0   ÚbeginÚexecute)Úenginer5   r6   r"   ÚinspÚcÚcolsÚconns           r   Ú sync_users_email_verified_columnrG   3   sî   € ç(ä
ˆf�j‰j‹/×
Ñ
Ó
!€CðÙ�v‹ˆØ˜$×.Ñ.Ó0Ñ0ØØ#'×#3Ñ#3°GÔ#<Ó=Ñ#<˜a��&“	Ð#<ˆÐ=ð ˜4ÑØà	�‰Œ˜4Ø˜3ÑØ�L‰LÙð,óõðØ—‘ÙÐaÓbô÷ 
ˆùò >øÜò Ùðûô& ò Ùðú÷ 
ˆúsS   ­C ÁC ÁB<Á'C Á>CÂCÂ<C Ã	CÃCÃ	CÃCÃCÃCÃC(c           
      óX  — ddl m}m} 	  || «      }d|j                  «       vry|j	                  d«      D �ch c]  }|d   ’Œ	 }}dddddddœ}|j                  «       D ��cg c]  \  }}||vsŒ||f‘Œ }	}}|	sy| j                  j                  d	k(  }
| j                  «       5 }|	D ]C  \  }}|
r|j                   |d
|› d|› �«      «       Œ&	 |j                   |d|› d|› �«      «       ŒE 	 ddd«       yc c}w # t
        $ r Y yw xY wc c}}w # t
        $ r Y Œuw xY w# 1 sw Y   yxY w)z8Add user profile fields used by the user profile screen.r   r4   r7   Nr8   zVARCHAR(32)zVARCHAR(512))Úphone_numberÚaddressÚpostal_codeÚprofile_imageÚotpÚgoogle_drive_linkr:   z+ALTER TABLE users ADD COLUMN IF NOT EXISTS Ú zALTER TABLE users ADD COLUMN )r;   r5   r6   r>   r?   r0   ÚitemsÚdialectr8   r@   rA   )rB   r5   r6   rC   rD   rE   Ú	additionsr8   ÚddlÚmissingÚis_pgrF   s               r   Úsync_user_profile_columnsrV   T   sQ  € ç(ðÙ�v‹ˆØ˜$×.Ñ.Ó0Ñ0ØØ#'×#3Ñ#3°GÔ#<Ó=Ñ#<˜a��&“	Ð#<ˆÐ=ð
 &Ø!Ø$Ø'ØØ+ñ€Ið -6¯O©OÔ,=ÔRÑ,=™y˜t SÀÈTÒAQ��cŠ{Ð,=€GÑRÙØà�N‰N×Ñ <Ñ/€EØ	�‰Œ˜4Û ‰IˆD�#ÙØ—‘™TÐ$OÐPTÈvÐUVÐWZÐV[Ð"\Ó]Õ^ðØ—L‘L¡Ð(EÀdÀVÈ1ÈSÈEÐ&RÓ!SÕTñ !÷ 
ˆùò# >øÜò Ùðüó Søô !ò Ùðú÷ 
ˆúsc   ŠC< ¥C< ¸C7ÁC< Á"DÁ/DÂ$)D ÃDÃ+D Ã7C< Ã<	DÄDÄ	DÄD ÄDÄD Ä D)c                 ó  — ddl m} | j                  j                  dk(  }| j	                  «       5 }|r|j                   |d«      «       n	 |j                   |d«      «       ddd«       y# t        $ r Y Œw xY w# 1 sw Y   yxY w)z1Indexes for admin list-users ordering/pagination.r   )r6   r:   zZCREATE INDEX IF NOT EXISTS ix_users_created_at_id_desc ON users (created_at DESC, id DESC)zKCREATE INDEX IF NOT EXISTS ix_users_created_at_id ON users (created_at, id)N)r;   r6   rQ   r8   r@   rA   r0   )rB   r6   rU   rF   s       r   Úsync_users_list_indexesrX   x   s�   € åà�N‰N×Ñ <Ñ/€EØ	�‰Œ˜4ÙØ�L‰LÙð:óõðØ—‘Ùð4óô÷ 
ˆøô  ò Ùðú÷! 
ˆús)   °A;ÁA,Á,	A8Á5A;Á7A8Á8A;Á;Bc                  óp   — ddl m}  ddl m} ddlm} t
        j                  j                  t        ¬«       y )Nr   )Úmodels)Úmodels_admin)Úmodels_programme)r'   )	ÚapprZ   r[   Úapp.programmer\   r
   ÚmetadataÚ
create_allrB   )rZ   r[   r\   s      r   Úinit_dbra   ‘   s    € ÝÝ Ý.ä‡M�M×Ñ¤&ÐÕ)r   c                 óJ   — ddl m} |j                  j                  | d¬«       y )Nr   )ÚUserTrackTraceT)r'   Ú
checkfirst)Ú
app.modelsrc   Ú	__table__Úcreate)rB   rc   s     r   Úsync_user_track_traces_tablerh   ™   s   € Ý)à×Ñ×#Ñ#¨¸DÐ#ÕAr   )r)   N)Úcollections.abcr   r;   r   Úsqlalchemy.ormr   r   r   Ú
app.configr   r
   r$   rB   r/   r-   r2   rG   rV   rX   ra   rh   r   r   r   Ú<module>rl      s…   ðÝ %å $ß AÑ Aå #ô	ˆ?ô 	òJñ$ 
Ó	€Ù u¸ÀFÔK€ð˜gð ¨$ó ð
�	˜' 4¨Ð-Ñ.ó óóB!óHó2*ôBr   