From c8fb1b2bd5e9534054a5b5e822041196acfe724b Mon Sep 17 00:00:00 2001 From: danny Date: Fri, 24 Jul 2026 13:32:36 -0300 Subject: [PATCH] assessment --- .../app/__pycache__/config.cpython-311.pyc | Bin 0 -> 12367 bytes .../app/__pycache__/database.cpython-311.pyc | Bin 0 -> 22454 bytes backend/app/__pycache__/main.cpython-311.pyc | Bin 0 -> 22652 bytes .../v1/__pycache__/auth_info.cpython-311.pyc | Bin 0 -> 10140 bytes .../v1/__pycache__/bootstrap.cpython-311.pyc | Bin 0 -> 27620 bytes .../api/v1/__pycache__/cities.cpython-311.pyc | Bin 0 -> 5755 bytes .../city_access_fast.cpython-311.pyc | Bin 0 -> 26470 bytes .../city_access_fixed.cpython-311.pyc | Bin 0 -> 21909 bytes .../company_settings.cpython-311.pyc | Bin 0 -> 14313 bytes .../v1/__pycache__/dashboard.cpython-311.pyc | Bin 0 -> 4055 bytes .../__pycache__/departments.cpython-311.pyc | Bin 0 -> 22836 bytes .../api/v1/__pycache__/health.cpython-311.pyc | Bin 0 -> 26191 bytes .../api/v1/__pycache__/login.cpython-311.pyc | Bin 0 -> 8674 bytes .../persistent_auth.cpython-311.pyc | Bin 0 -> 17004 bytes .../v1/__pycache__/profile.cpython-311.pyc | Bin 0 -> 24131 bytes .../users_lightning.cpython-311.pyc | Bin 0 -> 66125 bytes backend/app/api/v1/dashboard.py | 82 +++++++++- .../async_processing.cpython-311.pyc | Bin 0 -> 21213 bytes .../app/core/__pycache__/auth.cpython-311.pyc | Bin 0 -> 29982 bytes .../circuit_breaker_fallback.cpython-311.pyc | Bin 0 -> 9833 bytes .../__pycache__/database_pool.cpython-311.pyc | Bin 0 -> 3622 bytes .../persistent_sessions.cpython-311.pyc | Bin 0 -> 26403 bytes .../__pycache__/redis_client.cpython-311.pyc | Bin 0 -> 11555 bytes .../supabase_connection_pool.cpython-311.pyc | Bin 0 -> 34857 bytes .../__pycache__/tenant_cache.cpython-311.pyc | Bin 0 -> 5097 bytes .../tenant_context.cpython-311.pyc | Bin 0 -> 2326 bytes .../tenant_resolver.cpython-311.pyc | Bin 0 -> 3525 bytes .../token_encryption.cpython-311.pyc | Bin 0 -> 12619 bytes backend/app/core/database_pool.py | 47 +++--- .../models/__pycache__/auth.cpython-311.pyc | Bin 0 -> 1479 bytes .../__pycache__/profile.cpython-311.pyc | Bin 0 -> 5815 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 486 bytes .../__pycache__/middleware.cpython-311.pyc | Bin 0 -> 2691 bytes .../__pycache__/performance.cpython-311.pyc | Bin 0 -> 16802 bytes .../__pycache__/cache.cpython-311.pyc | Bin 0 -> 1564 bytes .../__pycache__/properties.cpython-311.pyc | Bin 0 -> 1791 bytes .../__pycache__/reservations.cpython-311.pyc | Bin 0 -> 4101 bytes backend/app/services/cache.py | 7 +- backend/app/services/reservations.py | 140 +++++++++--------- frontend/src/components/Dashboard.tsx | 94 ++++++++++-- frontend/src/components/RevenueSummary.tsx | 3 +- frontend/src/lib/secureApi.ts | 16 ++ 42 files changed, 283 insertions(+), 106 deletions(-) create mode 100644 backend/app/__pycache__/config.cpython-311.pyc create mode 100644 backend/app/__pycache__/database.cpython-311.pyc create mode 100644 backend/app/__pycache__/main.cpython-311.pyc create mode 100644 backend/app/api/v1/__pycache__/auth_info.cpython-311.pyc create mode 100644 backend/app/api/v1/__pycache__/bootstrap.cpython-311.pyc create mode 100644 backend/app/api/v1/__pycache__/cities.cpython-311.pyc create mode 100644 backend/app/api/v1/__pycache__/city_access_fast.cpython-311.pyc create mode 100644 backend/app/api/v1/__pycache__/city_access_fixed.cpython-311.pyc create mode 100644 backend/app/api/v1/__pycache__/company_settings.cpython-311.pyc create mode 100644 backend/app/api/v1/__pycache__/dashboard.cpython-311.pyc create mode 100644 backend/app/api/v1/__pycache__/departments.cpython-311.pyc create mode 100644 backend/app/api/v1/__pycache__/health.cpython-311.pyc create mode 100644 backend/app/api/v1/__pycache__/login.cpython-311.pyc create mode 100644 backend/app/api/v1/__pycache__/persistent_auth.cpython-311.pyc create mode 100644 backend/app/api/v1/__pycache__/profile.cpython-311.pyc create mode 100644 backend/app/api/v1/__pycache__/users_lightning.cpython-311.pyc create mode 100644 backend/app/core/__pycache__/async_processing.cpython-311.pyc create mode 100644 backend/app/core/__pycache__/auth.cpython-311.pyc create mode 100644 backend/app/core/__pycache__/circuit_breaker_fallback.cpython-311.pyc create mode 100644 backend/app/core/__pycache__/database_pool.cpython-311.pyc create mode 100644 backend/app/core/__pycache__/persistent_sessions.cpython-311.pyc create mode 100644 backend/app/core/__pycache__/redis_client.cpython-311.pyc create mode 100644 backend/app/core/__pycache__/supabase_connection_pool.cpython-311.pyc create mode 100644 backend/app/core/__pycache__/tenant_cache.cpython-311.pyc create mode 100644 backend/app/core/__pycache__/tenant_context.cpython-311.pyc create mode 100644 backend/app/core/__pycache__/tenant_resolver.cpython-311.pyc create mode 100644 backend/app/core/__pycache__/token_encryption.cpython-311.pyc create mode 100644 backend/app/models/__pycache__/auth.cpython-311.pyc create mode 100644 backend/app/models/__pycache__/profile.cpython-311.pyc create mode 100644 backend/app/monitoring/__pycache__/__init__.cpython-311.pyc create mode 100644 backend/app/monitoring/__pycache__/middleware.cpython-311.pyc create mode 100644 backend/app/monitoring/__pycache__/performance.cpython-311.pyc create mode 100644 backend/app/services/__pycache__/cache.cpython-311.pyc create mode 100644 backend/app/services/__pycache__/properties.cpython-311.pyc create mode 100644 backend/app/services/__pycache__/reservations.cpython-311.pyc diff --git a/backend/app/__pycache__/config.cpython-311.pyc b/backend/app/__pycache__/config.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..45053abf0d9d5b0f0137fe60a823e6a5f1a4c069 GIT binary patch literal 12367 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 JKtDXD{{cm02`&Ht literal 0 HcmV?d00001 diff --git a/backend/app/__pycache__/database.cpython-311.pyc b/backend/app/__pycache__/database.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8522a33cd3922b3f06182e1c136475aa60827dc3 GIT binary patch literal 22454 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 D#vt0f literal 0 HcmV?d00001 diff --git a/backend/app/__pycache__/main.cpython-311.pyc b/backend/app/__pycache__/main.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..daed18d01af7fa013d4855ee7ef05109ed74b70f GIT binary patch literal 22652 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 KX-ziS?EeAm{-)yq literal 0 HcmV?d00001 diff --git a/backend/app/api/v1/__pycache__/bootstrap.cpython-311.pyc b/backend/app/api/v1/__pycache__/bootstrap.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5100b0f4c6cff13de96880cdba3ca95da0aa608f GIT binary patch literal 27620 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 literal 0 HcmV?d00001 diff --git a/backend/app/api/v1/__pycache__/company_settings.cpython-311.pyc b/backend/app/api/v1/__pycache__/company_settings.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f9292082dbf74b066ba6fcfeb915b05c9c6c898a GIT binary patch literal 14313 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 WL>UAvqm&>?0k|V$&=o67{J#NjmnNwI literal 0 HcmV?d00001 diff --git a/backend/app/api/v1/__pycache__/dashboard.cpython-311.pyc b/backend/app/api/v1/__pycache__/dashboard.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cdbe54e4f28ec906ad1cd35f5287768dbecebe85 GIT binary patch literal 4055 zcmbVPU2Gf25#Iad9e*T>5+zdf&sjfK7~52B*KmqDPGm`j-S}5_+Jr?*oOvsW>K)1M z9c@dc05&!f6>tF;Enq$PK~HK5yYEGS0!8yu^ocTvnmE9KfTBS9c7|ir2>Q_3BahFS<13F>qoNR`~#)R>>yu;Ks1m z>waspUlR22T2Ko;3~#ca0iIR?K8quM*?Crr;FQ*bcWJ$Nw-&`BPT{~joAf53c}eTL zExfeWJ#Sn~%&-5oHW{$h3$~3qtas`v+G-vZOg}h~RQ^jSQKUXlVG-LNKU@J%PbzH3A zoLMmp6(kvZK&@DdxM&sfs)b?v=N0UV_f2*2wGT~9E`YRTV#_KN7tAzkOB&3u3I?_% zN>@rnyb_z#RCDoKNhR83+eXG_bJV_|>IK!bLuFDbV`44m3Ysm`iKe9*Wjma&5CZGS zRlt-j5^PmSG0$~&1|bpJx8Qm9UmzbK20(3f0E1AK)fkQ4gc%Pyv&z6(<*ZI0p`{K$ zs*J|1gb=c*-ga5yz1BnC52sbW$}b7t=&As{&b(F8>h(ro9jMAxg{rs-x*l}&-GV^- z1@}XAkNcEg4O9b~u(SEl6MemauP5#FH2FRckO*D?&*7p9-U27~Xn0<&=vJ=9DtrZ> z3;t%U6%vDG*@9KFRNab2K-X+O1o9R9 zYUp_n>PxJLH-1(>I=vO0X+&r0(U0n9KB}F465rj3A81N_cW1Vw#FJ3}ofD404T?_@ zkgqAJU2r569&Uv8)MlFS4lA|UeGSeJTHijDm2b+7|{``1j&rv5NhD8Uph#)?L^`e#d&PPtRqo;t)d>8f+ zMdmGdp8XxTt=OodB|6(Jt4x(K`?}+R#>zv^kMU0!jbCMDWOZ;3@zRMMi|#|a>_mb; z0RqbT4$9doyU~deZzg?fLY47b_RZro@ixTJ4B7N zE4-p=;8(fc!Qm4>J$LbZ*H`++espGbZnnKhNPfz@%GhC_z{R)uj{6uare33uy<0Bj(MAfG|W?jZW>H;{r{P#_xYB4N}w;K*obczx`5g=QkPe)@i>xohu6@cu<7z(;xcv2Vb~~_h)N28(MnOh4!YE9 zI!=e&bWdnfu>-2PT+Ejj>_EO$EaJRHB9tAbiT;{u;#`I3wlI&a{30AvddbALymP$~ z_0qxu+zw>y-FV;-+c{8zZJqQc#8Xe3^!TNKbe(M{-sE8NF36?fF+YV5YaI|y6!qtPYS%*>^}y_L2nR_gWez<2fg5WP7Xq9j}6v-;PCr}@h7Q~`|thn zoyLLpw^CD$)KoqGa$O5<$M-&tk3Wi!JFFCmIx!R(d>Ri8f<_X16kvp;m+oT zQDT=9f$md^g0EdDyp6(x_0Ya%Y}e!1$fMZER&1;h8>@$3UmXsGM_xQnqHx?nvH*5H z@^z<0tI!^cwcJcxRCxeodMYaJ2+H7}qziEpu-7ca~N?8nAb z=#-59Dj%Ol+?R-(=Fpei-sur8t=NHi6%tgrKxjfHbfaB_5gORGXf2l^D-wEG5PEJA znX+SWcgWC-O(BoXOkT||V)ue#N9aJlL~w>CPy)9?WJf7le3#N*DrG=A)XkP0{flJ> zC@8_09c(En&KDM3RFk9BFuixQE=MA1UEXC-e69s#DVL*JBbOuJqpCOzjh5x)X{6|wj5ha{wj4RRTG=?@Y+yA9$tTEOCD>; zV>NM`34AvE$#6ZaY%%*9%sxj%gQ>e8t{>gd>hS|x@dNbEmQ>b<>iZ6FC66?cN1Q-{ zfvXgdCgej7-rKz~N1#j*^$)d%B_sydM%T=>w{HK`k-Z7-tfw4eN2n#1vcHR1skMO7 zEoQ92jBQV3Hg41>-`kpazcKN?!yRYF9R#Eq8+AL|g1k1iX5O7%yLl(m5R#7INw{KE O`#7j^SRdQn-v0rR-04mL literal 0 HcmV?d00001 diff --git a/backend/app/api/v1/__pycache__/departments.cpython-311.pyc b/backend/app/api/v1/__pycache__/departments.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..38198636500aed9a284dcf4aa0d3effc1eab1355 GIT binary patch literal 22836 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%0D_BU@aa)l!B=13)KBUlxGzylQbp9EQO=3t!jgf~n bdkS`vu98bHq87w%U^xyIEaf@mwCw)?&dndo literal 0 HcmV?d00001 diff --git a/backend/app/api/v1/__pycache__/health.cpython-311.pyc b/backend/app/api/v1/__pycache__/health.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4a3860ee56cd3f08251b1093af96e07b28b17505 GIT binary patch literal 26191 zcmdUYX>c3YnP4~0#z7Du30?q6km4bT5-ITzse@7|l9FiIitdAw3`1y0f_TXdP?iwV zrLjE|PS(3a@2X;D!|WhgIbjlSMLX-+QFc9BicdL{>~^y{OKex6R#jW78gK0nq#Rdy z@?&Se?={c|2wJq`N!7NRA6~!Xdq=;1-}#HrIYS4HwoJ&Jd$*(8S^7f*q`_Y<%^&rr z>he$8U)HV1!g`{XXnoXr$)Hq3T{5s`ub6%a#eS+39cx$(#MfYYLugqZLKRjA4DRm+5BqJ@~I^o6JvaQ(ZwD>kFROYO|AVSk>m{HQ!1=-{zuirP;OWGO>-T>S|fDuBLU> zwIN!+W_=d6c~yO_Yrc<`ub{rxRrR&4*}t}R)wlLoZd_H@#x?5-{(*IET2)t&bsVRH z?aBN0gVFFr;!0rXN;EPa7(6l>xHQcLCa0%jiD@o2bvbY`92t*Jv4Lw*4pJt=Q;}#O z49{G2A{M?Fn}{WD+K+J4*JErn9$=%1aBL#V2I7fuVkRDlO_4H**z^>^%f`Z&r>5hG zw|8q#AQ794PR}F)v3PtY8n=&3T|xA0;Ds2pC=!lbi3Xs;@a5=abSeQ6*W?OgkoRL; z8-hm322DN&IHH_Xa`427BO^B=(Q8Nl3=Qshbk>b&?vM_}GXD zXo-o>0NQXo3SlP~Wn=MBWFiLj;d3H76`o3jNK@dsG#tM<6$xGArX$gKe42x(ittS0 z3gnJO!ii{zi#`t>!J?i)O+0%t9_0>0EW<)B>~+%Gd4&wTWRZV^2FY@bi(ZP|kW7j2 z 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 L)YOn_a?bw?BNgd= literal 0 HcmV?d00001 diff --git a/backend/app/api/v1/__pycache__/persistent_auth.cpython-311.pyc b/backend/app/api/v1/__pycache__/persistent_auth.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e8801bad0ead9c4b17fe425f73651f927bbc677c GIT binary patch literal 17004 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 EUrd7a{r~^~ literal 0 HcmV?d00001 diff --git a/backend/app/api/v1/__pycache__/users_lightning.cpython-311.pyc b/backend/app/api/v1/__pycache__/users_lightning.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d543a4bed7d2d01f75b9b53e6cd158993bc6c691 GIT binary patch literal 66125 zcmeFa33MFSc`n#1&?|rj8jZ$Y*msZs_nlZt5F{XxphQBXVGz|ML19yMlaksEg|_7c zQuq>xW=60=MQuIFf?_I$JTZaTo%rR=nL^?At*X1<|Ni&C|NZ~}zU6e0Z|Hx=|gk=M7W(X~U>t+Bj;QHjSF5&7m-7uH!r(t1rj>mw#5Ygcw>I{z2;aPE z-`e?N-xj{ax8Xh?=m`ZA{T zDd8_>@s&uoljqV?MH$j!q8wESzb#(=Pb~|=RwL~8O@^&O*d2VWw%+kFAfIF%)ip;R zb%?if!+5GTO^H{Jc)QZ#HTbNo?bZ2Z@r?+(+t(c4qjZqU!#DZb?=)+nXTz{9pCN2( zdRV}#5&!vo1>dI4Q484!lf}35TkdSthPr6rJAB#bZ4ck++l$`c_PqHUsLMB%`h42c z=sxO8q_G|Cu^)9jphQ!7_#J6wNtAh~wlvys7xh#wq`oV)Orr-k%xkwcjm@@?lGmQJ zybf*HcYA-!y!NH#b$G+P_NV2Q#XI-|sr^ay^%ZEtq6H8792#sw?P}r=rRCqXVY@bI z(^R$V;fM5Lm#>xeqlxcM%ddOG`u1#?->1Sk`mq<7RIXoNT7EsquU7?{ikIIwzy62R zkMcX>Yh!t4@ki70>_eXYN=7Qrr{p=Xi9F>x9!tyb2=6$hYZ?q*w;i9nbU83HIdiG) z;(0>V`v=SR3HU)xhxeZsTc>|9`SdNMd3 zn4F!lbxmBJ^j-7$IserQZ5>;;PWw5*=bxLM@%uOg!-tEr0(bf93@`Y2KR0`k<>a^h zit5^w6|*9vle1R?J|ULf>znh<@cx+d=*Y+;ea}qzkkRZ+EXyAl4_x)f%#Tv`vE1(Q zi6<`!vq*Ae-2bG%$rLm7PEG`3#;%!XW2WPi{y@w!%%YA@HR)s4?s32G#4PWl2h-`( z1HHeZIl0Lg%NKl4U7ZwsV{<-XdeZNw%-rKw1DDYNlM~|s-xvk(A-%%MnQP-ylRUkn zmKvKFpSbKpdaf>2aQ-wt;ibiYb#D9ua)sY{$rl(4_-4ju0%MarUO3PWlm4-ZsY&EA z)MSWRC{=2zn3Y_VGcb;D<|#DmR4{7`<>wFPvY)o8M6V%Y)|}wGIQdM>6d1qcZ!!i8 z{geD*6#n9r@0qE|Yv{7}iP`C3kuW}c^7OQ4fT%OYA3ppAJTL2f zx=}rdM8j!9CMI6LA8(n@p!kgB<4vPxUzX39oQe_J9RHG?_9ZL+#gg_Vn|-m2T75R8 zV5O%^x=}ljmJ|6J)f2TQFIzlh4nk^6VVCp5Kybud)Mq_{4}EYl-q~i~^!Vgd%rZCb z_dh)=@G;ZO__S{*W}dq|JL8Mlc;DQ(5TH>KGZP%n^~bU&{ayU@GL<`#w=rFl*ZUt%r-VQJ|X4- zaX>Ux;*OXqqg?IvV~duhf?H0}REs-es?8YAU3~q>!iZ=p#vL&gM;n{34=%bF`K4`P z zWz5Q4Momug(9nEMAX6VUq{N={Z77@j)>Za}oj? zoAw39@p?Sw0B|W!LIoOJ2GvUPF{mV1jMwi92H28Lh4dupeCZ6UViKw@m+3;u;O|20Vxwz$uQ=K(K!GsrdefT*z>Y+gRnt&`bh=JsnvAP958LM02 zV*u}?cMQN0KRb@kvj8;Nu{^@0H2a>6&;Kzqo3mo}0Pxw=*aT+mK+MW!&aumrfmmLG zP#B|mZ*1Bhb1(vf!0PfWKh$JPg_k6v(}GIOI5`s#T2aeXIM_+=$k~g3{~0(MII!m~ znifwj)hwR5l_S{+kHt}$%PpGdj+orh+=A=F*N4A29Q6>wisP*OLeWHbgt_p@eLz`Z z9#72ou`IzCxGKy{C|m}7C$51J{~r?MgX5wP>HbvrssW8?2$mi3&G-b2JC3yz_oVMx zMnIh;q9K^a8g#FM!uPW3zO5H%Y2~LpIDr6OraI)7MhZd~-gQ%uJUG{N5A01#lcK$e zZc`I0c+94h*{>n3&cC~mLr{Qo^~2pRnP8)mC6fFOzMic--qRWt44 z^;*(BOlhZGydfo20+KZ$d1J_+C56M8!-4Kd37428H0gZz~#=V?3*SS|2D)CKb|$2?3{F+Hz~trb#B)f07Li?&{1WhCMe0%t6Zo&`i&AL=ySA z@oS*N#xG1^B{9o^u;u22*=v)$kLP4y{;%jFEDYLL(JKy@j|B4*g%V?{E1;NH`J6XP@~4Of!MB1PWWQx z0F?#{65o^$3l4+tsaUq}8Q%n!FEJCF7L6eHV`fltlXIZpk+=}Es#Y>nvzIQ>O6Tcu zftFq|6V*DFg|!8i8BG>}25BriUMyAz!XW;uQ&`;yvrh|s^xcRd9kWp_$9#e?EBFb@ zxcDWH{|Z`l#FH75Yd3~~I=6X3FS`rYXs&l% zr?(bH9qx65%Q~TdKhG=Waqqc2Hw(q0hKQ?Cay7o^D!S=e%6h5dR>ga+f}8n^gW=+c zt3`6P$d5;tE=ODqlB?l8m-lATOU1W}*PS|N!Fry~TXE|PVo_uG!n!WY*}$AdW7J#v zTJ|g1;jFLa-p&=hZOff&McY@4wnvI~N<}*tP0^xKl*v^db(cjwB`;sOdF7?4TT_Tv z;90sP7S!R6*3>T^S?YP|_{Zx`B>eG5Il8=JstDCA>E3tb|MAd^Lt^RpJu4i#Pmjr- zh~t9fxFDw8ALCj#QWEgIkGUiJ<(!*2kvtBq60uiF_A1d-<@cgp|FB2j<23xhY3tRS ze^A8r>^J{lzZrgE7d}p?F(ZK}!>{)kehn!2Q>P21;L3ReuYX<_GW6=SV{6`cNe8?H z{IsY)e|X*;P~p^&IiSLcS}X{xQyfrX!jM@zO6Rk91MteJ7NHeOg&Dzs1h(uSG0g=`_?HJwlzvV^k|Vbs4NW5|{yakZt@>uwyK zF@&;FvW@DOf)D518-`46H~WSmv$Um{cZBSG_BEZqNYiJIfC{5(`%GvEIfOd2YE{6M ztZT@)nYlxo_l%y^9`%_=kLI7NV{||S=Ard5{J6{AcL?6a;`lSVv zkp8QN8{ShgVF*g;QABv#5HqxIWysV|W08}orcZ49dGL|IGnqRWY#8&8&tUl;j5B-) zQMd1(nw=P*@*iwZ2J|7mzZ%YUotWPx-^;a&+h5*$bMH(0Z|x7emDh~W($tI^oYjnn z=Vh=pP_wpqy%q@sROmtr4Bsk38>qe_k@%%;gKxEj^e-81v?p4@7_&`+qX)Ly%!E&1 zr1T?*D107HN`p|fH`O3Yz-db4D4grMb)B))mUNm=>fSd(0byVG(?nrLElv|&m0^ZLpSnPY@3pc*7U|KgM z`Y2ja{o3VME{C6qRBV+hwu%)ySGrjben7qdYjPHH*KImS(Yh|%+8%9cSs0FbG2a`V z2bhCNJvo!Fc^X$ejS)|?DB8y8FqXI{vOT3l-u@2bW7%i@le+DP#(sd!h!vRkt37A?Esd0?kS zr3}%2^pFM{nDBy;0{;iP?PZ+?3+Oh+0)9hCcM6yzGbTt~aA6wTC}hf_i!dyf8CdSg z?0^m9r4RyG7;cn9>XfR-a?%*m^JYxr7d7=Yep-E5EaL|CO{oQ+^&}&Q1h;02O)ayL z&k7l3W(UXyFt3ScrYVsjK-fBdY4NZ?OJOq>Q#yGnohjLDOvJJzVo@(PS%W+JX8czL zAIHXia()D>pVl1y#579CkGlxWa{;>{{&t2lgv%%%!-z8PY?2 zT{;_aH%RV=>nEZGMKABZxqE3SQqV$txq^;m;rj6h+4-WUQOu^BkW=eBrbup^l-owg zsUlihzHmHhFIuyguG&kN`Xlxl$zBtFdez=8+S~7!R)!ss(l)8I4WVk97mhD^A`UKE z*@7~BE@CO81l!&LwriJi+bO}Cm1*_^bUHd;|5e|uohy*`+Ea{n@# z?8D0dz(Jj!P4M&j&&n_1F`Op#T7b(;k!vS?;?G>6o@5tTO2j;iU+OOb6=y)3ivaFG zGKCp%Kp0Bcucl5jb2xZofXJFeZYk>+a2!mprVK#6PD5t`>0C;w^C{iTc5pdVJPmL; z8s?3f(x~c^$Q?UT=8%yXY^l^L_#0XC#^;PP7Wp^H-}sDu1TN`6OCR-X>XMOn#9K5i ztLh(Z?KaWIs<{8Gt!@3Rt*zlE>9qCuGWzHX#>aFo8-L$4Z_>aBR=nvj0>08yHo{#; zd;wzb$h*z*PWCu=YGCNd@ji|?HMBj;F?KV8fEB}?e58lFcy$K6qS={tmc+>ANk501 zI8U@kj*Vb$ZWi0b#F3JD)N;U>TbP>|Q*HFd`QCHMjo+Y?(wCXRU^sn}B^NAM`iL+& zJ&sLv`iy#V`Y|J?2n_)zyaFRZc&=*!Txjb=s08p~5J)6uj zwJ4N>D$o@Ts5T3~LY7R8CHoHIUO1zJg${0*O{$7`u7_;R_edo^4|s`4ZTuBujoC#ly%#_WWQIvFu<5!24|1{ zexB!L`%Sx8*8NV;iuLWGJ45iwcON zDhec7g}PKusJ1Pzv!ddOsZvnyilp!aQ&O;OkOGNf#IF!`c(iSnl7>~2My?VsJ7fu2 zwW7zEMRO9f=sCdZylvhN-lGFN*~9bBkS$F6f@xRC$>$~;!dFxJ zPp=C>a1Qh*am(Tt=+Bz@Tuq)T>NF7wW%Yz|Gtr-4La)r{K9`%MJDZAv*BI$R;%gAG z1El~)l`t#wMTtt`A+9z7Dgjbw?QFW_*p`$`$;i}5*R|P6NZL)#@Q?xHAzvhime-Rc z)&~~ml%FFRH^DdctQ=|l5zMbF>r;Kl`+7z==BN32{A&9o->QCO;!&D66HI=J9~%#7 zUQdBg8S_tGni-p%N&S`}4wwwd7*S;0xStV4id2avEef9yIZ=WqUQqO8=&ONtS{-X% zfSJZvgRCC?Cx=g{n{fOpdp$5T)OV6QHasvSmqTVYqEG>D7_S1X!6C%Q9grJk@7{p# znE;FW_|d+TeH0|lpk#p>f^RmkuU$jE^omv;&=>IW z4cx#fZs_#!?y9d?^F-_&RClI9H&9qAkP#TCIk{nN*!)>EwB(F=N z7VxI+r*v=YW7+XMWU&T=Fpfwu!_|PADJ@*Y%V1lQUQ}pGnPgNk=@p*zuMx#x1_w;~ zf*$z}Us&v3eD>A}sPT;ldurj?1_N+|@NW=E7C-r8_%uZ(X6)vQtZYDh zL}^f?p~xje^1YJ3)VVZy`@nLw@`@FDC}x=ClR{U&`X`|HV0jXU$jcmJ<1=UiYT$y| z5Y#2fTp>hdE9s++Wcr}Ari@bda!o}LFok@MYRzE9DkyLX`_kCzz9`I2j|qcFL|#Q4 zBj0gyXgz_wZ2z+}6O*$sy9{|_0f_9z3aR&0l9FQ=#<3kA%cIxv-D>%bo8Azzi?0pj zw^^6Qu_hB_J{HX)0xedA-y`QbIkZdx`q0Vje!>iZwy}VTeswS zE$d!gS>1Xu`E&^f?CAB{7IV(~o(joRFL}1Ed3LUPcCI`f@f?yoht@p(tDgRM{o=_p zqNhLNIV*Y2u6f2+J>wD2gyfl6up^uDI;pI6t*mpktaIgHq^w&i>weE!@Zw{lyDj2u zmz?eIIdfk;xo8KE&)Fb38xoHr5ofjJtbWhwe(~`a&fYk?Zq->!)*ZUMDk--P%M7b0 zT2Qz!@IW52tp}vmZj9DQL620>vtWtJ!(!J_Y1avihe*kgR5G-Xi-k&Aja1tH%Pqa{ zo{4N3lC}&*N{6M=VbS8f?t?svh@ zkF=kc+RsNyJ|~rYj-|Kfu>NmzqK>ktqbTYq{UF=42m2au)^(dz>OOE2%Oj4;XnDhHpL^wV%e^b^ zJIC%CBIWy}@_qQ`ePL)}=>7b{KMCA=_N6b}`a<}01j|l7;^~a!ZJTX zbU(3j1P<;W_1v?4Z}^A9@)O*M<(y<3)#9xMQUX z4(^C$r)1eFT6RV)PPULUBLX~rlJ$JG`_R!c-4Dup58~%unQg#oyjNc_U^4#HWQJdO z9bq&x0ulZM(H|ZM#SveK;W2Ujjs?h4h}z7Hp_F9_?OGT@`ZVFN10*uWt3=I7SS(~9 zVJ+hdWWe4*c2MDZsSpiA>N9a(SByyz zs!?yy8^>?0oF9}Wm|v|NQ7N-C!XKeeNcM?6$zoKqGff8J9lRI*0?yl(FwC0VQ9v*x{6^g{8C;`MBu z*$%!@QStTRsH^B!spzT>8?YaVx8y9CqB;4Cdv44w7$Nh%I4j!ga7SzE7KWF4Xs5tZ zv}BYlWowq2RZ9(Ikd_8+{T_BLNmw1b)^)VWT?bZ-(F&du96Tl*YnC+$>(pO zTQtzRj2H6W{CD6>1=d&SD>?N9tZ%}T4y@th5od?w?1;l^ZNyq9S?eAKtNHHh$JDTD zGIwIWF?XiG>J`z>;f_{t3&$4yFAPU5`HS0bSre6 z_TS8#UeIU8)FG1^|4yc0_jxmfoM_yoU3|*Uw0cwQnr`k$$h<+k6gB~Nn?Zl+baN!m zn>nY{7}@a{g&W3zZibc-G@rF$J#49Uo}<|+JCr4~g|atUqU4Ub!c+pACxvY|pN$>! zxB@`Pka-(W+Z%XN&uSa>gk3w%=QwS=%z|!w3JZsKCTGkI+bTu>f5ULO+7fLTE-$t1 zL)jaKb@BPyK7}~>6xepViG6W$|ymP%UhJ z(XgP0X07LW$BVWF8+=92L#82(F>47FC5PP=WurD^`6Hkl-kV@g&Rh9nFmSDD@v)r^ z8mA=q`;2G7P(BuJ@-`aV(c>N;7&$t8dIYbCQ$~xgcEt3dJ$F*@!CpHIZ^G{~6$*i{o!%X;7)J7(1Zjz7bDP1Pt6>^@06SE|EB>l2H28WlQ z=no5oBCz&Tm}aru6i%6}7)6w_&`)8rrhU^Fe8SrfA(kA-Vs-5IH6=Aae7jOUZf)qED**iqyT0c{B8A z%yH2tLvlAm-A?L$p>k}HKgo+IZM%WSNy@$wuQHvXMRFRc00VE+eib<6m6Pa4p;-MC zR!v)p5ZEh#_nXS&3>c6pIi&1Ru^bfmU^ysHo6RA$-LR*lg78miNeA!L))x!Ojo`+> z=cI)F?L(%)BABo(4}S}%$tA1ZmrG7{#o!qr^f>fhc;z16dAK5^b%!0TteuWi9!%cXOoJY z0a4I?0(qG&cU>0BbusNC?0k^X1UB;ow@?LC{6NOYOtPxeA`pS?KZCaVI4<;HsIhwQ z7ggSxmx`L#iuSA)?YUbMDLN<>9b7mX%`N&sSLw`OI(qvA^F%2iZjszA%TKSmcS6j!aMy!OAI$i$o~0|~Se#=k=7@Wzga}rh zs~GGst`@5ju@aKPi;idkG0B$@yIQvQ?#_3&|8VbG&#Bd( zQ{u?uk)AVB&l&OTsMPaBr0kqjcJ6-H(R=QDp-9&`sq36r9TdlX()b)a;o3L0tX1z@ zt=<=@J|I;e5OH4%-XACx=zqlJ%|d?efA`G0 zke+@-s(2(?*$^#jcy0KV;pP67qmi-$QrUrMP5WDiUO%+56HLpRUa6)x%C)?e`+Dw* z?QUO$>z26g^{oVhUZU|(hxi|3Kg6+HzL$-nvjX>$KjN&Bz!ge-katBi zv<~IXszO_|@rq;-jq(>JrW}zC;!;1P*?7`l)okKiM8x2x3;ZWkU|NKrysn+{y`*2( zFFO~jmYwv+3JJvmHv%zPEa5rwC1tS~YWp6&V|a}CXu|i&X(s1oa&E(cw!`b>CtM`F zO%91$$td#2>Xw{cRF6L+M3lfp zHXX4h)-CmBr&cTp;#Zy}%Vxx{KG0P_X4hMB8=SIIXTb;L09`3)sCFgr-R8R&A{AXy zMHfRwOhowch`Ua5*S%9Fx_A6bAf?xydF7eq9I)Ig_eque#LBL_!f%Y99^{p*|4Kqv6LQWv$pW5z7WwOe>Fn*SWT}XLW1OyFHPuN2RSt z@42L{gD?j0R^#i9%ljkMyQS*g(T0|{o_YNlacftkp<8O`22OeF%F#A2j@pdE5xl@&c1~h4C$lTCr(@niI3<|R ze%j>i`ZmTRghG*TobL}7^v?kEHHp8$@hJ6E=%L zNKBByAQpat&`shZ5vDKW|HChVQuqv_XU2`h%`%IBr!I}c%Caj_5c*AB%51E%4es4*nrvAn92e>A=fXvM4`39mS$#~jfxnfJC;@_?2F~A~Y zHpHcqj3A9Z2N9_9rA;wpWa35EbnznIcE|n=%!uDqmZ;FWQRU8OC$r*J_7I6vu6 z`gmu^oJlN6-G<=s)V|g93aLJ477ug7>Zkcmp>`}m;LIA> zqDtGU?ePGK#Kx~HN*8HiIb4zmq5jo|;XSvF^R^A(@3|ECQ{WifN*iBv$D1Z*s6ZhU zIvx&z#h+F~w0B8*d;i8z0X6Z@1{Kg^Q;o`G3kLQk{pfL!M&HE0e4*A#UugBmK0Cgd zw{M~a%O28#|yYR$Zq!c3z6y;Gx2^-HiDOrt(I+M8;F7Z?vYlLbT~4j>xI&&|T3 zkjyDQ?T0B6W`Bp-QnP|K&a4u~xMGb$@apIG)!jZa_T#}5YUsbAtUV2bslB>N;0?%$(* z{WK|D*M-O5^1bd`K7O}4Qhz|IKX6^P4hHdsQGBN*&^4G<^u29Nwp`pc6^XG2J4<}}0Qh&_8Sj-WZ z&1GVLaj8|sL>A-|X(aGWw3tcUv86P2Y3Mb38$;P-!=@}fw&F;vn(0^O{kb!BobVwE z^9ln_jG4H2o>!OexmEm9>8(<%rcFb7v+ez&N~x$}t*C9asBL*BQglEnI=}?!76&6v zPI7Xx;GFfQo-Y5z(~BK1oVjr(DOzXOSqs5=%PW&|Ia0*W zxnEEd^?0LY<iQ#9N2IDF(en0ndzL%r109@S zlS7tza$vuwunKGO@VMk|TrQQ|I~J_>-BsbHh`UvCw=P(*R?92LqS3nd%`&M9T2Sz< z8ywEP_iMLGwcA(DMrsd9wTHxt)O*n$EvQ)6SzMm`?vj@WZw`vwz}-nWxFhaklKYtG zK6byf1scT54N?UdYFk#EQtd%3m+v>VzQf;{eEZ2ePu@KiY45*R8)+MgG!08l!_m6^ zs79Fw)hP3z8fCC{kX7heHzS{qKg!p+QC7W^l(pgxseQq?k61~{T9vzTNAmVad3(gP zn~B635f2^+A6j!|8N5f9&x-CxgxFb@$ zO)B2Do^A4wM4|^fu^%~f4zFadC0(~J{kp;Agd&)y8d9F&XIGlvtzq(<{gS6&%*${q zYH$5-PAoTnefEu6v8-RdBY8)pydxsJKfYg3MvaCHRIbu^hwgTXm4|Rg@(xRRhsCrz z(Rk1>BldyLTD)edTD4TY*|t&~vFwv9`$WsW_r0aBj@&-`wI^;rvAj1@zT>VNoY9E) zpyWNc;8cVjkH2XQANzXl8@ZzUIPSX# zt7S(R-t-}tkZ@a+=?#l z$h~6GJAymnI4wC&i;0^QZXW|WB{!*d3x>DeEISGk+P0z>3%B8pShh=+?P8{zAsHj0 z5|Z(vk)H47x*K)hZ?yH47{A|H-cxA&L7^G`VA&RsVpr$d5+rGxS|lcBep;9e_%x^@ z3#lw1{iv+_3ByD{)~-f`QEMT#@{M{K3o!$frwGD0Bf6K$ke43L#+ zl%3lV}=J3Imz*Z zZNoED2usGU{1|OBiJ*yKi89Le!-fBVHi#vRK_*mJ*fJq$2Ymb(7}U0&lYLzyeWYJ@ zvhR`OT|IqV|LLKgkpXDFu{}E2*o@Q9DbX8MRt`9_uHR%k**9|fsq_F;JVk|&J9cV# zs9TPyRu)vhSIf$)g2#o4sgO^cms5}zRjPuJ!^6k>x`yOX%rZ~1ZV4H%L?By} z?ReMFk<(pA`Z)hnQ?^rmJ*Q6&jGTo&UjG0T5N)U~n$6aAimR<1kjD)HMOs}aZ{Wq(>YSwS%oqlr{NRo$TkX9}CFV^v>K03|?N|5B+p z2OUmr1>)_*5&0iG#ys-c|pIY|yAO_`ITCaZMhxX>@BfuTwCV=3BZV??0Osv{GR}pK8>!at%+MZ`iw+;eylwmn>T{HUle6 zV69x&$&+1YpExf!&=coXK$aoi#?35a(PTq2JaG*zPgR#cCeu^e9y-%qLuVW1GBjj7 z=>%QVu)$d;^l8J>P8!Z9$1F{Nas6>N3L4l{OVOG7I0~tZns`tJzspM9tQPTkAz6)N zbH;VkQ5+`HE7w}9uC5N8NFDrG(&&z-{x7P_e!Q=LM5P5!umc_VIi>@jM6l^P@G0@) znCQp@%_`5U@GWcchw0E`{KW+j!M;tX%PTRJCfyh;6RP$=0Ey{5(dGwa4@>P+ zlM~+-XF}rRy~a(@SEPhYGlE~%g>H;bRDMQnV6gocMpUUtrO!_A z{Qt;({2?YTHUZC@K(h>>H!y}F(*$f)u;v>rx491r!14F%i zXSjiWZfJOf>pL@WYUC6*$v-1&dBiEY#Cl~C8#*$jMpisjCM_Bj`mQxe&Nanpzf}5e zU-0y1@>b2Xa$!I`CbCt1OAPO(eZhfEBrB6_sR_z&RY_fVNKz{K<2bgXvN1&&hI$$s z)9Del6_Tc=eIvoo_a?08srdt{g)m7`J=@MbGUX!^d$h!b4h?*#9zD*%1_jQTW7cW7 zXJ@Yp+^P6UX;@MFFJG7)7x?zznV#7>mD{kIXW7!a5(8$~=@jdEYaw6l#Wx zAHhHm)1>{$q9ziiG;nxIU{+{vGDDsD>coW44;e@tFyY5xcQI=sS-fM3;s^-`?V1W# znc}m*DN9!F`5v&kYA-6E?L}?hx^1j~_++W zm!&i3teM=aIKC!t>$>5XKF_pnKB4zyt?S7B0IoUv*UY6i=Ir&)8&py1*9{dEqlzNH z`9N1i!QtQ$&QZNN7he(%MDy}=Zb%njjTTl!3reD10W5U~LdcFeiwV019a|;<6+#G}s`mbm=!0n>$fE z$mOL-bY<44)H1qBd^xEgBuuNHHk3v)Xq16c+5>EJ+S`p^Ni98Lms(!riXs~rN-=DQ z%>YYcGXM;8mHbR*l^Nbj2hgOOX64P`#IY~D{k8$@Z8Od@Wj?UbxkUMNI>?0W0SjH7 zk1P2#>4U6WMix4sqv`1sEnq0U7$yvm8?z8|9i?EuDkghgu%?FqnoTP*^P7oLOk5QN z*w>0P$}@_B2){(>m@>>zu#zPLwxU`@L(OO}?qOmYZ15nM>JzBV|3nFW0w?H#G>Oc& z2M>`24tiu3J$q0w==&4#7^^*h6EXq9`;^TIa)!w1B8OmwvGGa9fNTqGz{&Shxc`lu z1LQDveg;lHHsPr?<9q)GF!IU9x8IlK=-Z0S+kOYT~nNjQ(I{a$M3FV#ng{Xafr#=RR>G zBgcc@5jrFnyduQ&P0=w`L}MUquu-9w;W}l?i_gaAkDD&qkmX14*sY60;I(pY^0*!?(Yq(MF;` zaS0Whu4ao=y-zF{Ufj31@7;>)$4NY)ELys6-H=sGf*=VeN9V1NmNl*y+AFZPO^(q? z)4ww@^Ji_jfL)M_!K&f-!Mrjl*yg9RRB_xLFQZT#=mqmJykBFL!j2NLeWn=*&-{V? zUm10vvIF$5j5;6#@T7adF5!>WPa9GPMh$h4GP`4@%}gDPZ$KTS%%^JV0Jb>HLLU^5 zRSLk6g@;K^h!HA^y@}G(FI0d5qu<28e7$I2u*2Gb9o7c2(yRsG{Bu|l$l@)$^D8P@ z{Iqb{pg^(-=^*EyZ$4+3!q0xeo}T*ox8^M=3iP>&@+PJC!x?FmP>M7w9hN0L9kO0g z1O$XR*zhPwq^JH>he}ebnz!ymc+FcyF`OwQD|B5VEdBC1nixtt8}w3&wG1_+Y3XG? z?{*4&!KTmGYnY{p8*j!fO~iYLw_d^_2uy&YHCZ-Le=U$*C+XAp6{a2Tv zrD#=kc-I>xQLgGO^XumD#jiWxa6;&D#kI2QyCrKKU8@~k@76>*`lXKkcb}3v1|aNL z3o%C7Q76lK=U1InY>u3}+p7tLxrsdcA46=j-inv@c~x6T=&We7O%!ggYv6N0-d&CIvPv zI<5|9Utb8Hx*c4%;`Ijvx3GCx)3P`S1D)ly;U~n>4$<8Kg3ytRGFqE)I`YetHz&i! zmu7CwEF6iJlr0QKi=dkwHZ1vXh1PX8CuD5lEE?AhR#*A`%7)wXQf22_W!GvY0d{4- zRN23H6t)Y%SSl3muvpjsZueU4 z;A-vQy?$}zoHQ~nja*tAnO+^47H6J{j0n<*Ao>H+$kj;gHL3O*22Lv)2M+30T#9-X z!v+By$Ya{%!$lX5Vm%afmo7aa7Bq>DrU!XNOZf})qNOac0z+jCX4(0)6_^qaQPp>1 z-BnKOt{%YfS95Nx^0oxlH9ikwz#EE;1zz+4x;*oh;C7);lT2WWJIof=lL*Y90qhfpS5O zo3AMJp>RR{#OEcaao&;i&u9HsEv8ysB+C}cdLd7N78jI>@&P{ucibs;-$bpTQ>nW` z`X}rXo?pnr`k@f(2i4p36~bq#kte0CGt#4}w)8gBBjBde%o)EjYj*NQ0n#3eU#Yo3 z577HU9_ZkdRT*m)g@X!{U6mojqTXK?Ag!}RT3LcIlywPg8yo|nfu?y2v)5)xYd2cG zT*5lZhSpV5$AJ^)pw~!Tz(mS+^#KanKE?Xb9R(4#l zEnJldqy7z9Ln=tt))Fg|^D{2K1Zzr7ZBp{Uk;KC9F{mm9RN2zn#QB+EsZ3jj%xjyF zGbPlf#=&QXrIcI%OXZniX$FS5go;h1UqSKt%5)81*s44k=uP&_m70WK=no7e{J@GS zJ0|lvfxhI|D+>M$rQknsA#zoF6b~O&TqrBk>hXm9k$)8{r|a_u1_bwO8Lpn05|@jcBJ0V6^` z3IpaMhaZ8)hfqyU7CE$bkqLUD8QCfq6}|xf zA8v=Etg+qmdNN+5K7c~Iz9jt-tQHG#B!w|)>>BIsKSDCe7lL{f{%w4U+0mMbP5KNg z@ya+=MkUX*2=4j8Fdh{ixcz&u^b+2Edj^y&>^y9@Z%e?YBogbm}{Q?q*^CJ%Z%N(tp z`5@YFAm4A|U%miOhZDxJc)Ut)l8bn|QIpUTmhoxEsYz(@EVB}*>&a3NoCn^r`$bjZ z+INhRqE@M>6_9~1S-Q@he^v6Gl5dxN7kmc1iQ=@?V>gezbo|!wbz>qfOCY@oiGF8L zPy&xKe6kb6=e7Zrve3CLV3e?-@s|jv85M+&g)$7u-(WP*si}T~KQdimJJrO1myt_TLH4r$;GQv zQ_nUTVp)U%26%bXwlKa!ODZOm3w_(m{p#0fwWdb-FkgmlzejCJI9K4vsUnA=Xqxba zzaxiuF3LeGl#a|%p?;KETQqwL$H*BZhbAal>-&B3ogilj4ho2aN1(7>#~$PsP;KpA zr-1e3oFm6a&LiYJN)BW7D0@%xMzJ2Xkq?h#{2rI!p%;D%{u4McE0tE(z5WrsRG2{8 zGge5;MVO@sdDv-7oWcGqou49HrFebhFa`g_Nh~aivf(TPqYI%Rsjs=>cF*dmT;voG z_`M87m|ze&CiUk1(Sj-o{D6W-mp>=9b^Yj^*!Jjx1*6PUD-||Hz4elJ3k-cdAWuuQ zxIrpzi&nHs6}zG()$3Ms1u!}}4qZjBz?1>cM>A-^JL2ePWz^sqzm!7#jFZ=H2S1$L6yNAX6M9J*$pA(enCeX??V&MfC1j%3jJ|@uI=dHv6b;;MjC!Th{G5=iU!= zX6M#llk*>Kx{lr7$^N$WyVe!bD|eJgc38D^Sb1nQYi2!p!UTV+MJn65?!>nbXfpgY zIijQNqdaxFL>%Sr*eN-7zUL~s=@Gq+5m%GsYI@J*y;<~9@vY*;VntQ&!kax}Celah+{%>Oo)z&c)>V`N?Fh8m%Z}u`{n!Y?Gg8%yLI!BW{D0IcXbgOAbg( z0O4aW_$UKMVm5fdwM!fnmhnt%zkFi*OUTFw(eNYTPZBVSHQ^&+@V-l6OhUyCmja`Z($=q#E!X0rOmK=0G z>VuLxvGatOJ4Cl-2<$!AYiiKNoE2lI-#&6k( zgIe|9?*DGTn6odEvroz)J@^FAa6j=3X~prCq4J>`-7jj~!@G>X*tKuC)A$daX841) zEni?5b&{WFQ?rHxn1h&K#{Y+O`b>iV7r=|emE`?>W~1NObJiXk4(^*hkuLTUA@*^{ zs9oiQ`=&aIdLAMn^AHM|H>d2Q5<$nV%xC8CDR$K|%g?1r*(v+uiPY(r&rUnmG;_E# zEBcvvlv+{{e6_43cTzaW+i0gc`6i8PV5Sz)hB#k?Gaa%wFtMG&hn%;BEP^2f*|iWX zpMe8{-+7Z>H>1B%JF^RGS0eA?7uKoG^Hz;Kow9$O2t&V+r-Pz9?F?t)CqZJ)G;e** z3QKG3H@TmRvpf_VcC_OR?vQPBwcvAQ1M2g3oCkqg%sbQvhlWyQ18}IRL#PNjH=QUy8$xs8bA=3=@vDMn zm#_~#=n3Vc1$Iz*Gh6seX}_XSQOLzOk)93e<_Z-hdFpBP+&NiX-N=%1uwu~nrM6Y%T)gIgr7!p2vW9M-tL?}^>Ez~<)XwA zO4LsqjMfyMI`)iU3}2N-srqSyG>UkycGf{EUcUIYecl`LG7g>!@)ZuA(gIAY@5Izqo>q%Y z*_`wtreWiY);hnsg@OM`&S?rhGaCSt2WI6M$8CtQ+&;-ovd~y;m3cZ156FzFvDH8E zYT^u(Rubq4r`4HW@G1KO-zwT{NN^F_z#2J>M1(asZ_DSt3TNThFpVzaMX-!S7O62Z zanSw@=-Iyq!N4&ppO)_xzj)?}wKHR@XU4?OKN&eQC7qeVm!*lOo{G?1QE1_kk z0b@8$Qg(Go4yJ5lO>RB8-D$zk`b9X3urh~~wl*~Fh$ZCjfR~o3SrkUvUsJQh8EKwA zk=@JuV&LWA&EQL+TcPlX{0?rCX(BLg&Jk(^F0~O@rQ-^o)Ce+5B8wWK9}X;%-y}cd zTl_Wo{)Qale#^%uTq0jBIrZdlFq#R><^Kt$A1*LJO$&S^69V?e21qY>qgE%Hu zW||yRm?py=&M zon-uNu@{F>Vue}Q60L7uvg1L-i4sM0%P+j;5a==Myq(M@U0yLQd$A-2S$Sv91}QLtbU5a7NbTa2oJb6Rm~E&Q{?vFtrjii(W;$mReM*f za1ckNs#~h+e)rO96%4RdL@S%c_QPT&R2j@h)-q@ksFrsrbY~PL!d&l^Gzp#HqgzaKNW?-C(mmuD@SVFIBX! zRcv3a*uHWuQqe6{bhB<=vPWFClB+hYm*ZR_u%Vr0FkI(tkcwK+{L2Db*|~)|i^iz8 z^tJ3)vcvX>w-p*BqPKI!AfMh6DcUC$?PF)Opx&-6QFqmvyKxo96x|VbyX0=i!7CrH zXCtYPKeFhk1NA7T+Ku<2SbF;IB{;b6mB_yl$77P?F){6yyNuGIJ_BO}?8Izqqb#cB z1xwB7+`}9c%Tx05m77;ynz}WGS`>JeTEv1n+&Bhi&0W9ht`C1W^~Y1Z6ZR^3}xvLfzXl6#kk`^>rMz)5M~^P*>FaZ>WM zt$8|DJsm5JcaO@@Kr`UQne`$E@nPWr6_labacK0Xa&(T9p)Oz_*;SZ2dzX*M<^dCC z0u@_^jJYFjKPKi3MsfzFoI%kt$od63ILE19{DfPd@3IaVb>GYB?&#I&esD;Shac)} zz1xjHv~j&#j6ZBP)0-`3db7RTiHDyUx@!j-bU&@9us?0E9V<2dw1Ye5G5*X&VSnZ^ zw<;Ma#;wUx%N~TCX;sDx z-tq!*YphI;A*F6~t|NLd>$xnfZ`p5h?V&z<09Mg#IAH?tpyGkhNdu-(_9gwiWu^g| z7&s3hjmH7*lfU?3DG3(v02NLXr5C75)+A)1`fFFLI46=cJkrmJ#0jY25$UhcCJ(y= z*mO%i!Irs`_&a!)9}l2oA(SVC$ccw2(1cK)5F$4of;QjSB{cJSD3AV%@+R}z{u>CL z+!ju2El4Q|W=Ja8c~?A#c={lhn)!T|gYxD#%E1|OA_pgOD4-m8_k0feJvU@uGzqsb znpBc3nYkH!A%iB5n&)sui50S|rCjb5X(2z;nmALT*kTKdwyW=ZlG(<2PaDPh6dGO?s-)noN-| z)s_JULJLB6#O=nZ$>^6P?+5R8^98AI)u)S0>L>N{`5GMfSz0jV6k4>P;Y*NRVmKl1 zxjcpw@SDU5p4b zBXfH zV}I5js7q@wya<&c?JcR+a5tby)B9l)EewcPV-wY=N|uM;%0^8`x?JzfnY6jNdA?ke zVrKa5jE}?eO!$e-ROQc=&oqIG!EbV=O2J&)G*m#5wr2<*rDHRecF}W1Y!<|CGVM@~ z|1VQUQKnh9KG`lwA4UL}SjoM)`HE15@K~rKIim{0fTT*z%%}Rg!JMj{Db?XOo+&Fs zl^cwL6s(iLH_+M1p3lj+4&gS@liTAx$!*w^+;bdjZTzZQ+xW$770#=|{#VX?6=-c` z&-IJ{;WLe=9oilUHzs>0>CufO39)rM&|A?-?m(YCYzc%cn5 zUl*zi*+6TShHAp?nZk!`p}OQusclv4vVRVGFnifLR8^mpJZeHU!gU7K`vBE7X|P=X zTlH*aSgzNWbTd4bP0eRoSWd|Wu)IGrEYBR;#5g&?@ZrG>b0rt5f)>rgXWK(8g~RD7 zY$9$Ki)&?;vC_CgA>$VxfV=ZQp&SOj0=wni^9?C8-ovPt6zdM*%v4JQZ1VSPl4?oE zwwb9+8+6|cm}BuTU-ONj#?3&)eA6b{t(Uc1U#J1S-yh0`dnDA9q&k7wQY?8u)@pAW z?b9~jtjQ}g?Q@jnHNbMQhMJLfmKM(A{JZAon%TUGU)8*+zp^FK0$=>g&ot(aX><9{ zGD9k57anK0WRT5}%G)%o((+r?Ff&$ZNoj}8&5)l@v^oy5=}7p6KgIYNPdwpEXTr}P zPhAzM57pTemO8=UWGEdE%>0`)$U8OPs)4-BtKZ>JE1)ff4n$dKzdC-UQnH&W=_6Fq z^mG}m-TGYX%ns1;_)S9bZ=K_#tZh!Fx6NmQmsD()ooEI1Z>o)=O;e5ke5>HLP+Jlg z39W(8C(EaTMJ_Oze6Nn7UM2Ikjp%^+cFYYYH%Pl*lXkXt1kJZ=#(+Ylg;LhtpLqnF zA{?0xSNsTnI&L{gMXQ1{v}04F;4yg=WaR#6Ib)BfuOCw(x#>)B`)Rh%wvjlO%0w`; zax05e49OapFQUhUtynv%M7Dz5>6!5huwMs@k0}C5Ps>V9vTV`;#MOu;(d11V8XsPO z^Sc!95;{?Xbh)m|_{QT#qFq+Vd-!*vtPt%g{+xWTY`a(R4@EyK5+6Mm88|NuoX6{> zn%5d$X$ZGOO4_l5tOQNhZbN#%1G%gXs-=i#Ut4)!BiNq@Sp-?;(K&#eF-l{M1TS zw6SUV4l6xcZFd0V# z^JROJB#1V70R|_@T$4VQ&HFBnU!4jBlNPk)I5K*y&6ztOWWJqV|gU>r9Mh2 zSSq8mxCKY`r@b7Li40bpoCSu8Cn^`MitBr3j-4EfqjIxbxg)aygl2+%Dv`^06j{a+ zX|yY`aK0{w*5EEd#Fa_61`ombZ9?>nO9*DlM;YNgOl8hcgV0&Va;mbT_JwE1V4~?WVym$B4?%*A9JOJ2UrgQgqa9mu)TLuKzpjJxhvh4XnCYQMZL>v>*B6W zj&l&pyEZxDW8$pAw)7;FK9eheb1)RRQXfC8>L+w(ed?5yFo&%4BP#;aPS*_dEL4`w zN!#I36plZGzP?aO?LmkP+WLgZgm07cM{qJ}Agcf&lQi)=G|*{_=VPXiUkeT7?1bYW z4P>jXwk2BAuxx$f5Kf;BKl4UAbgW4knH-}MmSVAC9<-ch!xNhLo-|E-xpBUW>@v5> z0>1p0qsRV`ru{iJ?Mc*#>9IFZlf|6}WjNxtF3i8v6Di#)m2O3g;!Bop=ia{>{m$sO z&wckCdlU7Ry=HsG_BF?C2lUw039y#dG@(N35Q|;`t28}!flCD*Lh`>U@JLj{-AI4| zPgV`8s5mwqR9>@nja#BkZBSn?hAlF3j7k6sDnm?ZX3cd5EWsA#^!T>8Iy8mGSxsbt z_}U~NAM0{pS6ro?FjQQlyNW7Y4JTMQA|FCeg1l^S%FxIxaTsLk^AAy%V0i+7HRvsY zZG$EvLxT>MLOev!u}?wEzztPNDQ+1=5{HR0MFxhM?Cb~!xjeBvD##d5R)PaeabMH3 zpMo#~s8-?%r5rTN>zM5Vq74$Z3u4Y>9+(keXp@MjI2NJVb}oR|zbP;n0D}I5NKgg_ zLLylS2eu42vSrYM)2o*sf4l5XnZ}|)A{a$rAo2e;ckMB8UFm%;!@vwP0~a#`GcYg1 zFboVY0|sm`j(NX~#8eUJ3lri&zuCV#X$e z-s5<2!FvUOr1@)s<6XZ}8EdO+a-{o3iLVhJ{-|RK=jWf@Ui~ugJxBXA#ECCGjDK!n z5@sGUN6XRrSRZ|!|zXc#`-JWa0R5=8(n_7-4|{tZMG24Il;SRw$! zD`CV1?uSnUW&pZo)}Hr2vWpMP`T)}qC07cNRR(a6*Ar9=aBz#$DyYGX;YXMZnUFY( z=b8~g6`Zen)#v>k2oy}ldDHkek{=$_EWTl7qF$o;-_`$lt zRRzR22iF$}9td;zH*8qHK^L!$ z;BCfOv*KVMV4UNaw_Xn<8cd5#kb~J5XXjwH3rX|QBdP&mjPm0rT0wnOF@opRz@M*h zB}ZnI!E|5vK$&pnG@uv(dJ$gbDoBC$0Ad7?@7#(A>8{Crpths6rT8o>jlmx zS{k2|9ejQmP9QxR-575~Jr*OXT!GPql|PWr6-9z-#2-RuFl&m>2FJps;CT%iBU&E3 zR-z?SM=B$zjj#Rmi?i^#FczsBZwWT-5;k}nl3^sJSj==x6>Dw`#-gR^pe~#!N7D~x z?5Rj^9o{3xMq8f@`|(|DUVWrrO#9&5hMyDRLwWB7$A9T3D~)KwDPw89uR^N-4BvXb zOfd%Ok$ycH_FPM5D`*F3%}ndU?e%TKpC4VHXSJt4?jNL{v&?f==1Kr6VXfb`Hf~uP z1J6@yE3>vP_wAOJFKa_dYR#AcfTqk|v28!RWk0+=Pwj2Y-uBjt*nC$+=)sb~4 z&8cHKb*PB}Y5^)uxs>bj+m^eRyLY*~CEx*J3N?>1^XPK7lm*DAg1-FSqBZBbHZVZ* zn^}G{X8|0=oq1v{TS>cbYYYsNV<$JOsI8CL039Jul4TqXeIV7Kd8ZgS)h3wTWt*1M zcoT3XkUA;9lI7Pfcdxuib@t!N&&SF*CKXn*!bS-H3f1NF@I_dJHX)Q86F;oK%If;J z>xQ=KhG^Xgs~dq^K{oM#)2}!sy8PV?(1Q^4ZGu$Zx{~HUPDM|oZ=`5Io{?Bq4sgNi;T`iSTY zrDSE=c0AR0k1zk{ayRa$zbXUWh7GU21ui>!K)SSrEnS^!@MzrC!7WQI(6ug-&# zfhFWt7~BsO#?0phQu+)lZIkUgMdhTTg;jKJmXqO8S~SLr#)!cwJSPHPs9UVNo|`?yarLKD z?_DNc=RcmgOq#CHrYo%J3UI+t!#p$06T`gZtlxGvZaHxfakesN>n3P8omx4GmFrr| zB{|h#0x26Mo1?7x9H~bmxvSQjn7etSmbttAddYQk+tsw?Y6`qSUG2=(4jN#2uC=l) zUf(;G{2%t-?j^-nH_L#axo}0cP|G~C%oEG}PJV?{S|JrJZho5-Euxw6$`+V>7T6vr zfP94nzD%sPhhL{DjCr^EZuXIac``kRv|yeZ7MNjy7#5_Q!l%ji=FFD+j9>rn5ASC| zM@-Vg7g2=lipHHRIB=&_56=P+ZbLK}-Ax^_J{!mZ0%oIIzLJr#6&)2XF!2HrFYFw2 zt`7h4*dLD3!dg}c3TJifVBJbOKsC{>_RiURR_E=(w}=#EYwwO(RQ9*?Go6ZQ(wNL;U4>Dm--CCMmRfK-p*TuA-NJNDu==Z}@tUc>A)(2V9n$>RLR@LXD+M0!NXwdce>49kX!BTO72;s}f` znvCyh-_#OAE2vc(TEVP;OTJQd8&kItb=$7i4BdRK6#KfnmRMW;gZ{xlCv@~Az5c+y zQ*#6%TOHkS5(^~SL5-cv*m=*GbMraBX0?tQJtbuV?x7D;eSZhmsV=zNB>+Gw>?Y4H$7_E^>Z0-U;@XgpQ=I@X{N;LH36sG7}ya zATS(;2@bOc7{io$U`9xIfRGFepvcYN#+$wJm7KdOTlR}97HiBV4;&CNjvG1|W$%Av zcu3RRp-aXKvSjgBngY6V!7=ESI644o|`6RLv>S3H$`+)&^63(L}BFR|0*>#F;mk$eb$@Luk=v8gXtaj^cinH zx1#aaQGEf^7u?hD5Ac|cO%LC~_DmAUb4|#1!Q6Zd9!Lv_l(x3?ZWo0}w=1#n2Y zX+!BM$>|uvh!OR?Z5Eds|`GU0k3TGTUR2 zu=XJ3Jw{_(I|X>Ri95F*bKV;u0Vd{W|I<+tYwa86S&S=i)cVLdCx~g8E*xW&mign?_UB9 zriIV62RS^fc+7)beHJ#lq=1)qc?{og9(-BszPL+(*)fB)a&r7f-t%eSd(Y z1W0kJTsB;S@%|N%pcoPQG|4;_q!0dS_Q#$ zu#YT)x8zhc?tDYErM!YW#~8fS^EhCT2|$ZL5bQTob-_;Yp}UqpvE8+87oXTFK0%9H zSaAz_TBzD36;`0tMAiBC)#6)vrq0_|mu;!b)@CGK9!Q-*j#!`e03c_yFniW$VS1p^ z!t_v+$<(H8wQWmn^S?^f<_V~%wQ_P+AOpyNX@P}V-KiYm=@z=)u_sU@z_rrjCtGEliG$ z1ye7M!wJLJX1%cb0@$-ipg)CA7QxQvMIDY{%Hqq{;HmQB2751#P+lz(9r~%Sy*xDz z+p8wMdUPf)Ex}Sej_!CCw0F837wo+FPVnMT&Q~Ra+N%rDkA1RV7KT-0@1Gcl)gS{p zv-qvy1t;9SHT}|}*N8qMqK!??jn7^UfFN24CeYQ zK2zVv#Q8&xdON|?OXI#vbF&lPTj-^+rekLNvz4tx?yrA;h(js3olUIjv6yV#c_zna7>wL$oo{RaO_3hfR4kF&UmVjmNCOZZ-pSP6z3sZ5dOFS-MzFQSSf zrYHi7q{&^*VVYcjJ=Hjw#(5)US94(5?01ur22$KeG{>ms7}FfPkrGNt7D0v(AvbiP zbd3NQagP$e<^giQig}sT0!XAEB^VO8U&Xw#RRYLZA0;a<175!Xa;2!3m?V_=`(XeU zN>=3yx5tq*laRl*xZZO2<&Xlbfq{*J_h1bTtb0lALBR-%l&x!7Ym;lHcK|NGI-~&J zhGAp!12ea7E|LLQEjmX=$H@?!|2V-;O>&RDq*E{p;%d#Ba;<+&{Z3Oz0nYWQK=p<) zQ2(QO?%Yf2okHDOOGp8i_11tPFu743xb&Wl)pT;+UeYJD3qtyuFQmZh`eLAUBWq)F z!}MMstLu@O`_Si-GKIV~=bG;>NL0ZZNDlOGI5!qQC<%n|KKk#%Z`0$yHb&){@vWy za+jNlz2ZhL6)KrfDG8~Z2M~QV$UDr0!(krLImn?C$ZTdpGjwsg%RfV0^t?oYDc9~VTvd_kPLkV2bGukB9Bw-#2mr-~RLU+4DbccK( z4lnNFmSQ6t-sEd#?Pk%f6UKCd8J+Jtn{<_t;)4n3;ep z7LV_PA=Q*1pje4tB)u3?avM)5-YXme)5^t2LGb|Z16;j5si_lFODt1rvx=w2FFZAF z+lBI}WUmy37S3#n4;E5zS1e`OvpWq_w!UUvzApE!z2!_ySyhac352H#S6;#hllx!_ Maz9I8^SA$h0-B9b=Kufz literal 0 HcmV?d00001 diff --git a/backend/app/api/v1/dashboard.py b/backend/app/api/v1/dashboard.py index 1ec352d7e..97e5b9a13 100644 --- a/backend/app/api/v1/dashboard.py +++ b/backend/app/api/v1/dashboard.py @@ -1,25 +1,97 @@ -from fastapi import APIRouter, Depends, HTTPException -from typing import Dict, Any +from fastapi import APIRouter, Depends, HTTPException, Query +from typing import Dict, Any, List from app.services.cache import get_revenue_summary from app.core.auth import authenticate_request as get_current_user +from app.models.auth import AuthenticatedUser +import logging +from app.config import settings +import asyncpg +from datetime import datetime, timezone router = APIRouter() +logger = logging.getLogger(__name__) @router.get("/dashboard/summary") async def get_dashboard_summary( property_id: str, + timestamp: int = Query(..., alias="_t"), current_user: dict = Depends(get_current_user) ) -> Dict[str, Any]: tenant_id = getattr(current_user, "tenant_id", "default_tenant") or "default_tenant" + requested_date = datetime.fromtimestamp( + timestamp / 1000, + tz=timezone.utc, + ) + year = requested_date.year + month = requested_date.month - revenue_data = await get_revenue_summary(property_id, tenant_id) + revenue_data = await get_revenue_summary(property_id, tenant_id, year, month) - total_revenue_float = float(revenue_data['total']) + # total_revenue_float = float(revenue_data['total']) return { "property_id": revenue_data['property_id'], - "total_revenue": total_revenue_float, + # "total_revenue": total_revenue_float, + "total_revenue": revenue_data['total'], "currency": revenue_data['currency'], "reservations_count": revenue_data['count'] } + +@router.get("/dashboard/properties") +async def get_dashboard_properties( + current_user: AuthenticatedUser = Depends(get_current_user), +) -> List[Dict[str, Any]]: + """ + Return only properties belonging to the authenticated user's tenant. + """ + + tenant_id = current_user.tenant_id + + if not tenant_id: + raise HTTPException( + status_code=403, + detail="Authenticated user has no tenant", + ) + + connection = None + + try: + connection = await asyncpg.connect(settings.database_url) + + rows = await connection.fetch( + """ + SELECT + id, + name, + timezone + FROM properties + WHERE tenant_id = $1 + ORDER BY name + """, + tenant_id, + ) + + return [ + { + "id": row["id"], + "name": row["name"], + "timezone": row["timezone"], + } + for row in rows + ] + + except Exception: + logger.exception( + "Failed to load properties for tenant %s", + tenant_id, + ) + + raise HTTPException( + status_code=503, + detail="Properties are temporarily unavailable", + ) + + finally: + if connection is not None: + await connection.close() \ No newline at end of file diff --git a/backend/app/core/__pycache__/async_processing.cpython-311.pyc b/backend/app/core/__pycache__/async_processing.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f0b0d146e8f2f524f88dd5da264339ae3d7cc50e GIT binary patch literal 21213 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 literal 0 HcmV?d00001 diff --git a/backend/app/core/__pycache__/auth.cpython-311.pyc b/backend/app/core/__pycache__/auth.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ea87a732be12a7eb1486cbb920e467f95765da9d GIT binary patch literal 29982 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 Ss`yR&L|>QW`g}-ci~k#bXz4`& literal 0 HcmV?d00001 diff --git a/backend/app/core/__pycache__/circuit_breaker_fallback.cpython-311.pyc b/backend/app/core/__pycache__/circuit_breaker_fallback.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..60909c949473c194d652bd34baf13663486fe70a GIT binary patch literal 9833 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 Ca}x&u literal 0 HcmV?d00001 diff --git a/backend/app/core/__pycache__/redis_client.cpython-311.pyc b/backend/app/core/__pycache__/redis_client.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..84f8d6d76e98029705f72de60f3eeb70d0215850 GIT binary patch literal 11555 zcmd^FYit`weqVBT`O?ay_z+3UQZ|z8ShgOC<(K>nCCiR&MX@dAny44B6nAA)p-A2A z>TL5U!${mh7bF*5kk;;a#*EP>8vvMY%OJz0o)f{9VVSZf>%_E7joXK65(iStw zc#WIKVd&6pN~9(n0yW_j9Ji3VkKn(>PBa;_-+FLGy53ly+&jCMISAHv*{v-x~hRPgF_M^_l5ivbyVkzc>@4}G^GNKoQ})inG$)gpTt-eN3t?OLdd*S}ct}x*Zc^p# zZ41o1{_+lffl)nig@nhrlbQ>O@*K+5eyK1}+=f@0#-!vD9CHA;kDZ0~p(|qgO+GWl zlV|h#3-B3(vF)fS2=*JF(JAoP@(q9SrA**rl@)lJgX79YcCIGaLgAm=MHe6I7 ztor$7M)7wmo^I3x#T9+V!u2+8unnf;Jmr9Xdnwr(e2S7Sp`t*r1?N4W`vgxNxzLDg zia*>>Tjfi(QiBu{JFjWhEXM*5KUQ#6@N${;6{T*o^s@6)_dU4##3}&@dCc0}JF>;! z-mkiE<`KM=Z&sJmCp0`IB_}jKCFQp2an;8p1Iq2cJu3ct4KOP3*Dw31RE&wKzc5a% zar-n-sbZluQT&(}&{_EAbtwhwz!N>>)wRnU%8owT2i+Kd1m=-?gu&P4()=^2Yo^FT z6G;nz+CbNn`CL-Y%!v6pSqn({^qZobd{Y!>;XywXwa67Qm6fj~(^yl0s**+YL$FEB z2BDz=EC$;wmLfuVWNOJPc}dp1*?c;cC0R>(B02M)Fc+Ff@3}CEu!L*ChA7vRBwfuT zp{qe-NIPaWk7Ug$OlqE4qYkw~1BBlbJ%gLZs$U_QCx%o)Jf?XTM_A8;DfJt@hru9v zeC{xm|NGs)+&a3VB&Q~`8R?2B@K-bP6;nT&BMnCEw)DIE?{95CmC9sA;Rs)7 z@8wUYvRR<#CsUw$c@XD+8CyPfzoir( zR^!9wZMYOap~g=e*etXt;ms*RLr2NQoa&`H_WFD%T3eE)-RR9qYl}Yr);6;2t%& zN8xIO2VC&|^Y5HjVwXzXn97YQX887@Kej=aIID0Tevn@UGPdt=r6-NhfmU9o@60kVU6*8zYYJ#Sd;43 z*zQH3XY6-NHY*L}#$7kbuyw`5svvmU2U;)NY(;zT z(Jn>@KAXk_xV^#(8jx07-6lMYc*q{t zbM+9eKv*ERyk#>K*7x3qa1-o)l80)HkdjkrYu2C~n-=ouGGwZ~wP_0zMMtIOn|D_D zQPzCd_SA~bs@8OoCbrn}04NG<@$Pv>#;&SyEm^*pS%Oo+QDlBjeN@HKK@r=_++YOY z3|1I&HrvY-`o~0Mm|i>vrV*H#MWQ5OD=?KuJT^2lsVpzad6c>=79wV&6kf^k#3CNy zN6A=rc{EoZO-uQl#tL&Yvyw(<3;Q*83Z-U5&6CdStPwUz=paNIOWJp_L?5FUagi6d zPvQH0D*+3hsT$$wf#u|zWy47sL*1EcU9#}m;nYl*4-X&^kJ;+F1IvZ zitSNjdlt?S#@L(yN^;0kh8&$F0`Byt(gPg!<=az zPkkY}Sy>6RE)O~dZ;FN?(tLtwHbjHCfX(Jpg0u-RbOuU6Nn&$P;Ds;(bR6Mv*o0A2 zQrPT{4y4u!AXQh7Lvu-j2tjXjLD-1V-Dir_l*pjyt+M|ZB zoitHIjG!J_C_1?Ef)YOnp~M|hxkCzfs2qwe?l*rXieeZ=SogiP?*R2rzQl9%zqBUW z>D6`?vKsxSc)bEic;?@R|KmSEwAJ8Au$?jn3(`Ms_Nq|@ix122%{z-u6e&`5@K~jo zbh8G_4i|LExIoqIou_4MnM6@bSkAXxf|D#eKv@Ffm`W8&6rN)qBaWC(oUb7-ab4RHwFtw^f9E{Hce!)}OoMle zMxncPu=fhCdJ#uNhgDz?U4rt0-;OrmhIebEUqNKpWPb>@8L+X85m*q+mE)~ye9wBk zcP-w#ES2K@YP??wRfmOBWq$}-HtsJ+Th^mJYtbHXR-^rDv|kDI6K+q!<%yLcC4K_J zeZVJ9OWaA7JE?Fd>*Dh9vwFUJGKR|=pqcWfmn17@)`>p zui~|8%(`@aNih2=kfHBkTEC^O?baB}FxH}`Ii`VQC6=LJ28g6zLsX6BcsUeXJb+Dc zyxi8l-nMV8ZQsg)Qrm#qHUO5_-v-vUaYwm%yW0HRdUMZObI)>mrT@Oa)clg#{E`x= z5dhJb+5wN>uF z!5jZCt6Xcp2di9xev`-!L8VQK3}tFlueE(p!9-;}W$Lt)Dalo!GIC1H0(f|=2{*Or z=~1%TVK`y@so{~~@!=}Hsl$-f6{kxeY^osmv0<_?1o2L=G?$fYY0mFMeIaPqoI1NA zls~=;Q9Z!10JxTC)Ryk`mj1Pt{*|Fp%VD+Uuo9^b3#ZGW_?^TDM_~E+BtRurBqg4J z0IOJ%mbgKc8&tSKg2h^ZB1@b1cJ@=h@+EfDpYe$fdbNXv?EgbF?XY(3F`mS08A+C4 z7fIK4RiGMv?d;h2*b_meGpGU;dIJCwFOAwJ(jeyThDu{FLxd&0YCcWBK8>qH z9BuWjw8k{AmRs#Qj$911VKfc>qA>2LL|#rsy=rTAerepm@r z2g~0&UT!^bXIyRVRa+0N$V%%mCAuX9juG~zYKdT5rAL;ny72jPO8f$Z-(1ww5_eJM zE-Ktb(sc0!{b$;$2xQP0yhz&Gf`A)r49Gg*t(uM%0>Ap{*8=x|*(dPVuXzAYZO^}w z?iBS#|Mx+F=9zgG)(ZCCnXITHTj|r!yNWIpEz-3OSdl3@i>^wy%|X4pALwhY9xD4| z7aTYW(YIf0n=NGf#VzBtqj4?S)+c5eY`-u?cir```-amX+{plsm~cI#%quw`bm z#EeS(oJ2$>Gb_SwIxJFP|78+R#zn->iU{szQn|E1=y1~V^)?lNt8Cjf>h{K0ogKleX@tT;P1Gd&ijJ{6x*w)F!<%9inc<`nl_&T)Kg$xe_ z@%k*sk29YKTP||t?wh^l@1ddeJBX^qEWXU()s5*9HsD-T4Rx-Ede%ZcrBI(5>I2DY zYyZ3HpH2U5_HK5Aq8pEp=%>C#dhykA`>yr&gKO;vSLRCX$JO@Zi+3rBN*}a$p6F{Q!g#cSPmD zML1H|*h?{Z=l2sw2RZ5s&Nq01{-U{caDe_|fQ7u~PG3pE;dEAW&%oXr?6XzKu4QNf zHD&kd<+kX61rkW$=64*GGGO1ptSz5{X(XJr7BT`$Tv3~p7_O+zIjt?3g6n^5eB6cI z7v{)87HWNxx=Y;KY_hWGSnA!5+Np%+jY<+{NcFPN=f9UM73_L9vonRMoI z-#x28(b&Zl#L2nKx-^}EX*LZLUiP3Ij^JpU0Yq|YGQA|b|N$pxZe zY|HOm3+`P$v+`%9;Bhs0T;Xa2%Zv=KM3wk3g!^aow8WiOxzh><9xm)NnHH!P&d=c{ z=OBFk13fKq=T+{!!kvFI-rq|&5&>#8;2UJ=)$RNsMSnrDkgx4VJ^v@7yHdO31yXIR z^rW3EI7WBD&>L56tE2BhZQX7!>WAr-8~Auv%g)i3H=hC)#FVOf3$gmUT5RDs09;C= z%%q4BoiZ_8iF~p@pnp-r1I{FniTva=d<`>NXtmlCk!g2 zl{g#6IMoVxwj}mZKuRpF(-(*^mVN2V3XWXcKSDd`eE=5Xre#J z4>>J>x6%>$^2VUL3B_yhm$0j^+t`NXP9BFk&ySMr0cnKCa<}T4C(`VjUmUI zZv2S}`PM|fj=wn}BBcutUU=w-QC>Lw>?LQPS_F zGSzsK{K`~7F~e52UwOALL{;zhJBLf&PSx9a)3w12(hivA+VR(<{2P1iIrwI>W#LCZ Zo_}}#Cbz*j9kHbbkbBIdPDEzrzX0s!dmaD) literal 0 HcmV?d00001 diff --git a/backend/app/core/__pycache__/supabase_connection_pool.cpython-311.pyc b/backend/app/core/__pycache__/supabase_connection_pool.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..74d68da6427675448262d53a2225b23d5e0e39bc GIT binary patch literal 34857 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

