§
    ÔŸ’j•)  ã            
      ó.  — d 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
 ddlmZ ddlmZ  e¦   «         Z ee¦  «                             ¦   «         j        d         d	z  Zdjd„Ze                     dddge¬¦  «        e                     dddge¬¦  «        e                     dddge¬¦  «        dkd„¦   «         ¦   «         ¦   «         Ze                     dd¬¦  «        e                     dd¬¦  «        dld„¦   «         ¦   «         Ze                     dddg¬¦  «        dmd „¦   «         Ze                     d!ddge	¬"¦  «        dnd#„¦   «         Ze                     d$ddge	¬"¦  «        dnd%„¦   «         Ze                     d&e	¬'¦  «        e                     d(e	¬'¦  «        dnd)„¦   «         ¦   «         Ze                     d*e	¬'¦  «        dnd+„¦   «         Ze                     d,e	¬'¦  «        e                     d-e	¬'¦  «        dnd.„¦   «         ¦   «         Ze                     d/e	¬'¦  «        e                     d0e	¬'¦  «        e                     d1e	¬'¦  «        e                     d2e	¬'¦  «        dnd3„¦   «         ¦   «         ¦   «         ¦   «         Ze                     d4e	¬'¦  «        e                     d5e	¬'¦  «        dnd6„¦   «         ¦   «         Z e                     d7e	¬'¦  «        e                     d8e	¬'¦  «        e                     d9e	¬'¦  «        e                     d:e	¬'¦  «        dnd;„¦   «         ¦   «         ¦   «         ¦   «         Z!e                     d<e	¬'¦  «        e                     d=e	¬'¦  «        e                     d>e	¬'¦  «        dnd?„¦   «         ¦   «         ¦   «         Z"e                     d@e	¬'¦  «        e                     dAe	¬'¦  «        dndB„¦   «         ¦   «         Z#e                     dCe	¬'¦  «        e                     dDe	¬'¦  «        dndE„¦   «         ¦   «         Z$e                     dFe	¬'¦  «        e                     dGe	¬'¦  «        e                     dHe	¬'¦  «        e                     dIe	¬'¦  «        e                     dJe	¬'¦  «        e                     dKe	¬'¦  «        dndL„¦   «         ¦   «         ¦   «         ¦   «         ¦   «         ¦   «         Z%e                     dMe	¬'¦  «        e                     dNe	¬'¦  «        dndO„¦   «         ¦   «         Z&e                     dPe	¬'¦  «        e                     dQe	¬'¦  «        e                     dRe	¬'¦  «        e                     dSe	¬'¦  «        dndT„¦   «         ¦   «         ¦   «         ¦   «         Z'e                     dUe	¬'¦  «        e                     dVe	¬'¦  «        dndW„¦   «         ¦   «         Z(e                     dXe	¬'¦  «        e                     dYe	¬'¦  «        e                     dXe	¬'¦  «        e                     dYe	¬'¦  «        e                     dZe	¬'¦  «        e                     d[e	¬'¦  «        e                     d\e	¬'¦  «        dnd]„¦   «         ¦   «         ¦   «         ¦   «         ¦   «         ¦   «         ¦   «         Z)e                     d^e	¬'¦  «        e                     d_e	¬'¦  «        e                     d`e	¬'¦  «        e                     dae	¬'¦  «        e                     dbe	¬'¦  «        dndc„¦   «         ¦   «         ¦   «         ¦   «         ¦   «         Z*e                     dde	¬'¦  «        e                     dee	¬'¦  «        e                     dfe	¬'¦  «        e                     dge	¬'¦  «        dndh„¦   «         ¦   «         ¦   «         ¦   «         Z+diS )oz*Health and static asset routes for DSCons.é    )Úannotations)ÚPath)Ú	APIRouter)ÚFileResponseÚHTMLResponseÚJSONResponse©ÚHealthResponse)ÚProjectManagementServiceé   ÚstaticÚfilenameÚstrÚreturnr   c                óh   — t           | z                       d¬¦  «        }t          |ddddœ¬¦  «        S )zSRead one static HTML page from the shared static directory with zero-cache headers.zutf-8)Úencodingú.no-cache, no-store, must-revalidate, max-age=0úno-cacheÚ0©zCache-ControlÚPragmaÚExpires)ÚcontentÚheaders)Ú
