
    h*?                        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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 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! 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- d dl.m/Z/ d dl0m1Z1 d dl2m3Z3 d dl4m5Z5 d dl6m7Z7 d dl8m9Z9 d dl:m;Z; d dl<m=Z= d dl>m?Z? d d l@mAZA d d!lBmCZC d d"lDmEZE d d#lFmGZG d d$lHmIZI d d%lJmKZK d d&lLmMZM d d'lNmOZO d d(lPmQZQ d d)lRmSZS d d*lTmUZU d d+lVmWZW d d,lXmYZY d d-lZm[Z[ d d.l\m]Z] d d/l^m_Z_ d d0l`maZa d d1lbmcZc d d2ldmeZe d d3lfmgZg d d4lhmiZi d d5ljmkZk d d6llmmZm d d7lnmoZo d d8lpmqZq d d9lrmsZs d d:ltmuZu d d;lvmwZw d d<lxmyZy d d=lzm{Z{ d d>l|m}Z} d d?l~mZ d d@lmZ d dAlmZ d dBlmZ d dClmZmZmZmZmZ d dDlmZ  e       ZedEefdF       Z eej                  ej                   ej"                  edGH      Zej'                  dI      dJe	dKedLe
fdM       Zej+                  edNgdGdNgdNgdNgO       ej-                  edPdQgR       ej-                  edPdSgR       ej-                  edPdTgR       ej-                  edPdUgR       ej-                  edPdVgR       ej-                  e!dPdWgR       ej-                  e#dPdXgR       ej-                  e%dPdYgR       ej-                  e'dPdZgR       ej-                  e)dPd[gR       ej-                  e+dPd\gR       ej-                  e-dPd]gR       ej-                  e/dPd^gR       ej-                  e1dPd_gR       ej-                  e3dPd`gR       ej-                  e5dPdagR       ej-                  e7dPdbgR       ej-                  e9dPdcgR       ej-                  e;dPddgR       ej-                  e=dPdegR       ej-                  e?dPdfgR       ej-                  eAdPdggR       ej-                  eCdPdhgR       ej-                  eEdPdigR       ej-                  eGdPdjgR       ej-                  eIdPdkgR       ej-                  eKdPdlgR       ej-                  eMdPdmgR       ej-                  eOdPdngR       ej-                  eQdPdogR       ej-                  eSdPdpgR       ej-                  eUdPdqgR       ej-                  eWdPdrgR       ej-                  eYdPdsgR       ej-                  e[dPdtgR       ej-                  e]dPdugR       ej-                  ekdPdvgR       ej-                  e_dPdwgR       ej-                  eadPdxgR       ej-                  ecdPdygR       ej-                  eedPdzgR       ej-                  egdPd{gR       ej-                  eidPd|gR       ej-                  emdPd}gR       ej-                  eodPd~gR       ej-                  eqdPdgR       ej-                  esdPdgR       ej-                  eudPdgR       ej-                  ewdPdgR       ej-                  eydPdgR       ej-                  e{dPdgR       ej-                  e}dPdgR       ej-                  edPdhR       ej/                  e      dJe	dedLefd       Zej/                  e      dJe	dedLefd       Zej/                  e      dJe	dedLefd       Zej/                  e      dJe	dedLefd       Zej/                  e      dJe	dedLefd       Zej=                  ddG      dedLefd       ZejC                  d ed      d        ed      ZejG                  d      d        Zej=                  d       ee      fdefd       Zy)    N)Callable)asynccontextmanager)FastAPIHTTPExceptionRequestResponse)CORSMiddleware)JSONResponse)StaticFiles)ProgrammingError)Depends)OAuth2PasswordBearer)user_router)brand_router)segment_router)store_formate_router)student_router)simulation_router)group_router)customer_location_router)catchment_potential_router)network_planning_router)payment_router)excel_router)civil_router)display_racking_unit_router)commercial_equipment_router)plumbing_router)trading_month_router)pre_operating_router)competitor_analysis_router)displayboard_router)competitor_bench_marking_router)carpentry_router)info_tech_router)visual_merch_elements_router)depreciation_router)#competitor_category_analyses_router)pre_select_category_router) gross_margin_contribution_router)#vendor_metrics_priority_list_router)vendor_scorecard_router)private_lablling_router)#category_captinship_planning_router)additional_installation_router)sales_estimate_router)rent_expenses_router)"competitor_pricing_analysis_router)corporate_store_router) category_definition_excel_router)%competitor_analysis_comparison_router)corporate_concept_office_router)utility_router)operating_expenses_router)store_formate_pricing_router)store_level_staff_router)centralised_and_direct_router)category_wish_inventory_routre)shrinkage_areas_reasons_router)inventory_excel_router)online_policies_router)sales_router)recurring_operating_router)digital_asset_router)marketing_competitor_router)settings)MongoDBSingleton)OperationalError) handle_generic_exception_handlerhandle_programming_errorhttp_exception_error_handler handel_operational_error_handlerhandel_attribute_error_handler)CustomResponse_appc                "   K   t         }d yw)zInitialize the application.N)mongodb_instance)rM   _s     #/var/www/html/RetailAPI/app/main.pylifespanrR   U   s      	A	   T)titleversiondescriptionrR   debughttprequest	call_nextreturnc                    K   t        j                          } ||        d{   }t        j                          |z
  }t        |      |j                  d<   |S 7 5w)a  
    Add process time header to the response.

    Args:
        request (Request): The incoming request.
        call_next (Callable): The next callable in the middleware chain.

    Returns:
        Response: The response with added process time header.
    NzX-Process-Time)timestrheaders)rY   rZ   
