From aa583122f2904f1f1c9bf3552a5226802cd3150a Mon Sep 17 00:00:00 2001 From: Gustavo Passos Date: Fri, 3 Oct 2025 00:20:00 -0300 Subject: [PATCH 1/7] financial-institutions --- ...8884dc04-abac-4f07-ab68-47f7a4d0cec5.vsidx | Bin 0 -> 387043 bytes Fin.Api/Fin.Api.csproj | 6 +- Fin.Api/Fin.Api.sln | 24 + .../FinancialInstitutionController.cs | 80 +++ Fin.Api/appsettings.json | 43 -- Fin.Application/Fin.Application.sln | 24 + .../FinancialInstitutionService.cs | 134 ++++ .../Dtos/FinancialInstitutionInput.cs | 23 + .../Dtos/FinancialInstitutionOutput.cs | 32 + .../Entities/FinancialInstitution.cs | 47 ++ .../Enums/FinancialInstitutionType.cs | 9 + .../FinancialInstitutionConfiguration.cs | 42 ++ ...94905_AddFinancialInstitutions.Designer.cs | 572 ++++++++++++++++++ ...20251001194905_AddFinancialInstitutions.cs | 71 +++ ...1003025422_RenameLogoUrlToIcon.Designer.cs | 572 ++++++++++++++++++ .../20251003025422_RenameLogoUrlToIcon.cs | 60 ++ .../Migrations/FinDbContextModelSnapshot.cs | 61 +- .../Seeders/Seeders/DefaultMenusSeeder.cs | 11 + 18 files changed, 1766 insertions(+), 45 deletions(-) create mode 100644 .vs/Fin-Backend/FileContentIndex/8884dc04-abac-4f07-ab68-47f7a4d0cec5.vsidx create mode 100644 Fin.Api/Fin.Api.sln create mode 100644 Fin.Api/FinancialInstitutions/FinancialInstitutionController.cs delete mode 100644 Fin.Api/appsettings.json create mode 100644 Fin.Application/Fin.Application.sln create mode 100644 Fin.Application/FinancialInstitutions/FinancialInstitutionService.cs create mode 100644 Fin.Domain/FinancialInstitutions/Dtos/FinancialInstitutionInput.cs create mode 100644 Fin.Domain/FinancialInstitutions/Dtos/FinancialInstitutionOutput.cs create mode 100644 Fin.Domain/FinancialInstitutions/Entities/FinancialInstitution.cs create mode 100644 Fin.Domain/FinancialInstitutions/Enums/FinancialInstitutionType.cs create mode 100644 Fin.Infrastructure/Database/Configurations/FinancialInstitutions/FinancialInstitutionConfiguration.cs create mode 100644 Fin.Infrastructure/Migrations/20251001194905_AddFinancialInstitutions.Designer.cs create mode 100644 Fin.Infrastructure/Migrations/20251001194905_AddFinancialInstitutions.cs create mode 100644 Fin.Infrastructure/Migrations/20251003025422_RenameLogoUrlToIcon.Designer.cs create mode 100644 Fin.Infrastructure/Migrations/20251003025422_RenameLogoUrlToIcon.cs diff --git a/.vs/Fin-Backend/FileContentIndex/8884dc04-abac-4f07-ab68-47f7a4d0cec5.vsidx b/.vs/Fin-Backend/FileContentIndex/8884dc04-abac-4f07-ab68-47f7a4d0cec5.vsidx new file mode 100644 index 0000000000000000000000000000000000000000..9749bb57152a05eca6626b5b2ff777a941eb991f GIT binary patch literal 387043 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