STATIC_DIRÚ	read_textr   )r   r   s     ú3C:\Projects\DSCons\app\api\routers\health_static.pyÚ_read_static_pager      sJ   € å˜HÑ$×/Ò/¸Ð/ÑAÔA€GÝØàMØ Øð
ð 
ðñ ô ð ó    z/healthÚGETÚHEAD)ÚmethodsÚresponse_modelz/api/healthz/api/v1/healthr
   c                 ó   — t          ¦   «         S )zSimple liveness check endpoint.r	   © r   r   Úhealth_checkr&      s   € õ ÑÔÐr   z/favicon.icoF)Úinclude_in_schemaz/favicon.svgr   c                 ó\   — t           dz  } t          t          | ¦  «        dddddœ¬¦  «        S )z.Serve company favicon with zero-cache headers.zfavicon.svgzimage/svg+xmlr   r   r   r   )Ú
media_typer   )r   r   r   )Úfav_paths    r   Úfavicon_router+   (   sD   € õ ˜MÑ)€HÝÝˆH‰ŒØ"àMØ Øð
ð 
ðñ ô ð r   z/health/readiness)r"   r   c            
     ó‚  — t           dz                       ¦   «         t           dz                       ¦   «         t           dz                       ¦   «         t           dz                       ¦   «         t           dz                       ¦   «         t           dz                       ¦   «         t           dz                       ¦   «         t           dz                       ¦   «         t           d	z                       ¦   «         d
