
    {2ia                     ^   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 dBlmZ d dClmZ d dDlmZ d dElmZ d dFlmZ d dGlmZ d dHlmZ d dIlmZ d dJlmZ d dKlmZ d dLlmZ d dMlmZ d dNlmZ d dOlmZ d dPlmZ d dQlmZ d dRlmZ d dSlmZ d dTlmZ d dUlmZ d dVlmZ d dWlmZ d dXlmZ d dYlmZ d dZlmZ d d[lmZ d d\lmZ d d]lmZ d d^lmZ d d_lmZ d d`lmZ d dalmZ d dblmZ d dclmZ d ddlmZ d delmZ d dflmZ d dglmZ d dhlmZ d dilmZ d djlmZ d dklmZ d dllmZ d dmlmZ d dnlmZ d dolmZ d dplmZ d dqlmZ d drlmZ d dslmZ d dtlmZ d dulmZ d dvlmZ d dwlmZmZmZmZmZ d dxlmZ  e       Zedyefdz       Z eej                  ej                  ej                  ed{|      Zej                  d}      d~e	dede
fd       Zej                  edgd{dgdgdg       ej                  eddg       ej                  eddg       ej                  eddg       ej                  eddg       ej                  eddg       ej                  e!ddg       ej                  e#ddg       ej                  e%ddg       ej                  e'ddg       ej                  e)ddg       ej                  e+ddg       ej                  e-ddg       ej                  e/ddg       ej                  e1ddg       ej                  e3ddg       ej                  e5ddg       ej                  e7ddg       ej                  e9ddg       ej                  e;ddg       ej                  e=ddg       ej                  e?ddg       ej                  eAddg       ej                  eCddg       ej                  eEddg       ej                  eGddg       ej                  eIddg       ej                  eKddg       ej                  eMddg       ej                  eOddg       ej                  eQddg       ej                  eSddg       ej                  eUddg       ej                  eWddg       ej                  eYddg       ej                  e[ddg       ej                  e]ddg       ej                  ekddg       ej                  e_ddg       ej                  eaddg       ej                  ecddg       ej                  eeddg       ej                  egddg       ej                  eiddg       ej                  emddg       ej                  eoddg       ej                  eqddg       ej                  esddg       ej                  euddg       ej                  ewddg       ej                  eyddg       ej                  e{ddg       ej                  e}ddg       ej                  eddg       ej                  eddg       ej                  eddg       ej                  eddg       ej                  eddg       ej                  eddg       ej                  eddg       ej                  eddg       ej                  eddg       ej                  eddg       ej                  eddg       ej                  eddg       ej                  eddg       ej                  eddg       ej                  eddg       ej                  eddg       ej                  eddg       ej                  eddg       ej                  eddg       ej                  eddg       ej                  eddg       ej                  eddg       ej                  eddg       ej                  eddg       ej                  eddg       ej                  eddg       ej                  eddg       ej                  eddg       ej                  eddg       ej                  eddg       ej                  eddg       ej                  eddg       ej                  eddg       ej                  eddg       ej                  eddg       ej                  eddg       ej                  eddg       ej                  eddg       ej                  eddg       ej                  eddg       ej                  eddg       ej                  eddg       ej                  eddg       ej                  eddg       ej                  eddg       ej                  eddg       ej                  eddg       ej                  eddg       ej                  eddg       ej                  eddg       ej                  eddg       ej                  eddg       ej                  eddg       ej                  e      d~e	dedefd       Zej                  e      d~e	dedefd       Z ej                  e      d~e	dedefd       Zej                  e      d~e	dedefd       Zej                  e      d~e	dedefd       Zej                  dd{      dedefd       Zej                  d ed      d        ed      Z
ej                  d      d         Zej                  d       ee
      fdefd       Zej                  d ed      d       y(      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)competitorintensity_router)projected_market_share_router)location_spillage_router)location_details_router)electrical_cabling_router)!category_pricing_strategis_router)define_your_promotions_router)$promotion_competitor_analysis_router)recovery_promotional_router)customer_engagement_router)competitor_loyalty_router)!brand_attribute_assessment_router)branding_attributes_router)integrated_marketing_router)annexures_router)optimising_assets_router)short_negotiation_final_router)-margin_and_sales_contribution_analysis_router) online_pre_select_service_router)adapting_supply_chain_router)critical_for_business_router)#expanded_performance_metrics_router)"categories_under_promotions_router)comparative_analysis_router)$measuring_sales_profitability_router)pre_selected_service_router)concept_office_router)store_investment_summary_router)summary_router)cash_conversion_cycle_router)visual_merch_Strategy_router)
stu_router)master_router)user_simulation_router)category_simulation_router)physical_store_formats_router)cap_ex_refurbish_router)online_store_format_router)module_1_report_router)module_2_report_router)module_3_report_router)module_4_report_router)module_5_report_router)module_6_report_router)module_7_report_router)module_8_report_router)module_9_report_router)module_10_report_router)all_content_router)promotion_calender_router)institution_router)landing_page_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)r   _s     //var/www/html/retail-simulation-api/app/main.pylifespanr      s      	A	   T)titleversiondescriptionr   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)r   r   
start_timeresponseprocess_times        r   add_process_time_headerr      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 CompetitorzCompetitor IntensityzProjected Market SharezLocation Spillage FactorzLocation DetailszElectrical CablingzCategory Pricing StrategiszDefine Your PromotionszPromotion Competitor AnalysiszRecovery of PromotionalzCustomer Engagement StrategieszCompetitor LoyaltyzBrand Attribute AssessmentzBranding AttributeszIntegrated Marketing	AnnexureszOptimising AssetszShort Negotiation Finalz&Margin and Sales Contribution AnalysiszOnline Pre Selected ServicezAdapting Supply ChainzCritical for BusinesszExpanded Performance MetricszCategories Under PromotionszComparative AnalysiszMeasuring Sales ProfitabilityzPre Selected ServicezConcept OfficezStore Investment SummarySummaryzCash Conversion CyclezVisual Merchandising StrategyzStudent ExcelMasterzUser SimulationzCategory SimulationzPhysical Store FormatszCap-Ex RefurbishzOnline Store FormatzModule 1zModule 2zModule 3zModule 4zModule 5zModule 6zModule 7zModule 8zModule 9z	Module 10zAll ContentzPromotion CalenderInstitutionzLanding Pageexcc                 "   K   t        | |      S w)zHandle HTTP exceptions.)r}   r   r   s     r   exception_handlerr   '  s      (55r   c                 6   K   t        | |       d{   S 7 w)z)Handle MySQL ProgrammingError exceptions.N)r|   r   s     r   programming_error_handlerr   -  s      *'37777   c                 6   K   t        | |       d{   S 7 w)zHandle generic exceptions.N)r{   r   s     r   generic_exception_handlerr   3  s      2'3????r   c                 6   K   t        | |       d {   7 wN)r~   r   s     r   operational_error_handlerr   9  s     0#>
>>
>r   c                 6   K   t        | |       d {   S 7 wr   )r   r   s     r   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formatr   CalledProcessErrorr   r   	Exception)r   es     r   run_migrationsr   C  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/user/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)r   r   r   /some-protected-routegetuser_oauth2student_oauth2getSomeProtectedRoutez+A protected route for both user and student200r   zSuccessful response)securityoperationIdsummary	responsessecuritySchemesoauth2passwordr   r   )typeflow)openapiinfopaths
components)appopenapi_schema     r   
on_startupr   `  s     J
 $&+)2.! $;L/DE"