v zrv!=wMHmSp#$6^0$#sgbvRDs4WQF!igyn!7Kq5-pER}VGYYvNaAqWg)eYK@rAys zZ{vT}+Nk<22X#Ze{*26WkNt)n*;Y&D_E!8FJCVcvjL~~-o+{>;+-TBVgP;qRs9>oI z7O7yl3YMv0feKa#)}WwDlTcP<*!hyySs9$OU99$e#vw;4mnbz0IMN3&x~e1XdEEnxFrbjblGi2yHOXP^AfyxmTHQS|vzd zFw@~rRD#uN!j0XgA_fiAnQtVSK!q2BfCCvge1bf{fCmwV*mA2P_nAixsVOz18Gib# z_Q+)p(?vD7lkV%Rw~(ylT3Y`5Zd!V$Qf^n9JM@RUw1_iejP{S!)i@zfREKAkKTexC z*4OBLPIk{F{&Sz&?bl^~vafFtC;Pg6PAg}s;!?wfE@vcMV;cGt4mz+NWtJlE#VO|Y z%aOAgr}96XrNR^y(gs!|xnf&={{ll1p(>iglCM|pI+eII%Lc6YYp5?sZbMMXq*9X< z2F#qQ4BB>HQo{^o%v8o~Wz4rx3+VK!7n=7VC1;Jx&P$f-c9iGdKYn|qZm-hUx+^Ws zQoeH&mf)|Y>-h|&v-sPqFsk>0%&nvPbX7B7)s&X^7brT=L`tzCD)^!D*%TBJJeue1 znD}72wj>+0lik^0)|wskWxIbx2AY4`%^dq3zE3aI85$qK0`7p`I;fx3YXKje+P0%@ z@OXct`$G@g!Pj-0?b#o-G_EAp(O}6aA(3zw{Cje$V>^9^P1@Dw0_+c}WBi>4+owqJ zw2&Yi1I2Bt`~CDO>uj`dc1Lyeb0>{lg^6sK$njH-FhoIPiWTR?8KIK#x+tzcfn$^z z{!Dzx+-QXrJ;-bgkjV;IIVu85X_9JhJ#KTUZO?z^cHw=2<;5=b+N0)~MrwxwvETnr zKly#S(eVeUx)*5vZKgaHaJt%)uD5j+6HBzCc3-9!+`N~9i-o<9sgd7P1j*lbbnssi zqT&MGIZ!Y6*GGj~aFd=vnl(f_Z?h>{)9*8EVYTndHr`YDEEaZ1o%y6C+CEnIJgtU_ z1`ifKYo2V2y-)w}RDJ4%bpi9iXDMTbHqX@N+1iYgIRTJ#m%(9kt)&HU{!?eG`_bI} zno_-0-+W(R*O)gfpMkATZOm3XPyKrkd*mx?^)uQZHmMbs=3A^yzFS}pxkK$dNdP&y zVxPKrczh81eOF#R(r7a2W*!`q+9*A)u$zNAC>?O}HnV@v8l*|Sb3uy2AhFAA^imXD z$idjO19}*-8O6~~6Jz(RQQsYkUS)z7;HgZosp;l=0fSI7)2t*?rYOTV*`&5D4TlL4y7M&h7Pk*AviVuiRflGo-RoSYL&FnXRBmF<$A z(wQoqtJf*Lio`=Ag{<`UT(y=sIru5}1bw88RN|idTmL1S)o3*~$ zK%OY)U7bo`*$$ds6ul)C?gH@1=4zf|!plQ#bt@=kJN=Oyj|7i~qsHAv-Ibava)V>+ z0=kV@|M@B$sAc^XF4Su`=_+@-O1)X<-l;aX>*hOD>b*!ahiUOc*1|a%7;~g5pU^d> znnVAlcOk8xs0xQGUr2Nzecj7F_~=bDM9c6dZyC-Qr}yTV9_$z^f11`fA%%5320K(A zo0bWK9SEtTKXJ3ZN^N2S@;kZ;?vJLVwK~U}k^&Gi1F&eHp&WO6O^4?X?p5Q0mBWee zE4k+_${FnIhxI&2@n`hBA5~UFyrid-b;Nv~@X+=r(sQYLF0#rxXPJ6>ah(&$FxsJT9(*FHD$UaNwp!L+120r7#J7n7kzE=MhXxo*8{K@mjE8-UAACA=njE{U;d&;aNIpz~2yOcLF3ng|Xdx$2OAZ^7QH>sW` zTth#8RULVPfojE3WfR!AsP9iJHM?=hVkBjt>tiq_O(k2**N&h8)N>K*d7myOK!LX( z6j>8C>=Rn*z7&JpKftMmYJ~=(OI3j_6(hX!)DmW=n~HkqT{1erI_g9|JM~Dh9w=3H ziG^ZPkq`nBg4H`(zDBDy+UUA{n^d}0eYU7@rw)NqR;wz}TK>Tfvy%{77(Hpk&FONgDnDgn7wi6P#VNgAGw?i1f`J-@lw39ST{i4HYSLR- z0I&th8fY@wiC}j(>1#t&bDN$j)>uF-MpBN|ThHireB-C+H>VJ|b97|B-ggf7{a1Cx zLjCRJ%Kg(s{*Tx2YK`AlL>Je)ehKO;nIyFnp+v#d*D0Gq( zK{=|1X3EufuF}tX=r*dVWJy(MewBpKUc}G4bbhfW4Al+e6^m>582x97T8&lPr>#tm zjMk8;CzE&cv~Ys%f{Y%g-&PnOy?L%yJ85`iiHYbU#mwQvPQ_%0#l%7 z#&AW?Q3Mw?P7{w3)mxN~izybS7@6)cNx<((v>3%sVRg_5xI)M^Fyv$i;B66S-e=;a=meE)GBiGYyKdg5vN}z!)%6E8ra`S;08Ex1Jq5?6%(>5w zhBBZ$5}yB|ypvByHa^vk@6Zfml-NhyYEG`uG?QX-U~yVO8-?I z%FeNayY(%)$9s!xS0?%s!y{D`^e6sv&57-8zA&MKu%8Xm-p)rqc+O17B?y>{?{ntq z7vUrD4HH7UtE$|furG*Oub6!0@JfB7y;WqC)iH8uAcFgRa5+-{;g(I&Jy8vw3>*zT zL}O!`W?roOE>g-`;~*Y-S4(`&oI&>H({125STHnVL~c=Ju!_j)8=W{dwPB`%SB+1c zC0{wU0W_njnfSpeA8l?QE!^1B^E{I%6DPN})%bS0kAo)1CRu;r7~O;2H2ep~XsqE` z+^h7vEH%3NKGVK#M#41Ft;3#GDq>5DbkAF=kso-dEQ4^V*0t{%lxOm@y?WjOy1msKd|hB$E-C7`U2u4TQyg;Uoj<$>l|hRCxSVWm1ozgls)kPe;4ysarLYS(7OFM`;UYIL{e(eDno-%7E~Ho~{oagb&Tq zZ)T`+o|#d9I8&8#w6?-9)yld0e474Fg1S&2Emnuu6o17?hrf}jzG2kEn?%}`Cgyx| zx#oJXeX~+?tMu;>l!%?yn)n<*GG421Bu<$R!8BOOXS0k0WHNvyDWx4M2a^GIMmO68 zh!Q~ZOsm?2dET}FAo&94RH9pfd;m;xFxL7%QiRnWEOiJVkVXd>$qmXjDGPKlSnU9e ztadQQda>XQ!6xd$JLfAlP+iEAZ&qfI9^Y+z6B%+Cxe>(K6DDttd-d@>zt0sjw0O2E zW@_;`4ffP`!Q&n(f_ACY~v1*wb^aH+=wfv z)beW0E- znEH&-%aiq%n^M|&_mTyZ5NuR%>M`IOLdvU^FZ}HL!g;7qmuj>3tzeeE-V2uTKhbNe ztS-hE^vO5X1`>)4vsxQKlNj!q=s~t*5`3P?o(gB zU43SS_WrX`XtQEHLG4R|+D=W0#%GzMqG!0?3XNo@+IEPxlc^S2wR^;yS<;8AH7V;z z#S&TTHjVAE*jR*t67ESC+gTsSAF0y`d#<=o z^7;ZFq~5L(LO*uxaT~5Y?4B6s+F#R%FvE1d*SxhO6mi=kNUj+riXfu+k@vj7c1<=T zEF6khC)W`$u_s!n!30b5kUwwk48xxI2RI@|l>C{65 zj13W0EsLZ}IAf=U2y(yj&OmG|k zx0yBsFcm3q02q$Ke7x zN_sgk5(|J4c3e-T^m3OEwjM?wU%vY~1-tJSt6O73)W)NCiUTRFNr$6Kxs?jmp>;ml1$LfbqYt%%gm+A0mvqSm$ zbNc!uwWQ6QJzlQ&U(ioMkf!RR>H7FZ{q!XbpQVj6^zlr6JWub>*2fdHz-j3D6?%KF zzHn&nGu*kUxfbiA*R;lh_XqUfaC%&~oX&+AZ5CCuxR zE@wygs57e_9jUjV63ippU6voTC%{Ra?7{mkilBD-C5pss_3WfqI_uFKHSc2Z@-i>3 z0Z8ZN8N9seyUP5IG94Yt?5(gLF3k#5*ywOc@x$e{{u5hv*d=-fuQk9MXjP zu2qp?r#JZ#)8|q3aqplDM{4R5>hqW`d{TWzsn1jDwT+HI}*YNF%nxm|w=420LKbeksavb1*AZe3faxA&<>;{5sp@|Al1#yd$1HYlCM ztgQxI>UEzp+PU5Iyx*D8)XTT&xw~!7bpRyF zvkBV!<;q*8py{u|V`fE_aw%-FH>|bR<~tkobA~B!CH`f!PFr=zH8eG+oAt2pP=HEc zcCN40IWDqVxIsS)UeEH#w#tZ=kim2BW402Akp?_s$6_XB)O;0??k-gJ5@jz{_9A63 zSN1YxFHrUh19`HmRIpvY;VzNrHq&dF%BQE;Cn{zK8Xh!Al&dwW*{)9O71^e*)mer6 zhX!q`w_8pX8*0Z*!5STYNBPeEMQc@FW^SLB{SLD_mpTjmD#=N7wB}G8HSRIY z(x2Mt@0@zw%?UrNw`E6>ehT;3K(K{5COKxckl&^)Iqt(u>P|w74>PHIywdEQEmu$C z#sOAL06Ya21`xj2AYTI&sqbcgxiRK4>*|UuIAMGg#hG)jrNmkPYuh1PsEEQgc%c4g ztb-!S8|$|;=6w)wN^Ki;vFK#&>Zr0Fwyu%vs<>xeQ4UDuG+%HsBZe#0DSAO ztLgoObDv{m1cTuFE>!svl`mEKB9&tjvdpHym*W%S_8=X0>ytVwd*5TwOoMKQEh<(~ znVN32IqW^@Jx9dCAi_L--c7Sst8lv^Khgb~RBz5XU_QXJ;oFo(xx{k9Bz(P|-C&gT zH`rNuy1bhX^ibboRng2+tIqX$yFoW>(9%r(h7t2E_19G2k~rX zUaP+Wvm{R|&Z(#}K_|SSV_L4ZxN7trcNMVSjbVzH8tC_96o63q?KG{sCSRl2DxbUz zWrMt-oqDmOyD0jAz5az_r9Gp_+iLR@8<-M<3f!wOg;GcF7NPN>w=%C$w2w_mxQrCe zvxPkHVZsPfL+BWAn7L+@O}0i=8+Xi~`aKZTrFs1xLZ(PQ*;XHUHq|<+k2~ovowYVc zTiyC>WLNzsT8;ZzsX}qJX9bQ`@zdJp?Z(qjX*V9H z*Sy`h=QO*j>Ln^#s-i_IT&BY1HtDr+h1fyWRf_si72cx1AZVxE*mH*Q41fSj-)(UE z`2BifuQvNYG?Ga&$sTBfad=3xCb%}v*dkJ8<{;?V&5bc72b5BoLfGED3NJ8^qdpz% z#%`jwn!K@-@G88Zi+QHObUz7^ak&stK&5T|x~XVB&C`#&>3Z+Ks3yVgskC0^Hjq}J za9>5JFRnEuZR9%lEE;GrIjvCPTTFloXqI`qS~*~qR;(reYR0xHPG_w9p%opGM-+ct z`Hae?SE5u8qpiYeka+T}GDe#dKEmeE+iDHbK*#G=g~5?_+HsQx6Ufs+e{&1FT#v8 z>-9*>w0@A141*#;!o$dfXy)?QRQoEzq9;yqk?XRM(Q24r7S@Q4hBNNGg}#RBfET1G z5{P>}wx7`V0w-o!*U5)qm{G02ND=J3I_vt5+VgcqzNN`|x`O!MOWpdI>K-w66tk~; z4H&FM?d<0i-1py^KeEHUzt(A&ON$@lO>-3e>c`sM1i&eIdY-=Q#*dYj_VHr2CaPoZ zHg~Vn^VR?xnWA=cbn`gH7Ay9;;*5dVZ{0Cn9N^-El(f|gkg$3B3(y31oyB@%gbGRw z>ZFw;v{v8Ps19!4juyRTjrCPk`{EqG&7RKFyL5G(4(-Mx$@DmsK#arnw=Ncf4nZWnj>izcGe}NUh=edW#xp)Y4G7hvmo)Eh-KXw#Mnt~0SDg{e_}$*@=pXBr zjld0O*+*L1zUa%E=jNv>7FCn(%Ij$@Bqar!_OSU|l1yeg0-RZ8#6dIHX1rgcPq%B+ z4*lGpGL?RKzrwhYAJkEDHm3KUV@`DJvKHioNOW48Hlsx&+t_fz5#sYpEDqo9#+Biu z9Yk0CC2>{8#_!aQ@$HJe2_492sIk)`^gK(T^*8xeHYF$ z>yKct@7EH8eLr(o2eP%sgMBYstRAl^?-g?eX}?tMU)Kk3nBiOdm1g+HGHAa*?N_M1 zyE*{MwSQabRchnd+S1jU{-)_dgSofY;_C30I-q6RER>>fc|Wbuy2Jq7@$2*+1911L z}H`YzS=WChE$ zc$s#4*80avEv`}*W;Hff6rK@slk;x}~yrpzzW#l`yGNQIs-LX(`T14Kh|a??y7 z-gK6eo8Gc}@;wyq`^^f8`JM+8z&nB>3${U|#aJNA8Wswi>1aca$C7sVJD9k@O&&>BSudrLqYbqFd!v#KWa#n~Zy|D#0H8@Cm)963t z=1@2Jo%tX)F_D4Np7Rt*JojXn`l3iIQx-R5jhX@U1*pz0eaBnfbN8wv3&{mk65B1PaXMvG?!bpB%efVQa;_2>P_04$?so%yy?h zplI!_v};t<$0xi~3i-X_9=?}6Zm57t&0nasC)*h(d&|dZWpXpgl7-gN9&`}U$COVK zf%h@xJGE`nvW=$6Z(I&f5=?7A>wJ) z`LVUgkF6U5N0G!cg(xA1q&MWFeHyS^(_Hp**kwPU$Bj)zHt~F$+Vd^UP{sLXN}owT z2uVdJwa0Uw$a8aI@SHnc=M!fp*};9+RCSuJt}}G^Y;~QfyXowhubtC$$y{|>sP0Sj z%2M5(zy|MLpx&!2es*$raFRE4{BDyz*lNa}*!L~;u9ow6>D`0YzVYcEZ9Y39tom$- zFzk=EcnoQwCiMNGHyCYClcN?9pgBUo+AvCqzObo@p1au|MbFsP5n!q56X0k)` zR7|W!BJyS8korcRNW7jei1OeY{!9YDGnF~p`b}c4m5l)WCNMNmUve8TG$gpkqxX92 z_is{f)`iVZgZj5nh2gdxU{J+2)bc+)h0A|j73gptQ$--f!Rvdp22Iry)AjusdTh47 zKU0r+rv1fSlbro^p*~+C7|&yi^sD6>y-Z&$(EH3l#Jjsvqv1G!wl-R(0ZBm$K}z#m zH%mc=N*x#KtXL;^v2gU8lmiUJP`J^$#s}vWKrxKhxVR3Dw*I4LnP>XyNnQbmojSoe4eA5|71YV$v_Yn655X{%{?8Sox1yGsq{8 zD4m34q)MMKuqfq8<&RRnJ8J&)X(wlHuhakBW{S-n zq#T&b^;LL)eml_nZBY&nF+Q%0urtT{(MXj^m?KNh!e#CymlpG0Z(8ppNeCbX{8=X|J0vRQC(? zUm!LYt78XEiE4AUDlXFFNTD2beK|+@U36PVW9p||Zmnu-=tcdy9{;8eqO!ZfI@jL3 zQdfRU8xX)>Wxbq-zNg4{Ro+8Gf^L_qb>+8p<@Zg?RM^`_J{{_%V=)z8V?u~y1sdO1 z2Tz;&bnHe&8V!Ehbd$dD!B3d19=lmr{=nF!Be&_;?fSU`LGA9)-S=wgU21lpX|r>= zA^)lfp#4zYeZN8X&;L+E9@3Q$TI*;jGoe`XBlIFW_q1idCD^tuSVe+ zMn6mFyT0A1=d{i9y7I^7z;M_S<(>`y4ffq<{{N=lMZa-zcT;ok;09Rg)?GKZikau!2FIVlJA* zpeoLUK_yfAdDArygNv6Gr1bM_KWPjx>h^t^?kRt%i5s7oD%C8IfU;PlZHAfyQ|Ut;0B|L^|eVlw%KGw`Ss?G zRgHc)$eIY(1HFN<(9EpN_M}MJjJO@EOBmitIk`{GXsmw4NU>_rBwt;?o}mm&SK^&5 zspAv_WkS3Z=FqQGXpg~19MECBD9N$^IXg6}_U zU#~wk=mKxqelZD_f|SxPd7(al`R!`l-}-KrGsGRb55o-s!oUiZ>jMzxmlU66=6g-% z=(7riU$p_#S+6PjiXyLD!${oW;x=p57FNXvdxJcGv`#MqdHGFyslggZ zku-di02y+(Ys(IEEturM!VAet7Sh8BBeyi_>sll0~RzI%S{TPyGA4kw;INjKh;GzQqVI;!7wR#qoftmsjb!HR`ZYM+1v;hla?< zjL-Fq(F998DYoYwW*!)28$w&`@w1@0{TT%>b>GF@bUg##*H&wzn%7bNyJ{$|t$CK7 zUHM(Bq^k361Z1?Awd%wR)U>avZ&1l~D(R=Z0op%MR}|`s{(Af-RfGKwHmmc4H!JT> zU3r`Cyj}b6u*&GbAoUz;Q1-o3wGWjY;yPq?=3G=dA*~O zHJV1#)=qoe$J{J*Gftaip>?`zw|clD4n6JR16Ft*YS8R@g#+bV5F4B84sx@rY=p;O zAJsP>(F2cb^+*kW!Uj;Teo}uOr8Q6KTzVKM+I*9!O9ThGM9|9N7d7Z5Jupk(ouMb^ z>2@!TpPZvVRp_n62cbGX`l>E>ap1+TXb_e1>w4e~-5h+VmAc65g7Gdh8}IU9E2&8YQN3K1;)-boYR&Kj6hEH;ZJOK21cGC_@(3 zD?Op)F~l;sUHs`3IpB6PW@@vE{+Ew*Y&_YVbql4kTW>RGoL%W&PcX~B#5S<4I@0mi zSw)?+HOCH`NvIQZ^%jbPZkm&)cR)67*OmYk$AM&+neoO-t@V#eiug9QTxBnq&Y$A$ zJaDQPmHLvNBVf)@ubJvKPfdZXytqppXZ;Sn=IT73PIcp}n(STJ5srf;D)kbt*BhpO zN%t=7Udxs4PN(NpD*bJ}R;6d&(Zj3Fb)O)dy4_2dYA2w#=_0orA)Wgh6>+VK60RdO zt8Ut(bdHIe40nnVzEaEs0eZ0w3nNntTiWR1XM9TC>2A`K6LnCHL#dyB(~i8`+_B*p zjvRLF5H9m>S)vkZ;>dR77KH~})tUAKh3-}OK8Lv; zQTTC%A5+-3WMr3_0Fw`Jeo^z14Di7%^~yBAhyWBCCph>v!L&Dhx%faM2P?rL zMP|qW8l*8ne(1aMRL63%nz_1>#O5n}%MsnN={6g_eL{Cf-bL=pRh^EAx~BK0K+}tq z_kh0XlX}i`pIckubsD=@_jAE8xjA}{7Mre$eA8N4Luh`$;ux1qJv+=>1;GG0GM-oU zWaTFr-UV*;T&a{L%270a+3ihBH2%8`85{9!ci5W;{+vD$JFJ44ZIjm|-g)S%^b z^suN>Ee9y`CrFmQ$UDbT?B9Ef8PcW?R&|kUq@miMR2&#T=un$)K3bGuoX(j`O#>5M zZuorWf)lZtlLf|PQfO_D}JHk7b`+6g17CgyE|#SS3`d%26i|2 zl#M(VqPCk}K835j%{m&QMOJaIA8I|?gMMf}AveY~=^3*%$Qh&Zr_BuvT>6V=mG+$C z2u>y&_4Xn~=-bLgzU$2wL!dY}noGlM4^vQ_(MIDEu21lr50NT6zq!k$6eXn740qda z(Che<`OTH=j)2_kpfWg3n9WO7#KVl6m8xE@qC|);s#FmJi3rhTaZ$DCsq|hthuok*=RIr+ z8RGc~RalLhxhGo-j_Deki$s*JP8{y7Hrc<};Xc85gcxh7oj&QV+0B$s2I410E12#Y zHQ8ph*d@syOxWdpkf}rG=oYRdMY-gY8Cuy~htiKr3N!8t`@UzOjW4vCJrZv9j-KnDiuPlejmU+>?d zt~aUYV5@lpd^qO^O1V=xx9R=c^&-tLcvRkJ{RPK{>jMhmNA>X|YIs~NN9sFIXwZ`y z_?TLb(tkds&&KG(vAWwA&*v{_(iFY#WX)0RL)}&8D6TS|+Lbj*?K&hWdn+-mbJAro;erG#Wniw5~q8(eTNhuO_q1kAf$D)QQWZiP7*a zVd&=S=$DL!KYH3|_@j+R!#8abGzazUBXt(eSNJUjA?}J&o8xQ4`Qf zC(IRNKX3`mr|55!QL9g%pmL~O5tH#o3hA(VX zvl$3^2z&g+OP6*?II#bs(kDygBk04X| z3CuPP%r>fL0}ncK#cx`B+JoKH;(JyiQNn~Bdfif^9=OZ_eC<+`I{nW1)17onbpT=tYdxk?hTrHohA;{#Qr)~=-DPyFoqgAzG9iMJgWzqwlu*9Y<#;_y0t) zUaY0T>&ZV6MKEfI?v*ZvE~YuTPx08coBGgFggNIJrHr-VVv%>%*DX3LTv1k2tJMA0 z@5%9Ph#y8hoB|Bl1kl5wC1I8r$B_n1-tz}Chx87@w6@8mma=B%+WEDsXF{2Lx1G_) z9yCBKIzm-RmGayAeWgsOyk0XnTR}2?Xl#_iC+S^-T?VEZIA$PmPq)TuG8PO;GE!99 zxOs#cxy=bfl3}^}Bu{s^SFo9oU=IT0bC>#3{9;8yRykC6OcW4(3?Gu`%#Q`oCNx#m zRG{vgF~FS}{v)tusMW9P^@Bhcn);=^^Y8l*(x7)9*pQ~$4;oE3JImhrI2A!NS7K+W zpsjM-E9F9ah`s4n>)^dGo%H>n3nplR>8kaN$;j0j$BlE4!~?%HGUNK3?iGh(hI+e7 z2ijGhSIT6iOieiLoLvJQ!OGfOs;pTxKe-eg)BfMlOhE_MP}}tdwJJsopJ7EMEhq7V zhGHS$2l#C{U0r6V%WQR-sV)G&^YvGk5?#Jf<4;C?lfG4zN#80~cv7#$_hj6tyh24UX~z4GDoR(!=JiA}DJ73#0zaO}@ofwI)&Y@l8v0 zgSa_Qg*48g zbH+WTIMlXvy7niaw*51;f426IQ`0$$&D9_0>))nn>q6CY5G>KhONDj7AFvKsu76vg z`W5;&Kd1f;=BP>|f&JGgi~NwHp5%}{Lc;7aS`xz7wrg9pg-w`|tJi4-w2os+0m!z> zgURopct~1M#03F4(}1RdxUQuu!vorwEd5toeSyhL)O_!=I_Vwncl$#}9rLpB=eat> z-MC8iup8KBqBOfzQ}57Up-TudLp5-iwhh;+5&F19`D69i7!9KNrA$Lc>&WxUpRC`z z{DzJX*!iPL;mri~<%W#YP%=7qncG7;m(bfB_C)San9DT==-yUYkjuH%+k(}`ydz6H zv`HUs)dO4frr((h6FB4t@2Yr*e(Ld`Is$Oum>1U%?bDFG*0h*TeSLC*N9+aehQ+fdx$SF=-DHOkwr52}^A zLs>M&!jG&o$0Sq)A3&J8>3zRiEj*y=gUYMd-3@wWkIvbk^?V$@C{Fp)!w4!+>+teJ zEt+9XULm0PomOH%8N_xNE6r)nPLJ{Fo_I>90uK zY#Z~U0^g>C^ZVrh74nv{1J|Y7~b2nP+rT#@lLIYudjF8?*s$ zF8}c;1t}QXctzv7W~?dwXuq1p9FuB=0n&Hr|JZHf=Zd{bsZ|9qaxjw%4>v55Ix2Fh zwKm$P1o5MbD+H z6IA=filRlo$TWMj8-GNV)J+F_n64(PkBa)Ll~+dRl70+Vt4G!E5$$9&>SN}d38VUZ zC_I7#1pSYc>4ZhW6y;7;&2-hgsDgxTY|Tv7%vO!t#v)bPH%=jUj(vZ=KAonTg?j&0 zHCwDn?i{;&iO6_q4>{t_v3NA4x*^^^hqCuoYG0N9vPK7d0@|Bu zJx4dC=>;4eo9V5V8kVlBLF_a1DlbUY(^LsDl%fow(6HIfBebtXA3kH3coa>ke;RdY^+AiaNAxd~&&vN|)H zO5Ll9S{q*#Sh7C_z{uU;Q%_aT=_;F{oSDj*Z9PFN7>m46!{_SXmgw`P8jZ=!a(%Q+ zV;AVb6?(r?A64mdE{u_s2 z(Fl*sv_dX&-2URfrGgGR>jQZ({q+iYZjz zA?kgrdeW+Yr!sCg{0dGaAGqdG6AzmNVx+=PD1;E=$%G@;|2B_nCK{}^Q=UzlhTG)3 zHjpmjZG%8wVL(NPePV&;6a0!{qZ{?qT8-g!@Q-i%@r++zmSv%*<$!BktssHUwY16# zmfkA5-h@MKymG-$fbf3Kb`@3YV#l(6wacWx@6>6)er4>{JGC}sFg3ZPIgj@19*Ua% zCZ6FVRBuo|4DVh|;2g=bR_-)!LV*?i%=7$J8=OMoBd{GfZdfV-7FTa^Cbgqadcp&w z$MK0yXa2DKcvBxr3mDi;RhcUBROg}$Rd~(&hYq3|{bOgf>!ej|WJf+nUutFx3yA8T z^&LauaF=-wyoX5T&`%vS5~8#T%^kYDUn^BVn}uFq;4 z0}*5$o@9) zwHg5s&3k2=eW=l1x!TnGOmnGjG!zhP?Odvz zi?nmOCNHz`=r69&yiwz?di|eNlmrS9=&5q_`z|WI!F&ed1NF7XRWiqj{=n@avgA~iZ+wNZ0Ff$F z5ETRy54lJjD)6JIwo;;Rvem-bqBx@E1S%4_$&SeAt;$DWTx@=2p{RQ2 zn0@iqTpRxQ-Z0s$A6K+8vjD+1jgwt`=eAp`QS96;hJG}`R2FO59eRD6CalvtyR@iI z8_8!Ni4F)+=m>f_nI-`A;oeRAQAgb2eS$882;+h5$y;uqBCGZd(oTcBYgM&rlP3DQ z0`oEGqm>=Reb8-Urbnkn@Ow`2+Z?4Brdv~N;n7VnW`_37)|i>vH^CkaqlJQWee;UYS`n-9rj#{8-t=TOe+GfHtRF1@r$X*+{RZ{CPOT8Xwu;Bs#Uwe|bI{1b|?FCaA zMPD@ZEH+DN$Tcf`g-|^$wmIYBR}_0gnXfCh(&8sCYyE~&8hp}L@JoK67%?G5lTH~+ zeZEb}tb+vXbaGS1<;vmU0KH*W(G@24j(b>`Jv;dL}nFYPBH#(iu;1bKeX-9nNY zCe=iSTIADw`~~466Hc%y4&7}@Aeo&8Bmu=9}Y(W&}ky55?h zC9}17rj`&Ar|G4+dSIazFVS^N^@l}56})npuJfq4vQjH?rS7juC?XOU8R9;)Q+{{# zTw&k9yG4n6k1CUFgxyE4){}}cdjk0GNzsFkw@)^iJcEHAHg|=Ek1La2r^l4}q{>Dq z-)@s4S)(pkZMxE`7!XG_qO)fo0nXO7_q+(B)s32#YV*ESbk5a`` zs+gkl=BReD(oqpSBKmwQ5*K{p#_qMotCIWd{>L{Y#xH_NMo;s(_1IX542A_W%x3|^ z{+B2|(SX^k=dB7}ut{H#e)BAtYDAw@Fs7~XfVNXE0L&A>lVS~Q6JQhF(J3$RzaEEr zl7L%+LJiHe=NnpRb$4j#8LX{CRSAt8q8c#XLYuu(x>o%WULu)WZ`R)_y96ECW}nrG zdCbP8fra?Y@WIosq>ZxOBD-gzDer_ccDaQ$Adz9yH9iT6fQNW=9X410?qEoGi8UVu zV91j=S~mtm0wjdke){{8AEFEL!v&|5-!Vs+DIx3BHARv0tfJ5LB?k_FjswM?QQxgM z5%}>V8`$$w19_Nsan6Hg3egkqj=kENd?R#dSKC<@XE&k3MSsf}CK{;{)5F)y)k_OC ze~IQJb6uqQ%k|4;n!i9BSLm0O`el{=rM)u2+&s|=Lo19?tEneDz)!GS5v8kr+CLf< z-PpmA*zlKr|6Vj6IRZn*slLD2Wm@dz2$-M}Lg%o>q4E&_XOzab|S zp@@W0VP$gk@IC)N+NOknW##s6WYjOci002nEH{S~XD>Wfl!yNDLEcaZ0=81e>fBp8u6Y#K`D=a(s-4 z<#pgWji-lz_An>9!EE01_L=EKD%cL&oY|>wxMLf)1)YWi1zABK97;15CofAb_~0Ab z?rPomvDUK-&Xx^fNSyn^eujXGa}DeLn)`r6GmA<|B{yZP3_Th1P}RvSg&b^_2CeO!l?( zNQ173s-mN%h-@V=#&SnC$ne48Z{4OgyL3vkK$vEM0X7Z;un|j>ct_js9E;QoB^~t& zaOk7T9c?*D#c1VY<(jH3#hSd=5}wV#vu%wt<-mOyG#JzlSOD8S@H*s+{4A%TGd2BT zJvJ(XamPh|AC{29I@X02GpumcG z|MA~RMI7e}Us5*3J0F}S!yIb;|c@j zx{G0_zx6wom1o3FNq=?n4)HjTaE|&F5uAV882}dHmWoy zSh+$-Pvmnvn)iLW$AxwJrWY5TXw|7#scSZJH|Vjhy4F$dFrhfnbzU^a;~_9R(GtaG zRFN+BXedvJpDZfu_qn&>Li=?0j1!XGY%UCM(ryMKg+MU8)2fU*dYG;nuJ&xMTon#8 zGo?5@RId3;hjv+>01_T!$@RA%2dpN6DJ!(j_aX?}Gl6#?2|knslah zwIk7l(ikmYRcP!37tCR2-NB5d+o6xe$s=>f#s(QYfc%_iH z(C1<=RmLepv6B0(-oSXavjh#Mv3*t?Zcrz`i0oS~#a-$g>el1qA{ z1)6rx36GnhB|h~T!txqT+^A>JA@Fuy&0UeFyl%>(QUHQ*{2}fqDJKpIa3CWDG72SR zgdrGbPDVy`*DJ3<@3vJ%pbr5qU~A->=hfkE+5t9ItY;oEjdzJ#VXWL`^K??{4Cv#C zY+A3tFN^NQ?SzZ|{z(ZDW30qrNtlDK51fjy_@^myIuTasESUc`&hF?VW(660%xxKF zANSoo1>uRi2}5jwo#_F>6AA)8JzPk*S(ZdI4ncM+#}g4dSg6C)^^}z3A0``>4j%6di5^JID@U%XD*4j>KD@!Xkmx&WJcd&V}yhxOF zOj6t9WgWXOS=ODzag)a;v#hra|0h ziQWKpXImZZph;0}=&Wyd(nCIp`^JuX@KWmw8`}tB@DrQojk^KUf4z_Cr5)ktsr^&MK5-~s8?4dD6-d-WlMwjHi- z?4(o)J=#H0Z$Pe?U`I^f-KyHF(X}R#0$a;Mx|XAwMxb=&;|j60gJ%Jce8cg%8yUVZ z&~^WVfQ+@s9{rG1DzF^HS1@_NwbSnI`Zhbgukixeo6PzHkd2a@uo>Z-|1aC86a{z8 z|0Gd)@-mg@>brS5r36{itx$z;y28}}C!(5w9KYeE-+m^j*OFnr}(FSiC z;(Bt-H~Sw`AzmXy$Q4PY>a-ouyVlHqtZE40H9$XfiB89K;G^+T?K=`S2eZjSm)cH9FobWN&9*Lhs!OI3$ZE~a{679_I=|!3guf1 zTd4o>38x`E((mzraIeJ#uCOVI>kkcz36VXbWArT_X1wW3w(G+)trG#Tf^K@07_Bf- znSXq|Y4}xx;t2v_juO-?ixggFnwGG8ScNOCHYcwL`*_omjSd-~|pAX(k2Hk^;zHWv# zF>u#PZ?obxRPjlycv1oY^i^l)AXR_xdv+QIcw=K99)6Jjx>ae(A5Z>N<8OEYe{E)6 zRFO;}-lK4aj-e_~W73Mphy@|xKPY?5W5R!`3Kw~Z2goS`jm zTecQ)j($D=#fY)KW_?rIU(13vfqAMzVClsDPWQd(y~H{idM;AW#LUy)E0p6iPs`}_ z+vuGLIF`6&#7&^jPyz9<{7FT5Qtz5e722Wr9X^pT)t(@Z78dGnRpcFGB_Pe;-6^`-@A9tp zE4G=`q}rQVC`@kLZ&pr=e89n~27SCo85^|X9sfOR)im%fCOU1?=H1GzQwl%3-+1$p ziC*|7_4=#(ghV%J$69lPq!#{YxAN+A9xwLM51a*%?Dscl4d;meDlpp!2Hl1fE!bSU4KN{|#3mc$Zkv%0$e-KHe1;F(gAY4gnH)MxZ97EyuUwt?g5j&N z>8ggy3!cas9|w<&B)`E}$htAA#$9ThUImonIyslI&7s@E55DS+=ErjA6?esHtF2&$ z#o9MiJKxs5NyD`D{_eq1(pJyrX>_qx#B~o{pFz*>PFs30QfR2%GF&)fxWiyNQ!?AiXu3zp~Cyv+GY;;BSGF5LE2xNG*=B!WDur!GP z$MIL@a+39-Y%EvK6zd1)Rzsb~XPEp3F<~6Af=M*srQ6J222eD{$7JJk4}(vN_IQ@d z{MM@lJZZh!qwqxX8vHLW1GwXMajycD8{PE;J^POFO=-cu(1yb|%TCnWja8-_ z#i>C+i*{SjJ9oGwPpitU zuVE}ncw7C9yToVNs2_lsF*qPkf8ZJd3%j;@E>CY4>zpatLw*IIgp0BpKCcd*GWrlW zi<7VIOSK}6g(5zkHmyPV+!+)pIhJrz;$^l|MRyhExxE1LD)8j(Zeg+BumUJE8j8d1 z)DynAtzif;kPQkzeghGShe_j-K%KYrS!JQSY zegy%O6sZaIx}Scg>|taKB+M=X2LtJ z+C_u;-R8xA@1+V$=4XSu=J%Yp<%jBp`TQ^cW$i%b$)f(3rPW@VAI%+jXZ}(aZ?M}I z|Ma_aoub$IpUoavw95s>zf_^{U(b2Z%+Ffy$UB)%Ba0p#TQu_iq74rhjeM|Z!y`rg zihq1}%ebPy_#HA6^BVE*$BS-C_}{;z!T zpG8GU|M$D3|9>eht!1>Vmcz8!iSHa!$z0W3U29_cu4Uc@b6g$1Q(jl=X?;w84a^O- zkv7&Qm^tlX-V<}&-h5|{2lAc%57L7%?OXAk`lI-+$oGkSr(FjPu)zEv2Qk4Cb8HGuPMM zw1GCn^xxRrM4M_etW5num}~1W%(Zj^=C}@eGG_m~AYVmi^GDjBhiP|#yUJ`(vV zI+{OnTxZO2r(x#N2XkCs%dbGbimu|1tn+%z{BOqW`xxY_=stY_)9)lqyBBe1T#UH~ zKfp%#m$@Q?W&BE*_BG5kwU*^|G5fWj<@;mi+aBqv=tRu**BP_#-7x)j*B*KvW*xmS z&wzo*SJCbKk@kZy*Xc0xaPwW5aqdCBibk2o=zW;u9@6ocb-!%=bZkcc0Gr_7mT$w1 zyB)K>s&tZEO{*hSMYS;Xdtja;`&z#rHYRs6pNiR+OEK%b((4{M>#JkN_A>Jqk&64> z2Xp*>dVu8zVpGb`!0cZy%<)%Se~n(N{q#Caf7j~(%WuS-*PAULXujS0LC9DBrfhM$ zJM|vrLrC#_N9!0JtM_5X4&jj-m`lLRk6EW?c(MdX4 zU%;HVDdv~VQ_a)N)6Fx?ubO9>XPf8fJYAp*G2<-K#kxe7>N3oHSD4>GzKT{^zQ*#k z=65mY>wU{V&=2(^{aDvyuK!Pvuc9w4->h3O<9}`b2Kg%bkw5ah=f9j4uOl~O*2AaI zV)^V{EI<4ywlwCxt&6$u55_!a+hd;lJHh%Cd#DbW=iPaj_Z>H3o);r9&yV{s`}ZJbobj0F$a9$W@%Jo? zy?Xu2k0n0;A+ zIsPro_4=jxE6hHBt>5Uk$XC&C{E_|U16T3-YiKRZ_1744y&i?Rp3lVecb0b1voZVJ zP0z=?KfKcVt1$c0-+Vo0A8*0T`!>w}4#k{@;h1qoDF3U@;_|z&IptF=e;Lyc|3$L6 z|M|#Q(F*e_Oh2nJ(T z{|zzi8*5YRn_=#^7MSa#gXJe-+Mi*wk`OuGe`=jCe5^|;acO_=@q8S~ua z*I^W2PYp5q)<_#;Bl0okWA!-9zMY8~r;FuhYgf$qI^TQ&rrky6i_N|CQpl&q_bqw-V^ca6|2^CGkJiq2)BixAT=O^p` z#=Krt=O)Z~u8TR3yJ5y{h`GP^$6POmn2*Kue+p)QJ7UgD4^018Vex&4d=(AikF*<% zId7veT3xa$TWs=$rbMzO5^Dm9Ew`x>n!O zcXgeH|Zz(seY!PW3HF4%wOv_`mKJa-|G+hqyD5n>o5AN{-(d{ zANr^MrCarH%=)&Ox9h*kud^vWZ#y&>Yp%l*T2f0XKTvkB|61H`H**7Rh-u%%+*F%sb4>qxnD^AZbZ^~9_rBl=8G}& z?u9w8mzaC&Wti*sD(kPd{94R&=|=PaF#Qh1^mD7;hIuaDX}(ME#jj;nFJg|LYJM4W+zib8W|`+=+RexGvjFq@ z{61!X)?2?(Kf(0#1*V@Z`VHpzZ}mI<9@GA3%=;An`)hH#GFn#4Vdhc6yc6cQD(0$~ z@oHdRZ}{h^i+|SJ0dpSCz`XwT#vIodPr&K87jD3#u`VxOjj%Q5^Tb)0e!F6h>yA7U ziuzzPyazL{k(l?b&tn%X!JCNmyEo>z{W1LO~eR!sfv$XC%={^*b8d9#!9oiMN8HSs_^4s#uxjG51MnEkm4^FDtR=D0Cx=8-rE)88;myWyDi+=1!mULA`${t?XlCt~*H1)D2x*AC2a6<9=aWz6-z3uavh@<+yR ziN)*E!?1W==A$s@rLFlGJrOJ2`nImrRk|88pS9+9^j%%2?_uWgv3Wh_xQ+UWeumrdaaw!pMM3^QJ9%;);9nB%)+ z#_yr$>G_!U7n(29i!JYEzCT_vRn;NBv2E)?f5j{Y`(@KlD%iOSkIZ`VVH@ z?dE^=Ki#2uQ;_?mgqFk{$6qHdwyfplFz2tLxsq1aDq2;mX?3lE*|%LW?_Zi>`r8xp zdUz0K9tUHt#}?+6+DZ?@%&#@3-BIQ?nD-ASVfr~)PtlIr33J?On10SMcQJRx9Dk0U ztKGD__R#b6d`y2AnlHlq9QjuBZF;*7!n7Y^9;(B1xQ@^}^iI7?@78;ex4uOaF#SHM z6Rm$5^FHJy%U`y9noieObcVjFGcoe zk8acL`mg?{J2V$f@%^YJwUn0DGFn#4X?d-HdG1y<^SdgF`>n1uw5Ha=tiLw$qt>Ek znDena=6&=2n0-G;55>&0g|@`BKg@i%`3Uoon9n!InUB|Y+8)z?2h2P=THZ-d)y{gF zo~~!;nV93dVxBX-F#Yz%%vtv7G5ev^J` z`Df-Y%wOte-J)OV*ZK`+yzk84>ks;){-i(aFZ!$groZbS`ls?6Zi~;~R{dN5(QUe2 z|JDC=hvrRW@qMQywUn0DGFn#4X?d-nJ84C&q?IxIQq|0FWGx=Iy4JA1mU(C0MR(QO zT1V?@J*|(q{u*Ikcbi+jJ7)Yn&3ozIx{vOw`|18zeE*vdHn+gM?wn|O2R#Wh&MC-` z5Q;7`_q4tj=5^pE%Wt;)79D8$ZJ2cov3#fw)8RTo@6bE-F3ddcG2g2rb(D_QF_`xE zneW#J^g(?{AJ#`O_wSSDr*tA_-<~y3(&sSaJa2wMr|66N5~khD=4m=zU(p$ub~DYh zbhf^xb9AoG)A_nUU)P1YNEho8U8>7;xvtPR^i6$B-`177N>^j{>mBpEx=!EI_w@t) zP(RX-b-ixTjhO4{Gt7Q{VfmN3S-0p{`ZebD;ve%i-LC)Yf4W2S!=d8mik4Jo%B@9d`~l#n=cnWhJK8Lw(C+qW=_EXF+>PtEm z)Bh{x8JPAn&9ij2<#Wt)b)Mx5%&+T0U8IY3i7wS;nDJJa-_SQP>se!7tMBN$x(;*v z`}(2fAL+-sUN`7Q-K3xBr}~+Gu3zYvx>>jASNgSnqu=Ux`n~>unfFiTpY<30Re#gp z^$-11|I)4cxBjEsbi4km|LG1bYE-yxN@z(frKK_REo&~P<+XzDq!qQ2R@N$*>$tkP zhStE)Q~`5N=J+E1_3{(8OMpab+qy$Lh^&E{Klpx&yt>Fqj5 z2kQ_Ws>5`+j?g>wPQ6R-)_XAX8EGD+qjijq)%)~*eLx@7hxB26M91lP%y^HPAJ+-` zgg&WH=|p{6pV4P^l0K)CG2^^oo}w@6OF9+PZkls=D9jg=j#G} zT^H&iU5vTD-oW(#7UnvATUY8TU9D?$t-gafex3O}eP2J&5A`EV`}O7xx=}ajC;F*= zrl0E<`lW8xE&7#yt>5Uk`kj8SKj@G8lm4u~=&zXh|8D-n{FiyF{;mJ$HY`vR2WmT1~5K4XvrQbZ6Z~cg3u)j=8SZ)B3s_rd>nK zdYW3^Oq=WOx`*zmd+FY~kM67c>Hd0v9;gTD!FmX0J}t~GwUr*Ghihv+0(0C^=A*TZ zw$)?wSUpaU*LK=oPr&rs!F-aQtfy#4?S#A1zL)tDy;OT^A56cOWA^PyOYhcu^j;mQqja>6 z(Xo1;-meengZhv@j9KS6^LTw!AJfNmf7>Qg#VpVnveS)HWM>12IgU(hM~qQ0b4 z^<|x=(=pGPS263EW%+DTj5N{bByoyw&`-{-fJ;JLb6m%sVuH zDI?`2wKQhF<**D^!tz)POW@Ad*T!<>hL$(NisXH;B<_bbu`TAfV{k9L3`=5P%dgNY zEx+1)jb4jPwP-A6J`Y*`u=z2}`+$j-KaC~H&ti^SVSZEJ#;k8OW?pM7e+RRkk1YS# z{F(W4%yqT}OXAo1EvBFEF#Gfy?t=}Q7UtCqQ{UXY52oEASP9!;DLmHP2}_bYV*|Vr zbNp49b@sZVfo#d_V?($nEpnYN8|qF1?JZ=>t1eNf$480rvHzy8h(T6 z=Q~XMUvYQj9|b8cuZ!8A2HHe-$INFB%<+4f_tt%|H01}F55%-PSP#X_=Wr~AM`CGg zi|O|mO#9=sot~f_^khu?Q_P*rr)p(}U7%iqPEmk-S!Tfbg6=tkY7pXjIhnSQQc=$E=#w_xs@A2IX$+45iXSN#n$udU|4 z^&j1)+x1`l4|80p=7s$$t!1>Vmcxu+K`Uxy%)VB`?0BKWeG6@=t*mctK0=Swqx5KPqiyvV%sP+5jN9Jw6EN51x#n(|c0J7J z>G@ci@{7$qwU=IkIj*<459YaYwfP#oR{QC7+F!5N8*~8Xb!aeV-or5CjLq1?mi*<=E)n&R|SLhr1 zroN?b>q=dvt96a8)pzt=U8nEq``@`<0K7QTuV zZ~1VjaThgcphGl zIqnAB4evAGkLl-O^CMWBJk2~EGw)gE*_ipPuzaQEt1$P?CTxzSxHwzl;h6EdVCHoW z7Vird?+ezad;lJWGmxbheTr%KnSQQcV2;~t-h%1(8%#fCIB7Yqtd_%0~k7 zIIyq}M`PNz!K|yBxx4njohiQ-Gwx7KyC*Dv6?>BF9#pt44#CX31*YGYnBz~zbMa}c ziwiLA7GloZCZwyPDhC&itBUi;{0`%yd-2>u3gz9fJo#d5gHK{joPoK%W@E;E4b%Tz zosSv6Hg85NV{;sglQ7ra6nqK0ws>GtLrf1 z?a#%T`5b_m&q3ycG5c@|*1`)czYtrK$C=0LqnP6#H&4J^k58E=VomZ)Y>XdbIsC-> zPcg@Tj#<~&*8gPrFPMG(8#CX3EZ=Va7qf3W@lZ)Wl`!opBaeWh!!gGngS-?K^|ro` zUZ$68U%f)F)T{Jr%=-G7uQT6Z9)Ow0P3HgU&3cOt)LZp7yoFT@ve-})J^({eyX48=lX?yshf3+ex+aQH~Ou9 zr{C)j`lJ4&KkG00D`uU)oBuHXW!{SQsIPfg;X12>xlZaLw?xsY=FXUXKf`<`UQC{8 zo~5((HJzh#b)L@G1(^9Q#Pq+!@};^A^W5BQ-lAXW*O=qKHGiky!>ZJ{jqvH=KeYj)2=Hv!U0$Xhhg?{IOe!J^e)Tq z)_e3`9jT*qw2slSdLO3W2Qbg0$ygf~S-;r&rIv5Be3O2npJHBT{xk2;Jk&D(5}4<7 z89V_`!4+8Rh{E{0V9r||OuOAM$2HJ~+DIE?GwR!!+hf*oBA$d}EFX*6_op%aK8G3S z1?#8ii~5pI)t7Y|rvF#WGxSwVf3vNhWBFXm7noniYP4H}dEI%>^7k?Qeu$ah2Fo{E z{)zch{Y*dCFZ4^~rL3s-k%ia!#+dzUqD{4#HrL%T*WV%LL$!sr#9Ze`W1erPS$;ZZ zzFjc$?`ruudaib}z6a*I>W|fNnDxUk{oIA==N=u2b;y&j_;nhyo)566sqhxu;vy_ofmG>IchzpX2E73R1#n0ft$xgVyv^&F$vFn0|+0#u<*e?;gb5 zcaLGldkQnpxtMnIuopIITX^4m5N5nXF!hIO3vH>b^e{bKTVswt60@$h$V*MpjhOy! zLcWS#Or+eK75g#niXMtgC}|#1iCA=F>6#on!gAn0a-_nOO7K zLi<{n^V!hMZ%Y)1b+c~Kuk>r|!f{6*U)YCscx(E@obNT*41dQG_=o<9 zCCOX$AKh;KznJq{vR&c0Qkc(qH89tC6U=ktK+OH!64QSxEQ3dykHY=Qmt!ZKZTV|h zhP*(RVCJ(7voC9L7@pm}aDVr~GUO{U?XJdB*bnnMdKYH=yY(JSyOHKmIvNk5e2MkT zF#Wz|{oA@ySLte9qigjYeHTm9&j;oYG3)rk{H1QzE&7#yt>5UknErk=|Abl3FW3ZY zo=~`64#KSaV9b8BFt^lJmbb=ZsQ;hkH|s5!es4A3W*%f7tV1ySbcgv)EK44RIerXg z{QE5*hnd%SeH7E~am;ly1#|p#%=2L$=DhrjIqnzzRe#gp^$$#cf0?(M|1odV?U;Sc zFSbs<{3}q!^DM39F!dEN{Z-bgnD*7QI_7@b4YSThnET-X%y9={o*zeJ_USmx@yBaB zZLcTjiP}L=(v$TR?WmpfRPC&%>FIigo~it+H^uYmqGxMYJx9;gZrWXY=y`g+UZ5B1 zMS8LJ)LxiRo!b-h-LXNZbuyuzU(;{Hf-bbsA>AGtILw?{ij}S7VNQ2P@!u^CqlI-ilfG zcC3%J`4E|P)X}O5nErpjjQ=yH z|KBnD`8THhHp_RIOPpNjuN>|~eRWJfHITP_MW7 z7x{L~>+NXFxMMN>-iMjb!)0Lu@y{7}sCEwrV!!se8B$Kv}1(_b$ffE)1utaNH&yegRb z>X`m&SY8YB+-iF0SYkJHUFG5yZMj6cUb*Sr98++xgp-^a}FL#&ElVUGVA^ZD-|^ES-qty-O3FQ)%J zu`0Gg9%)6lVUE9D2kBr;`(c=VAF}*m%>17)KZ$AgwD}o*7PAji%r9c@yCvqOScUwq zc^#(T4VdflGs{26^uO7>1+)II&EHu6z2!e*#{J#;KlD%iOSkIZnEtn$|JDC6+5dXKpSc!ZH#%nIRdjU9WdjctQ|4^b~1OyJ;?*i zH(?9%OPG00!?d4{nfEO7Z1a3f|F2`Nht-(ZudguI**}=;?msPgdZE8kn0fAo8K)7Z zT{F!2+ZQwc)|heIV9rN7%zWBoHSB_Ee;($!)eo!V5X`)WVcHMZ5t#iQi5Yi{G}a*J?k#PW$WidV>zo8}%mrpWdvu z=s>+yZ`0d#kPg-%I#h@0a2=s{=$(3(-mUlOy*g4y>1fP;Jcv1;4`Z&Y@zy`8k6Ay# z`~;@mM9lG%Eq@+!US7dm&vP)>%>qpS3w1GO|Ci`eU55Kp{yV1Me=Ogo+x1`lPj_Hm zZ!2~w^jk?QW5%tDxv%%a^nbSH=U}d{^DyJ}#JtZMWc?7#`@DNGuXi($w}M4GFzYXQ zc453yS{fTu-W+S;;g+}7BlJi;3N!BxnCHc5n0@PNz5ugN7h>+CYcTuSA2aWpF#A0i zkHw{!`L4!Gv1Ql7^P>Z%pOf@t%>2&B-Ek=HjE`XE@g!zHCSmTkS24%W#5~7VVD|M* z%iqHGO@`^Bhb+3o-pJ z!tB?Z=C?5WveLXtSL+&GtMBN$cs$4L+O5!EL(Dq%!(3+vV)mnzxiw~-BQe*{iJ19x z!0dNNb0U)5Yqt7F>LGViRrSYF3m7cYH{$N(QauXiw>qX> z4b1teXZc>3>+%rm55-30GqDa{f$eY_HoQhu%yF-q7h1o}yxjUX@L1Ya zJil;!HEcm{hiz~OW`56O?z@+9Kiq`b|IaY@$xoPh{Dv9-cl`r1kH0YY&wrTrQ57yI z9A633zA~m=RXhc|;bbgxVPPJ}WBNZ4)4qeAgt`B^V4ef#S$;k?A>WP-@Nvs0VA{Wc zna_00adRwRjwQ$|F#EX@bNqK$7t35!IR6cB7xJN)_ARh2_BUUzH()c$$C<}tN%CWO z0ItOLSo7k-b-WK|UI!yX7LCQUzh583jQ0>`KgMHTH(tgXxY+t7nEPS_=J-vPe}a3H zEA%W}KQ%GW|Mqw&-h?ON5^ROrF#C`nl3W6pV8*``OW|dh`|%bmgM%>F%X64#qytEV@cxhq0OEJgw!JV+5xj*K0Zy4r0Ou*cSvoY-!6b{{buFRy+~g_AR`h>5O@<_QZ^PIX1^pSP92t*6}FT!&#Vp zUyJFd&K3NfD(s8dr>imZyB2d?Kg_yr)LSjTO>fshnB#_E`Wb<_uEtqEULVE051WE% z_p;^FbUNldFEKCGWtjD^HNRuti0S7u%Rk4=<4fc%ZPDRZ7S7j^nDrc`M{66*d``t& zmwhnj?Mlpfz6NvLwdVeq{%^2+0OmP=KW3lCVdnn=X1|x?g}CQcg?{$Zy)pCNA9u$y zF~{}7%6Kgn@4sHB{q=gRM7u#)yze>;bN!6O96w4&>lhu2dHy|To{Z_|1@jbr(ekO7 z{g`f^p))b#%(8xtd9L;IEnkS)*JW4**I|x(4|9EQ#Ek!m<)32OZ#HkyuQ2=eo%wsr zb+*IuQdbxHEv;p=EN1={%sXjCt%MoBin*#*)9PA7YicdsS$EN0wYJvLx>`@`>u#9w z8=4zwV{M{MwV5{8-E|M$Q}@!nbsybV_rr{PfcZc@NDtOS^iXY~EiwCgIHsQ?EI-nG zw6?YU7(G^x)8n-rrk@kcCt{vYo%B@gtfyi2;Y`eUT`WHvb3gYq_tHx&?`OUa^ZdBU{6D=JbA69A zkJ8aPM#o~tf57~pK7_|pz5(-m`xE!T-L5UX{vC>|$R+y~{`Wvd+8;Z=i%+#J?48c{g2WymXF1@l)sC4|Fqfi zE&3JSLHX6!6`qSXV%B#P?uXBsC+TxK8E>Y3_x^?Udtk=jOZTySU)@jl$Gi@=z^tn^ zW*tXaf3&v2v}>;&E$^hKYG*wSa~+*$K3^}u%;E=yGjG>_E#F}-y1p>KQkZc|V_s(}VaBV1SzkT#ZkTorw4vpV%}p@pYcKQO=7Y=! z>mhomw$PT^N)OY+wY46hM`GrAH13VPE$^e3VfOzD^Obs)Uai+)`ss(c|L?K!be+9GOGccde-ZihY{(a1K z^D$MF^ zrkLl|(U|ogk6A|t>rcY;+sS;Y^=F#T!dBGZjd`7V5Yx}2)<33?>jZrQ)9=&fXY^UD zM)^$hEIgR}t@%6s9$Qe}_{PFIn_%w4mgZKNb+r zn08lV_VF6beEXZP*Bh`o<>N8qJ&xIj$<{xwFX$9~QD4%j`ZDgt@gHLy{LS*;G4H>t z-&B}S4b1C6Gt4^n#mskq%=tS6^S-%_^(SCeau@5nS$;9*xL%m^b~$FfeJ#Hdv+ipx z?}xR?cVWgEW&M5D-;a6U`xItBp0WH{orL>P{;qkQzK5MDZ~ni+eD=VMyAL+QQ!PIY zGr!aI3_VlN(k^5t*{rHjjW6XRvVCMA+ z=DdG}IsSXheejQY2j;o3(=CPPOLffgH8K0TD`vdiaZl`odA<$Cv>S?t;%v-wd=X|n zi**TR{I|_3G4onuUaRk5#(N*r?}wOn>#g5_nfJGteJee%FkWTMcvZBjR@3U3{n^{R zkM67c>Hd0v9*CLGq2?CaQd?Png!xF!>)`3QGhT|>*K4ishYiT1&0}<|-iLWEPB1^A zPh$3CqCR8!vpUK0$>!%V>s?}Aia9Tfid0Zqx1hul}byG=C|v_&(HJx>`@` z>u%aW8)_qMtWC5jX8h*n-OYRA5tLtyd5-qC{(8MZ2Vl;_t++crjhW|jn0}wf%=ZOM zyXn{rKd}5m*^4oqc=Z`OqD+Ul(Dn z=K+}ZH(?VTkNLbY1@r#r6U^)8PJ;^LR>At@y|D!Dqxt&~*g?=kxGxC9$`h&0(9%_9{Jv$Mu zoZ&h`@4&3{E=>D}Eq?^FZxb+|13tj4Zxg2dr`QsfxD_z# z-4E057|c43$Fg`5rrpVy{ySp&In8{A^=D#3%KKrihqtU>Y5gipziZ9!VAlV!c|E4z zPcY+rre9e9CDx;S2j)Ch9bUMf>SEg0$MoM2SK$wq|Ab}8zhmZCb420(*a!C@pN>0W zcf12P<6@jdXo_!P&ff?61!kUKVOjh^f5Yt4@0jyd^3KA4|2YyfuQr%@9)r1Wx?*>H z1+%WznAiVrupIu3>F*cJcz}WKIS^_i<#$@nD*BAH0hcQ2wdI2lp zEKL7@Va`L1dkgccjTxsdrvG|a1^2?7hkY^Q9B4iSn~=}Ky>KAr{+xklVEK`S^Vt~)p?k4UdPO9z2zG)^V)u?wxv<-mUlOy_oZMpZR`$0IN_w5%_)6ew_{ZcpU7X1njV12ucF6`H?T3hRAU9G3}bvJE*IWLXOjkSq3 z)n?jUch^01Pu)xR#=JjoV{WU*V8%Pne7v^P_L%GFRC8xN4a-x0j`>{erros%rd==d zC3>m$);@X}=DNNDGq0;K_fbD{fAfu)>+&YdeLVzo+;F|q`n&XQy+`lGv>$CAqhm4m z-9zSw^${JX2h76Z|Ix)mcFek zb(OBhJm=oW+@~8b&yBw<{|__29a=P|(7qgIz7;U_JDDqK70iCsw7!J$+w4&=2(^ z{TMTkjhJS0aX-+Tb3pMx>SA8L6E%Ma5dum<%VG3`#( z(=g}dEKEOLG3WO@%y{Qx+FxkC2-E%&tcKTHeuECcw7*Gjw)_^%bKoJ&`<;oH_iqa^ z{VmlubS36}=vSC|e2tm^KbZcvW9GX9Gv6}z7p#bBUr8%#6|Jh(w7S;Nnpz7p-tL(3 z_Qb~60W;r@mY<3luQN8qewgR-K+JVI7<2qk%z3^WGw+d@<3^dsV%pu0Gx3xM3h!gC z!?f#l$6F@94X@3+=x#f2-f=_n7lo?!m&m z%4613(Od~LziQ^{n0?p<)2Uc6z2WpBFuijf$49h^{X-0-+Iix{D|r2H_Y?qUrawcFyoedsIbmb*o55NygO#x zW3drlgjMkx%y|7V*THR={ThckkK?VMfQOSm!i=|GH)8tz8}ojq#KVQZ-_Q> zmY3HGx)bK}LT$`_bqwaXc9?zdi0Qu*9*6@m>l|$P5FLumD1Q!f{1n^=Kg6tWJ*J-x zx)IavGxO*A1!lgRG0&a9EZ>UhXB+0Y9hMi3FSIX->A#e@4Cel7jrpA06%WVJn08|@ zF4?dX1~5Re}n1oFU&f&VeaSZj~4E` zdYEzQW9Hr3d<5qFAB)+CcGwQ@wEix=TkpZFZzQJu81sGB-;a5&Jc-%oS1|2nV&=0F zbNp(|{MTXbvrjDl46}}(Fwc*Yj}>0W8e*>N=2#n#!aPq-!1R9-W_>4Hf3dkIW}H6e z%P`~j)hjK(3N!DU@nl?X`3h`G{th$FkCy+0+2`NPzw00Rr~ai|G4uErGyV?DeNgW4 zLau;W_pX@xb5G2A_OiT{`7q4!tug(zvAnGwqsL;}9dB-@?ezpbQ9I~Kda|B^>8F$V zRLr<%THXb-59eCn&H4+>7wScrc9&rGv5)1K>E+s2uh1(o<6n*0pMjR&is@&N4%HEu z`Q3xrzk4yqkFtI&X5YtQK4(nCw0l~g(Pwp%KBtrQd3`~r=!^Q2PSuxnnoh^eYlit% zovE|17WHqNS7NS{hvRWQXP+kEW;a=vwG56oGn10(~?#q*{KSeugCp}d=V~#t+d?x1jbIskfJMKz( zKg@jlW6sw=%s!07JU1S}JO?IPKEv|YF~=>!`nU=6Jo*_+;4heY{BHgO)BZ2ab-K;+ z?YIZI>63-$`B9kqW3UdMi+O%th;QKDPZi!*o{ndcpT#`)=3z-(fF{ z>B2r&#M~EkFvr)&oR@)RXm#xu=l zW9HXY&(U+Wn|85`+j=+W- z|137ZrIs(lvgEfh>s^PL$NQLde}s+jZ_GaahgtUy%zUanTeuDyV9Fa}*45P94AbB4 zx~J}qWhp<k8X%(L}1On>vt^D*;UWL}KvZz&#&%SJ$Z$Hd@Z!izg8!`9co#wmrZaj?gC79>_JD73bv;KW-PTqzY=U>cx%1 z!Svr1)BkyxeYgR0U5vDTw2s9bf1lp359ovXkUos*e;ii9=P>hp5p#ZC#>{gDW`AGD zJ@6~s2W!0KI}iRt%ltc(w1=Jg2X`g;?z-)nIwc9~jO|D~9Az3~8i5Hp|g zxD!5O{j=DF{03%zD>3u?5Hs$_*aEA*T$n)u9*HBTiyg)lDlI1xfpYv`eORO z8Z)nJF!LT@`OTRA23bE?hhXM04BOyR%ys(cuGM$+U0tW|VPlT}6En_M%l|fSGjG>_E#F}-nqJtavY2_5)AE>oKLK<7 zoPycU)2%;4&&15XE9QJ(X!%9hoIKn-0@Lnp^F4YmX5OQ83}&D2$6P1lG0%&MnE5@8 zY5y$d^VEDyzl-oHJm{6eeb@$b{<>o3eIDk1zaDcQ24P;G=VQiOi0OZkF4iTwRF`4i z$89!m!91_F;X%0XjKV&&!1Q|m4d(oBz&tPh#>{U!=KSq9yWn}4b@su%aV)0a z`}BUydY>~-*5@(fyoBj@n$EEPRm^&4VcN~Le4fs?d=cjOrIs(V{7v&)nEhCbr(@IC z3V%PQGv>ZI8*5-6%)VcXX+Hq7o+mNa&1B3tQ*dWogthTw%zD>j`up7c1?IW-gZW3y zK9rnOIG^P($CcL#x|3GK{QP1M^PZU3w-%Ur9A^39+FFm$BlRdfTH9z_JqEMS$C;1E z?DvW04tf%1+>Yi>nBzKIeunuh>$_Nf4rU)Nw!W9;z0H?l_Pw9w*IPaSvp+YQ|A)B` zZZi+EelTXf!_6b~4ov%dG4mW{zTf%>^g(?{AJ#{79On9%Vt!Fy(y98gPSff73TFIQ z%`?rjb&ln8b)L@G1^T)!)J3{jm*`T=e!PJ>UvKMb%iqOZ-ydQ2_hZcbHkdc+Cd)s? z^z(&zv-MldU+cG)e}^q;-*|4J|0bCJn_>2`CDzB&G4t$#sqc!p4lXobjG13g?Pd9; z=HA)|>(g#1rk~-MaURCHI33f^E0}f6G|$4cf6Y9{`uXMs`noQ}T*q&j-^Nbly7LPC z*TY2IaLl?!V8*%Ad>7tK zE;qmM`o1%!-7dN-rr-M509#{Y?1p>bAk6dp9!$R@F~^V6(bkVQKdO)E<2nH|&ePZq zzs22dtt`E%<{{% zul4;f{q@J)ah&B(Vk7b*%=ub}*`Gf!&)<@-7xrl{%s2;P#y?08#>}sUxuv$kjCZ)X zHC|7iis@&j&d2n(0JATP%}aEtF2mf%Z<|+Q9r6~;y1&C5|C9cPDc_2j$3K{HwqbK@ zw6IX#1Y484V?+EO=5=c%W?f_O4BU+A=PS(ntiSMRY_X`&z5{0bj+pu$nByeF~ z>G}$0J~Pd;bT;O^F2MA=40Aq;mKEBU(z2L&l*eYcFJ^xG>He7aC+*EAVEXH1J{7Z{ z-LNcPh-L5+Oh1=m-sjwGz6GM{6}D}lV>sWc@8t~LTrmAmKXkaIs-BFw_*Cf z9rL++DxQU9Rut;X;V$Ie%nh|M<~lkEo8p<4cfoSx9@rcQSv~}hBQM9C|8418#(MZI=04o>t-|;RV6NX|F#C5Jw!mSS z{)b~roQI8Yqve~hCixevh}$va{D)arnYRnam&KHq$E>fK<<+$Y=5=dd%sh^^ybb1j z9FIA^y`E@&2R+I1Q_LN;lb))b^)x+Q&%pG5mbr_btzGpTOuKGa7B9rCr;qiQ>E+rN zvz~$GTQU1G%sgC2VEVn&e3$ti9clR}%>6Xhe4q6Xm><-KEPup2PRHw`)<15ZV1Cm4 zlup#A^%;FuC+TyT>v4+tMSV%9>dQJ!r|T;^1G5h^&9ihi@>Mi+WubmJ<~n^4bA3L9 zJK>X<*S9%%F#dr1VC_|feQ${AzcJ>xCfXDmk&iPUukElc{<>oNKS$5i zZrWXYV8-i-dCuN!`7Jt7Z`IrMcFcN)nTP8Ly+iNB>a-hY9*;Ty6U$*@E>0(`i#m`0DpK<=gN?3AD;qQB&jM=|aw4-*y?AKZ5 zE_ycRyq{w}SG#FL?wJX*bqKomRHvr*q-vPnDNfToWD!0?~U2- zzUC|RN=$!Oo3Ft<2M1#n9F3XxJJ<_by;GRaVS2c>#`JTf`6xYF+h|)o2Gjqk=FXVo zPdA^TXJY2v6&vG?*aXL6uG42MUyga7u@TeHCs+-CGXH`r$g|%q%>Omab+izV$1>~O zXDz4YwSw-1>A#Y>vR2WmT1~5K4XvrQFz0z!b8Y=UMBN9xA61$EaY7SC1Qb*dg@lsC z^qZd0lAB&`dIiL`x@%i|!&p|ax3%HgKv7r0iUkXoGHA&QEK>j|wBTPL-i*m_dy$*rffPHvsjI<@uw ztyp-`t*1ui*BMdyzpUMtw~j`S ziuWb#GLAd2Up@{rGl&LhBP-pVa!~)~B>Swe@MOPj5Z1^%+riJ+sfB)%xt# z=d}Jul)vXi*F?V-)eil$uV2@Ced`TT_5YSWzqR$Y*4ta}Xx;DoLp`3*x_|2dtp~Oq z6uoc4ofOp%FO9P6wAM4C+MP37m$mz7pRb7OSI>$nmj^_(PY>(!e~aojpAZ$!6Qja^ za#Vb;X!lpP`>R@C)B3u;enIQ&qvCmERDN6-)xN!}ufMzXlBnnUgHirJ9OeIGQSpBw zdUEvVQFdL^`is_IM)|w8&wt(Lzl{p-4}JcpzW(Pv|7%oxc3YIc{eCc%>y)VR^75#8 z)q|q0KQwxH^a)Yz*fXPtMPCwS|Er?xeqEHE7ewXfTcgr_NtFM~qsrkMef>vK;r=$N zJpLM$p1((h^M9@XX#HpFb*rJgUx8BlvYwK;Tx3}KWy5A3n`1fx;Fv^aD zS`TjbL!#1q*LFWF>Uq6;>%H3j-q9oDJ~b*`)7pJ{>x|Z!QSJZf(TUM>qsAAHjNUW) zoT&KDkFw|a(OuE2qw}Ii{%CN&dz8O>M$eDFF*+9geP91WlpTNS^FK%B`*nSOeP6$^ z_2zcJrO$8c^V_4+b@-2mc#nu$&zK%PCAu}r?thI6|FKc^;Av6z?TfPGS$+Q8sB}HA z_59Z7x4xkDg;C+XGHSi$o9+IssBy#(`uvBjKZ=U?7g729_o#UP5#|4;sQP}7pA7LI z)p~U6J)^J9^-H7fdvA0!`nSIR_o(z-7kyB4=T*Zz_;Jyra(;evd-TUq>HA5$|0R0& zobUJ3VSF$ts(m{nx;XmO=yB24L_LQeiY|=)A?o?NE?V(jJ*;0`8ugsMFUrmjM30Vs zq0he*75|r`i=zAeY&f6Lx_{Jt2S$&Jp3vu$`ud5jC$*m3dP-FK@89RsTBk?l`~0Z( z;nb-7ULHLw`sV1I=r^LC|Ev4@ucE^HZS)z@hx~kauKu<4(NW<%AvzL$M^t*Qj;e3} zh)U-_Td!-qJ}P}Tw%#0-U$^!3+xvXNHG{tcqMqkNS`UkE$@v4K?0axjJP+yfhew6? zh^TUZX4L)9jq>-r*7Kw6ctKRYygcgqE28@OxApnOt#5CANA$q`vcA>lm$Y6QJz>AR z7wGe^wSGOyo^M6P_noMCzT5h}*6&AM|6!m1sP)IKKZy$G>OTKj>(8Uw_usevquu`* zW#^4i;ocmT4|hbR@9w`C?6^nkQLRTu<;QW+lcHxv-M2D&@8~&w{h?9i|A^>>=p$Pn z6&3!oT3^-fuWo%!RQPY~^EXA+m&>B}jeaw#-v2SGKArf>A>O4?_3-lO$sl#H##9YFM2?9VV^H*UEI2)b!qFVt*1rVu{Sy^`l9Hx=!c`y|Fza@qx$Xt zi^_)^qodKK*ADr8T2%f$D9WA(N9E(gqtf@>=;Y`nef`qb_e4*P`|tYv_fhTa-=hac zuWR?~qxG5RKqX*^udr|fH zXVDX)w?~!dp}!sMI5N66=X;~>KP!5t=!5(GAyNJx8Q99faq;e`845o!+ra=9uSoe_ldfGe7m0zJtXH-q9;W+M5S*_ zRJdnF+4Z0(J02XBzYp#6f9dmwN5%h$c7J5MKf2u?8x`)8`udYwpVIo&)~B^Tz4g54 zq}=!B=qb_9MaBPx)-Ofb_2t$pqle`D+tG>9|BFiR^-=zAh#nHXBg)?We?NqGVAS=4 zS`Ti$Qw%yl7g}`FzP8U_*Lp$g z>!Zi!`ejk|=POa|%uUfv(KUZa-xhsmRJ(XZ)cE1sQRC37qsrm-DEs&S;}GA0QRzQ2 zsyvQ~9v@v4Jv_QP%C5Ch`MEACyq(cS(U(WHdzVIMN3V)1ho43H|9R^*t-omfWmLG= zw*IEwe;Z}rAN%}It$&X4|JSJJ;JS9dzV(K_ep8>{+32weo*Vd?S4p~-?{ZJQTE=guOHFwN4DNQDnE|y>-TCsCMq4rN9EHAQT6-eK0l>( za_f}VsZs6a-slO@r$^=g1yS|u15x&07FF*)9z7xY<95F)D!!k#UL955xAysMQT68T ze;)kZBPzV3`~05K6LY?}&zH0=jVk{~M%nkKsPw(9uU{NhFFzh-*Jq;g?ekILe=(|l zUlW}iz0+TY=kwTTJ=an7ZAX;-J6m_P?rz-^72a9V>CqST`HTAci=&6e{k47mx~TU1 z!%_MF@z(!|vhROezZf;%|54OD9{qjv{ODu; zHrV&rsB}Co>i(BS<=3m*{WYzx?du||CM(CMwA_Yh{~Vq`ug>)H?-c^dQ()qw?yUJet#dz>mE_}-!CfOiP6iV-;J(| z-uM58b&8cy_pgq!V@>PY)^$jw9`wjS1cx7Nd>(tBi7`!TcKXSL3bD%bgaz96a`PK(|(x;85QEm7fY zi}Js_&-X@8%K0;+>cMkbpBJ5*^UI^k<&#nOe<~{6EBpMbQR(_x^v==mN2f+_j|y+X z^~3f3TMvjTufw9A`^8cIPHjCSD!enJCq^IA=MQcDm)3_xrSs8I_B}2-Df;TD^u0bR z+&4xa8oeXR-vKua?ZQ2xt8%_4DqUwq?-hM~RQykf9ua+RRCq6ps?TqaE{Ogl`kv_X zZyeg?cSPm$d!zha8C4H|5M{@YqvE+LDxa>6-aC40yWbvl-?29h@f{y!#|hDy(Xl?? z6un2z9~@=Z!=u7~L{#{Xipt+7N8SIFD1XoB^L?zkMU~ro+x>m5?~n5T z!RQ&$zqR|{qla-pBQETQ=;sBYM-Ci z=g(-}7cIN{{MoI~Y5k9=aL$kN_kz|J_4OA=<-;r5{Xbh@-TK(`^g`(|`bbiZ4N^Zi>7j0*pt)`Q#qkf`|X+U|$7`{AueM#XznpWibo zoO|{8F@62GsBlh*ihoOA-xihL2Sg8#K05la=y#)@hpVIV@7gGTe~lg&J@mFAyu+i? zb!49(9hL55qxXu=Y4`b2<#~GasOZ+{$pNQC+4|qD?`nN_>m{w1w!WwJy{+$SeScJXKHTRYiL&oweg5&*Pqcor^@`R{ zwf;}*r&~YM`q`-b`&^%YJ}SN|qvH8mpMSfre<#ZS_ga4t)qeggDj)w6Rc<#%<@bc! zhv(q1sQV6&%FiRB)1phG;yFF)d0E%j*SBtH-57QMras>s74Pn-`yLtnj~;r*P~YwzJt5~KQQ^#usyD0qd`(on+!Q@N`k1Ka z__@(}(aWP7q6g&e)zNiP^=T|ByiKi}qtd@Es{TDRDx9Z9^+V5(viF5i_r0j~#jP)i zvj25a&(Axe?EH9iRrHSN-J*w081BDY>*3M+#(jEJ_%oyKKP}3hGozl5e~F6sVNv<} z*gk(;>*J&MiTlg?{N>TbIsa0W|8GZy|J|te?Z;8!|1`?(-$sT1yQqA;)BY3c`93i^ zBj=l=5073Ry=V06QTh1oKL2gB?vEPp-5eGEZBhOv95A7N&wDJoJLm6=O4nDT{Cy+p z{%=Mf6Fu#~3DrM7DLR_-k45Fnm!i^fWmLFdk1F3|4jRty83V(L%+|~tA z&&jH&{MZl`|Hi()IjY@yc)R~=RKI*)RQ|jn>iN7d%8rZs{9RG;UJ~_OT-N6wZvALf zJeNm3m!IkL&qjs+y{LZU&r$93{SF?&IVCC`Q=`gxMU=mDqQZMX)N}lzsORvtQT|^a zW#^lt{Jo|1!q$tT?0s9GUmVq+{-n>Zik_bHW9~Ge#y88OV>y3ibaV8YsQkDi>bc!^ z$b{PWaY6K>Ip28aA>Og5eBK`27yWj-e_Y(1ESJ(c%L89dSvw2 zxKE2J&!z2tYE->n)#s~Q*R-yU%AXCbo1*e*dsO@MsOZG#%cAo8UC}DnsC>M%^*ycc zZGB%haf44@p zAIBUz_&+`>-BY9L-<+uXPmQjPo*(rby(TKX{}uJT{C8A;{<-LA^x(Tr*zZBnhexMJ zUmcb1*R;O2^>wWmw7x#-d3aM)dA%#D{rpIj9iNG^|9_*}?JHZq6&3!sqwM~1RQi4z zJteyTVZ-$US`Um)iu)B@RK5IDyZ<>VU4M_NXA=$|(s4l4eFsLB*IlC8{rg4b=aRm@wDr`e@Xv_K zhh?p!tt+F#TNUMRZPauA;C6pVRKIpXpTEBKzoLud{++1$`-gV_W9y%y^7|iAcHY$P zH@Du>?h}p}+V^`!FN(j*qa)GZN7=Fek%Qd_M%j5#R6ZUNRj((t`-xHYY^2ZUw$5vv z-@2f6Ve6u({$(tx{d-na{ds9r{=YIR-v5lM=WlHH3)}sosC>IPs$Aa_)sKHRs=j|Q z>i#c9<^PpYc3;)kuZeES`JB5C{ue~WyClm0sqMb3-B(7dy!!f@=(6~GQB-^{Z}(S5 z<;R8X{`RQ*-qHHb*8h&O|B^nxwDmo$?`?fw>-(eZ`e2`5*7~8S=jfAtennKcpN_KY z^X>kH)-Ohd^W{FjGRogK`uv-%-)jAK>vvke8+HHp`}_y3KWzO`RQy*(`MbK^f7bf* z)@!25^$$`0|J?3>Y5i+dx!&04H?`i}dQ0oAt+%z_-g-yte)kyie?sg2QSJPFqwG7r z-A`zp*g7f7u9I7*MESpe^vluzi+av(iYnimTW^U9|DHz;?)Qoc=h*1^(F@!CqSm*z zzOD7**0)DJ4|L6Mp=UcxJ)&73FuYWf>Dd*QkwI5TD9@?qXqUy=YsC?fP z)js}Pl>Lv08V5Zm>N$CJyT2wXJ@1c-|ASHCe>XZY`p>BJ-4GSdjjcCD)vMe4{EpWB z?m76I(7J!r_+o3HZ)@G&x+5wbFN(_VS4NFP-XB#zJ{A@4$6G(q`pGDJKNV%)XQI+^ zRa8FwD!MJY;9i5jMN#1_j-C~LO`pHE^>wWmw7$OezoNo>YoEU@dScGM5S<+TQ@j7U z^)FH7dP`J$b4PS)bjrO4JMP~)J$iE7w?x^swRKzT_Na1yU{pFE9F^Y>kIJ9tM}`05 zzW&mva(zpbU0;au|COllzZyL=dgw7je%&p~{qWW!T91q>hkHlGdu+Skr}em~^q&zm z-q;v@LG*il{>$j3oF91XkpH`)#!Zii>aQLfb>B0i+R>Lq#q)~R|BUi?L7)Ful$~$r z^EXA=cX8__(WmG9r27o+)1n{D`A?(5|6^4B_)Ange~YRohaNZN|Lmy#aBY;o4N?8> zL;L*UQT^iMqen)c8)eV)qMoNWMuq$4sC0iiD&IdJogMvWRC(RwzQcV-wH_U{e!4z- zO7wA2@jtPzKPf8Qr?mUi+x@(#e)T{5{8dr@Ueo8VZGBzq1+A}d{jb(Hw7#+RO|5T^ z3h%-`zo_-Ct#50+xb^K({@)q(oV>5y-{1Oy)(^H`*7~8=54V1#^`otqw|=bk(EClO_3eL;uFUy|qsr+ctsiZ@y!B&I?e3TR{K}|u{$8JdKdL-_6jk4T z-tO15`>$Gm6P5no_4VIJ)!)DN`QM_(Ee9Pxv}bpV)^pc-L{xn_I_kdrwEJ<?8qqjg{FGh3h4`s~){MAs*ruSM?{{XN>D{PNb1wSK(y6Rn?Yy`uF~QTcXNpZ~P=>eipN z{=D^?sQ7-_=f7&bHYz{=)aQS0{Y&d#TmKeSPp<3p>sxPVy|MMC)|*>zX}z`ew$|HQ z?`Yj`;!u7QTK8`~p!L8g`wxyTiJsZ+%UYL5)q@8`)uV?-PmI2xufMSMMXfJxeM##} zTVEEH&R0dXukVhkXP=6S|I<@!jM_T@gmvh^#iUv2$b>(`^6?;k~#+x1cX(1DYN z@D6G{I4Yh)`uxtVcWFH|x+vF2`+P;~%GOn_t6SGZ^&5Ml!ab|q&u%@Z^#OhTfzf}7 zzb~}=7u)^IeST%@S6aW?`n9P1_+FoXKWcpN<39gM>s75k?d#X{`7c_3+4`&2Yg>Qa z`kU6@MwRm)qT=~WRQmqb*Z!ZTi7*#*d>g#8>`vY1Z7!}S#`uanoo|}J*st1pY3g-!Z z{fVtlYJGC+Q(B+e`n1-kx1JXj&ole{S*_2G8YjIzD&9A@`&(KsY`v)Ut*vj1>gV3o z=kIR4r1jF)_q4vZ^?j}HZ~Z{)2U{MTLKCpWmnTxYql&-mmre))QJMwoYn2vGt_ZlUq+| zog5Y4{rh}c>-2V?6_qb@+I^&TZeL%}=L@6ynX#zn?d*0xCo230M$Mz29-SY3e^j_1 zjLMhGT0az(FPBH%_lcN)#M zpZ~Sb{}~nTZBg~@pi_qU4vk9BF;U?k8x`MiQQ=ICdS2#6jZfD^`CHq%F3SIgKHu0n z7IohP`}{#s_3Kel>3u@$)1%^fR#d(`H!A$+MTPtPK7T=9e@W{r+WnPL;aw0lf4n3r z-YcT+|DUM&@mKo%YpvgiiszeA@qV|@zt{Tx)*rO~u=Pi+KW_a=>s75kZN0knXHjm@)O>AXl>d2seL?G@sQep^^1mW#K6*}6c#n^&pD${?D5`#4 z9OeJ*QRRGDyMLtJKiYbE>&K$({6y;&?f$9O|B15i+kO6>*6&8u*K7Oy*HQKC&wc)v zsQV^N8SL4=^?=p`qvAa{sy-ardPG#Z?-Sh;eN9^LwwDF09B^Cz}GsrAWG>na!a z`9)E7y{pgP-FivurBU_a{eAv{sC@iTpMSXZBds5evioCE_gxXafAlv|?c>Q)hxleh z**!DL|LmxGyRh9CwJwgzrwx65TkGDwepb}|=S0tpzPa7s(t2U*MbVRT{qs@n|2NwG zo2}o9T7SAa%8qNJ+Mho}h5x74zx4I%`uv6{f44=Y=l0e+TKBvEg!-ML)1t1Q9+fZ4 zqsnP@R6X3$*LOyRcXpqj)B1oYJ02L-Zv9)kKce-Kef`mW{+QN(Z+&d*<60lz`h?ae zwmzx#$*oU`vhx{zzOVI}tQKwfnnUFNvDRe7UcGB`SU2?CalZ{dQD2{IJh|)cWJr zpR``p`qS2{TYuL2^VVxxf6@BO)?c+=+xqL)-?aX=^>HgD(dUQbRfvpF%9^87T z)quySLt>^{CdPTkqL=uhx6F9@Bbk>wQ{}YrSvl z{aTN2J)w1CR68{_s{NVX?lW3vw$5su-8v_#{aDeuE2{l`aMW}3$f$CDT-0;``-|?Uiy)!`glc@{hyDjmtSoCa#TE5wtgk* z{;x;beNCVLD(b#pNBRFvRJebR3irBpzrOW`DE~LL-qP;3MumSzpJ(Gug*Tyf|JDOq z4{SZC_2AY!wI0%X=hnNl9@=`>*27xw)_QpB5v@nI-o5o6tw%+b%f0*jnAT%k@6&o* z>wR1A*Lr;G39S=bC$*l~dQ$7jt*5k3Zk^IPwe|k3(^{vu&S;(4I;(Yd>zvk+sPdT? zRUQl5eNj}sT-N8yqx`Mt^OdcuqV8MU=j&S6w{B?N78~rLSKU^*p_^ z&)*eQ&)?nd?~k(gvUdMa>xbL@^43qZ`zKqkX#G@FK76{*KNA)I=cD5NO1pnG%HP+c z;`>&Vzwh<=5BvI$+x_Y&JAc;t^Qio|HY%LoM2!P)=<}PR{NLQ?x3=Ei?sv5AH)Ck0 z4vossqoU@UQ=-D35oO=(sPN{r`+`1S*w>fz`O>KJT@z)`p1yu|Uq7ey0j=k@J}@f% z4~>GOZ@^T$Qm`NTeda$kQ+>r>nP>8;O*itpKd{W^r#659xEiN9aF!HZgDDrWU7%CuW>HG2ft^8&1u)1GqGtx!v%)+#oK)80^g3Qz94+oB?g~%JU6b;r_`Gm(aca^bo$it@bnn#6 zOYofV{`rTl4xvxq@9Z4U$p4e#%6(?iG%4R?o?c|ntfXmDcI&u0CvPutPI06-ueh*y zW;jwlN6P2iI-Z+7vXk;YUkLMa9p{D%%4I=aU6_4|ld^`+&*CPZi<9@0@=f^WqErug zw5)7cmOHp`Tb92Ng8VP5R475m>|a(PEUSE5mb{--zEN71=Q;{ud4;e%<>h#7aZ@;2 zHjn1_haAhL(Uc=@4OdhME9$Nlb(cCbDd+NMWm&SaEK!TN><(AeU8^d_Rdv^@yno{^ z{8bggs`9_OLS9`iYT%^U!NN7EO_Oq`8nU*+SzB?ft+>=u?mLTOTvs8i%dfUfN=!o7 zP@!$;V>WLr7xme(9N1WQZLEBgo0Aec8^+3gtnzlO;@VX9Zz}sYl?|K9{>|lobLHOV z3UhP$+*~1eMkXZ`Y1v${cwQ#Ol|9?)-fiWwt?u1cY24OV-Ld6acwXE zp14T~eNVWftlCjF@2Ge^gWS~$Pa=waXWhH2Ty~YquJSJ*C#C$9(eAoyPldm?{G3%a z|E#*}tbENpDbJWZJ10*es^RBVoj)&o)*Z{?^Xf@Fub$<7d2+Q=lfseI&lB^cEGUkK zi}LiGnCD_qs79Tbu;vxHuPS#n%JHgjEEb-a)NT#ss&G#(PA*O_E-NlCt|$&ZH`MXQ z;#hHWacgmVaYymIaAi`YZ5j>FOKc}6uBoB6=;T;AJ6xSo&~mNK4u{Pt$I0bqa&&6_ z8#q13{!Om@nw<7%G{>hW2HaXaFZ5hb&b3XU+(1`7JChR^dQv8*v>dC|lXK68P;N|) zwWyv=NA_g7Zw*6S)%nq_Gq7wRoWF?U1Xsa0@oMW>50d&B5OUD z$XZVuZZERgvx2*ddx~;KU7M18k_sg=HQboRg;s7lk9`bEJIgzqs%-lA4Qr z&MiN4>*~BZo|k8HO0J1|m9i3*DvXnv!!VT3NM4 z|K(VH@O+^X*NaVw58>#)(7pOBWVxOTxvwslHRWH=H6^z4v$kCHVvgm^+PZ6P!f-4_ z`ZZ+3+6rxL#iEbnBDA#~8r$@A=&GJ>N^+T<8{!LH-B@YV-#O+-e}}_W_l}hx<2uKD zj+KRD$61c>rsQ`xqut{M|g$u;3&2!8CbIa$s75ll>&YYV(c2!*G*1hNDsWDFX#7|6r zp|>1HwbP?h@;`DJ_ca{5s%1cT8S6SQLUyOnzvIxG$}E&xqU9gezV(VQO-DeW*;QCKQzO>|^seb=SU1<-Y18_oelk zn(t?XV+>%tKE1~4EAsWvw7BBZ{F|N9oR$`8aX2@z;r4KTp5ig$Z*U|RA*yt~St z-LY$0T7;EF&jI`O;@WS$!1VYSI5TQoWbQHizr1v1@$7JR9cjI_=`)L?q1Jdt(mPU| zTU-&&i!bCpFV~UJdC3i2P+U|L%e0lccXgbvbRcPZ-u|NO7ra0&>0!w ziOX0W*<Es6!|gs z(2fgJ{X`)cd!QKARb<=h^0T_)T3unP!`xYDWHK}Ugr+{DyVlfQYs&wc^1r5RGj5rg zYy7MEC_mR$_{J)Z*=&4*>WrEA%o>>>cQf&s^^90~5t=6jrN}5{X2Rm`sX^|>C&-44 z73Ns^87n`YrkVNYu1%HOX5x;OtoD3nj$AbpNBO_G{CMsh4}OGiWTG$R-!q8(Y%O=s zqdrm&7^@&Z#wsZMZAl->lWi4?F^psO7{j3a@#N0TkuZ&0P&mdd=q}?H+!K1PQ8=D% z6pj%K3c>TPx8~w`M`3#EQE0pCc^sbAvr~6w=2;S^K6+NoWoM;NTb|?b|CiO#y5ff7 zrsA$}cJgypTG%z=vdmU-w74VGp3lnp%AycFDYKGyTs#rDJzSYKX;!S^vMTn>N-cHo znmqeBQgoMEitbVyabt0;xUJ~wx^h?dW~EewuhyZE)iLXRj>l3iv+4->QFCU+4k=Q9 zkWaN`R(!7r)ez*aZXkPeU~O6hsA7lnUbYJt{vYEgNdT*oKZ_`~{vk>;eL5y{k)G%hWk6LQr?FD{N2R~9!H zw}tLOYog=rw0WVH7#9|eiP(ZC7g;qPgQM9M!tAu@j?Eosr|zH-W|s}KGtzWy)G#~w zhMS6;i(862i|2-ByQudtw?%20Q{l|1{F#$+_w4xK(>xbhuCGBhjFb%{6~ai}JCai1 z?%ug|?_jt7h>IBKR%ml89BaQ^_@7t)#o?Gw<1`eb5gICmc_~eFmpS!#zRa&!tRZu8 z@BF%Jex+`HS-7D54>`D?{4Xf~3(MWuSk8)NVTHe_t}d#)U7Xq@$E9U);>Q(5`MkLN z4<)gr{46Oydezxgr%^szkw$s7yj=95j@6~na?t|JPUy;RMU}{k)cM)TFSdK?Q3!f2 zTvyx}uBrT4TQ=xr)QO$p`uwl;VeQ5|BeQdDYq+UWZ9XzP*MzyHEZ!5;xN`3+|P-NkvJ|Y zj)tBrwDxH%gRbg7adUBNsO`j!p{ESR<@v(l=@gneh{EwSp>U*l{C$R}#Y`)TdXA9Io)`3{VkG&EyF;}W`S*;V@I4*KW={vonR#WW^(AXn z{HVbw{P~pw^UIGFr#Y!TtBPlb3oA73h+`>PnAlLf>c7@OnDPb1yQusuN=S~yGTwH$ z_smL*8a}6<8FZJoCv##AKP&PN#j>JeUQscuNJw*1@42r`-J6p-Jr=5$b5e@#Gs2mZ z^ym}R)j6q8JHl;ckI{u=_iiu$#sFG0KK1g*|L%l3C!+*bskbPl>Mg2)YAg!POk5dH zElw}a3e{fZqL09HLUZns)RkqS8jJGJSQ`iT)pfkKxHU8uz@4EQi^5l9ap*~e<{u7i z>gF7)t*9pX=YJunjVP9pp3OkqwJe zN5*@jr4{e83c-wKq{v}RQq}^Gq|V8CUvIyjPZ?#9@-JKRz=!FXvTHGF-jZjU6C zE#a=pt6i0!yDKi^pOJ(moV|6``=*i9MLDT%qqL~osFteXDAh(s>cpf_J;&+ArJ)fK zI@SWB)T7S`tg5<8y`CnKe zEUfUoX%?U7Uj0Pr^2{T97FWo|431f{q+G0_uu@)Gi<=vpRPsZa7#?XpU^z9>vBcTznwPR+jTH~;l2T!1 z1JwxcOpS@`6y9EUr}RryL7?aXs;ilY5Srhvp08V>RvL|F2uZ@dnVU{lIl~ydhL) zP!6j(S}QH6o(l(;wROBF)Dxf_URi!trWUBXtWu+pRjVq;R;MP+&k;Xs(gw^=U0GAy z7_O^u)>V4frG1#6f6~68!c*Vor&ST=w#wD*mHO>P*G3_QHY7@u!gTk_2CX|#m% zitaLpL#3qD(Ecx@SzH`yy>V}-ja1jTC?n)w{Y7uF)E9I`D$%_Q%QjE0QWWyyipBmJ z$DWMENi~03CeI^o2=&^?UH^*0_qGMaq9jnd^w-E9?Kuix$)bB#S6ZznFHEWMZ+&=S z@{7xcipvwYFlEYqbM}SFeL1`(E$+fRv18$`vT#pXvNz?vFy(c2s0}x-8+OJ`O)9N- zjgMONLq;u&ih3b^G3pzwf~()28}njwLb+y^gJ#deSZ913Cl~d@L#v76_1t^%+~t{* z)6CcM)8~zyP)3uxxU0A) z)QT?3{oao%=|xp8C`M1;qC87NSd((Zv%?J)o*iq8QWm?zt#x%r*`_!3wp9pw>)yQ; zqt2&2@b!E)Dgh-rq{kFmCXc&+*Doi-(>DtG{x=v0fGRE>>~m3m2{1cpjN^ zoBeRtE8yU=x{l8aJzpqB;}pHu&>NfW>yfli+d}mPJtuM(*Muzn|Gk}5EX&$}K95z_ zWl-2!Mzl8Osll_u;eDzn)3K2CVmKU2_3&=hiiTsMd5%zMMn||OTwN}!%Vl-h;9a)4 z;>O}wXpI>4SKf&%PHFP9C3oZ2aBGFXHKA%3l+@1n)z-@&Zw*iyjh`1MZY6JjEh=Tt zptV94nt3hBHG2iT0bddeW`)K`YVbf~0%I7XPBUBM7&8YhQoAHMXfC0pTvBiGmL&8Y zIrdI}NpfssajdvIw0?+NLvIa`f2|Gf4D}{Ul7^L`cTDJ5YqKPGIyP&t%VAAux8#!C zxiY!pUEb32iJNlF=c$=pt_bbKu`0T(xV*^SI|>}GZm#34#cjpy;pxe%Q*-BNabs~u zXayBFh3XOtO%9-NRwRe<^ddjrr<@wgb{2Psat4LtE#aw^Gp8o3IXO1xM``g^1zF`y zA4-ciEGR|xDdDOjd%OWemRp-ew#j)MLKClde8>_xk6euNPt8AZY5(nhmLlbXLQ^`Y zCPbDDIq#jCW4UTBaBBX^jqP>s_Ur?9ECg@XP+Z=>oSIxjxS+VGxVSi4Tvc3C+*lkdZY%B%?b$^B?FmG8*{6vcite>f6So$HV4o)LDDEuo zDxMb_SDcpTg@x+!X^F{IW9HKm)~0ZK(s)|6$){yKWJQjxirDQwy|^#5lMzoUPAN_; z&MA7QHzlQmqs5iQRmIiCwZ(PC^~DXvjm5FzrlPX7dka}&2Nv!Qtvw>!9HCh3Dmp!> zof%5?>8Z77wMI>`e_t(d2m6QrjcV+p6|WWp$BIJJqMlxD#px*te$;B@)0^ef<0=I2 z0qw!%Vr};H*u5sS8`dtU(c+5Y%Hpcx>f+kshT_KJSaEZ4YjImqo%R0qjD$TUJR_xb zM&jC(enxqn8H*Q%(sE{OT^nl0&WyE=z1=u7{#S;3Q<}c;I5E^3MsJw7TXgq9ZieAuo7`0e>b7a@}-WGdI>=i+NMq!Ts z&mQAFls|T@pq#OH1?A7O^vrg;IP%^N-D_7B@^5`uPa}MDZRAJKg2Eq73yl2RJ&SUF z*uQH}q2qbQ(~DwUQKhNnaV#`F5z5;YRUhnlacpmeRX$|1Q4q4n3GY)-H?nY+F}8*Ofi% z%H3YCWyvW|)B36##uZu|r8(?xwztyp^dkSm-lGkvFOJ>2q3+enIF^&f-Z+FNH#Wp} zl&ktsR7M-}KdJ*8Dpxm@{TnK8?Qi5Rhlick!=9&&sRdlbq8CPC8aJZQHdabER+t;p zs*HbAWLMevt|@P!9J73=kz*C|ScN>6vgOY5vAV98cPxBwX;E$)ogzDp0nlBW%BoE@ zuH0N<`kF?KXRUE8%7M-KABE|DFnY zZ@HgUX*suIKezmQBd{z!cBQuJTXA}EY4P-MN?J%Xf;Or_ex@cCdzRI7vtaZlnZ-C- z9QF*F7uwl}tBY%jo-?}waBESR`bTRw!ZUXsU&pbs;hnJE7-q`W?D+AXaCir3t%r-X zTC416og0TWT|TWlq7WA3=|izwAwxc`C?MO+dU2TP?#Z!{{xFI}xnwkf(ypID{V#)1mOqs_aOXd+G-YPrs%& zWv%z|ux zzMf@ywGrs5b#Qdm6NPNhk|P_u!9lrgT#eGcsnTx6$$HAHqS&{T&0F%kJKh^=w~>XO zLlnC`c*Zxb`pN=5ciLX$M@x(B(Uu|`w4W#zEg{M)yDoiqq#V6nLOyq7j25hwt0)q&hYyGm=NokXX_9 z&bLjdh8o-B>f)NB@O?9cO5SK6jShU@gPV$aU|;H>9?V<-t*@KA;aQ=!4q0oC;0a`v zFD=lXM>`(I-w|4Ic5Kzsi~w1y#X}a_FN|V07eKMw{fff0PKfTZ(vD)WPG~QHFs=Eb zmdRT)t99tD8nVRu2jgRJMU4MZej4YaaI|tL53LGXliD^=8%9;bI7paUzoETE`C}xH%FBoy#b~V_#h@KSwi%P7kbV7& zYK`x9Pzm~40QE~&Y0(;-6*069Wvv0tw6%vQHwJ68ijJLW6;bRftJY~19kayT9HmjK zh*GL;L@SG)3Y0dhpx#Wd%E%vuwx-hJ>o3PFUsG0Tg&niRN*4;>hy=M?0YH}c<__6o z6>BsWv(xwLD16^Lp}ex^8|92OEEMukHf9Hog}=V6U7t`Lvw3~RwZ7t7Uuj=ow%J|d z>N%lyc)Z8b4m%dM))?iOG5=_+WP>(&G$|R#&!(!wn^JQf%Qx*a@}qr5X|z_1!(DPf zTaCisR8QQdv{iad&xm&fqiLVnV-$_TG=4_m7#pKf(=wyyRQrs|R4a|1ETdfYSZ@2) z4&7xOi*nmI7S%oDP85O>EJ~4aEV5yHhbb*av#9m3e*oFGz1p$umFL^5*6pbF!C2Q5 zB{VzmQ8>oEsD|vQ5O!3~*g-m)(B+9f0_B)J38V2RMMkQqX6`AQ_w-evc~fbZjFx9_ z#p}(NcM05mOSqzTH=(vuPl3~mONv&meT8rKKB;(8kx%^v8sD%6&ExeK=-q-ZR?%oe zzkud;`T}Hwz5vY$d`XFCh57 zWbLqn%6lru^3a#M3W!Q} zc=uo=?^x`PP$^hZKsjS}j!Mu-9*2;JIi<9l+u<-)5~KMI&MnR_$_+CQ6q~0A#cQOD z;x#5kaT&p(kc|#dXybja+MZwsK4g2hew^n**E=thaG_qVDjVvE5)<-*L zxtR;HSs#t8)kh;c_0h;qeKZbss&D2p=zHju*=sCEMv8LJ>;|RUJ3Be0PFkr$rK8tI zE^8`$J@xq5WynpvHWxPAm5MCXcOyI3re8v_Sl>g|ngJne*Os-zN~K<2ISIj9AF7l3 zeU#7odX%?jEGT@lBxK!&Dr;+Wj#*+o1^Kb&hGN-RR{1RtwSgb&`RM9c*)Uc)=~rFG zS5eI$94kRRILZe-ILZg}EM(iJip6Zpv2@v^tImnh+8T<{8#m-gtxd*Y|PU zm9P01id`?S*0Rw23#S&4cQk3*@jzZs=sPg+p) zeA%6XY}->I@2Q^GoNh(hYdL0@5h^3^%~#Y21Knkn3E6pWrOsNDV;1_|02G?t`>4+B zt8n(k9>2&nsW`Q$SM=Kg+72$p2IvjCT^V>zXwQt%zkAIqk$>-oP><&g5iTg2qZm1$ z(YZWAt%#W>T9r3`Ku@ZfCVEPYCD8cP91}MetS_+G>1JXBW0~!U-nI#>DqmQ?3`CN*j;NsrZmnk8|-?rcW+*Ceo=ZC zR!Z&maxAy)0yl?ruN^liWcxeDXO+YL3!@Zs%UMNvILtHobL=kjYm`gY6;UkXI|by7 z8MppVjON{_CVN|s^3(fpy`!3I%ricZb>vuF-V&pnHx}}KRhYxOR%4#=d9Sv^@%XzS z$1F7RK`|Qnpb|9lL3Ucn#F3&fm**c!m(?$HuaOK6ckRjX_?iL#=E0~&nYrRH`&6%t zZBRJoIw%~o4ejg1B1?>XaB9)hWc-6_j`1=oDWgdAWEmGB+l`@6p7@9IQ-6+Z8}Bpa zlD-aEsQ*E!9`9kKTI-H%)=uNuMbEO)A*>%{f>oT zM1=0OqX}7SbcB2wBcU9#rh&p=Q~vcUMsjR3MnXAYEQEX-1zC~tbQt;I;36(-9Vlnk zS9@v2!?9el;(?wEyQYy<);CaSRx?l;c|(fA^ga}YV0{DC95ZbcnjA!y8(AT@4V4P3 zAC9Hn+fP)Jhu=`J65?3M!^-qF)$WG&S zWT$mGWUcos$Xcs&$XcU%WV2B{ve|ka%2nTA;5kKkyQ3^O=65W1qkR;balW0AQs@0K z^5d;Eig#Cy6TG2zEY-WJwKp$tEG<^^&|SN#Zg~6SSSozOh-}_fcJ8Vi_A8qD7$NVj z65m}V?yWZ$aqX_W_3qoToYX_0xU3wakbNDA^1(a>g>0UJ>e8MH*__3(QZrjYA@3>6 zy#aTuCRlGo`RNU~-{auZdvL#>C6==*2dqG@jK6)McksjN{P=9&osQ*|c@27k{016| z(Yywg$hlQk<~3Fd#A059`x1s<&Gfr#6N^R=(uw+8GYiyS`c*mf9Gg3!+GiGEU-jIg zw>MTD_3_>!xQ5=Q8iAvG{r<=BTMj5*<7ag2+YPkN|Ioej z%KmxDS9`m?aq|-ZU!R{Vfs=8-RqkVlmot;u$P}7-#4JE)(lZ- zQf~LIoG~i4_r#aLp6vPG8LKZWwg_!fPUV|b=Lb zBHO&FL#Z%J$H5P)tgRwTj3rCKaJ(G&9RHsmZ_>z8ofAXgEuv+5}&%^ zca2shbRqb~RaAD~o1@tE!Z`Sm+xlX3uiu(M`KFH>A8YE%9J|YthHTctqgb}5uR$fQ z4M!!Sl|lKby_IV$v5JD+cUB$t+}f8Q7VkKWYt=gI9k?^pI^opf^rD)eb;6ON*sa~5 zFtt%AMsLhfdbLGx$m~nd77Jo!LFw|7AvxVmFt!D$1wd z9P%ZVRQNRr-{0>H=T|JgEV3hn<-S%y_j& zvb#YJd7{y`Bj%poXbHiL62V zS!8rm`RC9{zaZYo;E z*Mgy$ftAuV2}@|&E<7jHcHw!UwrhN!gto}Bd#xz??GL}cWc|?hLfQ-~hv?fTzh8me z{qBMBsc4~#}-ms#fhd_2(4O^4? zw5;g&3$;bw4+vjdv?liqE6{R4YlAG&!rtxcUr;cHt^Xj&CtW4g^T-Vh<5+6PpB?6_VNAJXEf*D}gazsrE!%`4GeMi;oG zC@yn76qjcc`S%OF$Xd@Mig9Nhn{)XNTpG=%*5tWUYMwjasfxuDwq4TSqKbhH(gUc%voXtO=vM^6eqcC>rA!x8q20 ze$ls=R*CVnq7jF+Vq~GUVq~4QVq~);Wa0Q5QFaVYi<8Cf%t2X*Ai?#X3#kwo9-N) z)U3p!w<{a6VuoxRb`M*Xbu8bEVQ@`Re0HOu{IoWUtg<$XEH}bIc3P)J<+Y*8YeSXS z@T>Q}!5jZF$Ety2&&be{DlNz2vQCTYgO(7*VpfHFLnA1Zc5AjM?Z#9n2aK#x4p^H- z>9s10Y%mW&mJIE+bUIezMqu_`-X#5k5e)@F@6 zrNXb7qmZ@Rb~#9w_1N*<2gQe^ChtTO6DG3sBCh4yLd zBgJl&62)r{i(<46iOSAQ7UhXhP|oOyP?%=8X7%%n%Zu#ME1?{-a)|1W-!(>0@y?2O zXVqBiid@8QbrHq5v-*Oa6^nk&^C^wHt3LRW#cG1s_mpkE3^bzrs3Ci{f?$DD(q+TJ)8E)Z>rh%&!=C5@mnc-LVFEyedsp^ z?1>p@E!++(dLC@+e)t;79gYb;KP- zR(U(`-J!hl)wMm-LR0HdIOYPwH!dgyV;huG`)a*+e+9IbO(-^F3(?Or`H4!ycCwZSMfEdk0~ zwajnY^6%;Jk8N5jWR+j{SYMWTw<<;IJc`S>-9B>Z_3MjP9F(1J1ySm>>L@g=H_j}o zZ`x<%Q=5$J^hRcVg}y#17vs)yu?A?Lx>&SqDDA$5@obC59NVvN%X1@kZ-PB9M(ox} zm56yUiqVW1rNxYRef;f9`aNqny||>fH1w2>e{<{k8h^VyCGn1rcyCbDE^auv0XLPYl1 z)q_K5EHS@8f45=y7Rx&bqcrQmR{u8SnHAT(N{cln-xUkTZ$TKtSv$0|1y2vX(>0!( zU1Y5}2nyK~hio$wLE)H*;PCw`3(d-rh4$zg9lFD6KMKvBTV$;n3i9vCMLwVx-<=u25`k+wq}@E!!`7un;T42s430c&GYWJMXpIKGy{W~(X49;*T+dDQ!Gd{=ZMSir;D0ZV1 z6pq~#DCe!Zp!90D$M>>$ljm6N-JCXaL!OESq5Tpl?RG(+R9m4%sWUz|PBJu9tVYN%?E{ShX8sae4&FZG%`nJVPuZd zXk?D^#Cv~KBHs9;{PArL>I>}eMd5hYk7|fDUKEZo9!kZ|%EMh%!*|s);tl$S94R~R zr%;N#lR{~+vlq`OiqV@eWbIH_yq|I`->eU#7`>~)A$%oh+-|Nb$Mk*b85@lLhdPHs z(D$KK@2jU+59sf^`dfv1KwKJHAI7Og?dX(*iS{(<#WrU2I1=io#(x7sKjl~(pl?FY zsFb7mtC1v{LF%D!_^T$?^Yl>u5(PiA>Z-qP;n({4@k{5PA0f{z_j%>t8!PLWEc82V z$P&LpX1A8O^jXMq@2#wON~5n%P@g&cdYAso@$lA!{l*_C6?!fdrv3}rrvE}?6aAN& zhQ3bEg>19VjKW-Aq3O#U3&)qfINUpYo5fmdyLNUv);Hns4T^a6EI7F+EqWG|MtutE zz4a-0TJiMa8AW00M^LKu8YtCj5)OOWq+Q>Ea=o&-zbsKkz#kx95 z-KMmkD6h2e=zHcEW zkx#1_$SUh9cvfhfjl!}23fW*iL@r2?mT1TkWRDir-(h0E_hrascZK7NMeA-{w0L-S za>eK!rx%wLmln?n&6m+z0&NQ|N3~3wj>^fHAC-@h zKibD<{EtJt!(Vsw*LD2WMHH`D0BRR~O@J)-_uh~_-Ws6TXH@JnlDCf8;EP2Rm-lYg z9Hmj4jM8NWfx$SOWiIDU_Rtkx6!DulSS{9_rxNS)uR^{cMv z%?K(%D^A02I*z~R_N$Gay;()MWVHc>=34-Cm-PpfC&RNUXC2E2D-S3itT~`G`XxM6 zJN(ky@Y`%gcw*7Npt$rhC>H$-$_+N5JlD&h81*tJMsF~^ljGOw845w4g6=XuLZb=q zagbGhIRM>j#)R@pUxVy1E^&`}tA+n0X=F%)C&l?c~Q{Zy?*euR*q%b0Mqj?Z>%A zyWaGbD3{E(kcH-1$WARFvPVCNVmEI>v70v`8|-C6cML23)^i-Y*KQ-6Tx6%6K`0OH z3_{kft~^{_7TS-)MJwl*0Z}Y=(;%DemqGE`rGm=W`X*{m%py>V%+yfc+Nptqg>u+F z2$aLC)7qn_a@c*~jlFjmZ15Hd)l9uP3c(wtu~;y#$U;3kvd#PsS;9(WgH>M?g8m)l zvzZ-Ag+3kSyj4}JKJwG5C(bI0*NP*G*UA{mf${aNeL1!kg8b;~(bF+L<7AJKK6)06 zagfz|W|UG->QF~e2zq=Jg1#PE>u+r$|9XEErj;)o?xf~=C( zOTEECwbX18#cN!FY%{t*G6J{u9CRG5>Zv=|+sw3wNqdS$$X zQsh@7)D~=sY@^>F`QBhj_t|+qExC_~AR}iw(NDNuX0%WIM?#NCfG-T(F zvc%gBZx)4Sry2^4^(cg$@$0=KpWbt$>$}TlyJH>s1e0(=Id!u z#~h)!d;p&1RLFsH>TwEk@zh*}pTJ@lJ~Gb@&v zb#-P^#6|cs^JJr^XJ%4?;|77Pm6y8)D5V;dBju?@1*NCuUQkqn+u6q*qW3e7$| zWT$5gS!hgxLul4=%+^u5j336^cQa_m<~nwRpfKzJK_RQJ$iiV~v^~XE0NJB|N0#W{ zQ3*OnX&m2mD1Y?MC`>)F_dTZ-<*pewvca=~LhvTpJ5Q<5^Xi!<7P)xeh;q!kK^*+B zXXwM^yJMkw^MlIHI~i+T^4VM)#jfW?Ay`92Ay|PkzZ9=^DHN|YB%D>8UGy|r2SRye zl?8>b*GBm?zUm;Z@f8APr1imJKJ8if|FdMrNU+o#IvDUZ<#cTY7;xgtzIc2ni!n9ung=wsU z?)7a23c+Xu)db@Z6q*qTDh2nWFpWKM2$P-09;h^TRDRk;=~!+UCyb9TjSUA-+&;?tq7sGc9n&`aq|n0{2N7V%0IFA z5)I{mwRFEJCQt0P*_66FJG7q@rNVb%n^P+OW`ou5&G|({vmfh1sF%=>qwitt{YCHF ztpcI)x8{S!clvbnb={2gpUD4=q(!|K^2`cZ-|g6XsvaEqoLM33#~u4M;+YkT-rTWR z^yX-%xxcOLTOC*DR%rf;(dP8v-t;Uk%l+L9zmz|zXosoayvMo4;cq0c#6CIn)cIw4 zJTJ6@f$~Hzk8HNn1;u4_h4RFz1qwm$?-x3y-P*$VGe7?8Wp?0N6F@eob6N!JYUb=X zy*Q&NSFCI!%YE5_EHqn378;@A5E`rWw#X`9A9^b$75Z6Jrux(2TLEv&l%QEHa<}UX z`BcwP>g*=ge#v3GfRUZ{@FJ`9s>mue5?N(#i|ny~3VnNL&k?$6Zw}5c`b}KBLWX@G zs3z!1t^cxC?}@C{d!oAJ%@wlNn;euzy&=jCJs|S0zcU*UrXC0R(Wjt#Zp4bp$Vd~V z)TjaZ)JvdL`-egvZ|&?~^VGT`5A_r%)oMC=Le(7#rM_8%vkg9$BlcvAdBCX1J&<%xaNOyID{;=An8i{>?Oz<>r{^F0)7!m$n+kWwji| zs7=NpH2L7YB1lXR^Et7a$dZV z*jUjby$i5^n}t3Kt?o6~kJHeYNyIXC%!sIPZxGUknQ%1k!EcSeL~C^GO?9Pui1Jc9 z)HdhY24-KB;!`xEH@62C4cKWN{c3D(hhn+wPmwGuF_3V{kzSQ@X(9SgGO3?LsLo`~_8zQf#J`s&D^ohv2*E1rEQm>5O zD}5z;Z}gSOj>rjd2Nm-BVSo&>EY8M>KOTUatq+dq1&phQiNxmmZ`6MaWG0CnI z?y}z_Ig%~yTczMh7! zhkW13g66Jj9FMf5uSdD)>yb|M^(YrTK9WbeNPhi3da~Yh+!omYC^e&d^sAk!+21ch z*BGs%ytE7`eRB;+ej{|GLn}v6iL4w!bw*?tO4%qLrKCMUk{G|EyxRIVes`=C<`MJ| z@@12teAy%@U$Y6=-~Ey=%LIF$CnaK^pxoIfNCxc~lEnNwlB8#3*)Wc2*!z$4z>+}{ zirPZ8jwb=V?`9vY>Xy5C1YCq9VdtP6%>|%*d(2~Ph+`>>&eDpVhEmh6qO!1RP-;B+ zs4P7BNPgB1Dg|o?J54f+*FrM$=cDVtM=?95ZB`J{ww;2IhDG%vd3YXBI-*TcE?R!{ z>_&{_D#z0K9wF#h3fg=miC7yHsm=3%WZ+dm`SL2Dd(8#ln~)@;08naUu9zge0Z6xI zHPM^SCxFs7_D8v}!H}Mf^ieMCF_eojK6YMoZd{LaZd}jGkuRSaN}0`uQXYOIDG#5G z^oRdL`m7dI8^>r>`eSrR=VSDyPO|P;C`!bBLoMyFF-gVZke+MQUsOhS>p^MWd<4=S z3k??`jTu>^66tMG3jDb!Eu(29kGTW%rm*7hmryR|3s5flYt)jkL-Ml@QEEoqV^<&}ZoY=cAsKGV?m{IpI>t$; zL}JoVO%s`hv}Z>b^iK6xXIPAm$s<+`WEWUHfqLNM^tV<( zJ3bB9;d!Vx6CZ;7#Oxo``m%peOUeF0?TsiA6cfV=LhlDF2-P-L5ULlfAmrgVu2QPm z4?;4tf{>NL3PPo`w$wbFvM3cwO*DwN!u4z(BtM%6$)B&RQn8m&3wn^>s4_9a2m`Wh#akWS50`c>2iDm4oVl~>dU zy30No{k=hyzJ0+^%D$ne4f0HU3l8a@HHD;QO`%-aQ7A8-DWp|z2+Ef=g`_oOf+X=x z40M$kcqEBf4wPEAgXT5Nv-;Jl36v(Q2GvJa4XSUf8kCnkK5-SEg*4CFLHc9u;ERwv ztQ}Np)(*;@wSy#N?I1mLR2gf>G0A(Rt#xor53C(j7Eu=HS+jG@9Lsm?{UZgf6}nz5 z1Uf(VGf>{^l-KSBj-_BH03^9t670L=ZtXbkL;13W(DiH~BrhunJzrK3N{8ix+oJVw zNGE1bkj~jQ*z266CTbnk4IUnp8VjW30Xwn}rEd-b{mN!QGO!A;ub~-pr+lmO9kXHN z;kQBZ^WLC)we{%U;g^+yo*m_76pZc~J|1`RLl_6ILf4E@veb<2kR7|3tP#z0S69>{CR$D+QY6imAvt}m1Leho;O%vWe+Egl%CFWt z+b8I}xQ?8@MQ=w-S6-x~zC+IcyAIDn*IV(5w81h#CG{1WHP?}arpzE)q4J#%blhe8hRC9cj z7NusdKU4~q4=RPdJ?CvklCzhPwERNIV=FD}yVL}B6w)(m3Q59_LK5bKdO2leH?*dN|DqZ&?Qglpao+9){u%K`s(yIL| zkq+5ZDBqr4W>e{noMBC2pONx)^uWGyOatsIqyc+7Aw6725B76%tmd%3kTzIfNE_ze zkRI%QgmO0rhsw@ELy~kK={m5OE_8ZEPFAM3J6^HU-#UVX+ zPfQxe@)DcMr|(yz8go4AhL!OsWwxBTdAaj7VW072*>&h%^K^Rpi_rD_OXzy5Ptf%& zJ@l(M5OfW{5R#njhia_oGn|B;I13OxBQam7u8Q_T&qyQ}(%6WZqA?LnNMn3QNCv(m zBm+wlNzyZ3?H_5|g=EgtA*&KSDYJn{w)c_BJfLHem<>cSn6pKiH~)d^1KR?nY(9jY zr0l#*Nb=#2BqwVVUC)Q1=O+Ve6KTx&8>b=Jj7O2)j46@Ej0jO)Mq?;PmM3~f!?vXX zwiVI7RtUgC_=UGB^j75j8Z*Npviha*b>ae}D#D%!m zJk*F0VbQTE<>(3#t8^l^6G>>NDtXfz?-RPlPQs|Z@j;>Y;x;`gPn2WY7L}8Wl89}bnX=eI(DwHnnqNyc2wN0sA9IH zUK`2m`@_hm;;X!P8M;^WCc3^y8lp6fH=c&B;k7_-Kb;~8eeX`KU4>`iMd*6{GLovJ zl=RMymDH{sNLqa{(zCu8NvkhLn$-Uyz3E|5%6e5)(jFao-i}GA_e3SKx3uVLd6`c! zj*`1R1>K=fLAmHzP%gZmsJ!-zLHSyfXe1^b{RK)*uYpp~U!WA!dt&6{gLDd<^H&E&&HPoZ0xcPW>4UaT3tjW{V% zX~|J8yaz~od^Y1rc-IkNGwt#V~&aijEyMJX577RqZ_7IdPuN7@*D z8X5e>eW*5mu6D*bavGbXx+IDK>4ab4rfRVBT26Gn`;2XJ*+$#F0zo@w*Q!Z44f#-w zbA6rNc`cRQti%~-(kJdSkECoH?sseEFDUb{N*vtV5noV+V9s@2#)RaojT> z($uQ(K0FGgW+!kYgYV*^NJKrKKFs$dwFXFjtpO^9)&QS}WMG-2c8Fz;Y-e^j%3Ujg za?wg)=cQa)1~EEMLpxDgpM|bu1Ecv#cC6DRryi;qiwbj`fR zJyQ5X;wl6s(2+UAikD%e6?VeYt|*>*ZNJZ^c8L2Y;e6*rF>f?lUA&WWQO8g&>KIB{y+UuWQJCGhT_ffn zrL0G>*QxWyN9al|2#Zb1dK@ID7$c-fySv#Hi41CvT_VVAe-tse=BD%rD1EEt*ndr{ zwOR7w>0G0&M(v8IE~GtC9!NGVGrCgCtR><3LxaykHGyvc z<)Y<8c^Pk^yoP11)NGt?bu zE%N@Mh*z<}Y~_!kWBxR>zZFj!vY~0jmpphr_{~rX>NB!F*n4PqY4#pUM+=Nr(X#+i zj#^{X?$hI6rSVnh%4O0tzh=*UxmZIj(ptV+W0b89qdh=cF{dawTtB{pt zhZMi4&(?t15l>A<*W3TWuEVa>RvJYtLwRW%QJPvp6a%OAv*(}lc9lbCj08~1TEgDP z2%Qm|fpRn^MLCL65Ys9h)(Fxnn*`-+Tq&x~ucH6Zy(|zmzGux6Ky`p6fU|HO`l_DV zi<|Iycp3g0l9_FQow8?b+=nDltI^xmBe5Q5u)MUvG^V#fcX_{+UWw=oJBFTwMr3FP z)yNCwZsnbQZCtJ0w!ftF_VGb^8SfzL;X#$x*l!Z{@v|InirxkEtGRg8`fBr0t7*<1 ztu^NZN4w&gb4Tl$c*4=jB;SHWd&3zwp%sJt;biKO*zB5A#wNLp_w^6Pjvu~Sp;__6UrNLp_zl6GFt5Vc1} zZAQ*CwkjFX^>*~u<4XA~DW6pvWpr)VN%P~z*d*s?#>PV20;SN0j#w7ozTiP{hE;~rv`aloQ;%uSPATx