œ	} t          ¦   «         j        }|                     ¦   «         }d}d}|r«	 |                     ¦   «         5 }|                     ¦   «         5 }|                     d¦  «         |                     ¦   «          ddd¦  «         n# 1 swxY w Y   ddd¦  «         n# 1 swxY w Y   d}n&# t          $ r}t          |¦  «        }Y d}~nd}~ww xY wddi||r|nd|dœt          |                      ¦   «         ¦  «        | dœdœ}|d         d         o|d         d         o|r|nd}	|	rdnd}
t          |
|	rdnd|dœ¬¦  «        S )z=Return dependency readiness for PostgreSQL and static assets.ú
index.htmlú
login.htmlúlanding.htmlúreadiness_dashboard.htmlúemployee_logs_dashboard.htmlúequipment_dashboard.htmlú!project_management_dashboard.htmlúdocuments_dashboard.htmlúagent_management_dashboard.html)	ÚindexÚloginÚlandingÚreadiness_dashboardÚemployee_logs_dashboardÚequipment_dashboardÚproject_management_dashboardÚdocuments_dashboardÚagent_management_dashboardFNzSELECT 1TÚready)Úenabledr?   Úerror)r?   Úfiles)ÚapplicationÚpostgresÚstatic_assetsrC   rE   éÈ   i÷  Údegraded)ÚstatusÚchecks)Ústatus_coder   )r   Úexistsr   Ú_postgres_clientÚ
is_enabledÚget_connectionÚcursorÚexecuteÚfetchoneÚ	Exceptionr   ÚallÚvaluesr   )Ústatic_filesÚpostgres_clientÚpostgres_enabledÚpostgres_readyÚpostgres_errorÚ
connectionrO   ÚexcrI   Úoverall_readyrJ   s              r   Úreadiness_checkr]   8   sò  € õ ˜|Ñ+×3Ò3Ñ5Ô5Ý˜|Ñ+×3Ò3Ñ5Ô5Ý Ñ/×7Ò7Ñ9Ô9Ý *Ð-GÑ G×OÒOÑQÔQåÐ7Ñ7ß
Š&‰(Œ(Ý *Ð-GÑ G×OÒOÑQÔQåÐ<Ñ<ß
Š&‰(Œ(Ý *Ð-GÑ G×OÒOÑQÔQåÐ:Ñ:ß
Š&‰(Œ(ðð €Lõ$ /Ñ0Ô0ÔA€OØ&×1Ò1Ñ3Ô3ÐØ€NØ!%€Nàð &ð	&Ø ×/Ò/Ñ1Ô1ð &°ZØ×&Ò&Ñ(Ô(ð &¨FØ—N’N :Ñ.Ô.Ð.Ø—O’OÑ%Ô%Ð%ð&ð &ð &ñ &ô &ð &ð &ð &ð &ð &ð &øøøð &ð &ð &ð &ð&ð &ð &ñ &ô &ð &ð &ð &ð &ð &ð &øøøð &ð &ð &ð &ð "ˆNˆNøÝð 	&ð 	&ð 	&Ý  ™XœXˆNˆNˆNˆNˆNˆNøøøøð	&øøøð   �à'Ø'7ÐB�^�^¸UØ#ð
ð 
õ ˜×,Ò,Ñ.Ô.Ñ/Ô/Ø!ð
ð 
ðð €Fð 	ˆ}Ô˜gÔ&ð 	;Ø�?Ô# GÔ,ð	;à/Ð9ˆ^ˆ^°Tð ð 'Ð/�#�#¨C€KÝØà!.Ð>�g�g°JØð
ð 
ðñ ô ð s`   Ä%F) Ä9FÅ*FÅ8FÆF	ÆFÆF	ÆFÆF) ÆFÆF) Æ"FÆ#F) Æ)
GÆ3GÇGú/)r"   Úresponse_classc                 ó    — t          d¦  «        S )z;Serve the public corporate landing page at the root domain.r/   ©r   r%   r   r   Úhomepagerb   x   ó   € õ ˜^Ñ,Ô,Ð,r   z/landingc                 ó    — t          d¦  «        S )z)Serve the company corporate landing page.r/   ra   r%   r   r   Úlanding_pagere   ~   rc   r   z
/dashboard)r_   z/erpc                 ó    — t          d¦  «        S )z7Serve the main enterprise ERP Command Center dashboard.r-   ra   r%   r   r   Úerp_dashboardrg   „   s   € õ ˜\Ñ*Ô*Ð*r   z/loginc                 ó    — t          d¦  «        S )z0Serve the Google Auth and enterprise login page.r.   ra   r%   r   r   Ú
login_pageri   ‹   s   € õ ˜\Ñ*Ô*Ð*r   z/dashboard/readinessz
/readinessc                 ó    — t          d¦  «        S )z&Serve the dossier readiness dashboard.r0   ra   r%   r   r   r9   r9   ‘   ó   € õ Ð7Ñ8Ô8Ð8r   z/dashboard/employeesz/dashboard/site-diaryz
/employeesz/site-diaryc                 ó    — t          d¦  «        S )z7Serve the enterprise HRM and site operations dashboard.r1   ra   r%   r   r   r:   r:   ˜   s   € õ Ð;Ñ<Ô<Ð<r   z/dashboard/equipmentz
/equipmentc                 ó    — t          d¦  «        S )zHServe the enterprise machinery, vehicles and fleet management dashboard.r2   ra   r%   r   r   r;   r;   ¡   rk   r   z/dashboard/projectsz/dashboard/wbsz	/projectsz/wbsc                 ó    — t          d¦  «        S )z'Serve the project management dashboard.r3   ra   r%   r   r   r<   r<   ¨   ó   € õ Ð@ÑAÔAÐAr   z/dashboard/documentsz
/documentsz/documents-dashboardc                 ó    — t          d¦  «        S )z3Serve the enterprise document management dashboard.r4   ra   r%   r   r   r=   r=   ±   s   € õ
 Ð7Ñ8Ô8Ð8r   z/dashboard/usersz/usersc                 ó    — t          d¦  «        S )z8Serve the user management and role assignment dashboard.zusers_dashboard.htmlra   r%   r   r   Úusers_dashboardrr   ¹   s   € õ Ð3Ñ4Ô4Ð4r   z/dashboard/invoicesz	/invoicesc                 ó    — t          d¦  «        S )z<Serve the enterprise e-invoice and tax management dashboard.zinvoices_dashboard.htmlra   r%   r   r   Úinvoices_dashboardrt   À   ó   € õ Ð6Ñ7Ô7Ð7r   z/dashboard/customersz/dashboard/partnersz/dashboard/vendorsz	/partnersz
/customersz/vendorsc                 ó    — t          d¦  «        S )zIServe the enterprise customers, partners and vendor management dashboard.zpartners_dashboard.htmlra   r%   r   r   Úpartners_dashboardrw   Ç   s   € õ Ð6Ñ7Ô7Ð7r   z/dashboard/zalo_crmz	/zalo-crmc                 ó    — t          d¦  «        S )z$Serve the Zalo CRM module dashboard.zzalo_crm_dashboard.htmlra   r%   r   r   Úzalo_crm_dashboardry   Ò   ru   r   z/dashboard/war-roomz/dashboard/financez	/war-roomz/financec                 ó    — t          d¦  «        S )zEServe the executive financial war room and cashflow runway dashboard.z!financial_war_room_dashboard.htmlra   r%   r   r   Úfinancial_war_room_dashboardr{   Ù   ro   r   z/dashboard/site-diary-mobilez	/site-pwac                 ó    — t          d¦  «        S )z9Serve the mobile site diary and material requisition PWA.zsite_diary_mobile.htmlra   r%   r   r   Úsite_diary_mobile_pager}   â   s   € õ Ð5Ñ6Ô6Ð6r   z/dashboard/agent-modelsz/dashboard/agentsz/dashboard/dhsz/agent-modelsz/dhsc                 ó    — t          d¦  «        S )z]Serve the enterprise AI Agent Management, DeepSeek Harness (DHS) & Model Benchmark dashboard.r5   ra   r%   r   r   Úagent_models_dashboardr   é   s   € õ Ð>Ñ?Ô?Ð?r   z/dashboard/material-pricesz$/dashboard/material-price-comparisonz/material-price-comparisonz/material-pricesz/state-pricesc                 ó    — t          d¦  «        S )z`Serve the State vs Market Material Price Comparison and Bidding Profit/Loss Benchmark dashboard.zmaterial_price_comparison.htmlra   r%   r   r   Úmaterial_price_comparison_pager�   õ   s   € õ Ð=Ñ>Ô>Ð>r   z/dashboard/drawing-takeoffz/dashboard/takeoffz/drawing-takeoffz/takeoffc                 ó    — t          d¦  «        S )z<Serve the AI Drawing Takeoff & Automated BoQ Extraction Hub.zdrawing_takeoff_dashboard.htmlra   r%   r   r   Údrawing_takeoff_pagerƒ   ÿ   s   € õ Ð=Ñ>Ô>Ð>r   N)r   r   r   r   )r   r
   )r   r   )r   r   )r   r   ),Ú__doc__Ú