start_timeresponseprocess_times        rQ   add_process_time_headerrc   g   sP      Jw''H99;+L),\):H%&O (s    AA6A*)allow_originsallow_credentialsallow_methodsallow_headersexpose_headersz/FASTAPIUser)prefixtagsBrandSegmentzStore FormateStudent
SimulationGroupzCustomer LocationzCatchment PotentialzNetwork PlanningPaymentzDownload ExcelzCivil and Backroom WorkzDisplay and Racking UnitszCommercial EquipmentPlumbingzTrading MonthszPre-Operating ExpenseszCompetitor AnalysiszDisplay BoardzCompetitor Bench Marking	Carpentryz	Info TechzVisual Merchandising ElementsDepreciationzCompetitor Category AnalyseszPre Selected CategoryzGross Margin ContributionzVendor Metrics priority ListzVendor ScorecardzPrivate LabllingzCategory Captinship PlanningzAdditional InstallationzSales EstimatezRent ExpenseszCompetitor Pricing Analysisz Store Formate pricing StrategieszCorporate Storez Training Talent Management ExcelzCompetitor Analysis ComparisonzCorporate Concept OfficeUtilityzOperating ExpenseszStore Level StaffzCentralised and DirectzCategory Wish InventoryzShrinkage Areas ReasonszInventory ExcelzOnline Policies ExcelSaleszRecurring OperatingzDigital AssetzMarketing Competitorexcc                 "   K   t        | |      S w)zHandle HTTP exceptions.)rI   rY   rx   s     rQ   exception_handlerr{      s      (55rS   c                 6   K   t        | |       d{   S 7 w)z)Handle MySQL ProgrammingError exceptions.N)rH   rz   s     rQ   programming_error_handlerr}      s      *'37777   c                 6   K   t        | |       d{   S 7 w)zHandle generic exceptions.N)rG   rz   s     rQ   generic_exception_handlerr      s      2'3????r~   c                 6   K   t        | |       d {   7 wN)rJ   rz   s     rQ   operational_error_handlerr      s     0#>
>>
>r~   c                 6   K   t        | |       d {   S 7 wr   )rK   rz   s     rQ   attribute_error_handlerr      s     /====r~   z/migrate)response_model_exclude_nonemessagec           	      L  K   	 t        j                  dddddj                  |       g       t        j                  g d       t        dd	      S # t         j                  $ r}t        d
t        |            d }~wt        $ r}t        d
t        |            d }~ww xY ww)Nalembicrevisionz--autogeneratez-mz"{}")r   upgradehead1zMigration successful)statusr   i  )status_codedetail)
subprocessrunformatrL   CalledProcessErrorr   r^   	Exception)r   es     rQ   run_migrationsr      s     < 		:/?v}}U\G]^_*	
 S2HII(( <CF;; <CF;;<s5   B$AA B$B!$A::B!BB!!B$z/uploadsuploads)	directory)name/FASTAPI/student/login)tokenUrlstartupc            
      h    ddddddddg id	g igd
ddddiidiidd	ddddiidiidt         _        y )Nz3.0.0zMy APIz1.0.0z-API Documentation with User and Student Login)rT   rU   rV   z/some-protected-routegetuser_oauth2student_oauth2getSomeProtectedRoutez+A protected route for both user and student200rV   zSuccessful response)securityoperationIdsummary	responsessecuritySchemesoauth2passwordr   r   )typeflow)openapiinfopaths
components)appopenapi_schema     rQ   
on_startupr      s     J
 $&+)2.! $;L/DE"
&
   !$"&(@%# 