?woY}jdUj~)aik8ZM`TxiBA7wln{$b;J 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 F`#euD8?~ieiZh%vsmE2?RwvIZX7$ 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 literal 0 HcmV?d00001 diff --git a/backend/app/core/__pycache__/tenant_resolver.cpython-311.pyc b/backend/app/core/__pycache__/tenant_resolver.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0c22ef71446ddb33311641b4a29f4a985ce9e77d GIT binary patch literal 3525 zcmb_eO>Epm6dv3A@7<(rwvDq*g-cu7?ax+8n~H`OK^q#iK#=+)+CXc$9w%|LYcI1- zLzW;F(L)3WIMEy3wdEs;E^ue zs_P;>e4j(;Atdh^jPR%*;m}=#!}odUf#ml@v2Y1xBjqEBw++)MsCn7eP1UqzqL-}v zZJo$N7LnC4dqg*FLsM!1gF+`7I72+YIR#KGh8nEu#{ih2rqj?wPpQ7o2Z&y^3hZbEDsT@ zAYXX*vaID*qfpAZDcc&=O{J(#Z5q^@pgs>2J5uV@6B$`<}D70)mt{t!rp_vush8rAeo-^<}%-H#3 zLiV3GJYd(umBA_daOM($$?Ige)Em^OpC;gYd`Iq)h!Zkyl=NUcH#Jt$iBiyQ6|1)D#=ZCgMz~3}SPVMKdj_nPtD;V2 z!}R7_U)4ZXaD`#rb|ZOfcvvTHbX+B-VGd_`5&;|ujl2@YR+gX1N5MZ!nnm=Z{Af?XI@V&K9{ALCMVYbw@l1A2l&6QqQ7vazQ#dcW7QZSCP)G zW3v6l#q_>~^uC$V`E++B-8~hrifQl~-&JkvbdsIF##+8;`K-lhKQ$jaU5TA`VyCOE zZBzC#OcS|rwjp#g){nLCKq-i|SaYmF^zcFS@c$S+Tr;1aGX^*I5`yRmm%k6lwn22z z1uCyNc z=xodT{{>5_;$d)8`UHeW()Q`BBkq9@=ra9Yr7i0uvrA%T+Hl1E@KvSVGe;{@_o8%S zK{_$}(Y$oFBAs2$!zHm}`kEuY1RpiXRiv&(sb@jznH`;%&Qzo`YYZp_$yS)ffE#6C z!x@lZ1-+mec{j{LPosx^{h^`!DWv6I5N{$5h&jn&Zj>FLgvb0PS{H&k5CZDqpbq_1 z2QK)=5$eZu{i26Mj9u|Eok=dBQczfXeEM_uX>z_VP^D*UV?BO9TU(P#P}%%!4b;l* zr7^Rl+piUgRn&<+F_gE)bDC8s$Gn5KVA7dN~8)H+X?}8I;`NbaXF>-HzB@ZQJ!_Z&lpx zbaX9B{NlKq+xNPv5g0(^r3$Wj2tv#JaS;T-?M!A^8mXm zMY>|PD{}n~lE)2uq;c2$_dWM^0j{)O9~HP6gBc7EdQ3uaGl16w_s%gkLxu6icT}Hf z`QR#$H_^QTgOuoH`O2NWod0I{?$_Ha=-tUPj z3br)bT(aR;SA&U+SlA8GQ;<+bxI)P$WDAr?nu-h+om9|8dizArEE28@w%|XZb|-kN zp$ksv!cur^jqePnXW{08Z0^9LV?P~X#fEq)pvbnn?=!vHDJa)?DV%=LS3{7^UY*l^ zxXy|V5m%1xFxMBs(m9%f$R;neK08iMSR zmpwVoY7G$>fli~7bn}zbb0E!``KMW~#js&rH8OAKzPv Y@4XYLMQ(5$%zAzKl(qk{K`&e3-@c)8+5i9m literal 0 HcmV?d00001 diff --git a/backend/app/core/__pycache__/token_encryption.cpython-311.pyc b/backend/app/core/__pycache__/token_encryption.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f45abf6e7adb02a83d3a2450802214aaf3704308 GIT binary patch literal 12619 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 literal 0 HcmV?d00001 diff --git a/backend/app/core/database_pool.py b/backend/app/core/database_pool.py index d638dfcfe..0cf08beb7 100644 --- a/backend/app/core/database_pool.py +++ b/backend/app/core/database_pool.py @@ -1,6 +1,6 @@ import asyncio from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession, async_sessionmaker -from sqlalchemy.pool import QueuePool +# from sqlalchemy.pool import QueuePool import logging from ..config import settings @@ -13,30 +13,43 @@ def __init__(self): async def initialize(self): """Initialize database connection pool""" + if self.engine and self.session_factory: + return + try: - # Create async engine with connection pooling - database_url = f"postgresql+asyncpg://{settings.supabase_db_user}:{settings.supabase_db_password}@{settings.supabase_db_host}:{settings.supabase_db_port}/{settings.supabase_db_name}" - + database_url = settings.database_url + + # SQLAlchemy async engine requires the asyncpg driver. + if database_url.startswith("postgresql://"): + database_url = database_url.replace( + "postgresql://", + "postgresql+asyncpg://", + 1, + ) + self.engine = create_async_engine( database_url, - poolclass=QueuePool, - pool_size=20, # Number of connections to maintain - max_overflow=30, # Additional connections when needed - pool_pre_ping=True, # Validate connections - pool_recycle=3600, # Recycle connections every hour - echo=False # Set to True for SQL debugging + pool_size=settings.database_pool_size, + max_overflow=settings.database_max_overflow, + pool_pre_ping=True, + pool_recycle=settings.database_pool_recycle, + echo=False, ) - + self.session_factory = async_sessionmaker( bind=self.engine, class_=AsyncSession, - expire_on_commit=False + expire_on_commit=False, ) - - logger.info("✅ Database connection pool initialized") - - except Exception as e: - logger.error(f"❌ Database pool initialization failed: {e}") + + logger.info("Database connection pool initialized") + + except Exception as error: + logger.exception( + "Database pool initialization failed: %s", + error, + ) + self.engine = None self.session_factory = None diff --git a/backend/app/models/__pycache__/auth.cpython-311.pyc b/backend/app/models/__pycache__/auth.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4664fb09f843ee0d27761794e46a8aa5a95cac7d GIT binary patch literal 1479 zcmah}KX21O6hGT%$4UPsEuktEpwJFvp)*p21QLqcloYAzfEUZnoxqjt1lyG;5|Se^ zbm-6l(S8CD;xq6GSQ3fBx|NA7RXcU!y-V7VCKb-z&+pzZclZAK>(o?^!1MW4efOtA z$ZuR+K6+m`dk?}fVT36j@fAz)RZCTHt$LbIE$Zu*t`L<}2-7|iM!E7uBjh{G-eVb( z(}6QaxQyg7z?mbQ$+BCdocn{vlvR;^=0yBOgKNepTr%YJ|E!RO(rDX8T!qsljYJIIXq@_}80sF$i2LZoXAAHj$RAHk?&er z52x{_8H7AS0bv%Qh#>8lM+vhgVFHBc0l<*IQ~6{g*=TK~lQT&*skUGy)!ug8Io^#J znE$x}6=e)nOs|e~KCX^3gF3QIp1t;;%vFV%qVN>*$b;CeJ27WiZebRz39*AibTOPn zm;$JYY|H~Eh;5gZb2kSJOQ;v7TPWQ_Fc7Xq@-FHSFzV3`z)&Oyl{1~JC+n?steo9n zg;Ja1=+M%QrIX%YO4bhEooI(2+H?s#@vs*c=4!9Wo`fYh13q^o`T@|@6h%qN!}hq5l2Uuz=u%yo>ylA8czlZ5 k^8q!jD)}xMg`VXWE4)ar>H$2L&+%p1z+z%OaK4? literal 0 HcmV?d00001 diff --git a/backend/app/models/__pycache__/profile.cpython-311.pyc b/backend/app/models/__pycache__/profile.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4cadce1e4155f748e81d15c6a35144d82e9333f9 GIT binary patch literal 5815 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 pT8J~nD@ literal 0 HcmV?d00001 diff --git a/backend/app/monitoring/__pycache__/middleware.cpython-311.pyc b/backend/app/monitoring/__pycache__/middleware.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..876795ee6a04137128396ad61839ac32605ae35b GIT binary patch literal 2691 zcma(TZHN;`boL|J-E7WyUd~IdXN@1Vrf2S|J*~7VDpswnB324U%CgPO-R0bD(%HS9 z#sm&pN`CZ*LQtU;?uT40`oo|8=#NtRqdyZ_=rSM(MbLi{6~teClg|s<>g>#$H}B27 zdGF18GyBWHKnOv(awanu)DZfI4>~2#MxI;&Vd?U_e>^@*gw)*Lh)a`g1+lgGQufU2A#-^>%o1ynsnoI>7q$Rn;#Qe;CbBpPjr zEb@ts3;C?=9w#o%W*oi{n=Wy)Ig)8<+Ja(x@Z@bkt|EfKi6|{%AuVB%$kQU0zL(Ph zEQ3)2w*F*K`{P~Zd#V<<_3(t7Pq@^~oJ(*okhVT6?Pm&YnU(3f50u~s{~fd^w?Mbg zkN{ehggGFz%3Svtu<$LSgCZ)4C87U-zJs8+D1C{pN%5OJ>3W%1qR&In7(AmL_L3f<-E9UkhNIT!5EG05!?lCt~;s{${r3fRgf z@W&ZsOXsCCXhC?L?PcXnY%fVg@Hq|^!B1tiq|9|~Us5|Ztn9IZ)qXE5L5jXy`aO)b zb4{<6gYIx|?yFB0s9mp?R5#w6-%HAV>7ezh&a9GL3Y3DkLd&52&8`Jy&0XJ_0dcUp zgO{}a*bz`k#rjV&4*x8!^aUQ+14~Ll8p2v1U1`!4$d6Sgl5$a*oF%5^&KA|lTr2mA zfk~XtIK_dA$fS8{F}Yy6v#>pom@;cRrt4A`;Id&nL!fsl z<<18#F)^VIlYqIp9IUBs;%ANBEFO8H-So$y01}j7o->>=0|3hB+71 zv@F9W=Uo(N4MUM zZoRSYj#7{A_oDm%jvl@nJzS3-^`b}r0`ycx0|`SL{o%3dS#S6qe`vJ2&yQ`oxAyI- zb=j`kek|d|w)xSw{I%<$HU_n!&|?JPDF+qhSqy1oo;rTxNL`)s)Tx>}1$*zg=qYWfzJN=2N%26*ocI~Trc>I23q!Mv>9Q}4cKd7QVRPkU~I*|-A z)i7)`M+}3740ti|yv6abVSF=hT5XPE7?8AvLHX5Bw*mMSJpqX5I0yWCY6AX~;Oqpj z*!_HYS54m4khce7OEV1w-G2hQqa!CdNZ;r9Ish!rgWV#oOD0wX=-2RPK>16_*7W%8 z7u0F$$%a-kTE7Vn<A_H)1?ZBu+vkTYP=w01jC zTKaMiyioVFJhzX21VjEPJAVRbNP-~v=z|*i;6Bn9o1c$%*ZQlEw$%EokG9tOtB>~9 zUR8axuGU|Dv}&>W-PcAdBc3*TZFgPU>}i`9gAI8~0QbKPYFlvvRJLJyAc|snDv&G936`_iRH{{L5`$9ew#hFf3<{QUVeE_Zc z5dP{Fs^%(8)IN%}U!YjW2PQ~^zj}QDw-56VRH!DGvjlRMJ~HP9Qlk^{l^OGeYN0i? zMfKKkZq~)svu>__jA1<&n4)w)Th1|DJ!cy;ZO~dXW@0NYFrfz4G)e`%)7?XnROF3_ zzy%@`Y+&H|1A*r`ek{o+A`?+Aa5y;;OC|Z(#5kbrRGj-9>lq0$3NsXorWEE-Oh_sA zBa^9Eav~B}%mWkWgC@n!Mp9fVmf#czLY9lCA`o55a$}LHc#6fM7M43R#RX}_6-`d0 zxN|9ZV`QA;A)f<^N22kFASjlx7#C-wTI&HZ=N|4~2ILCGQ9vD3$n-6sfsh&cYhg`& zkU}ss!K@I+5X=UcgP3G9sJ|x)ghu z)EEvcCE;*_Oef&ZaQMtrB#!TbCtEnoCZm9ug%q#2!{NxpL^4I*FF>qiES`*{cpHqH z!n~18#(7*HJT6?m3M0+2i4X|H%Soh?4-VGTE@Bkuw z7r>nEcbC~LGMh6V@7$5OBX1umAmvpegF#}dGVW@T!5}f!nX>Y^!*hqP=}x%fgeEw z0;EJffFOu~5aK4pIuSG?CP(4D9R!J~ z%d~Aue`{%**w!z#^~-JjK&H&4S7cAK$n-;y2n0m!1h(Hmr#Lux-Tw~&1v*7O$$DAf zl^_e43m`{X3ugt~3Ua{)xE*jC;11TuIyi{R_=1hU9o0Os$BE3Wx#=}lnR{~%So~6;2;OwDH4xO zbF7}G0|nL;5Y7uJF7f%V%|JBXMC2T>Rl>x9Vg)48s3zoLOd%8b->(6+;0iTE&ro5A zQm+)I=B^p~25nrNkW;JaD|2c!u_h>o1WYd03{Ob%Q)%bI5)v>fuxuS%?pC<2;Cs9A zy)LaFaxOtBRo_4!KoMaCEu3JrI-TA~W$SRx%Fh^xt zo}6c7dtjx#OWd|kY~L@n@0Z*6W1N4bH7ITw5?hC*)?vAI7~^U)?VWgU&1~w%d;3ad z!{yhc$~L*OZJxPU@`aUZ-1Jea)X*b0^k9a%mAZ{TNlA5Ga$Ofb*N7w#wxHN@V`!jU z90H`O`~Rv^E_DhX)N4CMQ!~^lh*z()MyL50yw4QTGnAoEX>qv8s)x60k!MuWXnXJG}M(poa3 zQ;gT^XQ5Zc?@FPfle^Zd)mVnL=0?N6UVhfb+TYQ&%9xLcZ#xS=qj>;Ei+z-8p|(&0 zbJldue4IK<)6{X8Ni`+tnD)QOMUy;Rq;>{!#4%ktdg#c@ffv3t{NnMz(D2dW!K1@N zPY1rV22#o7>A;uf?%uI!YeEP_QUQeyf6hX;KVSIGZ+_9K*B7#Pnz_NQlbPud}s;;)d4|Kz!ADZ>>hYugFm!yvuP!pUVbPu+gKWSwKJ8YkH(f|#N z2dAGfo=IRUATodZjAuHf2{5qs=nKfGH1;!8Bp{8;b=H(}L3?voT4Ox<7`ziErDr*2 zs9$3+z=DuvX^fGz028y$n8@8`U?93y8CwB$*r5(hsKT=Yo;7g~Y|v#av5F0r7~2GF z5LAa#THj{O1ugAsv%xiMHMWl})v>`f^RrI2tcVTj@)0&z#=>tE8wBld9X5!1p=-J> z#|91dO#L=+D5D@oy=-&_F zCVe%skWg_wB(i_HhH&-ak)h|092hyOXY6!guM1T!UL3AGR2O&jZ0DvsWDPZm#ug?$Gbn{ma=pn4;u3jWmI1YkHKu9>S z#(X8`7TLK)bZ*g$grQ~kkmw#-srBc^{bhOkK0qb^ei>lxez|u4C7UKOOqB=d#j`iw z%2J4_@Rm*Pe_kIU9t+FIPK&;jJ~C6^BKn@snhWJtHa~H*THZ1!Z61<059w3x2HLN= zvz9{EyW9KZ?a%6C?wJ`BLjbY_xIheDeod^{0UNJ1a$qe<_KJBFeevUj@vBYDE zSW2<-TxyD+Fi0kp2}Clz56EiCWH8dGQ^+33g%X7|-7tRuWk1yTJV*{rkp*QL?Ccp@ z&(DnfFbe7TE9PeF@-hZ^nPs|dAD0TC{lf{V{E7|4CIYZJz|alkEml2OLmb!JeN?`T zogAh3BM`|y58yhj(B}lqtgg5(?S1h`;te*kHt!neQen+N1K*8~dF6_YLsj=te$G+I zujW+0%hBs5vb+@=&%Md<0tcRD!cP>dkmOSwOSDR2s^!(g5Y(Z#)YQDI$fzlLid!?? zvIci3&h!SE~myEAd^mS%x>a#Yc!F7)U01KPo-4Xi2{**K|wX9@*QIEz4Iy>LK7B*7yKHA#N><(E6it-A6@gzGr|j|B_(_ z?6zN)(g1(Y3A$ZR(0S%Ad^04?zlJkhAZh+}c%FXhQKX@@U^P9Tfx>(QK{J4(Jd#hI zczG7%iA3xM%s{!G9OY_N8)>&fBTFsAblYP!F%EAMt^?349;>4lDXVv-v5nAgo1T6H zNWTH3-+)VW))N92YdRLI7TXr92MuJ4dM@F^pTcArSrob^ViYmqaU#jJw!ZoSqruSURUU z_omQ=ox4`mfXpFxJ+d~_G`J6qJuX-R6S(VYUa-uVX2?F;#lM&_{SPHoBQEU7_&Cpv z!_FW}gw^=~y4k?13R`46Ob+$$W90hJz1J;@Mcu%%M&2ApFP}9LBl}!zt3-R-*63CI?W)lSTsG_c! zS2l4?>imLhDw{=l-h?WIZ9t>iYV7=TN|S6kkF?qSwL`8J?qLG2Ie6ana3 z*npme;)FsLg5{hE>*uxyGzw(nzYU%>#j-)Y{p+`LO_-YqxpUd;gNR0d$bX%+)pA^hKA0Q@wJUR0xUct9yk zbb=oM{4Vuf>lNyIMV>>weO9o}jCz26y|DBRlTq?bgN68g>%4Ugq}~NP)X%_M$yMwn zoTW)FhUC&V;8x`_%~Md9w*dWN)OjYj`Ii?JMQ2MvSfgDIWP!aCOKzpZSRfN4?*WR@7glGDG^>Z3qA7g4vL-XuR1HRTDJiDH``R^Axow zpNDlVm|6D%0~($Oe~;~p@PIF(e7Xtwb`p&ENIag~L=T+gBJtG80Js4Y5&rz=xKLmx z*alkJREiS}3mlgk@k?w1hj)@xHoh)0zeJKO#H@r%)brq&GlEIIsQA?7UYkCfZ9j? z58>f!bnYiuAqq(BT;uC%NJnlBe0orPF}yq!7Kg%V8h{!e(YtL>i8i0U;`uD>GUsNt zg3N4XZf1j~!cL-odWjDIjdpkuJKT}$aNU?lLb_?G{A2%ZpL~E@-pPqOxvK*J)bQKx zGJ4SSU494fZ@$auEYP~_hb;sQK)^42{Oawa^5OXM?zp%+4m3>e09SVzNsg@A03f+F zTeL%R6Sk^gtvd5FO7nQsgnt2mfJR@=%KEwl`F`nBZf?6DNgK*H|PL=h(c@(Xf`WBU|DB*n33>6DQCfQp^*{vpo9CRS!5i6BS2HNRpG;se*wMv=PRjy&+H5p4=PrEfn}a!pbfp_+tb_ zWZ|591F=qR7s7g2k3*jM%jGPC((c#Kc09NW-7Y_Y!WMSl^ z<4b46%>&Zr0U2QZ!2Ds@VrzJX*5v1+PY&*aC&_<8_Mey^$>e1ZNT9`Sa%Vr>rN-A~ zh<4UP+4^x>Wz_)FZvl|%#^k!O`9qmJLqoO}+zC+fCuDyDswAvnu>n|uf9kWw=JXz^u~%;FU1@3++qO$hPs&YCuC%rwg*os?dR$uGsEU`!0gpujVxK~vU5P0_<9c-nl(^wD6B%=f(vh}3gT2H15>?mG6X z6R(Nkq;z6ZJ~1hEO^RKUP~xEJkSUX#1*~(Q>7%WSZ%LhdV2|z}y|-SI29C-DN2SiA zzdCk8eC3pM>@@5`N}EoLn@&UaA=5q+Y;Xji2LQfsQk~t4acR>odDE_?$nvJWxEt9Z zZSI#h_utyGym?61@uh*~jk}?29hL>)_xgYU5Nybk0-*;2?jdD7Kv0NV3nT8LN97{> zecyk!?b$x_KlL&DDBC}qX@EhRoHc~oain+L+6wyCJW?FM^t}ksOyO~(SUn4T3^CM9 z`7s2i5m*q^BS7KDqp`)~AwPZw0j>g~ld7Dx1s|WtgCHQn2{3Etv|onVDl%KMOo?T4 zmIAOiNN&ZTrou8zrw_qiC*0S79X`uJI{gP(3h!&cF1rQxn*gMvjh zvs=Jt4`9(uZa0rE^~l?wBX}|JRan4{2Vk+|=GGg~1we0YyKTNbdfWafoR-Qb>#&Y| z+~SU#gEzqKfklRHdv8Z?*L*sn%UCGf(PVL@hZeny(Z!l;kOdys1?sqyA@|_8qfu$_ z8G>a92Sh+rGr+6VV;w1-r{NSNsh81Wo`o-uX3eZ=mVv*;0Xx3x(T|DN7Al3}KXQ*=ymmiZ3UFl&9wdX_#*smJvk)Z?^c#)S4G%b?$W)~5Go%z(#W z#-`t|IHk3~*q0ge3^QZ7Vfg^q|A#07$Te$E;m%9$N^9}?7`)HejkYozE`+a$U<4jx z1pl|SJU{M1>-5$^^$Vmx?h_<9^B910;?dK^hb47l`{>BCDu1!5=NOUDRAU7tzN+L_ zB31<;Xjd5ZbEx5SQI32prScHMaB!&kKLen6buWM~bjY_?gdf2^hepmy2{assCxFah0WM7$$VC44FAn5xb2*C72<%-9VRsGceUSy)kZdBeMPm+R)9 z%eX4$_GNrEbBAFEaqd8t@mhK__Of}4`g^!i>Vw0LxE%8!Q&Bx{TdAqLI`Bj5f_1(O zasvZ@n6*I$yqhV93uH=7{pIuTe*5yb(;=z4=jJx4>Z$qC&ng-+)lC>`T2`tWF2~=U zxIB^Z)n#hiGgXaQx7}NEj{@)j!MyDYALXdOWA9kD!+A-`zD2fg5%b~U7aM-7uYjHq z9s5U2GxcNonHK8(k^!^%M#UcU-&+9rrP&N||Iji}Ke*S-pMU|5!e6^kW}xu6-wLCC zg-U4&6qVL3q(ZcD`Qm{SLm3_WDU@N0Tvx@;L~wB$Yrz(+y1uFwLpzvN#UaAjc0+!R zJ?YCC^Rvu?g&cM1K=%^5YN7PP z7Mz*Jz`|_C->`7vj=y)=-z)jI$^LDby84BknGLlIjoC6=8E^muWW+}9Q@0=0^NWR9L64F8so7@0fJ<-0h;{^p zOl0Z`IiJH+%+6l|ARxsVoFI=siCHXv5&%wOX&p?W27EY)T^L=Zo;@` z1T6rR$~8%szX56g0)GMJ;~WLjsjmA@ZU1s@zf}8-T>DJclqb0_DyXX9oywidl{=T3 zq{=?IvM=j}#Cu5I4+xD{EB9n8A@Lq|@&SS`YN(pdJJnAw zS3fOP_sP|LE47;q@7-SKv}P$4Sgh*6G^(E{rlF~d4ZnN9FORIS)bYCqyfqX(W z9EjvcD_<#%CgX7~ir@JP>i0>Y=0PnH;rv82mQ+e|A4$h!Z}7N)_?@Jb_MtQ<@Tk4z zK6X4MBqtOHjOZcq@r7#j?8kJXaI_)z1OhTe#G1K=k2u;z<_nzsQ$H2n!~Yyokyi>b zK={ysrZdzwk=k~bDxD+04CR_5zYNtSepSd&9pYLcLv0e*3cAYMM9L5{lt;{m^{dS_ z@~)$HzFKzFUfm%%T4hJ;ob@hUk~KN#wk)+8+{3sB2=19FQ|W~bYR)Raf%NDBu(sBQ zKz5J{bO%r?O0w3xWTIhptqt#y_y_t_Ae!o+Sk)m_ZIY{CY`k}Ach*!(_g)2K5pIj4 kOqI?sg$k|(>vPg}31(u0fM^!^1njtr0M0z$?A1-LloUjP6A literal 0 HcmV?d00001 diff --git a/backend/app/services/__pycache__/cache.cpython-311.pyc b/backend/app/services/__pycache__/cache.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a494b7fb8c84aebf9f61aa667ecf93c1f0565082 GIT binary patch literal 1564 zcmZ`3OK2NMbXNP*$BN?0CUxq9T!$95iDa74QoA%C61S#l0(R_B<)AD(<7k!rh}n^; zoHYnidMLTa5DGpN*TpU5RD8@a$CVLS3={&nv^@z-FNQ+jtSr|G>D%|4w=?s;yFaDV zNd)lE_h$8ig3wE`=)=&Vvi}s6#|R@V*{IZ$k`pV*lF(ze;;1Fn(MnphmTbMG6S*4i zU$c?uYsX~_5xpAu7FH}{Wiy7*Hc$^XC0GIVpp?QY8NwQnPSQ9IlptUs+H!2HzX>fT zaq?TGbOK8YD4+UM*l*-xT)AqQjLVnZ22adiyE?Z}UYx(a`X(jV@~4YM+cOQj;`wa) zqw^nsQk>$c8ue;~vPRj$Ji&--xJ;-@gBX;nj_0xp*C=6i>Y7lrBM^x`1lpg1z`sP2 zD4GjiY3b8Bw4N7UCho$^&@`J(j;y*3>|yBTW5o ze^u`5fjW3@0bvzuqE&0qrWgve00mMI3*=46VEZVGf&2A=__Y4r$7P^keINq8|2EJE zBiMx4wvXaF?ngp_4h@U1UQgx#W(hMZ#LrQ(LfksZ`E|!JXya_I&MeznwcL9-(=aPS zGB0O2(5)4cgN7}8)G=I>6ryWZRT@EB3w zYcV=gs5N*N!s{ncKCBfz4X1@0|1V&Fz|%zCBpUugTAv9|eh#=b){{?f_2kaAo&?^U z`&&aJxxMVLs(kq^S``&%(u5Nl$W?GG$VG%KBHW=Tox7hXGGr;hs6)*ApWW2;kr#eqwm2| ze9QiCz`C*|Ngb4GMo$O59S&j#jfbzp4oWnm2kLfm^wER8%;atcy0LNP$GNTh;ml&| z%u@TzQY&-2ow?l{>MEns8(ZhQ2*gfLJTs$JIKSAFcgo>iGbEMpZl!(4ifsSOqP+eE DDR`GV literal 0 HcmV?d00001 diff --git a/backend/app/services/__pycache__/properties.cpython-311.pyc b/backend/app/services/__pycache__/properties.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..44a9c9a2017b51f9b3f24f577c750b1e4d5e18d7 GIT binary patch literal 1791 zcmbUiO=}xR^zF{BB+Jq|{#5*dy-sb4z*SnvrBpH4vE0zQF~~_u1g%hZN6H#$SIn;B z*j1=#O7X#m77X^m2cKL@{y}f;FR+6lVj&PHh4!|=2^gRHW^GwgQbXy?&YSl&Z)V=d z?9b6?7_e=WwB;8B;15nTTJQ`xx{Jsb=%5Ql$naS#3MDZkmPm$_q>Ln-%H)i!6B^JZ zDp8!Nm=^~dwxEgSC0+hr$^>;`3F3jjxyG$HamkFi>PmBl=D5;=VLNVzL(QD&WDVU7 zFzQs8sR`%i03^hp;5fR8+|NP46FM#O<#SvY_7H!1PCpi^g5BlFO}fG$;GPsB6eIBjh!3Hk%7WDfRF__U$I ztp(1B7NlLP)sg^9@ZSGgw*rsIJy;RqfwfP=Dz>!maMd!4t7@59Wy&0b+Uk8;w9JBG z7F5Slod;CSRS=qvq2(N^tEUl5_!ivA+|2En*_owO_D*_XZM2nA4O=xWN7XDdZxkww z>bKT@^;hw|d0R>?q;A}9V{x{jPrbu4b0zvN*D*?T%`$15`h0rvi#TrPAu`J(X|RCTYt{9VV!82ML38e_yyvkD<(d43A0vgo@1(dGIljrF8jl# z?4hAi`)V_eiSp`6I9bFh)2vc?dhLS(b+S!yHgB=)SuB%9OUo7Q=|ofg3hrRfBdCD~ z!As#55P|MKuLEL3+Y_5c{qpek{7z?mWNbIQv*-n-sNw+!q;1g=T7r1c6)oEh;6bSQ z(2b-km{cX2V$5Q0FlVotTDjl`F=0%KFNB<@j`qNnwW4LyxWu^A-H4uZa`$sK%~n{^ z4WH>6mg!2|F*dJbo&GsNF2(8o{UTnE&%?C{sE^?q;miO literal 0 HcmV?d00001 diff --git a/backend/app/services/__pycache__/reservations.cpython-311.pyc b/backend/app/services/__pycache__/reservations.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b38332e2b9ff2630ddca7484f97cba766da9acf6 GIT binary patch literal 4101 zcmcInUu+Y}8K3p8|0Zz=Nr;n>+yE(I;m&Xzg z@$Ss*%=dls%{TM?zR!Q^>Ixw!U;HYyhQbK_lYP`nXRY({33MJH6{&)TGAMxr*7s;a z#*^^yzNm>ADIsON32(-i@bNK8^C$d3=hXt4U?RxJd|D{ek?0VR2NC~TT|OdRj|7As z!|RkpSPiRw(ya!_J~aq$h8LYFT<&fI-xs=$i zN()Hte!<3N!49a3MXYp&K;IuDsdPrsWYLyl>6B%QlX~8kE~QOt7N#YO+_o5*x|GZs zhGutUsgWhr$|uvR?adgvwQ5UwqEOpMiIt;zN@}c*PyqU$!TYiT)z86P50KT^975}! zbwL##iLhmOow6apnCCkGp#AOC1(<2$@#=kUN>y;^+9|EZN+3sEM_(aTT9=^qu6w^i zzxTNh01nHy;j_Fo<=EPOHw73rP&ggJP^J_umD9ksCZ^;j(Q^bZ8x$+p%z}}Z(<#jD z73IV)m>piQlP?^M#ea7B!UX;}M`%8+uei7iKDeoje#9$G$GJ1!alNlXj#9#sE=-zIt$Li>jvj%|ClZk)fRfS)QSI`6T3rRp$V;rFtN!=E+d9A1( zw@2I&TuObRq1Q#5$xx2V^6KS*Z|Mo zZqc_X&#e*oc~5iB>TUMdeQP{8uo1Tg?yn6$)5yj723i2h_}17J=SB5>?S*|e;J-f3 zTDNYk`w`FrI)bdBCiNJi5Pt5UTj;iU4c!usFl+wTQtRBZzwjA%)CQh8xTWP?z+~v8 z1`gw9145!9&N-vd)G9uG>hu|$1~ghFSS8C!PP0Hl)}R&xIfx=@L*)o*tpb$-p1z`I zh;BImISaU`Sjv)O63jvmla$kyn@U zq)``UzKu`GcyhtP%{m&qy@!~~vx~=$bMh8sNv0V1wsEvUFI$DSkzJhoXtr*{G=vWz z%C-?I(D0^04A44t#l23`Pk!-nfX-bU_30hdVNnE1gJcmQY-${3m}v@L=0 zJMZAB>B-p(@z}&3vxa^X5(|D?S`3R>qJkkx7<{I#)Oa(9)z6-c1G_C= zUWm!w=9KN_erN|$IZBD1%G+M>4~C1n{jZ->%)+Da>0x zB+F7JIndO(Wjp?Qeges_3Gil%)VM{*VNH`QTt729z_b`><{d5tXcT5S&lbe$TGp{2 z1-i@r(W3w8vv7Yoj7#CeHAh3>-Pg9n=aIMmC~i-c$9`PGXUq6(DRQnH zIk(kS^`V2~mBGW$`XdiVO8w*I{_#p=q|zTL_aCoz`1ZjXtQtk#2fobQ%iJ~Y8^yrL zuFvaN-Kev_iX<;6+o%F47_J84^EH%e_&<^J`nAdaMg4VT^8C~p^!GEJF(iJ2#F&V_ z5f8@R5@lgl?sallzv}#haxR$9%4Y#+D9dH2k5w%5u>G2`vI66f$llN({ahuPymL1X zK)xDH0Z2t5i{{ae|Iu=;e-Q5UCEz5~4kVMhk|D{Y?PIbCrAL`yk>$@UZRNM<&xkU$ z`F;C7a6V(GIgNZk--j`l2AT(;u8M*nRM1G#{Z!C!(fw4=;o{y;1%)^HZ#Tx{MdW(^ z5gghYCwL0QOf45zuNPC-%b#e@;1Ac_ZvO_imFuzq literal 0 HcmV?d00001 diff --git a/backend/app/services/cache.py b/backend/app/services/cache.py index b81474957..7ef763ea9 100644 --- a/backend/app/services/cache.py +++ b/backend/app/services/cache.py @@ -6,11 +6,12 @@ # Initialize Redis client (typically configured centrally). redis_client = redis.Redis.from_url(os.getenv("REDIS_URL", "redis://localhost:6379/0")) -async def get_revenue_summary(property_id: str, tenant_id: str) -> Dict[str, Any]: +async def get_revenue_summary(property_id: str, tenant_id: str, year: int, month: int,) -> Dict[str, Any]: """ Fetches revenue summary, utilizing caching to improve performance. """ - cache_key = f"revenue:{property_id}" + # cache_key = f"revenue:{property_id}" + cache_key = f"revenue:{property_id}:{tenant_id}:{year}:{month:02d}" # Try to get from cache cached = await redis_client.get(cache_key) @@ -21,7 +22,7 @@ async def get_revenue_summary(property_id: str, tenant_id: str) -> Dict[str, Any from app.services.reservations import calculate_total_revenue # Calculate revenue - result = await calculate_total_revenue(property_id, tenant_id) + result = await calculate_total_revenue(property_id, tenant_id, year, month) # Cache the result for 5 minutes await redis_client.setex(cache_key, 300, json.dumps(result)) diff --git a/backend/app/services/reservations.py b/backend/app/services/reservations.py index 384bd00ab..f6c323db8 100644 --- a/backend/app/services/reservations.py +++ b/backend/app/services/reservations.py @@ -1,6 +1,11 @@ from datetime import datetime from decimal import Decimal from typing import Dict, Any, List +import logging +from sqlalchemy import text +from app.core.database_pool import db_pool + +logger = logging.getLogger(__name__) async def calculate_monthly_revenue(property_id: str, month: int, year: int, db_session=None) -> Decimal: """ @@ -31,79 +36,76 @@ async def calculate_monthly_revenue(property_id: str, month: int, year: int, db_ return Decimal('0') # Placeholder for now until DB connection is finalized -async def calculate_total_revenue(property_id: str, tenant_id: str) -> Dict[str, Any]: +async def calculate_total_revenue(property_id: str, tenant_id: str, year: int, month: int) -> Dict[str, Any]: + """ - Aggregates revenue from database. + Calculate monthly revenue for one tenant's property. + + March 2024 is the default reporting period for this assignment. """ - try: - # Import database pool - from app.core.database_pool import DatabasePool - - # Initialize pool if needed - db_pool = DatabasePool() + + # Initialize the shared database pool when needed. + if db_pool.session_factory is None: await db_pool.initialize() - - if db_pool.session_factory: - async with db_pool.get_session() as session: - # Use SQLAlchemy text for raw SQL - from sqlalchemy import text - - query = text(""" - SELECT - property_id, - SUM(total_amount) as total_revenue, - COUNT(*) as reservation_count - FROM reservations - WHERE property_id = :property_id AND tenant_id = :tenant_id - GROUP BY property_id - """) - - result = await session.execute(query, { - "property_id": property_id, - "tenant_id": tenant_id - }) - row = result.fetchone() - - if row: - total_revenue = Decimal(str(row.total_revenue)) - return { - "property_id": property_id, - "tenant_id": tenant_id, - "total": str(total_revenue), - "currency": "USD", - "count": row.reservation_count - } - else: - # No reservations found for this property - return { - "property_id": property_id, - "tenant_id": tenant_id, - "total": "0.00", - "currency": "USD", - "count": 0 - } - else: - raise Exception("Database pool not available") - - except Exception as e: - print(f"Database error for {property_id} (tenant: {tenant_id}): {e}") - - # Create property-specific mock data for testing when DB is unavailable - # This ensures each property shows different figures - mock_data = { - 'prop-001': {'total': '1000.00', 'count': 3}, - 'prop-002': {'total': '4975.50', 'count': 4}, - 'prop-003': {'total': '6100.50', 'count': 2}, - 'prop-004': {'total': '1776.50', 'count': 4}, - 'prop-005': {'total': '3256.00', 'count': 3} - } - - mock_property_data = mock_data.get(property_id, {'total': '0.00', 'count': 0}) - + + if db_pool.session_factory is None: + raise RuntimeError("Database pool is unavailable") + + session = await db_pool.get_session() + + try: + result = await session.execute( + text( + """ + SELECT + COALESCE(SUM(r.total_amount), 0) AS total_revenue, + COUNT(*) AS reservation_count + FROM reservations AS r + JOIN properties AS p + ON p.id = r.property_id + AND p.tenant_id = r.tenant_id + WHERE r.property_id = :property_id + AND r.tenant_id = :tenant_id + + -- CHANGED: + -- Convert the reservation time into the property's + -- local timezone before checking the month and year. + AND EXTRACT( + YEAR FROM + r.check_in_date AT TIME ZONE p.timezone + ) = :year + + AND EXTRACT( + MONTH FROM + r.check_in_date AT TIME ZONE p.timezone + ) = :month + """ + ), + { + "property_id": property_id, + "tenant_id": tenant_id, + "year": year, + "month": month, + }, + ) + + row = result.one() + + total_revenue = Decimal(str(row.total_revenue)) + return { "property_id": property_id, - "tenant_id": tenant_id, - "total": mock_property_data['total'], + "tenant_id": tenant_id, + "total": str(total_revenue), "currency": "USD", - "count": mock_property_data['count'] + "count": row.reservation_count, } + + except Exception: + # CHANGED: + # Do not return hardcoded fake financial data. + # Let the API report the actual database failure. + raise + + finally: + await session.close() \ No newline at end of file diff --git a/frontend/src/components/Dashboard.tsx b/frontend/src/components/Dashboard.tsx index a21bba404..4f9490e3c 100644 --- a/frontend/src/components/Dashboard.tsx +++ b/frontend/src/components/Dashboard.tsx @@ -1,16 +1,61 @@ -import React, { useState } from "react"; +import React, { useEffect, useState } from "react"; import { RevenueSummary } from "./RevenueSummary"; +import { SecureAPI } from "../lib/secureApi"; -const PROPERTIES = [ - { id: 'prop-001', name: 'Beach House Alpha' }, - { id: 'prop-002', name: 'City Apartment Downtown' }, - { id: 'prop-003', name: 'Country Villa Estate' }, - { id: 'prop-004', name: 'Lakeside Cottage' }, - { id: 'prop-005', name: 'Urban Loft Modern' } -]; +// const PROPERTIES = [ +// { id: 'prop-001', name: 'Beach House Alpha' }, +// { id: 'prop-002', name: 'City Apartment Downtown' }, +// { id: 'prop-003', name: 'Country Villa Estate' }, +// { id: 'prop-004', name: 'Lakeside Cottage' }, +// { id: 'prop-005', name: 'Urban Loft Modern' } +// ]; + +interface Property { + id: string; + name: string; + timezone: string; +} const Dashboard: React.FC = () => { - const [selectedProperty, setSelectedProperty] = useState('prop-001'); + // const [selectedProperty, setSelectedProperty] = useState('prop-001'); + const [properties, setProperties] = useState([]); + const [selectedProperty, setSelectedProperty] = useState(""); + const [loadingProperties, setLoadingProperties] = useState(true); + + useEffect(() => { + const fetchProperties = async () => { + setLoadingProperties(true); + + try { + // The backend gets tenant_id from the logged-in user's token. + // The frontend does not send or choose a tenant ID. + const response = + await SecureAPI.getDashboardProperties(); + + setProperties(response); + + // Automatically select the first property belonging + // to the current tenant. + if (response.length > 0) { + setSelectedProperty(response[0].id); + } else { + setSelectedProperty(""); + } + } catch (error) { + console.error( + "Failed to load tenant properties:", + error + ); + + setProperties([]); + setSelectedProperty(""); + } finally { + setLoadingProperties(false); + } + }; + + fetchProperties(); + }, []); return (