__future__r   Úpathlibr   Úfastapir   Úfastapi.responsesr   r   r   Úapp.models.schemasr
   Ú'app.services.project_management_servicer   ÚrouterÚ__file__ÚresolveÚparentsr   r   Ú	api_router&   Úgetr+   r]   rb   re   rg   ri   r9   r:   r;   r<   r=   rr   rt   rw   ry   r{   r}   r   r�   rƒ   r%   r   r   ú<module>r‘      st	  ðØ 0Ð 0à "Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ð Ð à Ð Ð Ð Ð Ð Ø FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ Fà -Ð -Ð -Ð -Ð -Ð -Ø LÐ LÐ LÐ LÐ LÐ Là	ˆ‰Œ€ØˆT�(‰^Œ^×#Ò#Ñ%Ô%Ô-¨aÔ0°8Ñ;€
ð
ð 
ð 
ð 
ð ×Ò�) e¨V _À^ÐÑTÔTØ×Ò�-¨%°¨ÈÐÑXÔXØ×ÒØ˜u f˜o¸nð ñ ô ðð ð ñô ñ YÔXñ UÔTð
ð
 ‡‚ˆN¨e€Ñ4Ô4Ø‡‚ˆN¨e€Ñ4Ô4ðð ð ñ 5Ô4ñ 5Ô4ðð ×ÒÐ%°°v¨ÐÑ?Ô?ð<ð <ð <ñ @Ô?ð<ð~ ×Ò�#  v˜¸|ÐÑLÔLð-ð -ð -ñ MÔLð-ð
 ×Ò�* u¨f oÀlÐÑSÔSð-ð -ð -ñ TÔSð-ð
 ‡‚ˆL¨€Ñ6Ô6Ø‡‚ˆF <€Ñ0Ô0ð+ð +ð +ñ 1Ô0ñ 7Ô6ð+ð
 ‡‚ˆH \€Ñ2Ô2ð+ð +ð +ñ 3Ô2ð+ð
 ‡‚Ð"°<€Ñ@Ô@Ø‡‚ˆL¨€Ñ6Ô6ð9ð 9ð 9ñ 7Ô6ñ AÔ@ð9ð
 ‡‚Ð"°<€Ñ@Ô@Ø‡‚Ð#°L€ÑAÔAØ‡‚ˆL¨€Ñ6Ô6Ø‡‚ˆM¨,€Ñ7Ô7ð=ð =ð =ñ 8Ô7ñ 7Ô6ñ BÔAñ AÔ@ð=ð
 ‡‚Ð"°<€Ñ@Ô@Ø‡‚ˆL¨€Ñ6Ô6ð9ð 9ð 9ñ 7Ô6ñ AÔ@ð9ð
 ‡‚Ð!°,€Ñ?Ô?Ø‡‚Ð¨\€Ñ:Ô:Ø‡‚ˆK¨€Ñ5Ô5Ø‡‚ˆF <€Ñ0Ô0ðBð Bð Bñ 1Ô0ñ 6Ô5ñ ;Ô:ñ @Ô?ðBð
 ‡‚Ð"°<€Ñ@Ô@Ø‡‚ˆL¨€Ñ6Ô6Ø‡‚Ð"°<€Ñ@Ô@ð9ð 9ð 9ñ AÔ@ñ 7Ô6ñ AÔ@ð9ð
 ‡‚Ð¨|€Ñ<Ô<Ø‡‚ˆH \€Ñ2Ô2ð5ð 5ð 5ñ 3Ô2ñ =Ô<ð5ð
 ‡‚Ð!°,€Ñ?Ô?Ø‡‚ˆK¨€Ñ5Ô5ð8ð 8ð 8ñ 6Ô5ñ @Ô?ð8ð
 ‡‚Ð"°<€Ñ@Ô@Ø‡‚Ð!°,€Ñ?Ô?Ø‡‚Ð °€Ñ>Ô>Ø‡‚ˆK¨€Ñ5Ô5Ø‡‚ˆL¨€Ñ6Ô6Ø‡‚ˆJ |€Ñ4Ô4ð8ð 8ð 8ñ 5Ô4ñ 7Ô6ñ 6Ô5ñ ?Ô>ñ @Ô?ñ AÔ@ð8ð
 ‡‚Ð!°,€Ñ?Ô?Ø‡‚ˆK¨€Ñ5Ô5ð8ð 8ð 8ñ 6Ô5ñ @Ô?ð8ð
 ‡‚Ð!°,€Ñ?Ô?Ø‡‚Ð °€Ñ>Ô>Ø‡‚ˆK¨€Ñ5Ô5Ø‡‚ˆJ |€Ñ4Ô4ðBð Bð Bñ 5Ô4ñ 6Ô5ñ ?Ô>ñ @Ô?ðBð
 ‡‚Ð*¸<€ÑHÔHØ‡‚ˆK¨€Ñ5Ô5ð7ð 7ð 7ñ 6Ô5ñ IÔHð7ð
 ‡‚Ð%°l€ÑCÔCØ‡‚Ð°€Ñ=Ô=Ø‡‚Ð%°l€ÑCÔCØ‡‚Ð°€Ñ=Ô=Ø‡‚Ð¨\€Ñ:Ô:Ø‡‚ˆO¨L€Ñ9Ô9Ø‡‚ˆF <€Ñ0Ô0ð@ð @ð @ñ 1Ô0ñ :Ô9ñ ;Ô:ñ >Ô=ñ DÔCñ >Ô=ñ DÔCð@ð
 ‡‚Ð(¸€ÑFÔFØ‡‚Ð2À<€ÑPÔPØ‡‚Ð(¸€ÑFÔFØ‡‚Ð¨|€Ñ<Ô<Ø‡‚ˆO¨L€Ñ9Ô9ð?ð ?ð ?ñ :Ô9ñ =Ô<ñ GÔFñ QÔPñ GÔFð
?ð
 ‡‚Ð(¸€ÑFÔFØ‡‚Ð °€Ñ>Ô>Ø‡‚Ð¨|€Ñ<Ô<Ø‡‚ˆJ |€Ñ4Ô4ð?ð ?ð ?ñ 5Ô4ñ =Ô<ñ ?Ô>ñ GÔFð?ð ?ð ?r   