-*Cr   z/student-protected-routestudentc                     d| dS )Nz&This is a protected route for students)r   r   r   )r   s    rQ   get_student_protected_router   .  s     @GTTr   )r   r]   collections.abcr   
contextlibr   fastapir   r   r   r   fastapi.middleware.corsr	   fastapi.responsesr
   fastapi.staticfilesr   sqlalchemy.excr   r   fastapi.securityr   app.api.user.routerr   app.api.brand.routerr   app.api.segment.routerr   app.api.store_formate.routerr   app.api.student.routerr   app.api.simulation.routerr   app.api.group.routerr    app.api.customer_location.routerr   "app.api.catchment_potential.routerr   app.api.network.routerr   app.api.payment.routerr   app.api.excel_download.routerr   app.api.civil.routerr   %app.api.display_racking_create.routerr   #app.api.commercial_equipment.routerr   app.api.plumbing.routerr   app.api.trading_month.routerr   %app.api.pre_operating_expenses.routerr    "app.api.competitor_analysis.routerr!   app.api.display_board.routerr"   'app.api.competitor_bench_marking.routerr#   app.api.carpentry.routerr$   app.api.info_tech.routerr%   ,app.api.visual_merchandising_elements.routerr&   app.api.depreciation.routerr'   +app.api.competitor_category_analyses.routerr(   $app.api.pre_selected_category.routerr)   (app.api.gross_margin_contribution.routerr*   +app.api.vendor_metrics_priority_list.routerr+   app.api.vendor_scorecard.routerr,   app.api.private_lablling.routerr-   +app.api.category_captinship_planning.routerr.   )app.api.addtional_installation_fix.routerr/   app.api.sales_estimate.routerr0   app.api.rent_expenses.routerr1   *app.api.competitor_pricing_analysis.routerr2   app.api.corporate_store.routerr3   (app.api.category_definition_excel.routerr4   -app.api.competitor_analysis_comparison.routerr5   'app.api.corporate_concept_office.routerr6   app.api.utilitys.routerr7   !app.api.operating_expenses.routerr8   /app.api.store_formate_pricing_strategies.routerr9   &app.api.store_level_staff_needs.routerr:   %app.api.centralised_and_direct.routerr;   &app.api.category_wish_inventory.routerr<   &app.api.shrinkage_areas_reasons.routerr=   app.api.inventory_excel.routerr>   app.api.online_policies.routerr?   app.api.sales.routerr@   +app.api.recurring_operating_expenses.routerrA   (app.api.digital_asset_acquisition.routerrB   ,app.api.marketing_competitor_analysis.routerrC   
app.configrD   app.database.main.mongorE   rF   app.exceptionsrG   rH   rI   rJ   rK   app.utils.schemas_utilsrL   rO   rR   PROJECT_NAMEAPI_VERSIONDESCRIPTIONr   
middlewarerc   add_middlewareinclude_routerr{   r}   r   r   r   AttributeErrorr   r   r^   r   mountstudent_oauth2_schemeon_eventr   r   r   r   rQ   <module>r     s     $ * = = 2 * + +  1 , - 1 = 1 7 - E I : 1 6 - M K 3 = F I < S 5 5 U < [ L U [ C C [ T ? = Y A U _ S 2 G X K O Q Q A A - R I T  4 +  3#% 
 
 
 


  $$ 
 7 x H  $   %%%5     ;z  A   <
'  C   >*I;  G   '
/AR  S   >*I;  G   $Jl^  L   <z	  B   +:EXDY  Z   -ZG\F]  ^   **DVCW  X   >9+  F   <z9I8J  K   <z9R8S  T   .jHcGd  e   .jH^G_  `   ?*J<  H   'zAQ@R  S   'zAY@Z  [   -ZG\F]  ^   &j?P  Q   2*LfKg  h   #:[M  J   #:[M  J   /zIhHi  j   &j?O  P   6zQoPp  q   -jH_G`  a   3JNiMj  k   6zQoPp  q   *:EWDX  Y   *:EWDX  Y   6zQoPp  q   1*LeKf  g   (CSBT  U   '
/AR  S   5jPmOn  o   /
JlIm  n   )*DUCV  W   3JNpMq  r   8SsRt  u   2:MgLh  i   >*I;  G   ,ZG[F\  ]   +JFYEZ  [   0KcJd  e   1*LeKf  g   1*LeKf  g   )*DUCV  W   )*D[C\  ]   <
'  C   -jH]G^  _   '
/AR  S   .zI_H`  a }%6W 6= 6\ 6 &6
 '(8W 8;K 8P\ 8 )8
 y!@W @9 @ @ "@
 '(?W ?;K ?P] ? )? ~&>7 > >= > '> 5<# < < 6<$ 		*[959	 E
 -6NO 
 i+ +j 	#$01UU %Ur   