@@ -33,12 +78,37 @@ const Dashboard: React.FC = () => {
@@ -46,7 +116,9 @@ const Dashboard: React.FC = () => {
- + {selectedProperty && ( + + )}
diff --git a/frontend/src/components/RevenueSummary.tsx b/frontend/src/components/RevenueSummary.tsx index dbb6d0629..ab113fb5c 100644 --- a/frontend/src/components/RevenueSummary.tsx +++ b/frontend/src/components/RevenueSummary.tsx @@ -29,7 +29,8 @@ export const RevenueSummary: React.FC = ({ propertyId = 'pr // We pass the simulatedTenant option which SecureAPI will attach as a header const response = await SecureAPI.getDashboardSummary(propertyId, { simulatedTenant: activeTenant, - timestamp: Date.now() + timestamp: 1710504000000 + // timestamp: Date.now() }); setData(response); } catch (err) { diff --git a/frontend/src/lib/secureApi.ts b/frontend/src/lib/secureApi.ts index f85f04c90..f842fa5db 100644 --- a/frontend/src/lib/secureApi.ts +++ b/frontend/src/lib/secureApi.ts @@ -68,6 +68,22 @@ export class SecureAPIClient { return SecureAPIClient.instance; } + async getDashboardProperties(): Promise< + Array<{ + id: string; + name: string; + timezone: string; + }> + > { + return this.request< + Array<{ + id: string; + name: string; + timezone: string; + }> + >("/api/v1/dashboard/properties"); + } + /** * Intercepts and blocks direct Supabase queries in development */