(t}d=1KCM27Uw zn}?$Qjr4E>|L%9V;(C4Bi#3>gBbeXRQ#bEmrhMaZ`L)=}31LE{ncEx~=!(beD!@OHBp+l zFZwDJlB(A%iR|B2ePV6c^+?pdT`%pWN;|Gp-;h|XcvI9<@ZZhCeQ{a$nK{NM;c2)IwT)(u@gnrZca_Jh zP?}nsU8O5Wvn{)lj11;McBTFH6RI&xlbc!>OXo8x_v - + + + all + build; native; contentfiles; analyzers; buildtransitive + diff --git a/Fin.Api/Fin.Api.sln b/Fin.Api/Fin.Api.sln new file mode 100644 index 0000000..912a3b0 --- /dev/null +++ b/Fin.Api/Fin.Api.sln @@ -0,0 +1,24 @@ +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.5.2.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Fin.Api", "Fin.Api.csproj", "{330E38C3-8925-05A6-F8DE-2312E9F69666}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {330E38C3-8925-05A6-F8DE-2312E9F69666}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {330E38C3-8925-05A6-F8DE-2312E9F69666}.Debug|Any CPU.Build.0 = Debug|Any CPU + {330E38C3-8925-05A6-F8DE-2312E9F69666}.Release|Any CPU.ActiveCfg = Release|Any CPU + {330E38C3-8925-05A6-F8DE-2312E9F69666}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {85E7AB78-8C20-4A98-9130-CD73E0B54F27} + EndGlobalSection +EndGlobal diff --git a/Fin.Api/FinancialInstitutions/FinancialInstitutionController.cs b/Fin.Api/FinancialInstitutions/FinancialInstitutionController.cs new file mode 100644 index 0000000..aabd14d --- /dev/null +++ b/Fin.Api/FinancialInstitutions/FinancialInstitutionController.cs @@ -0,0 +1,80 @@ +using Fin.Application.FinancialInstitutions; +using Fin.Domain.FinancialInstitutions.Dtos; +using Fin.Domain.Global.Classes; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; + +namespace Fin.Api.FinancialInstitutions; + +[Route("financial-institutions")] +[Authorize] +public class FinancialInstitutionController(IFinancialInstitutionService service): ControllerBase +{ + [HttpGet] + public async Task> GetList([FromQuery] PagedFilteredAndSortedInput input) + { + return await service.GetList(input); + } + + [HttpGet("{id:guid}")] + [Authorize(Roles = "Admin")] + public async Task> Get([FromRoute] Guid id) + { + var institution = await service.Get(id); + return institution != null ? Ok(institution) : NotFound(); + } + + [HttpPost] + [Authorize(Roles = "Admin")] + public async Task> Create([FromBody] FinancialInstitutionInput input) + { + try + { + var institution = await service.Create(input, autoSave: true); + return institution != null ? Created($"financial-institutions/{institution.Id}", institution) : UnprocessableEntity(); + } + catch (InvalidOperationException ex) + { + return BadRequest(new { message = ex.Message }); + } + } + + [HttpPut("{id:guid}")] + [Authorize(Roles = "Admin")] + public async Task Update([FromRoute] Guid id, [FromBody] FinancialInstitutionInput input) + { + try + { + var updated = await service.Update(id, input, autoSave: true); + return updated ? Ok() : NotFound(); + } + catch (InvalidOperationException ex) + { + return BadRequest(new { message = ex.Message }); + } + } + + [HttpDelete("{id:guid}")] + [Authorize(Roles = "Admin")] + public async Task Delete([FromRoute] Guid id) + { + var deleted = await service.Delete(id, autoSave: true); + return deleted ? Ok() : NotFound(); + } + + [HttpPost("{id:guid}/activate")] + [Authorize(Roles = "Admin")] + public async Task Activate([FromRoute] Guid id) + { + var activated = await service.Activate(id, autoSave: true); + return activated ? Ok() : NotFound(); + } + + [HttpPost("{id:guid}/deactivate")] + [Authorize(Roles = "Admin")] + public async Task Deactivate([FromRoute] Guid id) + { + var deactivated = await service.Deactivate(id, autoSave: true); + return deactivated ? Ok() : NotFound(); + } +} diff --git a/Fin.Api/appsettings.json b/Fin.Api/appsettings.json deleted file mode 100644 index 1f56543..0000000 --- a/Fin.Api/appsettings.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft.AspNetCore": "Warning" - } - }, - "ConnectionStrings": { - "DefaultConnection": "EXEMPLE" - }, - "AllowedHosts": "*", - "ApiSettings": { - "Redis": "EXEMPLE", - "Version": "EXEMPLE", - "EmailSender": { - "EmailAddress": "EXEMPLE", - "Password": "EXEMPLE" - }, - "Firebase": { - "SenderId": "EXEMPLE", - "ServerKey": "// Here you mus put your server key json as string..." - }, - "Authentication": { - "Encrypt": { - "Key": "EXEMPLE", - "Iv": "EXEMPLE" - }, - "Jwt": { - "Key": "EXEMPLE", - "Issuer": "EXEMPLE", - "Audience": "EXEMPLE", - "ExpireMinutes": 120 - }, - "Google": { - "ClientId": "EXEMPLE", - "ClientSecret": "EXEMPLE" - } - }, - "FrontendConfigs": { - "Url": "http://localhost:4200" - } - } -} diff --git a/Fin.Application/Fin.Application.sln b/Fin.Application/Fin.Application.sln new file mode 100644 index 0000000..d691ce0 --- /dev/null +++ b/Fin.Application/Fin.Application.sln @@ -0,0 +1,24 @@ +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.5.2.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Fin.Application", "Fin.Application.csproj", "{930F4674-00C7-367F-2ABF-37898BCDDD08}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {930F4674-00C7-367F-2ABF-37898BCDDD08}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {930F4674-00C7-367F-2ABF-37898BCDDD08}.Debug|Any CPU.Build.0 = Debug|Any CPU + {930F4674-00C7-367F-2ABF-37898BCDDD08}.Release|Any CPU.ActiveCfg = Release|Any CPU + {930F4674-00C7-367F-2ABF-37898BCDDD08}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {5C017504-FB39-43D3-9270-899D293A0EB6} + EndGlobalSection +EndGlobal diff --git a/Fin.Application/FinancialInstitutions/FinancialInstitutionService.cs b/Fin.Application/FinancialInstitutions/FinancialInstitutionService.cs new file mode 100644 index 0000000..f86b3c9 --- /dev/null +++ b/Fin.Application/FinancialInstitutions/FinancialInstitutionService.cs @@ -0,0 +1,134 @@ +using Fin.Domain.FinancialInstitutions.Dtos; +using Fin.Domain.FinancialInstitutions.Entities; +using Fin.Domain.Global.Classes; +using Fin.Infrastructure.AutoServices.Interfaces; +using Fin.Infrastructure.Database.Extensions; +using Fin.Infrastructure.Database.Repositories; +using Microsoft.EntityFrameworkCore; + +namespace Fin.Application.FinancialInstitutions; + +public interface IFinancialInstitutionService +{ + public Task Get(Guid id); + public Task> GetList(PagedFilteredAndSortedInput input); + public Task Create(FinancialInstitutionInput input, bool autoSave = false); + public Task Update(Guid id, FinancialInstitutionInput input, bool autoSave = false); + public Task Delete(Guid id, bool autoSave = false); + public Task Activate(Guid id, bool autoSave = false); + public Task Deactivate(Guid id, bool autoSave = false); +} + +public class FinancialInstitutionService( + IRepository repository + ) : IFinancialInstitutionService, IAutoTransient +{ + public async Task Get(Guid id) + { + var entity = await repository.Query() + .FirstOrDefaultAsync(n => n.Id == id); + return entity != null ? new FinancialInstitutionOutput(entity) : null; + } + + public async Task> GetList(PagedFilteredAndSortedInput input) + { + return await repository.Query(false) + .OrderBy(f => f.Name) + .ApplyFilterAndSorter(input) + .Select(n => new FinancialInstitutionOutput(n)) + .ToPagedResult(input); + } + + public async Task Create(FinancialInstitutionInput input, bool autoSave = false) + { + ValidateInput(input); + + var existingName = await repository.Query() + .AnyAsync(f => f.Name == input.Name); + if (existingName) + throw new InvalidOperationException("A financial institution with this name already exists."); + + var existingCode = await repository.Query() + .AnyAsync(f => f.Code == input.Code); + if (existingCode) + throw new InvalidOperationException("A financial institution with this code already exists."); + + var institution = new FinancialInstitution(input); + await repository.AddAsync(institution, autoSave); + return new FinancialInstitutionOutput(institution); + } + + public async Task Update(Guid id, FinancialInstitutionInput input, bool autoSave = false) + { + ValidateInput(input); + + var institution = await repository.Query() + .FirstOrDefaultAsync(u => u.Id == id); + if (institution == null) return false; + + var existingName = await repository.Query() + .AnyAsync(f => f.Name == input.Name && f.Id != id); + if (existingName) + throw new InvalidOperationException("A financial institution with this name already exists."); + + var existingCode = await repository.Query() + .AnyAsync(f => f.Code == input.Code && f.Id != id); + if (existingCode) + throw new InvalidOperationException("A financial institution with this code already exists."); + + institution.Update(input); + await repository.UpdateAsync(institution, autoSave); + + return true; + } + + public async Task Delete(Guid id, bool autoSave = false) + { + var institution = await repository.Query() + .FirstOrDefaultAsync(u => u.Id == id); + if (institution == null) return false; + + await repository.DeleteAsync(institution, autoSave); + return true; + } + + public async Task Activate(Guid id, bool autoSave = false) + { + var institution = await repository.Query() + .FirstOrDefaultAsync(u => u.Id == id); + if (institution == null) return false; + + institution.Activate(); + await repository.UpdateAsync(institution, autoSave); + return true; + } + + public async Task Deactivate(Guid id, bool autoSave = false) + { + var institution = await repository.Query() + .FirstOrDefaultAsync(u => u.Id == id); + if (institution == null) return false; + + institution.Deactivate(); + await repository.UpdateAsync(institution, autoSave); + return true; + } + + private void ValidateInput(FinancialInstitutionInput input) + { + if (input == null) + throw new ArgumentNullException(nameof(input)); + + if (string.IsNullOrWhiteSpace(input.Name)) + throw new ArgumentException("Name is required."); + + if (input.Name?.Length > 200) + throw new ArgumentException("Name must not exceed 200 characters."); + + if (string.IsNullOrWhiteSpace(input.Code)) + throw new ArgumentException("Code is required."); + + if (!System.Text.RegularExpressions.Regex.IsMatch(input.Code ?? "", @"^\d{3}$")) + throw new ArgumentException("Code must be exactly 3 digits."); + } +} diff --git a/Fin.Domain/FinancialInstitutions/Dtos/FinancialInstitutionInput.cs b/Fin.Domain/FinancialInstitutions/Dtos/FinancialInstitutionInput.cs new file mode 100644 index 0000000..95dfe40 --- /dev/null +++ b/Fin.Domain/FinancialInstitutions/Dtos/FinancialInstitutionInput.cs @@ -0,0 +1,23 @@ +using System.ComponentModel.DataAnnotations; +using Fin.Domain.FinancialInstitutions.Enums; + +namespace Fin.Domain.FinancialInstitutions.Dtos; + +public class FinancialInstitutionInput +{ + [Required] + [MaxLength(200)] + public string Name { get; set; } + + [Required] + [RegularExpression(@"^\d{3}$", ErrorMessage = "Code must be exactly 3 digits")] + public string Code { get; set; } + + [Required] + public FinancialInstitutionType Type { get; set; } + + [MaxLength(50)] + public string Icon { get; set; } + + public bool Active { get; set; } = true; +} diff --git a/Fin.Domain/FinancialInstitutions/Dtos/FinancialInstitutionOutput.cs b/Fin.Domain/FinancialInstitutions/Dtos/FinancialInstitutionOutput.cs new file mode 100644 index 0000000..d60e683 --- /dev/null +++ b/Fin.Domain/FinancialInstitutions/Dtos/FinancialInstitutionOutput.cs @@ -0,0 +1,32 @@ +using Fin.Domain.FinancialInstitutions.Entities; +using Fin.Domain.FinancialInstitutions.Enums; + +namespace Fin.Domain.FinancialInstitutions.Dtos; + +public class FinancialInstitutionOutput +{ + public Guid Id { get; set; } + public string Name { get; set; } + public string Code { get; set; } + public FinancialInstitutionType Type { get; set; } + public string Icon { get; set; } + public bool Active { get; set; } + public DateTime CreatedAt { get; set; } + public DateTime UpdatedAt { get; set; } + + public FinancialInstitutionOutput() + { + } + + public FinancialInstitutionOutput(FinancialInstitution input) + { + Id = input.Id; + Name = input.Name; + Code = input.Code; + Type = input.Type; + Icon = input.Icon; + Active = input.Active; + CreatedAt = input.CreatedAt; + UpdatedAt = input.UpdatedAt; + } +} diff --git a/Fin.Domain/FinancialInstitutions/Entities/FinancialInstitution.cs b/Fin.Domain/FinancialInstitutions/Entities/FinancialInstitution.cs new file mode 100644 index 0000000..525ac84 --- /dev/null +++ b/Fin.Domain/FinancialInstitutions/Entities/FinancialInstitution.cs @@ -0,0 +1,47 @@ +using Fin.Domain.FinancialInstitutions.Dtos; +using Fin.Domain.FinancialInstitutions.Enums; +using Fin.Domain.Global.Interfaces; + +namespace Fin.Domain.FinancialInstitutions.Entities; + +public class FinancialInstitution : IAuditedEntity, ITenantEntity +{ + public string Name { get; set; } + public string Code { get; set; } + public FinancialInstitutionType Type { get; set; } + public string Icon { get; set; } + public bool Active { get; set; } + + public Guid Id { get; set; } + public Guid CreatedBy { get; set; } + public Guid UpdatedBy { get; set; } + public DateTime CreatedAt { get; set; } + public DateTime UpdatedAt { get; set; } + public Guid TenantId { get; set; } + + public FinancialInstitution() + { + } + + public FinancialInstitution(FinancialInstitutionInput input) + { + Name = input.Name; + Code = input.Code; + Type = input.Type; + Icon = input.Icon; + Active = input.Active; + } + + public void Update(FinancialInstitutionInput input) + { + Name = input.Name; + Code = input.Code; + Type = input.Type; + Icon = input.Icon; + Active = input.Active; + } + + public void Activate() => Active = true; + + public void Deactivate() => Active = false; +} diff --git a/Fin.Domain/FinancialInstitutions/Enums/FinancialInstitutionType.cs b/Fin.Domain/FinancialInstitutions/Enums/FinancialInstitutionType.cs new file mode 100644 index 0000000..6f1bd27 --- /dev/null +++ b/Fin.Domain/FinancialInstitutions/Enums/FinancialInstitutionType.cs @@ -0,0 +1,9 @@ +namespace Fin.Domain.FinancialInstitutions.Enums; + +public enum FinancialInstitutionType +{ + Bank = 1, + BusinessAccount = 2, + DigitalBank = 3, + Other = 99 +} diff --git a/Fin.Infrastructure/Database/Configurations/FinancialInstitutions/FinancialInstitutionConfiguration.cs b/Fin.Infrastructure/Database/Configurations/FinancialInstitutions/FinancialInstitutionConfiguration.cs new file mode 100644 index 0000000..dc3ff2d --- /dev/null +++ b/Fin.Infrastructure/Database/Configurations/FinancialInstitutions/FinancialInstitutionConfiguration.cs @@ -0,0 +1,42 @@ +using Fin.Domain.FinancialInstitutions.Entities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; + +namespace Fin.Infrastructure.Database.Configurations.FinancialInstitutions; + +public class FinancialInstitutionConfiguration : IEntityTypeConfiguration +{ + public void Configure(EntityTypeBuilder builder) + { + builder.HasKey(x => x.Id); + + builder.Property(x => x.Name) + .HasMaxLength(200) + .IsRequired(); + + builder.Property(x => x.Code) + .HasMaxLength(3) + .IsRequired(); + + builder.Property(x => x.Icon) + .HasMaxLength(50); + + builder.Property(x => x.Active) + .IsRequired() + .HasDefaultValue(true); + + builder.Property(x => x.Type) + .IsRequired() + .HasConversion(); + + builder.HasIndex(x => new { x.Name, x.TenantId }) + .IsUnique(); + + builder.HasIndex(x => new { x.Code, x.TenantId }) + .IsUnique(); + + builder.HasIndex(x => x.Active); + + builder.HasIndex(x => x.Type); + } +} diff --git a/Fin.Infrastructure/Migrations/20251001194905_AddFinancialInstitutions.Designer.cs b/Fin.Infrastructure/Migrations/20251001194905_AddFinancialInstitutions.Designer.cs new file mode 100644 index 0000000..64226f6 --- /dev/null +++ b/Fin.Infrastructure/Migrations/20251001194905_AddFinancialInstitutions.Designer.cs @@ -0,0 +1,572 @@ +// +using System; +using Fin.Infrastructure.Database; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace Fin.Infrastructure.Migrations +{ + [DbContext(typeof(FinDbContext))] + [Migration("20251001194905_AddFinancialInstitutions")] + partial class AddFinancialInstitutions + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("public") + .HasAnnotation("ProductVersion", "9.0.9") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("Fin.Domain.FinancialInstitutions.Entities.FinancialInstitution", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Active") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(true); + + b.Property("Code") + .IsRequired() + .HasMaxLength(3) + .HasColumnType("character varying(3)"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("LogoUrl") + .HasMaxLength(500) + .HasColumnType("character varying(500)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("TenantId") + .HasColumnType("uuid"); + + b.Property("Type") + .IsRequired() + .HasColumnType("text"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UpdatedBy") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("Active"); + + b.HasIndex("Type"); + + b.HasIndex("Code", "TenantId") + .IsUnique(); + + b.HasIndex("Name", "TenantId") + .IsUnique(); + + b.ToTable("FinancialInstitution", "public"); + }); + + modelBuilder.Entity("Fin.Domain.Menus.Entities.Menu", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Color") + .HasMaxLength(20) + .HasColumnType("character varying(20)"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("FrontRoute") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.Property("Icon") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("character varying(20)"); + + b.Property("KeyWords") + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.Property("OnlyForAdmin") + .HasColumnType("boolean"); + + b.Property("Position") + .HasColumnType("integer"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UpdatedBy") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.ToTable("Menus", "public"); + }); + + modelBuilder.Entity("Fin.Domain.Notifications.Entities.Notification", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Continuous") + .HasColumnType("boolean"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("HtmlBody") + .HasColumnType("text"); + + b.Property("Link") + .HasColumnType("text"); + + b.Property("NormalizedTextBody") + .HasColumnType("text"); + + b.Property("NormalizedTitle") + .HasColumnType("text"); + + b.Property("Severity") + .HasColumnType("integer"); + + b.Property("StartToDelivery") + .HasColumnType("timestamp with time zone"); + + b.Property("StopToDelivery") + .HasColumnType("timestamp with time zone"); + + b.Property("TextBody") + .HasColumnType("text"); + + b.Property("Title") + .HasMaxLength(250) + .HasColumnType("character varying(250)"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UpdatedBy") + .HasColumnType("uuid"); + + b.Property("Ways") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.ToTable("Notifications", "public"); + }); + + modelBuilder.Entity("Fin.Domain.Notifications.Entities.NotificationUserDelivery", b => + { + b.Property("NotificationId") + .HasColumnType("uuid"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.Property("BackgroundJobId") + .HasMaxLength(20) + .HasColumnType("character varying(20)"); + + b.Property("Delivery") + .HasColumnType("boolean"); + + b.Property("Visualized") + .HasColumnType("boolean"); + + b.HasKey("NotificationId", "UserId"); + + b.HasIndex("UserId"); + + b.ToTable("NotificationUserDeliveries", "public"); + }); + + modelBuilder.Entity("Fin.Domain.Notifications.Entities.UserNotificationSettings", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("AllowedWays") + .HasColumnType("text"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("Enabled") + .HasColumnType("boolean"); + + b.Property("FirebaseTokens") + .HasColumnType("text"); + + b.Property("TenantId") + .HasColumnType("uuid"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UpdatedBy") + .HasColumnType("uuid"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("UserNotificationSettings", "public"); + }); + + modelBuilder.Entity("Fin.Domain.Notifications.Entities.UserRememberUseSetting", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("NotifyOn") + .HasColumnType("interval"); + + b.Property("TenantId") + .HasColumnType("uuid"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UpdatedBy") + .HasColumnType("uuid"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.Property("Ways") + .HasColumnType("text"); + + b.Property("WeekDays") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("UserRememberUseSettings", "public"); + }); + + modelBuilder.Entity("Fin.Domain.Tenants.Entities.Tenant", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Locale") + .HasMaxLength(30) + .HasColumnType("character varying(30)"); + + b.Property("Timezone") + .HasMaxLength(30) + .HasColumnType("character varying(30)"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.HasKey("Id"); + + b.ToTable("Tenants", "public"); + }); + + modelBuilder.Entity("Fin.Domain.Tenants.Entities.TenantUser", b => + { + b.Property("TenantId") + .HasColumnType("uuid"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("TenantId", "UserId"); + + b.HasIndex("UserId"); + + b.ToTable("TenantUsers", "public"); + }); + + modelBuilder.Entity("Fin.Domain.Users.Entities.User", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("BirthDate") + .HasColumnType("date"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("DisplayName") + .HasMaxLength(150) + .HasColumnType("character varying(150)"); + + b.Property("FirstName") + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.Property("Gender") + .HasColumnType("integer"); + + b.Property("ImagePublicUrl") + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("IsActivity") + .HasColumnType("boolean"); + + b.Property("IsAdmin") + .HasColumnType("boolean"); + + b.Property("LastName") + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.HasKey("Id"); + + b.ToTable("Users", "public"); + }); + + modelBuilder.Entity("Fin.Domain.Users.Entities.UserCredential", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("EncryptedEmail") + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("EncryptedPassword") + .HasMaxLength(300) + .HasColumnType("character varying(300)"); + + b.Property("FailLoginAttempts") + .HasColumnType("integer"); + + b.Property("GoogleId") + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("ResetToken") + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("EncryptedEmail") + .IsUnique(); + + b.HasIndex("GoogleId") + .IsUnique(); + + b.HasIndex("UserId") + .IsUnique(); + + b.ToTable("Credentials", "public"); + }); + + modelBuilder.Entity("Fin.Domain.Users.Entities.UserDeleteRequest", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Aborted") + .HasColumnType("boolean"); + + b.Property("AbortedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("DeleteEffectivatedAt") + .HasColumnType("date"); + + b.Property("DeleteRequestedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UpdatedBy") + .HasColumnType("uuid"); + + b.Property("UserAbortedId") + .HasColumnType("uuid"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("UserAbortedId"); + + b.HasIndex("UserId"); + + b.ToTable("UserDeleteRequests", "public"); + }); + + modelBuilder.Entity("Fin.Domain.Notifications.Entities.NotificationUserDelivery", b => + { + b.HasOne("Fin.Domain.Notifications.Entities.Notification", "Notification") + .WithMany("UserDeliveries") + .HasForeignKey("NotificationId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Fin.Domain.Users.Entities.User", "User") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Notification"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Fin.Domain.Notifications.Entities.UserNotificationSettings", b => + { + b.HasOne("Fin.Domain.Users.Entities.User", "User") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Fin.Domain.Notifications.Entities.UserRememberUseSetting", b => + { + b.HasOne("Fin.Domain.Users.Entities.User", "User") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Fin.Domain.Tenants.Entities.TenantUser", b => + { + b.HasOne("Fin.Domain.Tenants.Entities.Tenant", null) + .WithMany() + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Fin.Domain.Users.Entities.User", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Fin.Domain.Users.Entities.UserCredential", b => + { + b.HasOne("Fin.Domain.Users.Entities.User", "User") + .WithOne("Credential") + .HasForeignKey("Fin.Domain.Users.Entities.UserCredential", "UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Fin.Domain.Users.Entities.UserDeleteRequest", b => + { + b.HasOne("Fin.Domain.Users.Entities.User", "UserAborted") + .WithMany() + .HasForeignKey("UserAbortedId"); + + b.HasOne("Fin.Domain.Users.Entities.User", "User") + .WithMany("DeleteRequests") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + + b.Navigation("UserAborted"); + }); + + modelBuilder.Entity("Fin.Domain.Notifications.Entities.Notification", b => + { + b.Navigation("UserDeliveries"); + }); + + modelBuilder.Entity("Fin.Domain.Users.Entities.User", b => + { + b.Navigation("Credential"); + + b.Navigation("DeleteRequests"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Fin.Infrastructure/Migrations/20251001194905_AddFinancialInstitutions.cs b/Fin.Infrastructure/Migrations/20251001194905_AddFinancialInstitutions.cs new file mode 100644 index 0000000..d57b21c --- /dev/null +++ b/Fin.Infrastructure/Migrations/20251001194905_AddFinancialInstitutions.cs @@ -0,0 +1,71 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Fin.Infrastructure.Migrations +{ + /// + public partial class AddFinancialInstitutions : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "FinancialInstitution", + schema: "public", + columns: table => new + { + Id = table.Column(type: "uuid", nullable: false), + Name = table.Column(type: "character varying(200)", maxLength: 200, nullable: false), + Code = table.Column(type: "character varying(3)", maxLength: 3, nullable: false), + Type = table.Column(type: "text", nullable: false), + LogoUrl = table.Column(type: "character varying(500)", maxLength: 500, nullable: true), + Active = table.Column(type: "boolean", nullable: false, defaultValue: true), + CreatedBy = table.Column(type: "uuid", nullable: false), + UpdatedBy = table.Column(type: "uuid", nullable: false), + CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), + UpdatedAt = table.Column(type: "timestamp with time zone", nullable: false), + TenantId = table.Column(type: "uuid", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_FinancialInstitution", x => x.Id); + }); + + migrationBuilder.CreateIndex( + name: "IX_FinancialInstitution_Active", + schema: "public", + table: "FinancialInstitution", + column: "Active"); + + migrationBuilder.CreateIndex( + name: "IX_FinancialInstitution_Code_TenantId", + schema: "public", + table: "FinancialInstitution", + columns: new[] { "Code", "TenantId" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_FinancialInstitution_Name_TenantId", + schema: "public", + table: "FinancialInstitution", + columns: new[] { "Name", "TenantId" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_FinancialInstitution_Type", + schema: "public", + table: "FinancialInstitution", + column: "Type"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "FinancialInstitution", + schema: "public"); + } + } +} diff --git a/Fin.Infrastructure/Migrations/20251003025422_RenameLogoUrlToIcon.Designer.cs b/Fin.Infrastructure/Migrations/20251003025422_RenameLogoUrlToIcon.Designer.cs new file mode 100644 index 0000000..7fb6f28 --- /dev/null +++ b/Fin.Infrastructure/Migrations/20251003025422_RenameLogoUrlToIcon.Designer.cs @@ -0,0 +1,572 @@ +// +using System; +using Fin.Infrastructure.Database; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace Fin.Infrastructure.Migrations +{ + [DbContext(typeof(FinDbContext))] + [Migration("20251003025422_RenameLogoUrlToIcon")] + partial class RenameLogoUrlToIcon + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("public") + .HasAnnotation("ProductVersion", "9.0.9") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("Fin.Domain.FinancialInstitutions.Entities.FinancialInstitution", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Active") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(true); + + b.Property("Code") + .IsRequired() + .HasMaxLength(3) + .HasColumnType("character varying(3)"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("Icon") + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("TenantId") + .HasColumnType("uuid"); + + b.Property("Type") + .IsRequired() + .HasColumnType("text"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UpdatedBy") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("Active"); + + b.HasIndex("Type"); + + b.HasIndex("Code", "TenantId") + .IsUnique(); + + b.HasIndex("Name", "TenantId") + .IsUnique(); + + b.ToTable("FinancialInstitution", "public"); + }); + + modelBuilder.Entity("Fin.Domain.Menus.Entities.Menu", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Color") + .HasMaxLength(20) + .HasColumnType("character varying(20)"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("FrontRoute") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.Property("Icon") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("character varying(20)"); + + b.Property("KeyWords") + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.Property("OnlyForAdmin") + .HasColumnType("boolean"); + + b.Property("Position") + .HasColumnType("integer"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UpdatedBy") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.ToTable("Menus", "public"); + }); + + modelBuilder.Entity("Fin.Domain.Notifications.Entities.Notification", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Continuous") + .HasColumnType("boolean"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("HtmlBody") + .HasColumnType("text"); + + b.Property("Link") + .HasColumnType("text"); + + b.Property("NormalizedTextBody") + .HasColumnType("text"); + + b.Property("NormalizedTitle") + .HasColumnType("text"); + + b.Property("Severity") + .HasColumnType("integer"); + + b.Property("StartToDelivery") + .HasColumnType("timestamp with time zone"); + + b.Property("StopToDelivery") + .HasColumnType("timestamp with time zone"); + + b.Property("TextBody") + .HasColumnType("text"); + + b.Property("Title") + .HasMaxLength(250) + .HasColumnType("character varying(250)"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UpdatedBy") + .HasColumnType("uuid"); + + b.Property("Ways") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.ToTable("Notifications", "public"); + }); + + modelBuilder.Entity("Fin.Domain.Notifications.Entities.NotificationUserDelivery", b => + { + b.Property("NotificationId") + .HasColumnType("uuid"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.Property("BackgroundJobId") + .HasMaxLength(20) + .HasColumnType("character varying(20)"); + + b.Property("Delivery") + .HasColumnType("boolean"); + + b.Property("Visualized") + .HasColumnType("boolean"); + + b.HasKey("NotificationId", "UserId"); + + b.HasIndex("UserId"); + + b.ToTable("NotificationUserDeliveries", "public"); + }); + + modelBuilder.Entity("Fin.Domain.Notifications.Entities.UserNotificationSettings", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("AllowedWays") + .HasColumnType("text"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("Enabled") + .HasColumnType("boolean"); + + b.Property("FirebaseTokens") + .HasColumnType("text"); + + b.Property("TenantId") + .HasColumnType("uuid"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UpdatedBy") + .HasColumnType("uuid"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("UserNotificationSettings", "public"); + }); + + modelBuilder.Entity("Fin.Domain.Notifications.Entities.UserRememberUseSetting", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("NotifyOn") + .HasColumnType("interval"); + + b.Property("TenantId") + .HasColumnType("uuid"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UpdatedBy") + .HasColumnType("uuid"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.Property("Ways") + .HasColumnType("text"); + + b.Property("WeekDays") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("UserRememberUseSettings", "public"); + }); + + modelBuilder.Entity("Fin.Domain.Tenants.Entities.Tenant", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Locale") + .HasMaxLength(30) + .HasColumnType("character varying(30)"); + + b.Property("Timezone") + .HasMaxLength(30) + .HasColumnType("character varying(30)"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.HasKey("Id"); + + b.ToTable("Tenants", "public"); + }); + + modelBuilder.Entity("Fin.Domain.Tenants.Entities.TenantUser", b => + { + b.Property("TenantId") + .HasColumnType("uuid"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("TenantId", "UserId"); + + b.HasIndex("UserId"); + + b.ToTable("TenantUsers", "public"); + }); + + modelBuilder.Entity("Fin.Domain.Users.Entities.User", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("BirthDate") + .HasColumnType("date"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("DisplayName") + .HasMaxLength(150) + .HasColumnType("character varying(150)"); + + b.Property("FirstName") + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.Property("Gender") + .HasColumnType("integer"); + + b.Property("ImagePublicUrl") + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("IsActivity") + .HasColumnType("boolean"); + + b.Property("IsAdmin") + .HasColumnType("boolean"); + + b.Property("LastName") + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.HasKey("Id"); + + b.ToTable("Users", "public"); + }); + + modelBuilder.Entity("Fin.Domain.Users.Entities.UserCredential", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("EncryptedEmail") + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("EncryptedPassword") + .HasMaxLength(300) + .HasColumnType("character varying(300)"); + + b.Property("FailLoginAttempts") + .HasColumnType("integer"); + + b.Property("GoogleId") + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("ResetToken") + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("EncryptedEmail") + .IsUnique(); + + b.HasIndex("GoogleId") + .IsUnique(); + + b.HasIndex("UserId") + .IsUnique(); + + b.ToTable("Credentials", "public"); + }); + + modelBuilder.Entity("Fin.Domain.Users.Entities.UserDeleteRequest", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Aborted") + .HasColumnType("boolean"); + + b.Property("AbortedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("DeleteEffectivatedAt") + .HasColumnType("date"); + + b.Property("DeleteRequestedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UpdatedBy") + .HasColumnType("uuid"); + + b.Property("UserAbortedId") + .HasColumnType("uuid"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("UserAbortedId"); + + b.HasIndex("UserId"); + + b.ToTable("UserDeleteRequests", "public"); + }); + + modelBuilder.Entity("Fin.Domain.Notifications.Entities.NotificationUserDelivery", b => + { + b.HasOne("Fin.Domain.Notifications.Entities.Notification", "Notification") + .WithMany("UserDeliveries") + .HasForeignKey("NotificationId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Fin.Domain.Users.Entities.User", "User") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Notification"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Fin.Domain.Notifications.Entities.UserNotificationSettings", b => + { + b.HasOne("Fin.Domain.Users.Entities.User", "User") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Fin.Domain.Notifications.Entities.UserRememberUseSetting", b => + { + b.HasOne("Fin.Domain.Users.Entities.User", "User") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Fin.Domain.Tenants.Entities.TenantUser", b => + { + b.HasOne("Fin.Domain.Tenants.Entities.Tenant", null) + .WithMany() + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Fin.Domain.Users.Entities.User", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Fin.Domain.Users.Entities.UserCredential", b => + { + b.HasOne("Fin.Domain.Users.Entities.User", "User") + .WithOne("Credential") + .HasForeignKey("Fin.Domain.Users.Entities.UserCredential", "UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Fin.Domain.Users.Entities.UserDeleteRequest", b => + { + b.HasOne("Fin.Domain.Users.Entities.User", "UserAborted") + .WithMany() + .HasForeignKey("UserAbortedId"); + + b.HasOne("Fin.Domain.Users.Entities.User", "User") + .WithMany("DeleteRequests") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + + b.Navigation("UserAborted"); + }); + + modelBuilder.Entity("Fin.Domain.Notifications.Entities.Notification", b => + { + b.Navigation("UserDeliveries"); + }); + + modelBuilder.Entity("Fin.Domain.Users.Entities.User", b => + { + b.Navigation("Credential"); + + b.Navigation("DeleteRequests"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Fin.Infrastructure/Migrations/20251003025422_RenameLogoUrlToIcon.cs b/Fin.Infrastructure/Migrations/20251003025422_RenameLogoUrlToIcon.cs new file mode 100644 index 0000000..b74335b --- /dev/null +++ b/Fin.Infrastructure/Migrations/20251003025422_RenameLogoUrlToIcon.cs @@ -0,0 +1,60 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Fin.Infrastructure.Migrations +{ + /// + public partial class RenameLogoUrlToIcon : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.RenameColumn( + name: "LogoUrl", + schema: "public", + table: "FinancialInstitution", + newName: "Icon"); + + // Change the max length from 500 to 50 + migrationBuilder.AlterColumn( + name: "Icon", + schema: "public", + table: "FinancialInstitution", + type: "character varying(50)", + maxLength: 50, + nullable: true, + oldClrType: typeof(string), + oldType: "character varying(500)", + oldMaxLength: 500, + oldNullable: true); + + // Clear existing data since we're changing from URLs to icon names + migrationBuilder.Sql("DELETE FROM \"public\".\"FinancialInstitution\";"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + // Change back to max length 500 + migrationBuilder.AlterColumn( + name: "Icon", + schema: "public", + table: "FinancialInstitution", + type: "character varying(500)", + maxLength: 500, + nullable: true, + oldClrType: typeof(string), + oldType: "character varying(50)", + oldMaxLength: 50, + oldNullable: true); + + // Rename the column Icon back to LogoUrl + migrationBuilder.RenameColumn( + name: "Icon", + schema: "public", + table: "FinancialInstitution", + newName: "LogoUrl"); + } + } +} diff --git a/Fin.Infrastructure/Migrations/FinDbContextModelSnapshot.cs b/Fin.Infrastructure/Migrations/FinDbContextModelSnapshot.cs index 1e384e8..7186151 100644 --- a/Fin.Infrastructure/Migrations/FinDbContextModelSnapshot.cs +++ b/Fin.Infrastructure/Migrations/FinDbContextModelSnapshot.cs @@ -18,11 +18,70 @@ protected override void BuildModel(ModelBuilder modelBuilder) #pragma warning disable 612, 618 modelBuilder .HasDefaultSchema("public") - .HasAnnotation("ProductVersion", "9.0.4") + .HasAnnotation("ProductVersion", "9.0.9") .HasAnnotation("Relational:MaxIdentifierLength", 63); NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + modelBuilder.Entity("Fin.Domain.FinancialInstitutions.Entities.FinancialInstitution", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Active") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(true); + + b.Property("Code") + .IsRequired() + .HasMaxLength(3) + .HasColumnType("character varying(3)"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("Icon") + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("TenantId") + .HasColumnType("uuid"); + + b.Property("Type") + .IsRequired() + .HasColumnType("text"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UpdatedBy") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("Active"); + + b.HasIndex("Type"); + + b.HasIndex("Code", "TenantId") + .IsUnique(); + + b.HasIndex("Name", "TenantId") + .IsUnique(); + + b.ToTable("FinancialInstitution", "public"); + }); + modelBuilder.Entity("Fin.Domain.Menus.Entities.Menu", b => { b.Property("Id") diff --git a/Fin.Infrastructure/Seeders/Seeders/DefaultMenusSeeder.cs b/Fin.Infrastructure/Seeders/Seeders/DefaultMenusSeeder.cs index ed7bf31..ba683d5 100644 --- a/Fin.Infrastructure/Seeders/Seeders/DefaultMenusSeeder.cs +++ b/Fin.Infrastructure/Seeders/Seeders/DefaultMenusSeeder.cs @@ -28,6 +28,17 @@ public async Task SeedAsync() OnlyForAdmin = true, Position = MenuPosition.LeftTop, KeyWords = "Menu" + }, + new() + { + Id = Guid.Parse("01994133-6669-7fcd-b6db-19a9b0c06f21"), + FrontRoute = "/admin/financial-institutions", + Name = "finCore.features.financialInstitutions.title", + Color = "#4CAF50", + Icon = "building-columns", + OnlyForAdmin = true, + Position = MenuPosition.LeftTop, + KeyWords = "Financial Institution" } }; var defaultMenusIds = defaultMenus.Select(x => x.Id).ToList(); From d9dc08acf28378d5bfb6bca9d21c0e24f5438868 Mon Sep 17 00:00:00 2001 From: Gustavo Passos Date: Mon, 6 Oct 2025 16:50:34 -0300 Subject: [PATCH 2/7] add crud financial-insts and validate --- Fin.Api/Fin.Api.csproj | 4 ---- .../FinancialInstitutionController.cs | 22 ++++--------------- 2 files changed, 4 insertions(+), 22 deletions(-) diff --git a/Fin.Api/Fin.Api.csproj b/Fin.Api/Fin.Api.csproj index 6e3d128..4f9c60c 100644 --- a/Fin.Api/Fin.Api.csproj +++ b/Fin.Api/Fin.Api.csproj @@ -8,10 +8,6 @@ - - all - build; native; contentfiles; analyzers; buildtransitive - diff --git a/Fin.Api/FinancialInstitutions/FinancialInstitutionController.cs b/Fin.Api/FinancialInstitutions/FinancialInstitutionController.cs index aabd14d..18ac76f 100644 --- a/Fin.Api/FinancialInstitutions/FinancialInstitutionController.cs +++ b/Fin.Api/FinancialInstitutions/FinancialInstitutionController.cs @@ -28,30 +28,16 @@ public async Task> Get([FromRoute] Guid [Authorize(Roles = "Admin")] public async Task> Create([FromBody] FinancialInstitutionInput input) { - try - { - var institution = await service.Create(input, autoSave: true); - return institution != null ? Created($"financial-institutions/{institution.Id}", institution) : UnprocessableEntity(); - } - catch (InvalidOperationException ex) - { - return BadRequest(new { message = ex.Message }); - } + var institution = await service.Create(input, autoSave: true); + return institution != null ? Created($"financial-institutions/{institution.Id}", institution) : UnprocessableEntity(); } [HttpPut("{id:guid}")] [Authorize(Roles = "Admin")] public async Task Update([FromRoute] Guid id, [FromBody] FinancialInstitutionInput input) { - try - { - var updated = await service.Update(id, input, autoSave: true); - return updated ? Ok() : NotFound(); - } - catch (InvalidOperationException ex) - { - return BadRequest(new { message = ex.Message }); - } + var updated = await service.Update(id, input, autoSave: true); + return updated ? Ok() : NotFound(); } [HttpDelete("{id:guid}")] From b4321a126e51da05ea36cbdb4adcd2cd11b08b34 Mon Sep 17 00:00:00 2001 From: Gustavo Passos Date: Mon, 6 Oct 2025 20:58:11 -0300 Subject: [PATCH 3/7] addCodeReview --- .gitignore | 3 +- ...8884dc04-abac-4f07-ab68-47f7a4d0cec5.vsidx | Bin 387043 -> 0 bytes Fin.Api/Fin.Api.csproj | 3 + .../FinancialInstitutionController.cs | 25 +- Fin.Api/appsettings.json | 43 ++ .../Dtos/FinancialInstitutionGetListInput.cs | 6 + .../FinancialInstitutionService.cs | 109 ++-- .../Dtos/FinancialInstitutionInput.cs | 16 +- .../Dtos/FinancialInstitutionOutput.cs | 10 +- .../Entities/FinancialInstitution.cs | 15 +- .../Enums/FinancialInstitutionType.cs | 14 +- .../FinancialInstitutionConfiguration.cs | 30 +- ...AddColorToFinancialInstitution.Designer.cs | 578 ++++++++++++++++++ ...06191258_AddColorToFinancialInstitution.cs | 56 ++ .../20251006223531_testAjust.Designer.cs | 573 +++++++++++++++++ .../Migrations/20251006223531_testAjust.cs | 122 ++++ .../Migrations/FinDbContextModelSnapshot.cs | 29 +- 17 files changed, 1487 insertions(+), 145 deletions(-) delete mode 100644 .vs/Fin-Backend/FileContentIndex/8884dc04-abac-4f07-ab68-47f7a4d0cec5.vsidx create mode 100644 Fin.Api/appsettings.json create mode 100644 Fin.Application/FinancialInstitutions/Dtos/FinancialInstitutionGetListInput.cs create mode 100644 Fin.Infrastructure/Migrations/20251006191258_AddColorToFinancialInstitution.Designer.cs create mode 100644 Fin.Infrastructure/Migrations/20251006191258_AddColorToFinancialInstitution.cs create mode 100644 Fin.Infrastructure/Migrations/20251006223531_testAjust.Designer.cs create mode 100644 Fin.Infrastructure/Migrations/20251006223531_testAjust.cs diff --git a/.gitignore b/.gitignore index e10897e..1c378cd 100644 --- a/.gitignore +++ b/.gitignore @@ -52,6 +52,7 @@ CodeCoverage/ *.VisualState.xml TestResult.xml nunit-*.xml +notifications.md - +.vs appsettings.Development.json \ No newline at end of file diff --git a/.vs/Fin-Backend/FileContentIndex/8884dc04-abac-4f07-ab68-47f7a4d0cec5.vsidx b/.vs/Fin-Backend/FileContentIndex/8884dc04-abac-4f07-ab68-47f7a4d0cec5.vsidx deleted file mode 100644 index 9749bb57152a05eca6626b5b2ff777a941eb991f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 387043 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

v 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

(t}d=1KCM27Uw zn}?$Qjr4E>|L%9V;(C4Bi#3>gBbeXRQ#bEmrhMaZ`L)=}31LE{ncEx~=!(beD!@OHBp+l zFZwDJlB(A%iR|B2ePV6c^+?pdT`%pWN;|Gp-;h|XcvI9<@ZZhCeQ{a$nK{NM;c2)IwT)(u@gnrZca_Jh zP?}nsU8O5Wvn{)lj11;McBTFH6RI&xlbc!>OXo8x_v + + all + diff --git a/Fin.Api/FinancialInstitutions/FinancialInstitutionController.cs b/Fin.Api/FinancialInstitutions/FinancialInstitutionController.cs index 18ac76f..1b4c205 100644 --- a/Fin.Api/FinancialInstitutions/FinancialInstitutionController.cs +++ b/Fin.Api/FinancialInstitutions/FinancialInstitutionController.cs @@ -11,13 +11,12 @@ namespace Fin.Api.FinancialInstitutions; public class FinancialInstitutionController(IFinancialInstitutionService service): ControllerBase { [HttpGet] - public async Task> GetList([FromQuery] PagedFilteredAndSortedInput input) + public async Task> GetList([FromQuery] FinancialInstitutionGetListInput input) { return await service.GetList(input); } - + [HttpGet("{id:guid}")] - [Authorize(Roles = "Admin")] public async Task> Get([FromRoute] Guid id) { var institution = await service.Get(id); @@ -25,7 +24,6 @@ public async Task> Get([FromRoute] Guid } [HttpPost] - [Authorize(Roles = "Admin")] public async Task> Create([FromBody] FinancialInstitutionInput input) { var institution = await service.Create(input, autoSave: true); @@ -33,7 +31,6 @@ public async Task> Create([FromBody] Fi } [HttpPut("{id:guid}")] - [Authorize(Roles = "Admin")] public async Task Update([FromRoute] Guid id, [FromBody] FinancialInstitutionInput input) { var updated = await service.Update(id, input, autoSave: true); @@ -41,26 +38,16 @@ public async Task Update([FromRoute] Guid id, [FromBody] Financial } [HttpDelete("{id:guid}")] - [Authorize(Roles = "Admin")] public async Task Delete([FromRoute] Guid id) { var deleted = await service.Delete(id, autoSave: true); return deleted ? Ok() : NotFound(); } - [HttpPost("{id:guid}/activate")] - [Authorize(Roles = "Admin")] - public async Task Activate([FromRoute] Guid id) - { - var activated = await service.Activate(id, autoSave: true); - return activated ? Ok() : NotFound(); - } - - [HttpPost("{id:guid}/deactivate")] - [Authorize(Roles = "Admin")] - public async Task Deactivate([FromRoute] Guid id) + [HttpPatch("{id:guid}/toggle-inactive")] + public async Task ToggleInactive([FromRoute] Guid id) { - var deactivated = await service.Deactivate(id, autoSave: true); - return deactivated ? Ok() : NotFound(); + var toggled = await service.ToggleInactive(id, autoSave: true); + return toggled ? Ok() : NotFound(); } } diff --git a/Fin.Api/appsettings.json b/Fin.Api/appsettings.json new file mode 100644 index 0000000..10a640f --- /dev/null +++ b/Fin.Api/appsettings.json @@ -0,0 +1,43 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "ConnectionStrings": { + "DefaultConnection": "Host=localhost;Port=5432;Database=fin_app;Username=fin_app;Password=fin_app" + }, + "AllowedHosts": "*", + "ApiSettings": { + "Redis": "localhost:6379", + "Version": "EXEMPLE", + "EmailSender": { + "EmailAddress": "EXEMPLE", + "Password": "EXEMPLE" + }, + "Firebase": { + "SenderId": "EXEMPLE", + "ServerKey": "// Here you mus put your server key json as string..." + }, + "Authentication": { + "Encrypt": { + "Key": "EXEMPLE", + "Iv": "EXEMPLE" + }, + "Jwt": { + "Key": "EXEMPLE", + "Issuer": "EXEMPLE", + "Audience": "EXEMPLE", + "ExpireMinutes": 120 + }, + "Google": { + "ClientId": "EXEMPLE", + "ClientSecret": "EXEMPLE" + } + }, + "FrontendConfigs": { + "Url": "http://localhost:4200" + } + } +} \ No newline at end of file diff --git a/Fin.Application/FinancialInstitutions/Dtos/FinancialInstitutionGetListInput.cs b/Fin.Application/FinancialInstitutions/Dtos/FinancialInstitutionGetListInput.cs new file mode 100644 index 0000000..9d761ba --- /dev/null +++ b/Fin.Application/FinancialInstitutions/Dtos/FinancialInstitutionGetListInput.cs @@ -0,0 +1,6 @@ +using Fin.Domain.Global.Classes; + +public class FinancialInstitutionGetListInput : PagedFilteredAndSortedInput +{ + public bool? Inactive { get; set; } +} \ No newline at end of file diff --git a/Fin.Application/FinancialInstitutions/FinancialInstitutionService.cs b/Fin.Application/FinancialInstitutions/FinancialInstitutionService.cs index f86b3c9..5d416e2 100644 --- a/Fin.Application/FinancialInstitutions/FinancialInstitutionService.cs +++ b/Fin.Application/FinancialInstitutions/FinancialInstitutionService.cs @@ -1,22 +1,23 @@ using Fin.Domain.FinancialInstitutions.Dtos; using Fin.Domain.FinancialInstitutions.Entities; using Fin.Domain.Global.Classes; +using Fin.Infrastructure.AmbientDatas; using Fin.Infrastructure.AutoServices.Interfaces; using Fin.Infrastructure.Database.Extensions; using Fin.Infrastructure.Database.Repositories; +using Microsoft.AspNetCore.Http; using Microsoft.EntityFrameworkCore; namespace Fin.Application.FinancialInstitutions; public interface IFinancialInstitutionService { - public Task Get(Guid id); - public Task> GetList(PagedFilteredAndSortedInput input); - public Task Create(FinancialInstitutionInput input, bool autoSave = false); - public Task Update(Guid id, FinancialInstitutionInput input, bool autoSave = false); - public Task Delete(Guid id, bool autoSave = false); - public Task Activate(Guid id, bool autoSave = false); - public Task Deactivate(Guid id, bool autoSave = false); + Task Get(Guid id); + Task> GetList(FinancialInstitutionGetListInput input); + Task Create(FinancialInstitutionInput input, bool autoSave = false); + Task Update(Guid id, FinancialInstitutionInput input, bool autoSave = false); + Task Delete(Guid id, bool autoSave = false); + Task ToggleInactive(Guid id, bool autoSave = false); } public class FinancialInstitutionService( @@ -25,33 +26,25 @@ IRepository repository { public async Task Get(Guid id) { - var entity = await repository.Query() - .FirstOrDefaultAsync(n => n.Id == id); + var entity = await repository.Query(false) + .FirstOrDefaultAsync(f => f.Id == id); return entity != null ? new FinancialInstitutionOutput(entity) : null; } - public async Task> GetList(PagedFilteredAndSortedInput input) + public async Task> GetList(FinancialInstitutionGetListInput input) { return await repository.Query(false) - .OrderBy(f => f.Name) + .WhereIf(input.Inactive.HasValue, f => f.Inactive == input.Inactive.Value) + .OrderBy(f => f.Inactive) + .ThenBy(f => f.Name) .ApplyFilterAndSorter(input) - .Select(n => new FinancialInstitutionOutput(n)) + .Select(f => new FinancialInstitutionOutput(f)) .ToPagedResult(input); } public async Task Create(FinancialInstitutionInput input, bool autoSave = false) { - ValidateInput(input); - - var existingName = await repository.Query() - .AnyAsync(f => f.Name == input.Name); - if (existingName) - throw new InvalidOperationException("A financial institution with this name already exists."); - - var existingCode = await repository.Query() - .AnyAsync(f => f.Code == input.Code); - if (existingCode) - throw new InvalidOperationException("A financial institution with this code already exists."); + await ValidateInput(input); var institution = new FinancialInstitution(input); await repository.AddAsync(institution, autoSave); @@ -60,75 +53,67 @@ public async Task Create(FinancialInstitutionInput i public async Task Update(Guid id, FinancialInstitutionInput input, bool autoSave = false) { - ValidateInput(input); - + await ValidateInput(input, id); var institution = await repository.Query() - .FirstOrDefaultAsync(u => u.Id == id); + .FirstOrDefaultAsync(f => f.Id == id); if (institution == null) return false; - var existingName = await repository.Query() - .AnyAsync(f => f.Name == input.Name && f.Id != id); - if (existingName) - throw new InvalidOperationException("A financial institution with this name already exists."); - - var existingCode = await repository.Query() - .AnyAsync(f => f.Code == input.Code && f.Id != id); - if (existingCode) - throw new InvalidOperationException("A financial institution with this code already exists."); + institution.Update(input); await repository.UpdateAsync(institution, autoSave); - - return true; + + return true; } public async Task Delete(Guid id, bool autoSave = false) { var institution = await repository.Query() - .FirstOrDefaultAsync(u => u.Id == id); + .FirstOrDefaultAsync(f => f.Id == id); if (institution == null) return false; await repository.DeleteAsync(institution, autoSave); return true; } - public async Task Activate(Guid id, bool autoSave = false) + public async Task ToggleInactive(Guid id, bool autoSave = false) { var institution = await repository.Query() - .FirstOrDefaultAsync(u => u.Id == id); + .FirstOrDefaultAsync(f => f.Id == id); if (institution == null) return false; - institution.Activate(); - await repository.UpdateAsync(institution, autoSave); - return true; - } - - public async Task Deactivate(Guid id, bool autoSave = false) - { - var institution = await repository.Query() - .FirstOrDefaultAsync(u => u.Id == id); - if (institution == null) return false; + institution.ToggleInactive(); - institution.Deactivate(); await repository.UpdateAsync(institution, autoSave); return true; } - private void ValidateInput(FinancialInstitutionInput input) + private async Task ValidateInput(FinancialInstitutionInput input, Guid? editingId = null) { - if (input == null) - throw new ArgumentNullException(nameof(input)); if (string.IsNullOrWhiteSpace(input.Name)) - throw new ArgumentException("Name is required."); - - if (input.Name?.Length > 200) - throw new ArgumentException("Name must not exceed 200 characters."); + throw new BadHttpRequestException("Name is required"); + if (input.Name.Count() > 100) + throw new BadHttpRequestException("Name must be at most 100 characters long"); + if (string.IsNullOrWhiteSpace(input.Icon)) + throw new BadHttpRequestException("Icon is required"); + if (input.Icon.Count() > 20) + throw new BadHttpRequestException("Icon must be at most 20 characters long"); + + if (string.IsNullOrWhiteSpace(input.Color)) + throw new BadHttpRequestException("Color is required"); + if (input.Color.Count() > 20) + throw new BadHttpRequestException("Color must be at most 20 characters long"); + + if(!string.IsNullOrWhiteSpace(input.Code) && input.Code.Count() > 15) + throw new BadHttpRequestException("Code must be at most 15 characters long"); - if (string.IsNullOrWhiteSpace(input.Code)) - throw new ArgumentException("Code is required."); + var existingName = await repository.Query() + .Where(f => f.Name == input.Name) + .WhereIf(editingId.HasValue, f => f.Id != editingId.Value) + .AnyAsync(); - if (!System.Text.RegularExpressions.Regex.IsMatch(input.Code ?? "", @"^\d{3}$")) - throw new ArgumentException("Code must be exactly 3 digits."); + if (existingName) + throw new BadHttpRequestException("A financial institution with this name already exists"); } } diff --git a/Fin.Domain/FinancialInstitutions/Dtos/FinancialInstitutionInput.cs b/Fin.Domain/FinancialInstitutions/Dtos/FinancialInstitutionInput.cs index 95dfe40..896b028 100644 --- a/Fin.Domain/FinancialInstitutions/Dtos/FinancialInstitutionInput.cs +++ b/Fin.Domain/FinancialInstitutions/Dtos/FinancialInstitutionInput.cs @@ -6,18 +6,20 @@ namespace Fin.Domain.FinancialInstitutions.Dtos; public class FinancialInstitutionInput { [Required] - [MaxLength(200)] + [MaxLength(100)] public string Name { get; set; } - [Required] - [RegularExpression(@"^\d{3}$", ErrorMessage = "Code must be exactly 3 digits")] + [MaxLength(15)] public string Code { get; set; } [Required] public FinancialInstitutionType Type { get; set; } - - [MaxLength(50)] + + [MaxLength(20)] + [Required] public string Icon { get; set; } - public bool Active { get; set; } = true; -} + [MaxLength(20)] + [Required] + public string Color { get; set; } + } diff --git a/Fin.Domain/FinancialInstitutions/Dtos/FinancialInstitutionOutput.cs b/Fin.Domain/FinancialInstitutions/Dtos/FinancialInstitutionOutput.cs index d60e683..dc38915 100644 --- a/Fin.Domain/FinancialInstitutions/Dtos/FinancialInstitutionOutput.cs +++ b/Fin.Domain/FinancialInstitutions/Dtos/FinancialInstitutionOutput.cs @@ -10,9 +10,8 @@ public class FinancialInstitutionOutput public string Code { get; set; } public FinancialInstitutionType Type { get; set; } public string Icon { get; set; } - public bool Active { get; set; } - public DateTime CreatedAt { get; set; } - public DateTime UpdatedAt { get; set; } + public string Color { get; set; } + public bool Inactive { get; set; } public FinancialInstitutionOutput() { @@ -25,8 +24,7 @@ public FinancialInstitutionOutput(FinancialInstitution input) Code = input.Code; Type = input.Type; Icon = input.Icon; - Active = input.Active; - CreatedAt = input.CreatedAt; - UpdatedAt = input.UpdatedAt; + Color = input.Color; + Inactive = input.Inactive; } } diff --git a/Fin.Domain/FinancialInstitutions/Entities/FinancialInstitution.cs b/Fin.Domain/FinancialInstitutions/Entities/FinancialInstitution.cs index 525ac84..aca544f 100644 --- a/Fin.Domain/FinancialInstitutions/Entities/FinancialInstitution.cs +++ b/Fin.Domain/FinancialInstitutions/Entities/FinancialInstitution.cs @@ -4,21 +4,20 @@ namespace Fin.Domain.FinancialInstitutions.Entities; -public class FinancialInstitution : IAuditedEntity, ITenantEntity +public class FinancialInstitution : IAuditedEntity { public string Name { get; set; } public string Code { get; set; } public FinancialInstitutionType Type { get; set; } public string Icon { get; set; } - public bool Active { get; set; } + public string Color { get; set; } + public bool Inactive { get; set; } public Guid Id { get; set; } public Guid CreatedBy { get; set; } public Guid UpdatedBy { get; set; } public DateTime CreatedAt { get; set; } public DateTime UpdatedAt { get; set; } - public Guid TenantId { get; set; } - public FinancialInstitution() { } @@ -29,7 +28,7 @@ public FinancialInstitution(FinancialInstitutionInput input) Code = input.Code; Type = input.Type; Icon = input.Icon; - Active = input.Active; + Color = input.Color; } public void Update(FinancialInstitutionInput input) @@ -38,10 +37,8 @@ public void Update(FinancialInstitutionInput input) Code = input.Code; Type = input.Type; Icon = input.Icon; - Active = input.Active; + Color = input.Color; } - public void Activate() => Active = true; - - public void Deactivate() => Active = false; + public void ToggleInactive() => Inactive = !Inactive; } diff --git a/Fin.Domain/FinancialInstitutions/Enums/FinancialInstitutionType.cs b/Fin.Domain/FinancialInstitutions/Enums/FinancialInstitutionType.cs index 6f1bd27..a45eb91 100644 --- a/Fin.Domain/FinancialInstitutions/Enums/FinancialInstitutionType.cs +++ b/Fin.Domain/FinancialInstitutions/Enums/FinancialInstitutionType.cs @@ -1,9 +1,9 @@ -namespace Fin.Domain.FinancialInstitutions.Enums; - -public enum FinancialInstitutionType +namespace Fin.Domain.FinancialInstitutions.Enums { - Bank = 1, - BusinessAccount = 2, - DigitalBank = 3, - Other = 99 + public enum FinancialInstitutionType + { + Bank = 0, + DigitalBank = 1, + FoodCard = 2, + } } diff --git a/Fin.Infrastructure/Database/Configurations/FinancialInstitutions/FinancialInstitutionConfiguration.cs b/Fin.Infrastructure/Database/Configurations/FinancialInstitutions/FinancialInstitutionConfiguration.cs index dc3ff2d..454e112 100644 --- a/Fin.Infrastructure/Database/Configurations/FinancialInstitutions/FinancialInstitutionConfiguration.cs +++ b/Fin.Infrastructure/Database/Configurations/FinancialInstitutions/FinancialInstitutionConfiguration.cs @@ -11,32 +11,22 @@ public void Configure(EntityTypeBuilder builder) builder.HasKey(x => x.Id); builder.Property(x => x.Name) - .HasMaxLength(200) - .IsRequired(); + .HasMaxLength(100) + .IsRequired() + .IsUnicode(); builder.Property(x => x.Code) - .HasMaxLength(3) - .IsRequired(); + .HasMaxLength(15); builder.Property(x => x.Icon) - .HasMaxLength(50); + .HasMaxLength(20) + .IsRequired(); - builder.Property(x => x.Active) - .IsRequired() - .HasDefaultValue(true); + builder.Property(x => x.Color) + .HasMaxLength(20) + .IsRequired(); builder.Property(x => x.Type) - .IsRequired() - .HasConversion(); - - builder.HasIndex(x => new { x.Name, x.TenantId }) - .IsUnique(); - - builder.HasIndex(x => new { x.Code, x.TenantId }) - .IsUnique(); - - builder.HasIndex(x => x.Active); - - builder.HasIndex(x => x.Type); + .IsRequired(); } } diff --git a/Fin.Infrastructure/Migrations/20251006191258_AddColorToFinancialInstitution.Designer.cs b/Fin.Infrastructure/Migrations/20251006191258_AddColorToFinancialInstitution.Designer.cs new file mode 100644 index 0000000..9e8184f --- /dev/null +++ b/Fin.Infrastructure/Migrations/20251006191258_AddColorToFinancialInstitution.Designer.cs @@ -0,0 +1,578 @@ +// +using System; +using Fin.Infrastructure.Database; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace Fin.Infrastructure.Migrations +{ + [DbContext(typeof(FinDbContext))] + [Migration("20251006191258_AddColorToFinancialInstitution")] + partial class AddColorToFinancialInstitution + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("public") + .HasAnnotation("ProductVersion", "9.0.9") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("Fin.Domain.FinancialInstitutions.Entities.FinancialInstitution", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Active") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(true); + + b.Property("Code") + .IsRequired() + .HasMaxLength(3) + .HasColumnType("character varying(3)"); + + b.Property("Color") + .IsRequired() + .HasMaxLength(7) + .HasColumnType("character varying(7)"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("Icon") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("TenantId") + .HasColumnType("uuid"); + + b.Property("Type") + .IsRequired() + .HasColumnType("text"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UpdatedBy") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("Active"); + + b.HasIndex("Type"); + + b.HasIndex("Code", "TenantId") + .IsUnique(); + + b.HasIndex("Name", "TenantId") + .IsUnique(); + + b.ToTable("FinancialInstitution", "public"); + }); + + modelBuilder.Entity("Fin.Domain.Menus.Entities.Menu", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Color") + .HasMaxLength(20) + .HasColumnType("character varying(20)"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("FrontRoute") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.Property("Icon") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("character varying(20)"); + + b.Property("KeyWords") + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.Property("OnlyForAdmin") + .HasColumnType("boolean"); + + b.Property("Position") + .HasColumnType("integer"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UpdatedBy") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.ToTable("Menus", "public"); + }); + + modelBuilder.Entity("Fin.Domain.Notifications.Entities.Notification", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Continuous") + .HasColumnType("boolean"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("HtmlBody") + .HasColumnType("text"); + + b.Property("Link") + .HasColumnType("text"); + + b.Property("NormalizedTextBody") + .HasColumnType("text"); + + b.Property("NormalizedTitle") + .HasColumnType("text"); + + b.Property("Severity") + .HasColumnType("integer"); + + b.Property("StartToDelivery") + .HasColumnType("timestamp with time zone"); + + b.Property("StopToDelivery") + .HasColumnType("timestamp with time zone"); + + b.Property("TextBody") + .HasColumnType("text"); + + b.Property("Title") + .HasMaxLength(250) + .HasColumnType("character varying(250)"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UpdatedBy") + .HasColumnType("uuid"); + + b.Property("Ways") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.ToTable("Notifications", "public"); + }); + + modelBuilder.Entity("Fin.Domain.Notifications.Entities.NotificationUserDelivery", b => + { + b.Property("NotificationId") + .HasColumnType("uuid"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.Property("BackgroundJobId") + .HasMaxLength(20) + .HasColumnType("character varying(20)"); + + b.Property("Delivery") + .HasColumnType("boolean"); + + b.Property("Visualized") + .HasColumnType("boolean"); + + b.HasKey("NotificationId", "UserId"); + + b.HasIndex("UserId"); + + b.ToTable("NotificationUserDeliveries", "public"); + }); + + modelBuilder.Entity("Fin.Domain.Notifications.Entities.UserNotificationSettings", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("AllowedWays") + .HasColumnType("text"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("Enabled") + .HasColumnType("boolean"); + + b.Property("FirebaseTokens") + .HasColumnType("text"); + + b.Property("TenantId") + .HasColumnType("uuid"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UpdatedBy") + .HasColumnType("uuid"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("UserNotificationSettings", "public"); + }); + + modelBuilder.Entity("Fin.Domain.Notifications.Entities.UserRememberUseSetting", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("NotifyOn") + .HasColumnType("interval"); + + b.Property("TenantId") + .HasColumnType("uuid"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UpdatedBy") + .HasColumnType("uuid"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.Property("Ways") + .HasColumnType("text"); + + b.Property("WeekDays") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("UserRememberUseSettings", "public"); + }); + + modelBuilder.Entity("Fin.Domain.Tenants.Entities.Tenant", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Locale") + .HasMaxLength(30) + .HasColumnType("character varying(30)"); + + b.Property("Timezone") + .HasMaxLength(30) + .HasColumnType("character varying(30)"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.HasKey("Id"); + + b.ToTable("Tenants", "public"); + }); + + modelBuilder.Entity("Fin.Domain.Tenants.Entities.TenantUser", b => + { + b.Property("TenantId") + .HasColumnType("uuid"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("TenantId", "UserId"); + + b.HasIndex("UserId"); + + b.ToTable("TenantUsers", "public"); + }); + + modelBuilder.Entity("Fin.Domain.Users.Entities.User", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("BirthDate") + .HasColumnType("date"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("DisplayName") + .HasMaxLength(150) + .HasColumnType("character varying(150)"); + + b.Property("FirstName") + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.Property("Gender") + .HasColumnType("integer"); + + b.Property("ImagePublicUrl") + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("IsActivity") + .HasColumnType("boolean"); + + b.Property("IsAdmin") + .HasColumnType("boolean"); + + b.Property("LastName") + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.HasKey("Id"); + + b.ToTable("Users", "public"); + }); + + modelBuilder.Entity("Fin.Domain.Users.Entities.UserCredential", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("EncryptedEmail") + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("EncryptedPassword") + .HasMaxLength(300) + .HasColumnType("character varying(300)"); + + b.Property("FailLoginAttempts") + .HasColumnType("integer"); + + b.Property("GoogleId") + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("ResetToken") + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("EncryptedEmail") + .IsUnique(); + + b.HasIndex("GoogleId") + .IsUnique(); + + b.HasIndex("UserId") + .IsUnique(); + + b.ToTable("Credentials", "public"); + }); + + modelBuilder.Entity("Fin.Domain.Users.Entities.UserDeleteRequest", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Aborted") + .HasColumnType("boolean"); + + b.Property("AbortedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("DeleteEffectivatedAt") + .HasColumnType("date"); + + b.Property("DeleteRequestedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UpdatedBy") + .HasColumnType("uuid"); + + b.Property("UserAbortedId") + .HasColumnType("uuid"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("UserAbortedId"); + + b.HasIndex("UserId"); + + b.ToTable("UserDeleteRequests", "public"); + }); + + modelBuilder.Entity("Fin.Domain.Notifications.Entities.NotificationUserDelivery", b => + { + b.HasOne("Fin.Domain.Notifications.Entities.Notification", "Notification") + .WithMany("UserDeliveries") + .HasForeignKey("NotificationId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Fin.Domain.Users.Entities.User", "User") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Notification"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Fin.Domain.Notifications.Entities.UserNotificationSettings", b => + { + b.HasOne("Fin.Domain.Users.Entities.User", "User") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Fin.Domain.Notifications.Entities.UserRememberUseSetting", b => + { + b.HasOne("Fin.Domain.Users.Entities.User", "User") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Fin.Domain.Tenants.Entities.TenantUser", b => + { + b.HasOne("Fin.Domain.Tenants.Entities.Tenant", null) + .WithMany() + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Fin.Domain.Users.Entities.User", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Fin.Domain.Users.Entities.UserCredential", b => + { + b.HasOne("Fin.Domain.Users.Entities.User", "User") + .WithOne("Credential") + .HasForeignKey("Fin.Domain.Users.Entities.UserCredential", "UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Fin.Domain.Users.Entities.UserDeleteRequest", b => + { + b.HasOne("Fin.Domain.Users.Entities.User", "UserAborted") + .WithMany() + .HasForeignKey("UserAbortedId"); + + b.HasOne("Fin.Domain.Users.Entities.User", "User") + .WithMany("DeleteRequests") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + + b.Navigation("UserAborted"); + }); + + modelBuilder.Entity("Fin.Domain.Notifications.Entities.Notification", b => + { + b.Navigation("UserDeliveries"); + }); + + modelBuilder.Entity("Fin.Domain.Users.Entities.User", b => + { + b.Navigation("Credential"); + + b.Navigation("DeleteRequests"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Fin.Infrastructure/Migrations/20251006191258_AddColorToFinancialInstitution.cs b/Fin.Infrastructure/Migrations/20251006191258_AddColorToFinancialInstitution.cs new file mode 100644 index 0000000..6851698 --- /dev/null +++ b/Fin.Infrastructure/Migrations/20251006191258_AddColorToFinancialInstitution.cs @@ -0,0 +1,56 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Fin.Infrastructure.Migrations +{ + /// + public partial class AddColorToFinancialInstitution : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AlterColumn( + name: "Icon", + schema: "public", + table: "FinancialInstitution", + type: "character varying(100)", + maxLength: 100, + nullable: false, + defaultValue: "", + oldClrType: typeof(string), + oldType: "character varying(50)", + oldMaxLength: 50, + oldNullable: true); + + migrationBuilder.AddColumn( + name: "Color", + schema: "public", + table: "FinancialInstitution", + type: "character varying(7)", + maxLength: 7, + nullable: false, + defaultValue: ""); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "Color", + schema: "public", + table: "FinancialInstitution"); + + migrationBuilder.AlterColumn( + name: "Icon", + schema: "public", + table: "FinancialInstitution", + type: "character varying(50)", + maxLength: 50, + nullable: true, + oldClrType: typeof(string), + oldType: "character varying(100)", + oldMaxLength: 100); + } + } +} diff --git a/Fin.Infrastructure/Migrations/20251006223531_testAjust.Designer.cs b/Fin.Infrastructure/Migrations/20251006223531_testAjust.Designer.cs new file mode 100644 index 0000000..1f4f121 --- /dev/null +++ b/Fin.Infrastructure/Migrations/20251006223531_testAjust.Designer.cs @@ -0,0 +1,573 @@ +// +using System; +using Fin.Infrastructure.Database; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace Fin.Infrastructure.Migrations +{ + [DbContext(typeof(FinDbContext))] + [Migration("20251006223531_testAjust")] + partial class testAjust + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("public") + .HasAnnotation("ProductVersion", "9.0.4") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("Fin.Domain.FinancialInstitutions.Entities.FinancialInstitution", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Active") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(true); + + b.Property("Code") + .HasMaxLength(3) + .HasColumnType("character varying(3)"); + + b.Property("Color") + .IsRequired() + .HasMaxLength(7) + .HasColumnType("character varying(7)"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("Icon") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("Type") + .HasColumnType("integer"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UpdatedBy") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("Active"); + + b.HasIndex("Code") + .IsUnique(); + + b.HasIndex("Name") + .IsUnique(); + + b.HasIndex("Type"); + + b.ToTable("FinancialInstitution", "public"); + }); + + modelBuilder.Entity("Fin.Domain.Menus.Entities.Menu", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Color") + .HasMaxLength(20) + .HasColumnType("character varying(20)"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("FrontRoute") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.Property("Icon") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("character varying(20)"); + + b.Property("KeyWords") + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.Property("OnlyForAdmin") + .HasColumnType("boolean"); + + b.Property("Position") + .HasColumnType("integer"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UpdatedBy") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.ToTable("Menus", "public"); + }); + + modelBuilder.Entity("Fin.Domain.Notifications.Entities.Notification", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Continuous") + .HasColumnType("boolean"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("HtmlBody") + .HasColumnType("text"); + + b.Property("Link") + .HasColumnType("text"); + + b.Property("NormalizedTextBody") + .HasColumnType("text"); + + b.Property("NormalizedTitle") + .HasColumnType("text"); + + b.Property("Severity") + .HasColumnType("integer"); + + b.Property("StartToDelivery") + .HasColumnType("timestamp with time zone"); + + b.Property("StopToDelivery") + .HasColumnType("timestamp with time zone"); + + b.Property("TextBody") + .HasColumnType("text"); + + b.Property("Title") + .HasMaxLength(250) + .HasColumnType("character varying(250)"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UpdatedBy") + .HasColumnType("uuid"); + + b.Property("Ways") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.ToTable("Notifications", "public"); + }); + + modelBuilder.Entity("Fin.Domain.Notifications.Entities.NotificationUserDelivery", b => + { + b.Property("NotificationId") + .HasColumnType("uuid"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.Property("BackgroundJobId") + .HasMaxLength(20) + .HasColumnType("character varying(20)"); + + b.Property("Delivery") + .HasColumnType("boolean"); + + b.Property("Visualized") + .HasColumnType("boolean"); + + b.HasKey("NotificationId", "UserId"); + + b.HasIndex("UserId"); + + b.ToTable("NotificationUserDeliveries", "public"); + }); + + modelBuilder.Entity("Fin.Domain.Notifications.Entities.UserNotificationSettings", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("AllowedWays") + .HasColumnType("text"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("Enabled") + .HasColumnType("boolean"); + + b.Property("FirebaseTokens") + .HasColumnType("text"); + + b.Property("TenantId") + .HasColumnType("uuid"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UpdatedBy") + .HasColumnType("uuid"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("UserNotificationSettings", "public"); + }); + + modelBuilder.Entity("Fin.Domain.Notifications.Entities.UserRememberUseSetting", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("NotifyOn") + .HasColumnType("interval"); + + b.Property("TenantId") + .HasColumnType("uuid"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UpdatedBy") + .HasColumnType("uuid"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.Property("Ways") + .HasColumnType("text"); + + b.Property("WeekDays") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("UserRememberUseSettings", "public"); + }); + + modelBuilder.Entity("Fin.Domain.Tenants.Entities.Tenant", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Locale") + .HasMaxLength(30) + .HasColumnType("character varying(30)"); + + b.Property("Timezone") + .HasMaxLength(30) + .HasColumnType("character varying(30)"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.HasKey("Id"); + + b.ToTable("Tenants", "public"); + }); + + modelBuilder.Entity("Fin.Domain.Tenants.Entities.TenantUser", b => + { + b.Property("TenantId") + .HasColumnType("uuid"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("TenantId", "UserId"); + + b.HasIndex("UserId"); + + b.ToTable("TenantUsers", "public"); + }); + + modelBuilder.Entity("Fin.Domain.Users.Entities.User", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("BirthDate") + .HasColumnType("date"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("DisplayName") + .HasMaxLength(150) + .HasColumnType("character varying(150)"); + + b.Property("FirstName") + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.Property("Gender") + .HasColumnType("integer"); + + b.Property("ImagePublicUrl") + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("IsActivity") + .HasColumnType("boolean"); + + b.Property("IsAdmin") + .HasColumnType("boolean"); + + b.Property("LastName") + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.HasKey("Id"); + + b.ToTable("Users", "public"); + }); + + modelBuilder.Entity("Fin.Domain.Users.Entities.UserCredential", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("EncryptedEmail") + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("EncryptedPassword") + .HasMaxLength(300) + .HasColumnType("character varying(300)"); + + b.Property("FailLoginAttempts") + .HasColumnType("integer"); + + b.Property("GoogleId") + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("ResetToken") + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("EncryptedEmail") + .IsUnique(); + + b.HasIndex("GoogleId") + .IsUnique(); + + b.HasIndex("UserId") + .IsUnique(); + + b.ToTable("Credentials", "public"); + }); + + modelBuilder.Entity("Fin.Domain.Users.Entities.UserDeleteRequest", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Aborted") + .HasColumnType("boolean"); + + b.Property("AbortedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("DeleteEffectivatedAt") + .HasColumnType("date"); + + b.Property("DeleteRequestedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UpdatedBy") + .HasColumnType("uuid"); + + b.Property("UserAbortedId") + .HasColumnType("uuid"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("UserAbortedId"); + + b.HasIndex("UserId"); + + b.ToTable("UserDeleteRequests", "public"); + }); + + modelBuilder.Entity("Fin.Domain.Notifications.Entities.NotificationUserDelivery", b => + { + b.HasOne("Fin.Domain.Notifications.Entities.Notification", "Notification") + .WithMany("UserDeliveries") + .HasForeignKey("NotificationId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Fin.Domain.Users.Entities.User", "User") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Notification"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Fin.Domain.Notifications.Entities.UserNotificationSettings", b => + { + b.HasOne("Fin.Domain.Users.Entities.User", "User") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Fin.Domain.Notifications.Entities.UserRememberUseSetting", b => + { + b.HasOne("Fin.Domain.Users.Entities.User", "User") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Fin.Domain.Tenants.Entities.TenantUser", b => + { + b.HasOne("Fin.Domain.Tenants.Entities.Tenant", null) + .WithMany() + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Fin.Domain.Users.Entities.User", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Fin.Domain.Users.Entities.UserCredential", b => + { + b.HasOne("Fin.Domain.Users.Entities.User", "User") + .WithOne("Credential") + .HasForeignKey("Fin.Domain.Users.Entities.UserCredential", "UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Fin.Domain.Users.Entities.UserDeleteRequest", b => + { + b.HasOne("Fin.Domain.Users.Entities.User", "UserAborted") + .WithMany() + .HasForeignKey("UserAbortedId"); + + b.HasOne("Fin.Domain.Users.Entities.User", "User") + .WithMany("DeleteRequests") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + + b.Navigation("UserAborted"); + }); + + modelBuilder.Entity("Fin.Domain.Notifications.Entities.Notification", b => + { + b.Navigation("UserDeliveries"); + }); + + modelBuilder.Entity("Fin.Domain.Users.Entities.User", b => + { + b.Navigation("Credential"); + + b.Navigation("DeleteRequests"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Fin.Infrastructure/Migrations/20251006223531_testAjust.cs b/Fin.Infrastructure/Migrations/20251006223531_testAjust.cs new file mode 100644 index 0000000..ab73ba2 --- /dev/null +++ b/Fin.Infrastructure/Migrations/20251006223531_testAjust.cs @@ -0,0 +1,122 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Fin.Infrastructure.Migrations +{ + /// + public partial class testAjust : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropIndex( + name: "IX_FinancialInstitution_Code_TenantId", + schema: "public", + table: "FinancialInstitution"); + + migrationBuilder.DropIndex( + name: "IX_FinancialInstitution_Name_TenantId", + schema: "public", + table: "FinancialInstitution"); + + migrationBuilder.DropColumn( + name: "TenantId", + schema: "public", + table: "FinancialInstitution"); + + migrationBuilder.AlterColumn( + name: "Type", + schema: "public", + table: "FinancialInstitution", + type: "integer", + nullable: false, + oldClrType: typeof(string), + oldType: "text"); + + migrationBuilder.AlterColumn( + name: "Code", + schema: "public", + table: "FinancialInstitution", + type: "character varying(3)", + maxLength: 3, + nullable: true, + oldClrType: typeof(string), + oldType: "character varying(3)", + oldMaxLength: 3); + + migrationBuilder.CreateIndex( + name: "IX_FinancialInstitution_Code", + schema: "public", + table: "FinancialInstitution", + column: "Code", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_FinancialInstitution_Name", + schema: "public", + table: "FinancialInstitution", + column: "Name", + unique: true); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropIndex( + name: "IX_FinancialInstitution_Code", + schema: "public", + table: "FinancialInstitution"); + + migrationBuilder.DropIndex( + name: "IX_FinancialInstitution_Name", + schema: "public", + table: "FinancialInstitution"); + + migrationBuilder.AlterColumn( + name: "Type", + schema: "public", + table: "FinancialInstitution", + type: "text", + nullable: false, + oldClrType: typeof(int), + oldType: "integer"); + + migrationBuilder.AlterColumn( + name: "Code", + schema: "public", + table: "FinancialInstitution", + type: "character varying(3)", + maxLength: 3, + nullable: false, + defaultValue: "", + oldClrType: typeof(string), + oldType: "character varying(3)", + oldMaxLength: 3, + oldNullable: true); + + migrationBuilder.AddColumn( + name: "TenantId", + schema: "public", + table: "FinancialInstitution", + type: "uuid", + nullable: false, + defaultValue: new Guid("00000000-0000-0000-0000-000000000000")); + + migrationBuilder.CreateIndex( + name: "IX_FinancialInstitution_Code_TenantId", + schema: "public", + table: "FinancialInstitution", + columns: new[] { "Code", "TenantId" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_FinancialInstitution_Name_TenantId", + schema: "public", + table: "FinancialInstitution", + columns: new[] { "Name", "TenantId" }, + unique: true); + } + } +} diff --git a/Fin.Infrastructure/Migrations/FinDbContextModelSnapshot.cs b/Fin.Infrastructure/Migrations/FinDbContextModelSnapshot.cs index 7186151..7e73d33 100644 --- a/Fin.Infrastructure/Migrations/FinDbContextModelSnapshot.cs +++ b/Fin.Infrastructure/Migrations/FinDbContextModelSnapshot.cs @@ -18,7 +18,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) #pragma warning disable 612, 618 modelBuilder .HasDefaultSchema("public") - .HasAnnotation("ProductVersion", "9.0.9") + .HasAnnotation("ProductVersion", "9.0.4") .HasAnnotation("Relational:MaxIdentifierLength", 63); NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); @@ -35,10 +35,14 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasDefaultValue(true); b.Property("Code") - .IsRequired() .HasMaxLength(3) .HasColumnType("character varying(3)"); + b.Property("Color") + .IsRequired() + .HasMaxLength(7) + .HasColumnType("character varying(7)"); + b.Property("CreatedAt") .HasColumnType("timestamp with time zone"); @@ -46,20 +50,17 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("uuid"); b.Property("Icon") - .HasMaxLength(50) - .HasColumnType("character varying(50)"); + .IsRequired() + .HasMaxLength(100) + .HasColumnType("character varying(100)"); b.Property("Name") .IsRequired() .HasMaxLength(200) .HasColumnType("character varying(200)"); - b.Property("TenantId") - .HasColumnType("uuid"); - - b.Property("Type") - .IsRequired() - .HasColumnType("text"); + b.Property("Type") + .HasColumnType("integer"); b.Property("UpdatedAt") .HasColumnType("timestamp with time zone"); @@ -71,14 +72,14 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("Active"); - b.HasIndex("Type"); - - b.HasIndex("Code", "TenantId") + b.HasIndex("Code") .IsUnique(); - b.HasIndex("Name", "TenantId") + b.HasIndex("Name") .IsUnique(); + b.HasIndex("Type"); + b.ToTable("FinancialInstitution", "public"); }); From fe3468f4847c7b2f0c3e2dce52b11454a7cd9724 Mon Sep 17 00:00:00 2001 From: Gustavo Passos Date: Mon, 6 Oct 2025 21:01:25 -0300 Subject: [PATCH 4/7] FIN-32 remove migrations --- ...94905_AddFinancialInstitutions.Designer.cs | 572 ----------------- ...20251001194905_AddFinancialInstitutions.cs | 71 --- ...1003025422_RenameLogoUrlToIcon.Designer.cs | 572 ----------------- .../20251003025422_RenameLogoUrlToIcon.cs | 60 -- ...AddColorToFinancialInstitution.Designer.cs | 578 ------------------ ...06191258_AddColorToFinancialInstitution.cs | 56 -- .../20251006223531_testAjust.Designer.cs | 573 ----------------- .../Migrations/20251006223531_testAjust.cs | 122 ---- .../Migrations/FinDbContextModelSnapshot.cs | 109 ++-- 9 files changed, 48 insertions(+), 2665 deletions(-) delete mode 100644 Fin.Infrastructure/Migrations/20251001194905_AddFinancialInstitutions.Designer.cs delete mode 100644 Fin.Infrastructure/Migrations/20251001194905_AddFinancialInstitutions.cs delete mode 100644 Fin.Infrastructure/Migrations/20251003025422_RenameLogoUrlToIcon.Designer.cs delete mode 100644 Fin.Infrastructure/Migrations/20251003025422_RenameLogoUrlToIcon.cs delete mode 100644 Fin.Infrastructure/Migrations/20251006191258_AddColorToFinancialInstitution.Designer.cs delete mode 100644 Fin.Infrastructure/Migrations/20251006191258_AddColorToFinancialInstitution.cs delete mode 100644 Fin.Infrastructure/Migrations/20251006223531_testAjust.Designer.cs delete mode 100644 Fin.Infrastructure/Migrations/20251006223531_testAjust.cs diff --git a/Fin.Infrastructure/Migrations/20251001194905_AddFinancialInstitutions.Designer.cs b/Fin.Infrastructure/Migrations/20251001194905_AddFinancialInstitutions.Designer.cs deleted file mode 100644 index 64226f6..0000000 --- a/Fin.Infrastructure/Migrations/20251001194905_AddFinancialInstitutions.Designer.cs +++ /dev/null @@ -1,572 +0,0 @@ -// -using System; -using Fin.Infrastructure.Database; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Fin.Infrastructure.Migrations -{ - [DbContext(typeof(FinDbContext))] - [Migration("20251001194905_AddFinancialInstitutions")] - partial class AddFinancialInstitutions - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasDefaultSchema("public") - .HasAnnotation("ProductVersion", "9.0.9") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Fin.Domain.FinancialInstitutions.Entities.FinancialInstitution", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uuid"); - - b.Property("Active") - .ValueGeneratedOnAdd() - .HasColumnType("boolean") - .HasDefaultValue(true); - - b.Property("Code") - .IsRequired() - .HasMaxLength(3) - .HasColumnType("character varying(3)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedBy") - .HasColumnType("uuid"); - - b.Property("LogoUrl") - .HasMaxLength(500) - .HasColumnType("character varying(500)"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(200) - .HasColumnType("character varying(200)"); - - b.Property("TenantId") - .HasColumnType("uuid"); - - b.Property("Type") - .IsRequired() - .HasColumnType("text"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedBy") - .HasColumnType("uuid"); - - b.HasKey("Id"); - - b.HasIndex("Active"); - - b.HasIndex("Type"); - - b.HasIndex("Code", "TenantId") - .IsUnique(); - - b.HasIndex("Name", "TenantId") - .IsUnique(); - - b.ToTable("FinancialInstitution", "public"); - }); - - modelBuilder.Entity("Fin.Domain.Menus.Entities.Menu", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uuid"); - - b.Property("Color") - .HasMaxLength(20) - .HasColumnType("character varying(20)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedBy") - .HasColumnType("uuid"); - - b.Property("FrontRoute") - .IsRequired() - .HasMaxLength(100) - .HasColumnType("character varying(100)"); - - b.Property("Icon") - .IsRequired() - .HasMaxLength(20) - .HasColumnType("character varying(20)"); - - b.Property("KeyWords") - .HasMaxLength(100) - .HasColumnType("character varying(100)"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(100) - .HasColumnType("character varying(100)"); - - b.Property("OnlyForAdmin") - .HasColumnType("boolean"); - - b.Property("Position") - .HasColumnType("integer"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedBy") - .HasColumnType("uuid"); - - b.HasKey("Id"); - - b.ToTable("Menus", "public"); - }); - - modelBuilder.Entity("Fin.Domain.Notifications.Entities.Notification", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uuid"); - - b.Property("Continuous") - .HasColumnType("boolean"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedBy") - .HasColumnType("uuid"); - - b.Property("HtmlBody") - .HasColumnType("text"); - - b.Property("Link") - .HasColumnType("text"); - - b.Property("NormalizedTextBody") - .HasColumnType("text"); - - b.Property("NormalizedTitle") - .HasColumnType("text"); - - b.Property("Severity") - .HasColumnType("integer"); - - b.Property("StartToDelivery") - .HasColumnType("timestamp with time zone"); - - b.Property("StopToDelivery") - .HasColumnType("timestamp with time zone"); - - b.Property("TextBody") - .HasColumnType("text"); - - b.Property("Title") - .HasMaxLength(250) - .HasColumnType("character varying(250)"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedBy") - .HasColumnType("uuid"); - - b.Property("Ways") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.ToTable("Notifications", "public"); - }); - - modelBuilder.Entity("Fin.Domain.Notifications.Entities.NotificationUserDelivery", b => - { - b.Property("NotificationId") - .HasColumnType("uuid"); - - b.Property("UserId") - .HasColumnType("uuid"); - - b.Property("BackgroundJobId") - .HasMaxLength(20) - .HasColumnType("character varying(20)"); - - b.Property("Delivery") - .HasColumnType("boolean"); - - b.Property("Visualized") - .HasColumnType("boolean"); - - b.HasKey("NotificationId", "UserId"); - - b.HasIndex("UserId"); - - b.ToTable("NotificationUserDeliveries", "public"); - }); - - modelBuilder.Entity("Fin.Domain.Notifications.Entities.UserNotificationSettings", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uuid"); - - b.Property("AllowedWays") - .HasColumnType("text"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedBy") - .HasColumnType("uuid"); - - b.Property("Enabled") - .HasColumnType("boolean"); - - b.Property("FirebaseTokens") - .HasColumnType("text"); - - b.Property("TenantId") - .HasColumnType("uuid"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedBy") - .HasColumnType("uuid"); - - b.Property("UserId") - .HasColumnType("uuid"); - - b.HasKey("Id"); - - b.HasIndex("UserId"); - - b.ToTable("UserNotificationSettings", "public"); - }); - - modelBuilder.Entity("Fin.Domain.Notifications.Entities.UserRememberUseSetting", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedBy") - .HasColumnType("uuid"); - - b.Property("NotifyOn") - .HasColumnType("interval"); - - b.Property("TenantId") - .HasColumnType("uuid"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedBy") - .HasColumnType("uuid"); - - b.Property("UserId") - .HasColumnType("uuid"); - - b.Property("Ways") - .HasColumnType("text"); - - b.Property("WeekDays") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("UserId"); - - b.ToTable("UserRememberUseSettings", "public"); - }); - - modelBuilder.Entity("Fin.Domain.Tenants.Entities.Tenant", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Locale") - .HasMaxLength(30) - .HasColumnType("character varying(30)"); - - b.Property("Timezone") - .HasMaxLength(30) - .HasColumnType("character varying(30)"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.HasKey("Id"); - - b.ToTable("Tenants", "public"); - }); - - modelBuilder.Entity("Fin.Domain.Tenants.Entities.TenantUser", b => - { - b.Property("TenantId") - .HasColumnType("uuid"); - - b.Property("UserId") - .HasColumnType("uuid"); - - b.HasKey("TenantId", "UserId"); - - b.HasIndex("UserId"); - - b.ToTable("TenantUsers", "public"); - }); - - modelBuilder.Entity("Fin.Domain.Users.Entities.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uuid"); - - b.Property("BirthDate") - .HasColumnType("date"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DisplayName") - .HasMaxLength(150) - .HasColumnType("character varying(150)"); - - b.Property("FirstName") - .HasMaxLength(100) - .HasColumnType("character varying(100)"); - - b.Property("Gender") - .HasColumnType("integer"); - - b.Property("ImagePublicUrl") - .HasMaxLength(200) - .HasColumnType("character varying(200)"); - - b.Property("IsActivity") - .HasColumnType("boolean"); - - b.Property("IsAdmin") - .HasColumnType("boolean"); - - b.Property("LastName") - .HasMaxLength(100) - .HasColumnType("character varying(100)"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.HasKey("Id"); - - b.ToTable("Users", "public"); - }); - - modelBuilder.Entity("Fin.Domain.Users.Entities.UserCredential", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uuid"); - - b.Property("EncryptedEmail") - .HasMaxLength(200) - .HasColumnType("character varying(200)"); - - b.Property("EncryptedPassword") - .HasMaxLength(300) - .HasColumnType("character varying(300)"); - - b.Property("FailLoginAttempts") - .HasColumnType("integer"); - - b.Property("GoogleId") - .HasMaxLength(200) - .HasColumnType("character varying(200)"); - - b.Property("ResetToken") - .HasMaxLength(200) - .HasColumnType("character varying(200)"); - - b.Property("UserId") - .HasColumnType("uuid"); - - b.HasKey("Id"); - - b.HasIndex("EncryptedEmail") - .IsUnique(); - - b.HasIndex("GoogleId") - .IsUnique(); - - b.HasIndex("UserId") - .IsUnique(); - - b.ToTable("Credentials", "public"); - }); - - modelBuilder.Entity("Fin.Domain.Users.Entities.UserDeleteRequest", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uuid"); - - b.Property("Aborted") - .HasColumnType("boolean"); - - b.Property("AbortedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedBy") - .HasColumnType("uuid"); - - b.Property("DeleteEffectivatedAt") - .HasColumnType("date"); - - b.Property("DeleteRequestedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedBy") - .HasColumnType("uuid"); - - b.Property("UserAbortedId") - .HasColumnType("uuid"); - - b.Property("UserId") - .HasColumnType("uuid"); - - b.HasKey("Id"); - - b.HasIndex("UserAbortedId"); - - b.HasIndex("UserId"); - - b.ToTable("UserDeleteRequests", "public"); - }); - - modelBuilder.Entity("Fin.Domain.Notifications.Entities.NotificationUserDelivery", b => - { - b.HasOne("Fin.Domain.Notifications.Entities.Notification", "Notification") - .WithMany("UserDeliveries") - .HasForeignKey("NotificationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Fin.Domain.Users.Entities.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Notification"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Fin.Domain.Notifications.Entities.UserNotificationSettings", b => - { - b.HasOne("Fin.Domain.Users.Entities.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Fin.Domain.Notifications.Entities.UserRememberUseSetting", b => - { - b.HasOne("Fin.Domain.Users.Entities.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Fin.Domain.Tenants.Entities.TenantUser", b => - { - b.HasOne("Fin.Domain.Tenants.Entities.Tenant", null) - .WithMany() - .HasForeignKey("TenantId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Fin.Domain.Users.Entities.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Fin.Domain.Users.Entities.UserCredential", b => - { - b.HasOne("Fin.Domain.Users.Entities.User", "User") - .WithOne("Credential") - .HasForeignKey("Fin.Domain.Users.Entities.UserCredential", "UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Fin.Domain.Users.Entities.UserDeleteRequest", b => - { - b.HasOne("Fin.Domain.Users.Entities.User", "UserAborted") - .WithMany() - .HasForeignKey("UserAbortedId"); - - b.HasOne("Fin.Domain.Users.Entities.User", "User") - .WithMany("DeleteRequests") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - - b.Navigation("UserAborted"); - }); - - modelBuilder.Entity("Fin.Domain.Notifications.Entities.Notification", b => - { - b.Navigation("UserDeliveries"); - }); - - modelBuilder.Entity("Fin.Domain.Users.Entities.User", b => - { - b.Navigation("Credential"); - - b.Navigation("DeleteRequests"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/Fin.Infrastructure/Migrations/20251001194905_AddFinancialInstitutions.cs b/Fin.Infrastructure/Migrations/20251001194905_AddFinancialInstitutions.cs deleted file mode 100644 index d57b21c..0000000 --- a/Fin.Infrastructure/Migrations/20251001194905_AddFinancialInstitutions.cs +++ /dev/null @@ -1,71 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace Fin.Infrastructure.Migrations -{ - /// - public partial class AddFinancialInstitutions : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "FinancialInstitution", - schema: "public", - columns: table => new - { - Id = table.Column(type: "uuid", nullable: false), - Name = table.Column(type: "character varying(200)", maxLength: 200, nullable: false), - Code = table.Column(type: "character varying(3)", maxLength: 3, nullable: false), - Type = table.Column(type: "text", nullable: false), - LogoUrl = table.Column(type: "character varying(500)", maxLength: 500, nullable: true), - Active = table.Column(type: "boolean", nullable: false, defaultValue: true), - CreatedBy = table.Column(type: "uuid", nullable: false), - UpdatedBy = table.Column(type: "uuid", nullable: false), - CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), - UpdatedAt = table.Column(type: "timestamp with time zone", nullable: false), - TenantId = table.Column(type: "uuid", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_FinancialInstitution", x => x.Id); - }); - - migrationBuilder.CreateIndex( - name: "IX_FinancialInstitution_Active", - schema: "public", - table: "FinancialInstitution", - column: "Active"); - - migrationBuilder.CreateIndex( - name: "IX_FinancialInstitution_Code_TenantId", - schema: "public", - table: "FinancialInstitution", - columns: new[] { "Code", "TenantId" }, - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_FinancialInstitution_Name_TenantId", - schema: "public", - table: "FinancialInstitution", - columns: new[] { "Name", "TenantId" }, - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_FinancialInstitution_Type", - schema: "public", - table: "FinancialInstitution", - column: "Type"); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "FinancialInstitution", - schema: "public"); - } - } -} diff --git a/Fin.Infrastructure/Migrations/20251003025422_RenameLogoUrlToIcon.Designer.cs b/Fin.Infrastructure/Migrations/20251003025422_RenameLogoUrlToIcon.Designer.cs deleted file mode 100644 index 7fb6f28..0000000 --- a/Fin.Infrastructure/Migrations/20251003025422_RenameLogoUrlToIcon.Designer.cs +++ /dev/null @@ -1,572 +0,0 @@ -// -using System; -using Fin.Infrastructure.Database; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Fin.Infrastructure.Migrations -{ - [DbContext(typeof(FinDbContext))] - [Migration("20251003025422_RenameLogoUrlToIcon")] - partial class RenameLogoUrlToIcon - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasDefaultSchema("public") - .HasAnnotation("ProductVersion", "9.0.9") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Fin.Domain.FinancialInstitutions.Entities.FinancialInstitution", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uuid"); - - b.Property("Active") - .ValueGeneratedOnAdd() - .HasColumnType("boolean") - .HasDefaultValue(true); - - b.Property("Code") - .IsRequired() - .HasMaxLength(3) - .HasColumnType("character varying(3)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedBy") - .HasColumnType("uuid"); - - b.Property("Icon") - .HasMaxLength(50) - .HasColumnType("character varying(50)"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(200) - .HasColumnType("character varying(200)"); - - b.Property("TenantId") - .HasColumnType("uuid"); - - b.Property("Type") - .IsRequired() - .HasColumnType("text"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedBy") - .HasColumnType("uuid"); - - b.HasKey("Id"); - - b.HasIndex("Active"); - - b.HasIndex("Type"); - - b.HasIndex("Code", "TenantId") - .IsUnique(); - - b.HasIndex("Name", "TenantId") - .IsUnique(); - - b.ToTable("FinancialInstitution", "public"); - }); - - modelBuilder.Entity("Fin.Domain.Menus.Entities.Menu", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uuid"); - - b.Property("Color") - .HasMaxLength(20) - .HasColumnType("character varying(20)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedBy") - .HasColumnType("uuid"); - - b.Property("FrontRoute") - .IsRequired() - .HasMaxLength(100) - .HasColumnType("character varying(100)"); - - b.Property("Icon") - .IsRequired() - .HasMaxLength(20) - .HasColumnType("character varying(20)"); - - b.Property("KeyWords") - .HasMaxLength(100) - .HasColumnType("character varying(100)"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(100) - .HasColumnType("character varying(100)"); - - b.Property("OnlyForAdmin") - .HasColumnType("boolean"); - - b.Property("Position") - .HasColumnType("integer"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedBy") - .HasColumnType("uuid"); - - b.HasKey("Id"); - - b.ToTable("Menus", "public"); - }); - - modelBuilder.Entity("Fin.Domain.Notifications.Entities.Notification", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uuid"); - - b.Property("Continuous") - .HasColumnType("boolean"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedBy") - .HasColumnType("uuid"); - - b.Property("HtmlBody") - .HasColumnType("text"); - - b.Property("Link") - .HasColumnType("text"); - - b.Property("NormalizedTextBody") - .HasColumnType("text"); - - b.Property("NormalizedTitle") - .HasColumnType("text"); - - b.Property("Severity") - .HasColumnType("integer"); - - b.Property("StartToDelivery") - .HasColumnType("timestamp with time zone"); - - b.Property("StopToDelivery") - .HasColumnType("timestamp with time zone"); - - b.Property("TextBody") - .HasColumnType("text"); - - b.Property("Title") - .HasMaxLength(250) - .HasColumnType("character varying(250)"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedBy") - .HasColumnType("uuid"); - - b.Property("Ways") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.ToTable("Notifications", "public"); - }); - - modelBuilder.Entity("Fin.Domain.Notifications.Entities.NotificationUserDelivery", b => - { - b.Property("NotificationId") - .HasColumnType("uuid"); - - b.Property("UserId") - .HasColumnType("uuid"); - - b.Property("BackgroundJobId") - .HasMaxLength(20) - .HasColumnType("character varying(20)"); - - b.Property("Delivery") - .HasColumnType("boolean"); - - b.Property("Visualized") - .HasColumnType("boolean"); - - b.HasKey("NotificationId", "UserId"); - - b.HasIndex("UserId"); - - b.ToTable("NotificationUserDeliveries", "public"); - }); - - modelBuilder.Entity("Fin.Domain.Notifications.Entities.UserNotificationSettings", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uuid"); - - b.Property("AllowedWays") - .HasColumnType("text"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedBy") - .HasColumnType("uuid"); - - b.Property("Enabled") - .HasColumnType("boolean"); - - b.Property("FirebaseTokens") - .HasColumnType("text"); - - b.Property("TenantId") - .HasColumnType("uuid"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedBy") - .HasColumnType("uuid"); - - b.Property("UserId") - .HasColumnType("uuid"); - - b.HasKey("Id"); - - b.HasIndex("UserId"); - - b.ToTable("UserNotificationSettings", "public"); - }); - - modelBuilder.Entity("Fin.Domain.Notifications.Entities.UserRememberUseSetting", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedBy") - .HasColumnType("uuid"); - - b.Property("NotifyOn") - .HasColumnType("interval"); - - b.Property("TenantId") - .HasColumnType("uuid"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedBy") - .HasColumnType("uuid"); - - b.Property("UserId") - .HasColumnType("uuid"); - - b.Property("Ways") - .HasColumnType("text"); - - b.Property("WeekDays") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("UserId"); - - b.ToTable("UserRememberUseSettings", "public"); - }); - - modelBuilder.Entity("Fin.Domain.Tenants.Entities.Tenant", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Locale") - .HasMaxLength(30) - .HasColumnType("character varying(30)"); - - b.Property("Timezone") - .HasMaxLength(30) - .HasColumnType("character varying(30)"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.HasKey("Id"); - - b.ToTable("Tenants", "public"); - }); - - modelBuilder.Entity("Fin.Domain.Tenants.Entities.TenantUser", b => - { - b.Property("TenantId") - .HasColumnType("uuid"); - - b.Property("UserId") - .HasColumnType("uuid"); - - b.HasKey("TenantId", "UserId"); - - b.HasIndex("UserId"); - - b.ToTable("TenantUsers", "public"); - }); - - modelBuilder.Entity("Fin.Domain.Users.Entities.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uuid"); - - b.Property("BirthDate") - .HasColumnType("date"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DisplayName") - .HasMaxLength(150) - .HasColumnType("character varying(150)"); - - b.Property("FirstName") - .HasMaxLength(100) - .HasColumnType("character varying(100)"); - - b.Property("Gender") - .HasColumnType("integer"); - - b.Property("ImagePublicUrl") - .HasMaxLength(200) - .HasColumnType("character varying(200)"); - - b.Property("IsActivity") - .HasColumnType("boolean"); - - b.Property("IsAdmin") - .HasColumnType("boolean"); - - b.Property("LastName") - .HasMaxLength(100) - .HasColumnType("character varying(100)"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.HasKey("Id"); - - b.ToTable("Users", "public"); - }); - - modelBuilder.Entity("Fin.Domain.Users.Entities.UserCredential", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uuid"); - - b.Property("EncryptedEmail") - .HasMaxLength(200) - .HasColumnType("character varying(200)"); - - b.Property("EncryptedPassword") - .HasMaxLength(300) - .HasColumnType("character varying(300)"); - - b.Property("FailLoginAttempts") - .HasColumnType("integer"); - - b.Property("GoogleId") - .HasMaxLength(200) - .HasColumnType("character varying(200)"); - - b.Property("ResetToken") - .HasMaxLength(200) - .HasColumnType("character varying(200)"); - - b.Property("UserId") - .HasColumnType("uuid"); - - b.HasKey("Id"); - - b.HasIndex("EncryptedEmail") - .IsUnique(); - - b.HasIndex("GoogleId") - .IsUnique(); - - b.HasIndex("UserId") - .IsUnique(); - - b.ToTable("Credentials", "public"); - }); - - modelBuilder.Entity("Fin.Domain.Users.Entities.UserDeleteRequest", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uuid"); - - b.Property("Aborted") - .HasColumnType("boolean"); - - b.Property("AbortedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedBy") - .HasColumnType("uuid"); - - b.Property("DeleteEffectivatedAt") - .HasColumnType("date"); - - b.Property("DeleteRequestedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedBy") - .HasColumnType("uuid"); - - b.Property("UserAbortedId") - .HasColumnType("uuid"); - - b.Property("UserId") - .HasColumnType("uuid"); - - b.HasKey("Id"); - - b.HasIndex("UserAbortedId"); - - b.HasIndex("UserId"); - - b.ToTable("UserDeleteRequests", "public"); - }); - - modelBuilder.Entity("Fin.Domain.Notifications.Entities.NotificationUserDelivery", b => - { - b.HasOne("Fin.Domain.Notifications.Entities.Notification", "Notification") - .WithMany("UserDeliveries") - .HasForeignKey("NotificationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Fin.Domain.Users.Entities.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Notification"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Fin.Domain.Notifications.Entities.UserNotificationSettings", b => - { - b.HasOne("Fin.Domain.Users.Entities.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Fin.Domain.Notifications.Entities.UserRememberUseSetting", b => - { - b.HasOne("Fin.Domain.Users.Entities.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Fin.Domain.Tenants.Entities.TenantUser", b => - { - b.HasOne("Fin.Domain.Tenants.Entities.Tenant", null) - .WithMany() - .HasForeignKey("TenantId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Fin.Domain.Users.Entities.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Fin.Domain.Users.Entities.UserCredential", b => - { - b.HasOne("Fin.Domain.Users.Entities.User", "User") - .WithOne("Credential") - .HasForeignKey("Fin.Domain.Users.Entities.UserCredential", "UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Fin.Domain.Users.Entities.UserDeleteRequest", b => - { - b.HasOne("Fin.Domain.Users.Entities.User", "UserAborted") - .WithMany() - .HasForeignKey("UserAbortedId"); - - b.HasOne("Fin.Domain.Users.Entities.User", "User") - .WithMany("DeleteRequests") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - - b.Navigation("UserAborted"); - }); - - modelBuilder.Entity("Fin.Domain.Notifications.Entities.Notification", b => - { - b.Navigation("UserDeliveries"); - }); - - modelBuilder.Entity("Fin.Domain.Users.Entities.User", b => - { - b.Navigation("Credential"); - - b.Navigation("DeleteRequests"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/Fin.Infrastructure/Migrations/20251003025422_RenameLogoUrlToIcon.cs b/Fin.Infrastructure/Migrations/20251003025422_RenameLogoUrlToIcon.cs deleted file mode 100644 index b74335b..0000000 --- a/Fin.Infrastructure/Migrations/20251003025422_RenameLogoUrlToIcon.cs +++ /dev/null @@ -1,60 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace Fin.Infrastructure.Migrations -{ - /// - public partial class RenameLogoUrlToIcon : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.RenameColumn( - name: "LogoUrl", - schema: "public", - table: "FinancialInstitution", - newName: "Icon"); - - // Change the max length from 500 to 50 - migrationBuilder.AlterColumn( - name: "Icon", - schema: "public", - table: "FinancialInstitution", - type: "character varying(50)", - maxLength: 50, - nullable: true, - oldClrType: typeof(string), - oldType: "character varying(500)", - oldMaxLength: 500, - oldNullable: true); - - // Clear existing data since we're changing from URLs to icon names - migrationBuilder.Sql("DELETE FROM \"public\".\"FinancialInstitution\";"); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - // Change back to max length 500 - migrationBuilder.AlterColumn( - name: "Icon", - schema: "public", - table: "FinancialInstitution", - type: "character varying(500)", - maxLength: 500, - nullable: true, - oldClrType: typeof(string), - oldType: "character varying(50)", - oldMaxLength: 50, - oldNullable: true); - - // Rename the column Icon back to LogoUrl - migrationBuilder.RenameColumn( - name: "Icon", - schema: "public", - table: "FinancialInstitution", - newName: "LogoUrl"); - } - } -} diff --git a/Fin.Infrastructure/Migrations/20251006191258_AddColorToFinancialInstitution.Designer.cs b/Fin.Infrastructure/Migrations/20251006191258_AddColorToFinancialInstitution.Designer.cs deleted file mode 100644 index 9e8184f..0000000 --- a/Fin.Infrastructure/Migrations/20251006191258_AddColorToFinancialInstitution.Designer.cs +++ /dev/null @@ -1,578 +0,0 @@ -// -using System; -using Fin.Infrastructure.Database; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Fin.Infrastructure.Migrations -{ - [DbContext(typeof(FinDbContext))] - [Migration("20251006191258_AddColorToFinancialInstitution")] - partial class AddColorToFinancialInstitution - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasDefaultSchema("public") - .HasAnnotation("ProductVersion", "9.0.9") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Fin.Domain.FinancialInstitutions.Entities.FinancialInstitution", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uuid"); - - b.Property("Active") - .ValueGeneratedOnAdd() - .HasColumnType("boolean") - .HasDefaultValue(true); - - b.Property("Code") - .IsRequired() - .HasMaxLength(3) - .HasColumnType("character varying(3)"); - - b.Property("Color") - .IsRequired() - .HasMaxLength(7) - .HasColumnType("character varying(7)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedBy") - .HasColumnType("uuid"); - - b.Property("Icon") - .IsRequired() - .HasMaxLength(100) - .HasColumnType("character varying(100)"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(200) - .HasColumnType("character varying(200)"); - - b.Property("TenantId") - .HasColumnType("uuid"); - - b.Property("Type") - .IsRequired() - .HasColumnType("text"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedBy") - .HasColumnType("uuid"); - - b.HasKey("Id"); - - b.HasIndex("Active"); - - b.HasIndex("Type"); - - b.HasIndex("Code", "TenantId") - .IsUnique(); - - b.HasIndex("Name", "TenantId") - .IsUnique(); - - b.ToTable("FinancialInstitution", "public"); - }); - - modelBuilder.Entity("Fin.Domain.Menus.Entities.Menu", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uuid"); - - b.Property("Color") - .HasMaxLength(20) - .HasColumnType("character varying(20)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedBy") - .HasColumnType("uuid"); - - b.Property("FrontRoute") - .IsRequired() - .HasMaxLength(100) - .HasColumnType("character varying(100)"); - - b.Property("Icon") - .IsRequired() - .HasMaxLength(20) - .HasColumnType("character varying(20)"); - - b.Property("KeyWords") - .HasMaxLength(100) - .HasColumnType("character varying(100)"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(100) - .HasColumnType("character varying(100)"); - - b.Property("OnlyForAdmin") - .HasColumnType("boolean"); - - b.Property("Position") - .HasColumnType("integer"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedBy") - .HasColumnType("uuid"); - - b.HasKey("Id"); - - b.ToTable("Menus", "public"); - }); - - modelBuilder.Entity("Fin.Domain.Notifications.Entities.Notification", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uuid"); - - b.Property("Continuous") - .HasColumnType("boolean"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedBy") - .HasColumnType("uuid"); - - b.Property("HtmlBody") - .HasColumnType("text"); - - b.Property("Link") - .HasColumnType("text"); - - b.Property("NormalizedTextBody") - .HasColumnType("text"); - - b.Property("NormalizedTitle") - .HasColumnType("text"); - - b.Property("Severity") - .HasColumnType("integer"); - - b.Property("StartToDelivery") - .HasColumnType("timestamp with time zone"); - - b.Property("StopToDelivery") - .HasColumnType("timestamp with time zone"); - - b.Property("TextBody") - .HasColumnType("text"); - - b.Property("Title") - .HasMaxLength(250) - .HasColumnType("character varying(250)"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedBy") - .HasColumnType("uuid"); - - b.Property("Ways") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.ToTable("Notifications", "public"); - }); - - modelBuilder.Entity("Fin.Domain.Notifications.Entities.NotificationUserDelivery", b => - { - b.Property("NotificationId") - .HasColumnType("uuid"); - - b.Property("UserId") - .HasColumnType("uuid"); - - b.Property("BackgroundJobId") - .HasMaxLength(20) - .HasColumnType("character varying(20)"); - - b.Property("Delivery") - .HasColumnType("boolean"); - - b.Property("Visualized") - .HasColumnType("boolean"); - - b.HasKey("NotificationId", "UserId"); - - b.HasIndex("UserId"); - - b.ToTable("NotificationUserDeliveries", "public"); - }); - - modelBuilder.Entity("Fin.Domain.Notifications.Entities.UserNotificationSettings", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uuid"); - - b.Property("AllowedWays") - .HasColumnType("text"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedBy") - .HasColumnType("uuid"); - - b.Property("Enabled") - .HasColumnType("boolean"); - - b.Property("FirebaseTokens") - .HasColumnType("text"); - - b.Property("TenantId") - .HasColumnType("uuid"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedBy") - .HasColumnType("uuid"); - - b.Property("UserId") - .HasColumnType("uuid"); - - b.HasKey("Id"); - - b.HasIndex("UserId"); - - b.ToTable("UserNotificationSettings", "public"); - }); - - modelBuilder.Entity("Fin.Domain.Notifications.Entities.UserRememberUseSetting", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedBy") - .HasColumnType("uuid"); - - b.Property("NotifyOn") - .HasColumnType("interval"); - - b.Property("TenantId") - .HasColumnType("uuid"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedBy") - .HasColumnType("uuid"); - - b.Property("UserId") - .HasColumnType("uuid"); - - b.Property("Ways") - .HasColumnType("text"); - - b.Property("WeekDays") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("UserId"); - - b.ToTable("UserRememberUseSettings", "public"); - }); - - modelBuilder.Entity("Fin.Domain.Tenants.Entities.Tenant", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Locale") - .HasMaxLength(30) - .HasColumnType("character varying(30)"); - - b.Property("Timezone") - .HasMaxLength(30) - .HasColumnType("character varying(30)"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.HasKey("Id"); - - b.ToTable("Tenants", "public"); - }); - - modelBuilder.Entity("Fin.Domain.Tenants.Entities.TenantUser", b => - { - b.Property("TenantId") - .HasColumnType("uuid"); - - b.Property("UserId") - .HasColumnType("uuid"); - - b.HasKey("TenantId", "UserId"); - - b.HasIndex("UserId"); - - b.ToTable("TenantUsers", "public"); - }); - - modelBuilder.Entity("Fin.Domain.Users.Entities.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uuid"); - - b.Property("BirthDate") - .HasColumnType("date"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DisplayName") - .HasMaxLength(150) - .HasColumnType("character varying(150)"); - - b.Property("FirstName") - .HasMaxLength(100) - .HasColumnType("character varying(100)"); - - b.Property("Gender") - .HasColumnType("integer"); - - b.Property("ImagePublicUrl") - .HasMaxLength(200) - .HasColumnType("character varying(200)"); - - b.Property("IsActivity") - .HasColumnType("boolean"); - - b.Property("IsAdmin") - .HasColumnType("boolean"); - - b.Property("LastName") - .HasMaxLength(100) - .HasColumnType("character varying(100)"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.HasKey("Id"); - - b.ToTable("Users", "public"); - }); - - modelBuilder.Entity("Fin.Domain.Users.Entities.UserCredential", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uuid"); - - b.Property("EncryptedEmail") - .HasMaxLength(200) - .HasColumnType("character varying(200)"); - - b.Property("EncryptedPassword") - .HasMaxLength(300) - .HasColumnType("character varying(300)"); - - b.Property("FailLoginAttempts") - .HasColumnType("integer"); - - b.Property("GoogleId") - .HasMaxLength(200) - .HasColumnType("character varying(200)"); - - b.Property("ResetToken") - .HasMaxLength(200) - .HasColumnType("character varying(200)"); - - b.Property("UserId") - .HasColumnType("uuid"); - - b.HasKey("Id"); - - b.HasIndex("EncryptedEmail") - .IsUnique(); - - b.HasIndex("GoogleId") - .IsUnique(); - - b.HasIndex("UserId") - .IsUnique(); - - b.ToTable("Credentials", "public"); - }); - - modelBuilder.Entity("Fin.Domain.Users.Entities.UserDeleteRequest", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uuid"); - - b.Property("Aborted") - .HasColumnType("boolean"); - - b.Property("AbortedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedBy") - .HasColumnType("uuid"); - - b.Property("DeleteEffectivatedAt") - .HasColumnType("date"); - - b.Property("DeleteRequestedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedBy") - .HasColumnType("uuid"); - - b.Property("UserAbortedId") - .HasColumnType("uuid"); - - b.Property("UserId") - .HasColumnType("uuid"); - - b.HasKey("Id"); - - b.HasIndex("UserAbortedId"); - - b.HasIndex("UserId"); - - b.ToTable("UserDeleteRequests", "public"); - }); - - modelBuilder.Entity("Fin.Domain.Notifications.Entities.NotificationUserDelivery", b => - { - b.HasOne("Fin.Domain.Notifications.Entities.Notification", "Notification") - .WithMany("UserDeliveries") - .HasForeignKey("NotificationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Fin.Domain.Users.Entities.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Notification"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Fin.Domain.Notifications.Entities.UserNotificationSettings", b => - { - b.HasOne("Fin.Domain.Users.Entities.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Fin.Domain.Notifications.Entities.UserRememberUseSetting", b => - { - b.HasOne("Fin.Domain.Users.Entities.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Fin.Domain.Tenants.Entities.TenantUser", b => - { - b.HasOne("Fin.Domain.Tenants.Entities.Tenant", null) - .WithMany() - .HasForeignKey("TenantId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Fin.Domain.Users.Entities.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Fin.Domain.Users.Entities.UserCredential", b => - { - b.HasOne("Fin.Domain.Users.Entities.User", "User") - .WithOne("Credential") - .HasForeignKey("Fin.Domain.Users.Entities.UserCredential", "UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Fin.Domain.Users.Entities.UserDeleteRequest", b => - { - b.HasOne("Fin.Domain.Users.Entities.User", "UserAborted") - .WithMany() - .HasForeignKey("UserAbortedId"); - - b.HasOne("Fin.Domain.Users.Entities.User", "User") - .WithMany("DeleteRequests") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - - b.Navigation("UserAborted"); - }); - - modelBuilder.Entity("Fin.Domain.Notifications.Entities.Notification", b => - { - b.Navigation("UserDeliveries"); - }); - - modelBuilder.Entity("Fin.Domain.Users.Entities.User", b => - { - b.Navigation("Credential"); - - b.Navigation("DeleteRequests"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/Fin.Infrastructure/Migrations/20251006191258_AddColorToFinancialInstitution.cs b/Fin.Infrastructure/Migrations/20251006191258_AddColorToFinancialInstitution.cs deleted file mode 100644 index 6851698..0000000 --- a/Fin.Infrastructure/Migrations/20251006191258_AddColorToFinancialInstitution.cs +++ /dev/null @@ -1,56 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace Fin.Infrastructure.Migrations -{ - /// - public partial class AddColorToFinancialInstitution : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.AlterColumn( - name: "Icon", - schema: "public", - table: "FinancialInstitution", - type: "character varying(100)", - maxLength: 100, - nullable: false, - defaultValue: "", - oldClrType: typeof(string), - oldType: "character varying(50)", - oldMaxLength: 50, - oldNullable: true); - - migrationBuilder.AddColumn( - name: "Color", - schema: "public", - table: "FinancialInstitution", - type: "character varying(7)", - maxLength: 7, - nullable: false, - defaultValue: ""); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropColumn( - name: "Color", - schema: "public", - table: "FinancialInstitution"); - - migrationBuilder.AlterColumn( - name: "Icon", - schema: "public", - table: "FinancialInstitution", - type: "character varying(50)", - maxLength: 50, - nullable: true, - oldClrType: typeof(string), - oldType: "character varying(100)", - oldMaxLength: 100); - } - } -} diff --git a/Fin.Infrastructure/Migrations/20251006223531_testAjust.Designer.cs b/Fin.Infrastructure/Migrations/20251006223531_testAjust.Designer.cs deleted file mode 100644 index 1f4f121..0000000 --- a/Fin.Infrastructure/Migrations/20251006223531_testAjust.Designer.cs +++ /dev/null @@ -1,573 +0,0 @@ -// -using System; -using Fin.Infrastructure.Database; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace Fin.Infrastructure.Migrations -{ - [DbContext(typeof(FinDbContext))] - [Migration("20251006223531_testAjust")] - partial class testAjust - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasDefaultSchema("public") - .HasAnnotation("ProductVersion", "9.0.4") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("Fin.Domain.FinancialInstitutions.Entities.FinancialInstitution", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uuid"); - - b.Property("Active") - .ValueGeneratedOnAdd() - .HasColumnType("boolean") - .HasDefaultValue(true); - - b.Property("Code") - .HasMaxLength(3) - .HasColumnType("character varying(3)"); - - b.Property("Color") - .IsRequired() - .HasMaxLength(7) - .HasColumnType("character varying(7)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedBy") - .HasColumnType("uuid"); - - b.Property("Icon") - .IsRequired() - .HasMaxLength(100) - .HasColumnType("character varying(100)"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(200) - .HasColumnType("character varying(200)"); - - b.Property("Type") - .HasColumnType("integer"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedBy") - .HasColumnType("uuid"); - - b.HasKey("Id"); - - b.HasIndex("Active"); - - b.HasIndex("Code") - .IsUnique(); - - b.HasIndex("Name") - .IsUnique(); - - b.HasIndex("Type"); - - b.ToTable("FinancialInstitution", "public"); - }); - - modelBuilder.Entity("Fin.Domain.Menus.Entities.Menu", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uuid"); - - b.Property("Color") - .HasMaxLength(20) - .HasColumnType("character varying(20)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedBy") - .HasColumnType("uuid"); - - b.Property("FrontRoute") - .IsRequired() - .HasMaxLength(100) - .HasColumnType("character varying(100)"); - - b.Property("Icon") - .IsRequired() - .HasMaxLength(20) - .HasColumnType("character varying(20)"); - - b.Property("KeyWords") - .HasMaxLength(100) - .HasColumnType("character varying(100)"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(100) - .HasColumnType("character varying(100)"); - - b.Property("OnlyForAdmin") - .HasColumnType("boolean"); - - b.Property("Position") - .HasColumnType("integer"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedBy") - .HasColumnType("uuid"); - - b.HasKey("Id"); - - b.ToTable("Menus", "public"); - }); - - modelBuilder.Entity("Fin.Domain.Notifications.Entities.Notification", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uuid"); - - b.Property("Continuous") - .HasColumnType("boolean"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedBy") - .HasColumnType("uuid"); - - b.Property("HtmlBody") - .HasColumnType("text"); - - b.Property("Link") - .HasColumnType("text"); - - b.Property("NormalizedTextBody") - .HasColumnType("text"); - - b.Property("NormalizedTitle") - .HasColumnType("text"); - - b.Property("Severity") - .HasColumnType("integer"); - - b.Property("StartToDelivery") - .HasColumnType("timestamp with time zone"); - - b.Property("StopToDelivery") - .HasColumnType("timestamp with time zone"); - - b.Property("TextBody") - .HasColumnType("text"); - - b.Property("Title") - .HasMaxLength(250) - .HasColumnType("character varying(250)"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedBy") - .HasColumnType("uuid"); - - b.Property("Ways") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.ToTable("Notifications", "public"); - }); - - modelBuilder.Entity("Fin.Domain.Notifications.Entities.NotificationUserDelivery", b => - { - b.Property("NotificationId") - .HasColumnType("uuid"); - - b.Property("UserId") - .HasColumnType("uuid"); - - b.Property("BackgroundJobId") - .HasMaxLength(20) - .HasColumnType("character varying(20)"); - - b.Property("Delivery") - .HasColumnType("boolean"); - - b.Property("Visualized") - .HasColumnType("boolean"); - - b.HasKey("NotificationId", "UserId"); - - b.HasIndex("UserId"); - - b.ToTable("NotificationUserDeliveries", "public"); - }); - - modelBuilder.Entity("Fin.Domain.Notifications.Entities.UserNotificationSettings", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uuid"); - - b.Property("AllowedWays") - .HasColumnType("text"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedBy") - .HasColumnType("uuid"); - - b.Property("Enabled") - .HasColumnType("boolean"); - - b.Property("FirebaseTokens") - .HasColumnType("text"); - - b.Property("TenantId") - .HasColumnType("uuid"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedBy") - .HasColumnType("uuid"); - - b.Property("UserId") - .HasColumnType("uuid"); - - b.HasKey("Id"); - - b.HasIndex("UserId"); - - b.ToTable("UserNotificationSettings", "public"); - }); - - modelBuilder.Entity("Fin.Domain.Notifications.Entities.UserRememberUseSetting", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedBy") - .HasColumnType("uuid"); - - b.Property("NotifyOn") - .HasColumnType("interval"); - - b.Property("TenantId") - .HasColumnType("uuid"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedBy") - .HasColumnType("uuid"); - - b.Property("UserId") - .HasColumnType("uuid"); - - b.Property("Ways") - .HasColumnType("text"); - - b.Property("WeekDays") - .HasColumnType("text"); - - b.HasKey("Id"); - - b.HasIndex("UserId"); - - b.ToTable("UserRememberUseSettings", "public"); - }); - - modelBuilder.Entity("Fin.Domain.Tenants.Entities.Tenant", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uuid"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("Locale") - .HasMaxLength(30) - .HasColumnType("character varying(30)"); - - b.Property("Timezone") - .HasMaxLength(30) - .HasColumnType("character varying(30)"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.HasKey("Id"); - - b.ToTable("Tenants", "public"); - }); - - modelBuilder.Entity("Fin.Domain.Tenants.Entities.TenantUser", b => - { - b.Property("TenantId") - .HasColumnType("uuid"); - - b.Property("UserId") - .HasColumnType("uuid"); - - b.HasKey("TenantId", "UserId"); - - b.HasIndex("UserId"); - - b.ToTable("TenantUsers", "public"); - }); - - modelBuilder.Entity("Fin.Domain.Users.Entities.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uuid"); - - b.Property("BirthDate") - .HasColumnType("date"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("DisplayName") - .HasMaxLength(150) - .HasColumnType("character varying(150)"); - - b.Property("FirstName") - .HasMaxLength(100) - .HasColumnType("character varying(100)"); - - b.Property("Gender") - .HasColumnType("integer"); - - b.Property("ImagePublicUrl") - .HasMaxLength(200) - .HasColumnType("character varying(200)"); - - b.Property("IsActivity") - .HasColumnType("boolean"); - - b.Property("IsAdmin") - .HasColumnType("boolean"); - - b.Property("LastName") - .HasMaxLength(100) - .HasColumnType("character varying(100)"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.HasKey("Id"); - - b.ToTable("Users", "public"); - }); - - modelBuilder.Entity("Fin.Domain.Users.Entities.UserCredential", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uuid"); - - b.Property("EncryptedEmail") - .HasMaxLength(200) - .HasColumnType("character varying(200)"); - - b.Property("EncryptedPassword") - .HasMaxLength(300) - .HasColumnType("character varying(300)"); - - b.Property("FailLoginAttempts") - .HasColumnType("integer"); - - b.Property("GoogleId") - .HasMaxLength(200) - .HasColumnType("character varying(200)"); - - b.Property("ResetToken") - .HasMaxLength(200) - .HasColumnType("character varying(200)"); - - b.Property("UserId") - .HasColumnType("uuid"); - - b.HasKey("Id"); - - b.HasIndex("EncryptedEmail") - .IsUnique(); - - b.HasIndex("GoogleId") - .IsUnique(); - - b.HasIndex("UserId") - .IsUnique(); - - b.ToTable("Credentials", "public"); - }); - - modelBuilder.Entity("Fin.Domain.Users.Entities.UserDeleteRequest", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uuid"); - - b.Property("Aborted") - .HasColumnType("boolean"); - - b.Property("AbortedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedBy") - .HasColumnType("uuid"); - - b.Property("DeleteEffectivatedAt") - .HasColumnType("date"); - - b.Property("DeleteRequestedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedBy") - .HasColumnType("uuid"); - - b.Property("UserAbortedId") - .HasColumnType("uuid"); - - b.Property("UserId") - .HasColumnType("uuid"); - - b.HasKey("Id"); - - b.HasIndex("UserAbortedId"); - - b.HasIndex("UserId"); - - b.ToTable("UserDeleteRequests", "public"); - }); - - modelBuilder.Entity("Fin.Domain.Notifications.Entities.NotificationUserDelivery", b => - { - b.HasOne("Fin.Domain.Notifications.Entities.Notification", "Notification") - .WithMany("UserDeliveries") - .HasForeignKey("NotificationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Fin.Domain.Users.Entities.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Notification"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Fin.Domain.Notifications.Entities.UserNotificationSettings", b => - { - b.HasOne("Fin.Domain.Users.Entities.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Fin.Domain.Notifications.Entities.UserRememberUseSetting", b => - { - b.HasOne("Fin.Domain.Users.Entities.User", "User") - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Fin.Domain.Tenants.Entities.TenantUser", b => - { - b.HasOne("Fin.Domain.Tenants.Entities.Tenant", null) - .WithMany() - .HasForeignKey("TenantId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Fin.Domain.Users.Entities.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Fin.Domain.Users.Entities.UserCredential", b => - { - b.HasOne("Fin.Domain.Users.Entities.User", "User") - .WithOne("Credential") - .HasForeignKey("Fin.Domain.Users.Entities.UserCredential", "UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Fin.Domain.Users.Entities.UserDeleteRequest", b => - { - b.HasOne("Fin.Domain.Users.Entities.User", "UserAborted") - .WithMany() - .HasForeignKey("UserAbortedId"); - - b.HasOne("Fin.Domain.Users.Entities.User", "User") - .WithMany("DeleteRequests") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - - b.Navigation("UserAborted"); - }); - - modelBuilder.Entity("Fin.Domain.Notifications.Entities.Notification", b => - { - b.Navigation("UserDeliveries"); - }); - - modelBuilder.Entity("Fin.Domain.Users.Entities.User", b => - { - b.Navigation("Credential"); - - b.Navigation("DeleteRequests"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/Fin.Infrastructure/Migrations/20251006223531_testAjust.cs b/Fin.Infrastructure/Migrations/20251006223531_testAjust.cs deleted file mode 100644 index ab73ba2..0000000 --- a/Fin.Infrastructure/Migrations/20251006223531_testAjust.cs +++ /dev/null @@ -1,122 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace Fin.Infrastructure.Migrations -{ - /// - public partial class testAjust : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropIndex( - name: "IX_FinancialInstitution_Code_TenantId", - schema: "public", - table: "FinancialInstitution"); - - migrationBuilder.DropIndex( - name: "IX_FinancialInstitution_Name_TenantId", - schema: "public", - table: "FinancialInstitution"); - - migrationBuilder.DropColumn( - name: "TenantId", - schema: "public", - table: "FinancialInstitution"); - - migrationBuilder.AlterColumn( - name: "Type", - schema: "public", - table: "FinancialInstitution", - type: "integer", - nullable: false, - oldClrType: typeof(string), - oldType: "text"); - - migrationBuilder.AlterColumn( - name: "Code", - schema: "public", - table: "FinancialInstitution", - type: "character varying(3)", - maxLength: 3, - nullable: true, - oldClrType: typeof(string), - oldType: "character varying(3)", - oldMaxLength: 3); - - migrationBuilder.CreateIndex( - name: "IX_FinancialInstitution_Code", - schema: "public", - table: "FinancialInstitution", - column: "Code", - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_FinancialInstitution_Name", - schema: "public", - table: "FinancialInstitution", - column: "Name", - unique: true); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropIndex( - name: "IX_FinancialInstitution_Code", - schema: "public", - table: "FinancialInstitution"); - - migrationBuilder.DropIndex( - name: "IX_FinancialInstitution_Name", - schema: "public", - table: "FinancialInstitution"); - - migrationBuilder.AlterColumn( - name: "Type", - schema: "public", - table: "FinancialInstitution", - type: "text", - nullable: false, - oldClrType: typeof(int), - oldType: "integer"); - - migrationBuilder.AlterColumn( - name: "Code", - schema: "public", - table: "FinancialInstitution", - type: "character varying(3)", - maxLength: 3, - nullable: false, - defaultValue: "", - oldClrType: typeof(string), - oldType: "character varying(3)", - oldMaxLength: 3, - oldNullable: true); - - migrationBuilder.AddColumn( - name: "TenantId", - schema: "public", - table: "FinancialInstitution", - type: "uuid", - nullable: false, - defaultValue: new Guid("00000000-0000-0000-0000-000000000000")); - - migrationBuilder.CreateIndex( - name: "IX_FinancialInstitution_Code_TenantId", - schema: "public", - table: "FinancialInstitution", - columns: new[] { "Code", "TenantId" }, - unique: true); - - migrationBuilder.CreateIndex( - name: "IX_FinancialInstitution_Name_TenantId", - schema: "public", - table: "FinancialInstitution", - columns: new[] { "Name", "TenantId" }, - unique: true); - } - } -} diff --git a/Fin.Infrastructure/Migrations/FinDbContextModelSnapshot.cs b/Fin.Infrastructure/Migrations/FinDbContextModelSnapshot.cs index 7e73d33..505da31 100644 --- a/Fin.Infrastructure/Migrations/FinDbContextModelSnapshot.cs +++ b/Fin.Infrastructure/Migrations/FinDbContextModelSnapshot.cs @@ -23,66 +23,6 @@ protected override void BuildModel(ModelBuilder modelBuilder) NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - modelBuilder.Entity("Fin.Domain.FinancialInstitutions.Entities.FinancialInstitution", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uuid"); - - b.Property("Active") - .ValueGeneratedOnAdd() - .HasColumnType("boolean") - .HasDefaultValue(true); - - b.Property("Code") - .HasMaxLength(3) - .HasColumnType("character varying(3)"); - - b.Property("Color") - .IsRequired() - .HasMaxLength(7) - .HasColumnType("character varying(7)"); - - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("CreatedBy") - .HasColumnType("uuid"); - - b.Property("Icon") - .IsRequired() - .HasMaxLength(100) - .HasColumnType("character varying(100)"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(200) - .HasColumnType("character varying(200)"); - - b.Property("Type") - .HasColumnType("integer"); - - b.Property("UpdatedAt") - .HasColumnType("timestamp with time zone"); - - b.Property("UpdatedBy") - .HasColumnType("uuid"); - - b.HasKey("Id"); - - b.HasIndex("Active"); - - b.HasIndex("Code") - .IsUnique(); - - b.HasIndex("Name") - .IsUnique(); - - b.HasIndex("Type"); - - b.ToTable("FinancialInstitution", "public"); - }); - modelBuilder.Entity("Fin.Domain.Menus.Entities.Menu", b => { b.Property("Id") @@ -337,6 +277,53 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.ToTable("TenantUsers", "public"); }); + modelBuilder.Entity("Fin.Domain.TitleCategories.Entities.TitleCategory", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Color") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("character varying(20)"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("Icon") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("character varying(20)"); + + b.Property("Inactivated") + .HasColumnType("boolean"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.Property("TenantId") + .HasColumnType("uuid"); + + b.Property("Type") + .HasColumnType("smallint"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UpdatedBy") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.ToTable("TitleCategories", "public"); + }); + modelBuilder.Entity("Fin.Domain.Users.Entities.User", b => { b.Property("Id") @@ -567,4 +554,4 @@ protected override void BuildModel(ModelBuilder modelBuilder) #pragma warning restore 612, 618 } } -} +} \ No newline at end of file From 46fcff47b2ed3e409e21f3dc94ff86a8411df737 Mon Sep 17 00:00:00 2001 From: Gustavo Passos Date: Mon, 6 Oct 2025 21:13:53 -0300 Subject: [PATCH 5/7] FIN-32 add migrations --- Fin.Api/Fin.Api.csproj | 3 --- 1 file changed, 3 deletions(-) diff --git a/Fin.Api/Fin.Api.csproj b/Fin.Api/Fin.Api.csproj index b91fbeb..4f9c60c 100644 --- a/Fin.Api/Fin.Api.csproj +++ b/Fin.Api/Fin.Api.csproj @@ -8,9 +8,6 @@ - - all - From f9288fa4c06e8a89f40b22103c9750e5dcdedb83 Mon Sep 17 00:00:00 2001 From: Gustavo Passos Date: Mon, 6 Oct 2025 21:14:54 -0300 Subject: [PATCH 6/7] FIN-32 add migrations --- ...007000836_financialInstitution.Designer.cs | 609 ++++++++++++++++++ .../20251007000836_financialInstitution.cs | 45 ++ .../Migrations/FinDbContextModelSnapshot.cs | 51 +- 3 files changed, 704 insertions(+), 1 deletion(-) create mode 100644 Fin.Infrastructure/Migrations/20251007000836_financialInstitution.Designer.cs create mode 100644 Fin.Infrastructure/Migrations/20251007000836_financialInstitution.cs diff --git a/Fin.Infrastructure/Migrations/20251007000836_financialInstitution.Designer.cs b/Fin.Infrastructure/Migrations/20251007000836_financialInstitution.Designer.cs new file mode 100644 index 0000000..ede9e98 --- /dev/null +++ b/Fin.Infrastructure/Migrations/20251007000836_financialInstitution.Designer.cs @@ -0,0 +1,609 @@ +// +using System; +using Fin.Infrastructure.Database; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace Fin.Infrastructure.Migrations +{ + [DbContext(typeof(FinDbContext))] + [Migration("20251007000836_financialInstitution")] + partial class financialInstitution + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("public") + .HasAnnotation("ProductVersion", "9.0.4") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("Fin.Domain.FinancialInstitutions.Entities.FinancialInstitution", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Code") + .HasMaxLength(15) + .HasColumnType("character varying(15)"); + + b.Property("Color") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("character varying(20)"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("Icon") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("character varying(20)"); + + b.Property("Inactive") + .HasColumnType("boolean"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(100) + .IsUnicode(true) + .HasColumnType("character varying(100)"); + + b.Property("Type") + .HasColumnType("integer"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UpdatedBy") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.ToTable("FinancialInstitution", "public"); + }); + + modelBuilder.Entity("Fin.Domain.Menus.Entities.Menu", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Color") + .HasMaxLength(20) + .HasColumnType("character varying(20)"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("FrontRoute") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.Property("Icon") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("character varying(20)"); + + b.Property("KeyWords") + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.Property("OnlyForAdmin") + .HasColumnType("boolean"); + + b.Property("Position") + .HasColumnType("integer"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UpdatedBy") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.ToTable("Menus", "public"); + }); + + modelBuilder.Entity("Fin.Domain.Notifications.Entities.Notification", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Continuous") + .HasColumnType("boolean"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("HtmlBody") + .HasColumnType("text"); + + b.Property("Link") + .HasColumnType("text"); + + b.Property("NormalizedTextBody") + .HasColumnType("text"); + + b.Property("NormalizedTitle") + .HasColumnType("text"); + + b.Property("Severity") + .HasColumnType("integer"); + + b.Property("StartToDelivery") + .HasColumnType("timestamp with time zone"); + + b.Property("StopToDelivery") + .HasColumnType("timestamp with time zone"); + + b.Property("TextBody") + .HasColumnType("text"); + + b.Property("Title") + .HasMaxLength(250) + .HasColumnType("character varying(250)"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UpdatedBy") + .HasColumnType("uuid"); + + b.Property("Ways") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.ToTable("Notifications", "public"); + }); + + modelBuilder.Entity("Fin.Domain.Notifications.Entities.NotificationUserDelivery", b => + { + b.Property("NotificationId") + .HasColumnType("uuid"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.Property("BackgroundJobId") + .HasMaxLength(20) + .HasColumnType("character varying(20)"); + + b.Property("Delivery") + .HasColumnType("boolean"); + + b.Property("Visualized") + .HasColumnType("boolean"); + + b.HasKey("NotificationId", "UserId"); + + b.HasIndex("UserId"); + + b.ToTable("NotificationUserDeliveries", "public"); + }); + + modelBuilder.Entity("Fin.Domain.Notifications.Entities.UserNotificationSettings", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("AllowedWays") + .HasColumnType("text"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("Enabled") + .HasColumnType("boolean"); + + b.Property("FirebaseTokens") + .HasColumnType("text"); + + b.Property("TenantId") + .HasColumnType("uuid"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UpdatedBy") + .HasColumnType("uuid"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("UserNotificationSettings", "public"); + }); + + modelBuilder.Entity("Fin.Domain.Notifications.Entities.UserRememberUseSetting", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("NotifyOn") + .HasColumnType("interval"); + + b.Property("TenantId") + .HasColumnType("uuid"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UpdatedBy") + .HasColumnType("uuid"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.Property("Ways") + .HasColumnType("text"); + + b.Property("WeekDays") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("UserRememberUseSettings", "public"); + }); + + modelBuilder.Entity("Fin.Domain.Tenants.Entities.Tenant", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Locale") + .HasMaxLength(30) + .HasColumnType("character varying(30)"); + + b.Property("Timezone") + .HasMaxLength(30) + .HasColumnType("character varying(30)"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.HasKey("Id"); + + b.ToTable("Tenants", "public"); + }); + + modelBuilder.Entity("Fin.Domain.Tenants.Entities.TenantUser", b => + { + b.Property("TenantId") + .HasColumnType("uuid"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("TenantId", "UserId"); + + b.HasIndex("UserId"); + + b.ToTable("TenantUsers", "public"); + }); + + modelBuilder.Entity("Fin.Domain.TitleCategories.Entities.TitleCategory", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Color") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("character varying(20)"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("Icon") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("character varying(20)"); + + b.Property("Inactivated") + .HasColumnType("boolean"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.Property("TenantId") + .HasColumnType("uuid"); + + b.Property("Type") + .HasColumnType("smallint"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UpdatedBy") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.ToTable("TitleCategories", "public"); + }); + + modelBuilder.Entity("Fin.Domain.Users.Entities.User", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("BirthDate") + .HasColumnType("date"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("DisplayName") + .HasMaxLength(150) + .HasColumnType("character varying(150)"); + + b.Property("FirstName") + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.Property("Gender") + .HasColumnType("integer"); + + b.Property("ImagePublicUrl") + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("IsActivity") + .HasColumnType("boolean"); + + b.Property("IsAdmin") + .HasColumnType("boolean"); + + b.Property("LastName") + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.HasKey("Id"); + + b.ToTable("Users", "public"); + }); + + modelBuilder.Entity("Fin.Domain.Users.Entities.UserCredential", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("EncryptedEmail") + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("EncryptedPassword") + .HasMaxLength(300) + .HasColumnType("character varying(300)"); + + b.Property("FailLoginAttempts") + .HasColumnType("integer"); + + b.Property("GoogleId") + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("ResetToken") + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("EncryptedEmail") + .IsUnique(); + + b.HasIndex("GoogleId") + .IsUnique(); + + b.HasIndex("UserId") + .IsUnique(); + + b.ToTable("Credentials", "public"); + }); + + modelBuilder.Entity("Fin.Domain.Users.Entities.UserDeleteRequest", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Aborted") + .HasColumnType("boolean"); + + b.Property("AbortedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("DeleteEffectivatedAt") + .HasColumnType("date"); + + b.Property("DeleteRequestedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UpdatedBy") + .HasColumnType("uuid"); + + b.Property("UserAbortedId") + .HasColumnType("uuid"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("UserAbortedId"); + + b.HasIndex("UserId"); + + b.ToTable("UserDeleteRequests", "public"); + }); + + modelBuilder.Entity("Fin.Domain.Notifications.Entities.NotificationUserDelivery", b => + { + b.HasOne("Fin.Domain.Notifications.Entities.Notification", "Notification") + .WithMany("UserDeliveries") + .HasForeignKey("NotificationId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Fin.Domain.Users.Entities.User", "User") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Notification"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Fin.Domain.Notifications.Entities.UserNotificationSettings", b => + { + b.HasOne("Fin.Domain.Users.Entities.User", "User") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Fin.Domain.Notifications.Entities.UserRememberUseSetting", b => + { + b.HasOne("Fin.Domain.Users.Entities.User", "User") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Fin.Domain.Tenants.Entities.TenantUser", b => + { + b.HasOne("Fin.Domain.Tenants.Entities.Tenant", null) + .WithMany() + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Fin.Domain.Users.Entities.User", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Fin.Domain.Users.Entities.UserCredential", b => + { + b.HasOne("Fin.Domain.Users.Entities.User", "User") + .WithOne("Credential") + .HasForeignKey("Fin.Domain.Users.Entities.UserCredential", "UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Fin.Domain.Users.Entities.UserDeleteRequest", b => + { + b.HasOne("Fin.Domain.Users.Entities.User", "UserAborted") + .WithMany() + .HasForeignKey("UserAbortedId"); + + b.HasOne("Fin.Domain.Users.Entities.User", "User") + .WithMany("DeleteRequests") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + + b.Navigation("UserAborted"); + }); + + modelBuilder.Entity("Fin.Domain.Notifications.Entities.Notification", b => + { + b.Navigation("UserDeliveries"); + }); + + modelBuilder.Entity("Fin.Domain.Users.Entities.User", b => + { + b.Navigation("Credential"); + + b.Navigation("DeleteRequests"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Fin.Infrastructure/Migrations/20251007000836_financialInstitution.cs b/Fin.Infrastructure/Migrations/20251007000836_financialInstitution.cs new file mode 100644 index 0000000..a17e53e --- /dev/null +++ b/Fin.Infrastructure/Migrations/20251007000836_financialInstitution.cs @@ -0,0 +1,45 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Fin.Infrastructure.Migrations +{ + /// + public partial class financialInstitution : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "FinancialInstitution", + schema: "public", + columns: table => new + { + Id = table.Column(type: "uuid", nullable: false), + Name = table.Column(type: "character varying(100)", maxLength: 100, nullable: false), + Code = table.Column(type: "character varying(15)", maxLength: 15, nullable: true), + Type = table.Column(type: "integer", nullable: false), + Icon = table.Column(type: "character varying(20)", maxLength: 20, nullable: false), + Color = table.Column(type: "character varying(20)", maxLength: 20, nullable: false), + Inactive = table.Column(type: "boolean", nullable: false), + CreatedBy = table.Column(type: "uuid", nullable: false), + UpdatedBy = table.Column(type: "uuid", nullable: false), + CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), + UpdatedAt = table.Column(type: "timestamp with time zone", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_FinancialInstitution", x => x.Id); + }); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "FinancialInstitution", + schema: "public"); + } + } +} diff --git a/Fin.Infrastructure/Migrations/FinDbContextModelSnapshot.cs b/Fin.Infrastructure/Migrations/FinDbContextModelSnapshot.cs index 505da31..9b6facd 100644 --- a/Fin.Infrastructure/Migrations/FinDbContextModelSnapshot.cs +++ b/Fin.Infrastructure/Migrations/FinDbContextModelSnapshot.cs @@ -23,6 +23,55 @@ protected override void BuildModel(ModelBuilder modelBuilder) NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + modelBuilder.Entity("Fin.Domain.FinancialInstitutions.Entities.FinancialInstitution", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Code") + .HasMaxLength(15) + .HasColumnType("character varying(15)"); + + b.Property("Color") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("character varying(20)"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("Icon") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("character varying(20)"); + + b.Property("Inactive") + .HasColumnType("boolean"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(100) + .IsUnicode(true) + .HasColumnType("character varying(100)"); + + b.Property("Type") + .HasColumnType("integer"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UpdatedBy") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.ToTable("FinancialInstitution", "public"); + }); + modelBuilder.Entity("Fin.Domain.Menus.Entities.Menu", b => { b.Property("Id") @@ -554,4 +603,4 @@ protected override void BuildModel(ModelBuilder modelBuilder) #pragma warning restore 612, 618 } } -} \ No newline at end of file +} From 0199b2638303ec5bebfa779d04129a6efbad08bc Mon Sep 17 00:00:00 2001 From: Gustavo Passos Date: Mon, 6 Oct 2025 21:30:54 -0300 Subject: [PATCH 7/7] FIN-32 add --- .../Dtos/FinancialInstitutionGetListInput.cs | 3 +++ .../FinancialInstitutions/FinancialInstitutionService.cs | 1 + 2 files changed, 4 insertions(+) diff --git a/Fin.Application/FinancialInstitutions/Dtos/FinancialInstitutionGetListInput.cs b/Fin.Application/FinancialInstitutions/Dtos/FinancialInstitutionGetListInput.cs index 9d761ba..7bfb950 100644 --- a/Fin.Application/FinancialInstitutions/Dtos/FinancialInstitutionGetListInput.cs +++ b/Fin.Application/FinancialInstitutions/Dtos/FinancialInstitutionGetListInput.cs @@ -1,6 +1,9 @@ +using Fin.Domain.FinancialInstitutions.Enums; using Fin.Domain.Global.Classes; public class FinancialInstitutionGetListInput : PagedFilteredAndSortedInput { public bool? Inactive { get; set; } + public FinancialInstitutionType? Type { get; set; } + } \ No newline at end of file diff --git a/Fin.Application/FinancialInstitutions/FinancialInstitutionService.cs b/Fin.Application/FinancialInstitutions/FinancialInstitutionService.cs index 5d416e2..d00dfb4 100644 --- a/Fin.Application/FinancialInstitutions/FinancialInstitutionService.cs +++ b/Fin.Application/FinancialInstitutions/FinancialInstitutionService.cs @@ -35,6 +35,7 @@ public async Task> GetList(FinancialInst { return await repository.Query(false) .WhereIf(input.Inactive.HasValue, f => f.Inactive == input.Inactive.Value) + .WhereIf(input.Type.HasValue, f => f.Type == input.Type.Value) .OrderBy(f => f.Inactive) .ThenBy(f => f.Name) .ApplyFilterAndSorter(input)