&
  $"&(=%  
-*Cr   r   userc                     d| dS )NzThis is a protected route)r   r   r   )r   s    r   get_some_protected_router     s     3DAAr   z/uploaded_filesuploaded_files(  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.api.competitor_intensity.routerrD   %app.api.projected_market_share.routerrE   0app.api.location_spillage_factor_analysis.routerrF   app.api.location_details.routerrG   !app.api.electrical_cabling.routerrH   )app.api.category_pricing_strategis.routerrI   .app.api.define_your_promotions_strategy.routerrJ   ,app.api.promotion_competitor_analysis.routerrK   &app.api.recovery_of_promotional.routerrL   -app.api.customer_engagement_strategies.routerrM   )app.api.competitor_loyalty_program.routerrN   )app.api.brand_attribute_assessment.routerrO   "app.api.branding_attributes.routerrP   #app.api.integrated_marketing.routerrQ   app.api.annexures.routerrR   ,app.api.optimising_assets_for_revenue.routerrS   &app.api.short_negotiation_final.routerrT   5app.api.margin_and_sales_contribution_analysis.routerrU   0app.api.online_pre_selected_service_level.routerrV   $app.api.adapting_supply_chain.routerrW   $app.api.critical_for_business.routerrX   +app.api.expanded_performance_metrics.routerrY   *app.api.categories_under_promotions.routerrZ   #app.api.comparative_analysis.routerr[   ,app.api.measuring_sales_profitability.routerr\   #app.api.pre_selected_service.routerr]   app.api.concept_office.routerr^   'app.api.store_investment_summary.routerr_   app.api.summary.routerr`   $app.api.cash_conversion_cycle.routerra   ,app.api.visual_merchandising_strategy.routerrb   app.api.student_excel.routerrc   app.api.master.routerrd   app.api.user_simulation.routerre   "app.api.category_simulation.routerrf   %app.api.physical_store_formats.routerrg   app.api.cap_ex_refurbish.routerrh   "app.api.online_store_format.routerri   app.api.module_1.routerrj   app.api.module_2.routerrk   app.api.module_3.routerrl   app.api.module_4_report.routerrm   app.api.module_5_report.routerrn   app.api.module_6_report.routerro   app.api.module_7_report.routerrp   app.api.module_8_report.routerrq   app.api.module_9_report.routerrr   app.api.module_10_report.routerrs   app.api.all_content.routerrt   !app.api.promotion_calender.routerru   app.api.institution.routerrv   app.api.landing_page.routerrw   
app.configrx   app.database.main.mongory   rz   app.exceptionsr{   r|   r}   r~   r   app.utils.schemas_utilsr   r   r   PROJECT_NAMEAPI_VERSIONDESCRIPTIONr   
middlewarer   add_middlewareinclude_routerr   r   r   r   r   AttributeErrorr   r   r   r   mountuser_oauth2_schemeon_eventr   r   r   r   r   <module>rr     sr     $ * = = 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 J O U C G W X ] N T O W I K 5 Q Q o ] M M [ Y K ] K ? S 1 M U 3 / A I O C I : : : A A A A A A C 9 G 9 ;  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   -jH^G_  `   0KcJd  e   +JF`Ea  b   *:EWDX  Y   ,ZG[F\  ]   4ZOkNl  m   0KcJd  e   7
RqQr  s   .zIbHc  d   -jHhGi  j   ,ZG[F\  ]   4ZOkNl  m   -jH]G^  _   .zI_H`  a   #J[M  J   +JFYEZ  [   1*LeKf  g   @  \D  [E   F   3JNkMl  m   /
JaIb  c   /
JaIb  c   6zQoPp  q   5jPmOn  o   .zI_H`  a   7
RqQr  s   .zI_H`  a   (CSBT  U   2:MgLh  i   >*I;  G   /
JaIb  c   /
JiIj  k   :j7H  I   =8*  E   )*DUCV  W   -jH]G^  _   0KcJd  e   *:EWDX  Y   -jH]G^  _   )*J<  P   )*J<  P   )*J<  P   )*J<  P   )*J<  P   )*J<  P   )*J<  P   )*J<  P   )*J<  P   *:[M  R   %j  O   ,ZG[F\  ]   %j  O   &z@P  Q }%6W 6= 6\ 6 &6
 '(8W 8;K 8P\ 8 )8
 y!@W @9 @ @ "@
 '(?W ?;K ?P] ? )? ~&>7 > >= > '> 5<# < < 6<$ 		*[959	 E *3HI  i+ +\ 	 !*+B
B "B 		
[3CDK[	 \r   