From f560e07d839eaecde9d84853c053201cc04a1cf9 Mon Sep 17 00:00:00 2001 From: Anthonius Munthi Date: Sat, 18 Apr 2026 14:14:07 +0800 Subject: [PATCH 01/10] feat(finance): implement financial period management with treasurer RBAC - Add unique constraint on (month, year) for financial periods - Restrict management actions to Treasurer role only - Implement Premium Hero dashboard and period management UI - Fix type safety and linting in finance components Ref: FIN-01 Closes #111 --- apps/dash/public/assets/finance-hero-bg.png | Bin 0 -> 693739 bytes .../pages/finance/actions/financial-period.ts | 176 ++++++++++++ .../ui/CreateFinancialPeriodDialog.tsx | 159 +++++++++++ .../dash/src/pages/finance/ui/FinancePage.tsx | 31 ++- .../pages/finance/ui/FinancialPeriodList.tsx | 259 ++++++++++++++++++ apps/dash/src/shared/i18n/messages/id.json | 38 ++- packages/core/src/service/financial-period.ts | 28 +- packages/db/src/schema/financial-periods.ts | 58 ++-- 8 files changed, 706 insertions(+), 43 deletions(-) create mode 100644 apps/dash/public/assets/finance-hero-bg.png create mode 100644 apps/dash/src/pages/finance/actions/financial-period.ts create mode 100644 apps/dash/src/pages/finance/ui/CreateFinancialPeriodDialog.tsx create mode 100644 apps/dash/src/pages/finance/ui/FinancialPeriodList.tsx diff --git a/apps/dash/public/assets/finance-hero-bg.png b/apps/dash/public/assets/finance-hero-bg.png new file mode 100644 index 0000000000000000000000000000000000000000..702d0a86fd0e7e7ae1e7839fc8a56fed33158ee7 GIT binary patch literal 693739 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 z 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 AYyhminTdJmC=2h!{~Wg4s<-C42QQ=B#6 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

Gz6rG=`^Ja-8j>l5gO z8xGQ=G!C0{EQ%#|a^KK|KeoT^AFJD?@QcBAHZn4q^=)57)O39v70S75cek!#l>MPElkJ+L{66rdn#-A@eLGduFWUiGXPn<8al#~#6?NqO zv3y6N2z=}PBKCJ1UDr(1+H2MduJ36Q>rxLZX_3}Nki-#7D@%oA-s8PovOvzkw`}57xvotr+Eyb`E+!SIo=s1(ln`VaIq=#9&1fY zS-52?qkMrQMof{002D8uMYeS}e-AuoD`8X5gTh`Uw7UojmL5^lS_w`|76At0Sda?kzo^Y;_Nw@+c_A7v zi?ll#Ci>&v7|z z8uLq;ljdRM-Hlf7N1U`n&8+B|JKeoLg77?|bU4^JXr- zcTW7696gs<;^icyw0`TMr(M(ER`*}ej*z}Abe1{%6XTf0-Qvn-lffP(Vv6e=LOGHR zIRIf66wZc1%CEiEQ6nCar+8b%tqS?R5b5VK8_xrWmz;4kcGfyOQPR%(Z+%;A{9(87KZ%(dHSkx9&C~g} zA3uh?OB{qd23Kpf)5AL9SeA({a}aP1y;Js_@zj=4-rC$~SCP5568SbaGpwsI$aq~f84mD=b2e4dHZI6PQn);` zFN100F*d(kJS{C%_4b$5Z?BqKX}mKm%1JkZ!)UI*+Fk6D)!ve|pIcjPnfOPk_+Q2o z>G8UFGsX6Lj5FE@ZXob)h+253N8Kd1D!OXOk*Q#^UB%_RyLN4X(H%Wc!%_Ip#PP?Y zc&EXhHj7k_Ca}|dQ#XWsLn^W?YaiIPvUHCo<4w2@Pue!KNEtlTx4Vh1YxSd2{iQs8 zX$oA&aiL8qXrhrm#dRcX3mx-p{?iT?BvPc{jjj&TSwP3Q{iu9-Zs7xXd7x-roQ*e7 zc2-9y+oN4v6h_+Yg|Jj~0I5pCSzcFFS>rJZ(z=(hhcsJJTdIw&uEoo=1JuIF1md@_!s~?p*r^4?L>ek=c8mEK2R}A(~C6$J;CxyI2el+KI zB0C*INOZ!t{usDW&u?-FxUd;6k+fm!$ffWP#BU8>{{Ug?o(A!u(;Dg)`%&=Ei7%tK zg_QX(Z#A`;i&4{LMrKeXM%t_;5w`Y!+B;v`cgIsnHJ+h1hXA<@mRIrVmj)zh7{>&6 zfwcm%TCrFC>N3atBZUZ#NiD2yiojfzv(!Vrp&&YZq`JI- zx0YOn81oTo7(4|l!dS}lgq4z&2&+o!@`Lt|z3i{8`foKcnECR~I4nA!GFSS zxGp<8Z6n1ts?d)Lc&TGscV#j7L&ODP+7>iMiLLy#l1R~5u?2kG$gV(U2 zrs~4SR*OV}2^foOxNNWEjh)yKu4L3?PbyNcF7KI6^X0oT$SUFZ>*C1SrG`x$qbX&D zqPaO@ckCf=y2vtA1}YGSM(1c!%kWxB;_A4&wB04M<{B!>#7h~>F@w0*s6rPiLV>0eH6pDlHEz0BS}GEG0K(R*)M{{VHn zUI|-Iy{^eG&F>ShjPA{iy}yNgP`YSQHP-JAYWu~)vc()KS4@eq5#J#plt})25JB2J z{^!F!CK82j4S10T)|BHz)pr6x$Cf_Fk&%KCSQRVsm)pnbzPs_C#nB{lS{*V;vkX#~ zx4n`x9EWk0w%rzDPR)T8NJb4JVepwb z`~GYfI3-u*J-ZD3+>_I|_s_0#GBF?=cgrKDN^|h1I&#unPrkd&2=`^=#Ykt}!zANhP{MOnohte8$y`vc=xSn{h!)Def z-Nz%TJdk$hmd**`Yl-p3wWnWNtTvLX1!f93Ck#o*1BDqQfI&QgjPvD56Q7suBmw~C zjykVFkf$I4fB@tXgS3fO%rOP$2L$7so_pkwE6*`CZl5TiW*S-K@&M5Cy}&rp53;~#ph zt%`iW%@`oy9Q7jrf_cEe#&iD8(N;gRRE&w^2R%!3o{BS`ybuT+l0fI0+UrfVYWr;M zzmj);_WEA>*(9{rZ57%|`dL|9OW*I-`r3(oqa8Wxmf(;+>EL6KILAy5nH?vBWh>)v z1f9Wl_}9WD921}TsC4GRCw6;+PTn_kC!F@t_ku;_9EHIoXQ0PYHv|3P2Rr}>1oVCh z(A;?A!315~zC3H;6STM9Kk$)hzb<(>H~?S}GBd_2iyGI|@mj5DRaf5Lc%?qXd0Rq-P3?nrnB17va!TxE-31_bf* zlu5g&=Q$_7eF@0m^yqs6GtGTz`(x+^Z`!~1g_Uk?qw_v0_=WZ}ZQHopu+L0@2*~OI z$Rv?pI>q7Q3B~=N4TT0yGqiPXfbQh|ayiL4WYr?FoVU*fhqCJ5vZlAQvb&1YM%L)O zc9`5&-^Z%2eP6wGcXaO7>28te`j`pulfnRycKCx?KPfzhjxtX>xo$=Rf!C?YuPJ5- z#GHHbKA(>xj)x$RO7=}#Pu=k2!&XC3u^wKpsmaUyq%x}D5~CQ}2R^4H?gqTZO%##F zqo;9@K$khrIp}+wWDYaekOy8B#X?;_dsX-QcTcv@dwJ>Cmb6r*88-B#1?gzU`fl%T zyIZB~be9**J{j7=ta5Sl7oV_Xz|7;-}$PfR2DNw~p0{{XZ(=m{r-p7_mQkHby?CsWe0F}M9AoN>-^-v#g6CR^9GYvOMd zc&k#>EH3pcLh|VlTFTFBHT28nK{Q+`WVB77KHb}qTMBWFZwb$&Y5Fzyh~)8ZoBsd_ zUF=u!TiWU~&ZA6<;5uB*5+XmDcW@Yl1*1e8OB2$(Mm-7CXZue}+zIP-*Pg$39lcLn z=Z;$1E0d4yO*5SF_JNLyMh|{L$3SuiB$|mvn~yI$R&lyZq*AimX7zTrX8T7pl&+F| zw@Im8rtI~;%|^>^{ztZWL2bM{9;;_{t!Sw~iF8Y8?OOgbJ&sM!n$cdJoHzlQRe_E2 zHv^73xO`ioE~lW5XvgRO0Ew2CpbR!AJpmmuow^VYImZ};;NQ*P^`O4=*v*LNJ%B9e?YzR#<*^}gG?_FkvI%ddDxSMn{aHCt^O4GYCnYfI*d zBZ}_b#8ON4U;$miSjdS$!mDlQ2|g3zeOfJ7#5%sC0)q|ip>c5$z)-0qrIefwNd%nq zB;+21NBxJD&-Rv?gPadMk~$O7a6!&+bBuwUgO;5U_L2RgrI0&)pz=;R;dvZjoP&szjuPU&xLTYYqGq|bx3RV+sB zYfL04&UQg?I2gy%9liOkZ3*Ly4o9vC$OMu>9r*PmU>w(F9+c_feMttPrx4n$ixRVw zjgZU1B{P$ribm{buU>t0**jlYV=LBd{M_?`pptk8oc!4w^4rstZzh`fo7ro11m3Gn zUG=w3bTX7B?%(-VoweIfTle3w)yCug5Fm`)FN$}O$^QVC013$5&vH**YnoBhZbJV6 z2`8p@j2z_WAoc7v<0qc4>}F_F`#IKUX-S3b5*pkn6G z<+&bc$;bfkS3KZk6USh@F`6?=+PmKM9p86o^h;E(w@q2M+^Wg9O85996?C=Q`{>j2 ze=;>34nPC=fyw9s@<<>O3h{*}E5JE7ETnjDAd)v=%OaL=NFZek9(lk6X)Ay^9mZH} zk0b3+91u8=jAOP)$TRkSJ;wD#a}z;JPrF_y+i-N*NjV~_=E=9+hV^y<>G zZ*4StEne=-=d)5$PS1CKsang^PWm&od+S??H5mTW3N^%$O0vHw!4)@+#9)$gKnIMT zag4w1_O}w@uGSH4JaX;_0(Ff7w#;#yt^mde&jz^RW;zL>CjfomdX5`78;?TWG6(}b zLj9G97?L6f8O{mh5JoTvErmZQKaL5>Q;v%K+g|;WNvmkC(rQZjEmFCsw0*9$+5SI^ z@7ullHIm$2&v26}$9NqSj0TLh>@mUNNdu`QXQy1;YrAtBS__0`5G;RbISS3VZc@RN zx66Tp$s`PnV!1Ve@Dxi90689JGDbeR$?uWa4z!}!mpFJvGJf$shm4PYgOYFuG+8@d zNm*I9qq60_y4k&YH?8(UO}>sw&F`(g4x~3 z$pZueTc4W%R$c6h_e@ZNFrX2Pe4$g8%XK;A5xo4P1QApOAwd1)XE@+6&T)($a&dw) zft&%sH1QDt<&*DWM&K|w1LnpUWkzs5Zkb$UZA~S!zjm#q+;47ec2={t{gsK8-O_fw zyW7#;>vwm5RkpX`c2-OQo)nYLGDj>pxvHS@!ReWr!9=G-M|ctCPxiU zc9s3*f6rBIJ#<_4PX7QBQfa2u+O_moe+sf&cX!)Pmb=-wx5BGnE-*+K!3S^~Ny+2C zA2&mTg4F^lG07a^hjW4gj!r)D7$A01pbTcWBgEtu1uEofYEH=Ls~LyU{1Tx?c9y z+GzXj()BVKlrJ0;&&oFB5t7{ff$X3W3fI9#= zY?2AU$j>CM17O!zr5R(MJ*wX)JC1O{LhT!v0zqID5CAyx!tMmuE-n$PN>O&(SGw6= z>euGir>?ucyfmCA8DB{9^tOwan|nRp*7MrO)6nQJYgUNy>;#C}#uOG}xMQ~mh9_p_ z!Dc&00c#-m9_rfT<%#^Jn_}&Vu0i>ZLaThIvZO{Wd#+n z@s7E^3wUC-hT*iBZ!NB5f_v+&D^Juq-`TJBM!xvH;w@42ZB8!)d@S%avg@A|{wHb? zs_C8*@cIKc*sPvq`#tB1^@!n;9S=hTSm+-Oei&%a z;D3Oh4gAPF0pRV=9p*6~Jddhg>Q@!{W_!fg zjD1OAa58+=Eb3N{s*EMeq%D8nO3#+p<@luSWd6S`$?4&us#cAZ60{n(GrHBi)K!yr zS9fmR2>vyEa)ZXFK=99mv^cy2@Nd8t$4B^O@ZV0`9j1e(sC8{)STQ@Usp9Qte3u%o zrE@jZu|3Vjv{TOWU*GD#hyMVyF20idNAapFZ6DiGFw5=-%(Jv?Zp*V0Sf7-D%YlU< zYwmv*__{ciql!#07+`P!#z*mBl1L{ZIb*c)FrSj28@x`}9}>K1e8wtuZ~~G_FZu$*3FmcGwKuIT@ zZa%|5E;0pv{eq&Y(~NaZb=vOHYTDY#JK6sL!~S23sOKfGWv8Dlma9)TzU!Yud_a&t zzz>9{Bxl6m5Em>l$-00OhU!Sq1LiwOJaT?kcKOPj=bfZ59GtQltVs0O0a_ z+iR63t!Slo*4(>V-#;gQshn6;l9iITJhxxpPhI!dyS4WCjq4HvsQ~WfTPLqfFE|*^ zN6HsJbPQ#i(R61KnA^E32n+!kIBXWcz}eIQIOJEE**+OTCm9EJcLUP^lgB53S78W>Pcw5% zJ|=uGgz4TN*M*mcSC6&gTHJ_Pa z#(dn{2ZhDDR53ImUJ}E`ZB8myZltX!-Ciwk87oRJXQj@Zixr5W3`I;mdDEK3&sa8_ zk1Z=Ey2Yz5R-a~`w)+iyPx~nRQ)h1-crV0%0Q^yKzc-2g7oY9_00Yf%#FIV$0E8}~ zc`RbyH#8bWm8*=fYqEcNQ9tZ`;$IWPE~D^A;zz?Tjv8Wu@z`jZ^{0lsWRYhox1Jc+ zu7nXyw~sITYt3mesR%q*$m)7>5AgLJ$?m|Or1AzBV09U*Q05zio)>s7qhQe8!6VyT z!phlG4b&`>BV>{qH&R(gPX7Qq{fUgi+2vWSdNApR#zX7abd{{5DatsQE{Q7bC1j&( zU+7kAhOKDhvg%bOr#2%ECxxu_S8`E{q}`S8DmQM|cW(X9ioO&4RQPXr?c)!J-Z=1V z@jv{8FSJck%Gn4lmbcd}B7HhV&gNMlzj(@x%ExZwb4B>I@iNcs)|UQ0@dfRQO%N6u zwe)@@vD>&V&$4T=>Tm?w6ctqpM<)X&yRQg-)88Nb4HDaE9~Jyq)(WCO?9F=ZJXNNc z@K?(FH;FCvGO&;W?S@E(&{yu)qCxvs>K-S#x3~C#@KfMFj_0_VC6iUU@H%KZ!FQ1X znBQqLFf!y4NvXzFZ8Cmn@)+c=oaJPxfxrCb~^W_E!GOoXK*A@4?>}yj7-^llO?X z5ZT__T-Yz~0GG;=2_xDBcnWt8i}nW99?Rp!_LLq)9whi><2^7TBpGMZpGMc=S8M`Z zW720Nj({;Ga%;xoRXk4#=Ma`zh|9f&8d!+Ntf)SDP^k*d({yW9vR=;3zFqE?_Vuz3 zOg9l_l34mU-)U9Ra;B=Jl~_7wuaFD8tL*72_bH^?-BTyQf44y zJMI3)*aQ*^$I?uO=8|NFAkRXz=ce5vmTyZ={nayLU;JuWg1v;*yzbq-i#wwI5JEoo2eQt60zZ-rm+*>uP{6_Hx zkzmMGth5WeZwP7o2*WSgd@TlzZWQP46f2FxAmCRwp?E{be-SUq@YjX>VdK3@;!HKh zm85H4C7I-Njnir|Lv)eko$V#X%7DXjHUSm%L_f7}hder@{5buWKWFa;Pa6LKqw0F* zi>Y}309b*)<(!e<>hjn>n4}V|A(2A>Sr0?ac&GNl{iFO_Y}$PP02Fnf4{3WEHPUp0C1?G53)(#RyhT23qju?GDb$Rb zzKh$(s!vnKtNocD_nhAqi&tLe8jSf}`CgN+I5l^>_D`+48 z;AVhO$oIbzd|Rd4YVtUL+u5eMk&B$2(&UrF1{takFeLOm?eq#x&@r3>OJ}A*B#dV{=#EjCV&D8J z=Jj1StHR~f-VTk|E98|`Dwvj@-sNg(-u%7r{?fr={{Y-F>S}jZ#A9dms);8Sr5HHE zgj#)FIkkQJ{Tbtr+LPj+i?oB`EfVKR_*L-uBgGGZJ{4HEgmhN7lPl$Fch-)&&aNa} zt-{@2t)PS#QuU`k3;II_^o(~U84}E1WMCVc7H*=`d zoaFa&oSS#m_w%th+*UG5b?a29){#<^7hHnLb=>d2_&5KH~{+K zbR6I=K^dx#A?K2L$Q_guz$d9001V?j0LWuV?!5sd9D4NNa&mK!0m$Ht41vg~<%l@o zfsRfNa=$4c{n3&z0M8&~oYz}@wpu3A?wzjIuV0?3`s>b>?Ap;<*Xy>9%WakSwfyYn ze2{q@g2ldJ+l-J@jPcNJIb7o=q1*vE$rSku*L`rYZHT3YP$`^oU^Lk^^1w|)TyiO*gM9Z3L<-!)*(D{d!n9OFD3SdubHY((hk(?O$D8(V(&xa5BfE7X*R)BLJLn z&IrKHKd|p4t<_& zR>~>k+G4x$1?1X)g{{JrpnPdGB`>4! zw}UhdI^~pxir(hq#aiB@8ac^Tn(Ic6@aC2Mg{De^WT z8$jz{1bCxdo@wL=?Abe5~n(5pa3});n(*MBbJcljF3wZMtTpM)3E~?$nHyb<(Np|=*2rZG^E}A=X9@ky{~7h zew(A48Cl}0xoc&jj9RxYmP@7Vy6dBQ+f3WL$zzdS+~DURk^y#Lc{@R2oSr#70jz6{ zc)=U7a9DyDl1SVE10;e*NyZ0Gfa5KftZHF;91s~v7;Ly08Dc@e!wlmDfIH^6EA2tZ z2<%B?lH39_k$}YH^v7jkmEfP3*oH|C2R|uk5VVr4?~sXx+RSjvyr;E*=$t4*(XMxUBo1!3?j3206eXTVnDkP z7Td<+d7Eo_HCyndh!JICRo~3ysGdX_84$*)Zvn_(GpSGu2z6`u9Sb{zd6Y}Ehi|jn z$NRfDN}=8fm4mtxMt)@^ZCa9h-|QU&baE)vwJ4;rvBAuc<^e6$*l)aLw^n_}I7^u# zKmwzh>BG&cah3I)VwKja={LRG(@lDIyJj_^7dc+`hO_0??(3B|*6#gNO*H$QhmEy} zC%yj6x07|2lExDvNW~_;3$kgx=~q}lFsD*>%IlLMHN&Q-WTfu61Ix(BR{@SkKXj5n zz#&N7a!%c<&sKR=Z!Z@tOGy*1{Ok)gy16HF0f1PZ6a$7hEH^X~O=%iQ=J{;wS(&j5 z5gx(4mn0AXAntFy#z6pAXEw`!yLW9`>2<2t)gy(jX(sN|PeiQOG@!Tb_;BDTu zk9l>at3a@-?`DZvP$~l(F)SRmLowroIBXC>3ITMJ>8ja8jI$|>ZB)QxpPg4B)C2P8 zd*HE9Sx_2IOLuk6Zrzg6y}X}CuaMMZ-8SF5cXsx+sXujZeIIzMYp9+iR(-L=?00#1 zFf$U&e&7Yh7a7_{+y!m_05Aonxzz4sfu)ua8YUc>NK$|tyE3tN3O5A+0fI-~0J34F z?Y`wW0|jK=ZbV^^3ftKj?jcDnmC0POz`!{&-Ak`u$EMqE7SV2!@^+G6A$+w4Nu`mA zA7z0L?*S@X0yQ~i#NOBD(Jfk&Zp%;jWSzIRx}6cGo3*aou9HdX+E#ieWvjDyR@~UO zCti`SE@t~KjbNf{i-`k}RB*ckkKSF*IJQt2q-0IWF|Bnz8_}+OUwo3d{><>sldu+W zJd0RMMk7TJ^4;rKxgy#E$LDOm0AVIBg{9s2$5FP>bSU0E6HgLdTwTb7N45+#=ZG~8 z!-(O*HpuOa?NB#lkFPXe2kBaFk!20c!%x#}<6Tom(x-|!n^2HV8Xaq0v@adQ>Q|En zOKUx$Z6J|Sa~z3qmfk*Nn!^nj7|E*BNkuESO*<>wMC9A_TlAIvOcn#$H7O^`pSm%nj>#F~EhXjSY$&dJ?m$r_;RKMBXjK>> zAn`4v_YhjaZD}jbXZAb$SS{w7BokUJvtsgMBW9N30`|!jxLcMJ2%$+l3cg~%Gkgo+zl5^W3^-c$!5Qz295M8ycp7`0kMdHOpKv*tLi{bWWjYFcJDSV5W%z+GR9Hjx< z(rh5OyvKn2KXc;EUNhxQ;@=X)-($Cwj3KeKmPECLWfDtvzMeKl4(8ROMpM^n+CPE( z6jxdJ&*K!={7lK`!{OLvl3CSC`KBmzyFix_#kpM)ON7%cqhe%O+80I~4zc@3w6OmG zW_T;ZHyUo5BM6bkwkdXzx`b01gf*s|R0eb8rOd$w!*GDe8r~xliA`bYw+$^eojMm> zx8>$>l|=Tl<%{U7tc6aEE>}`fRTI%C&o_A|c9Uv4Y2M3gD;|e&;5%pxI*-Lq6X%YzHi5y#iy93%=*hK=fvAJe(y8Qkw()2rc^zR2~mNu}@_E-@t zqmJU_O?F9wYv+yD*<3>y47XQTN@M|Kj#Y~CH2K!|$38yS%FAuwc}S6>xRv!8FK*va zo)g5EB!~sfOwQ-Xki2gGTVT3iN<2&PXvPruV$C2+gCp6ktmv}>L6R$h6y>~v02^g! z(l8Y>5H6B)O9@&@dur6%PvCVU7=4`-AnkR#>%O|#?HbU#ROz_vxw%_+_jGOANxqIY z>XO?2qv9Kuywk2l#nkXkJ*up_&ZP3mV{LyVg=DtVwEJT+UEdVAc;dISR*!PT%{8Md zA>g%xWO=!`ZM_4Yd4Z6aP77KVv|8!A*ZEpa?G-A*F>-v- zedLUMh8sb@9(e{H*FFrk`BVsW-olFfxJG>s>ee8zbsjP8|-fr(6E zIqfIKHmN44tghZUajvCP9l$DZ-v$~3Dq}$U=-)^6upY4;K(|W!4=$m$Twfc2h^|ii{NuX=%FlUK( zSzcSpvjHgE7=mN_)@`y}C^Difj1QQE6bXX4(CS)_khj0t_g9v|CJQnWjiGvg0 z_Lc3-GbvS6Dy4JD&*2;UWVyKTMzFf&m`5_`*?Wib&cn9*!`g(V?$udYBa!s!WL$tE zi(uM(&VLYirpig4eJavM+b5YKz0H){%bm)gq1xmE!)PUm8_3a&RW+AtWcIN|F-e(Gw;r^_a#2c%k7Z<#CTtn}!a zGpPpGw2szSN>OWXd09BOX76!r=>_$+tH7NKh=gzwmxi!?J_=ob>XA)}bgkt>vMUaedz_LVy9+j_%Xr z2Zr_4n#aa=BT+_0kNZ*LOAipjgrsbbx-+M0OBe-K8;K$FqyV$X$~NDd!f7py&ZqF- zSBu2DDgxSvhh#=(jhRCgz0h4u_QiowCElC>FNU?XX!n@(h9Y#IEqZPWO*_eRQ+q3^ zHFbCPWS`{7l^99$QJQUD(M`r{XR24`wfbNAZF`(R@v2P^Ws7m-F|V7_ClO^oHi5cx-IO)4(+%ZU`0F15<* z8hwr2f*W`afvHRzeub#BNu}R5@#g;kXWbL>O(Tyl%Waaux66@BhFaocyVf*2sV!C; zkRoF8XxEPDzzlDFI^b;*BQV(-D?V2ss}eTcxy8ZriODk)O1b zZ5dljCfA=TS5kLUN$S$uZEkn^vq<-5I7Dp@p1)|8HdR8*1d7>{l+DW%bN)5h}-~PVeT$5qQ-OpLW}RZ94KiC^8aMva^L{VO-vk;u|Zt7(mfS zGrXdBB!n%^v&pk@l?;ozB_ZR;C0nM@8;m_p)tzRV)*Z6_p_)k~2oBS@mp~QR!a!zr zV0^QOL$!7cWgcrrNhhLOTFvtBWqog|z3lx_QJimeuG%hJTiw-l(OXRx%hSBnp|{p; z*TeUah$mZ%m~_jFkh4o^a;nTUsonOeM#{dOIg|;aAeUx9&F5Nvu|1@}@Q&)xqH03r zk}HW?NW{>gX!a?5VnhLg3>Evpfg*zaUXyyhAcWdaBeu0`3q=&2cR1Vc+lE7sD%GM? z2%@5DZxUOFQAM>zZLLjX?^WYVO9`TAiBVgv+Iw$m#;6c0_THP{oA;mmpW}Ew$MHP( zeO>2C`sFZPx3Y#DJ!%HLeUj*H@X6*)(E>TYZt7%ORc2lU^6^)#)6Wm>>;wjL<`WrC z?mWIi_X`_1BBx~wD|rpUbSkl*I>w(lrfz82AQcj>s?nQEJ9~kQ4zE(z?7Cn?Qfigy zW_9wspXtm6=DPZ`)%Z*7OpgHO@RRL6n?&l53w`j>_z#q%T5Ql-TwGVffDxRYDi8O| zeC5YX)(3E3yj%89SX>;m{Xb{75I}*2|K)#lZJ!-O^~(nnZhpK4&-xd7F<*RJeF+D1 z=^&GS4JX1n>N&i6xKfuA@oe~-Cy%1vliyt-e7rufY`thU&Po`a|7nWjL)MQCZ4|ms zm6|-0Es-28erTwFYg+K6d2q+ZD+i|{<(#d!MNP>NQVbk?j5xk>v4Vy7@~`hfLC&$NwE#g& z>R!qrT@sL+BZpF{@I-2;Sb2TW-@mjN2HkrJ7vX9kI4lSbUx;f$nBcp%CR}s;REGCv z)bX3UIZX1&b|uMD$lcpVRWhbp%V0mO<}`$J}) zo->3dv0l~XSx5#WTJXws~|$LRU*xg{(FnyVX~!VwU}i9rW`7}j*9pl~L)yqGARma;0YtZKjq;7(skWcn5}Ce8IL z(0l2b4X!kd{o`(*ngRCI(mg!PrURTI5Uqf;yHT+qJ(Wd`H?=HZ$&TeTcY`d~xWQ0h z+MPCTx!8l~AjKcAQ9zdjvV)LT;8{6QstXVnd*=sE8A7|h@UDv78utMX%r?nJX1ta4KD zN@gdkDxqlC9u&*|BLTA5KpkBNFi#^nc=AIN@eb`p z&S}e}9pqvR`vlNc@CwDG(SS5&4?&7@ipM2;txQgkb0*S<>@41jq#!P%PH9JBSIyZI z7^DDtuf48p?}pNegYZ+P{ll9<*G*iP6(YVZCJ zQ0=gGT6mKY%Jcv6UBCeQQdgPmvRhnl9|8hF1zH;@GJycD&aO22AcePbt_IIeR-5B* zDkIEr9j9MjOAQ>n>jWGHpqWeErwZ&)k{HZ`F2WHGpvY6=D^1yILoxtys0A+*L9 z3fGb4Gc`^H9~w)2bxtOBuTH3atECvL$~*Nmi6Y+I$?5>1oZ{tS^$Dwc3mW8spGvaw zC3ow{p7vysx}87)E`vS|3S>ckmPcD5({h?h+muW_P@D2`8-ax;N~u`#okbia{3;6) zk7c^t2XIPsl6KOfI^r;=oZ#h<`^K)`WVFf0e|E=L@DnNPHE8{fmAu&$>vt1fr7Iyb z#Tm(?4xd|0tLtz{+-=p7K!}4|8G>*t*DbOcsEsY<27`;>H4wIJ2*&cbjT6yh(Z3uY z_BLB`XEc02=MOc2xuP1xe%Kj|+4m#t17UZ&V{Bm-fa}%;Ka%0Qu8ITz20-IeoMq)6 zKdDhOWh6J_c~!bm5bwF-cs6!6A>lo*@hQo{U=GLm3~>j_Ltbxg6Jw_6GlbZt5WVMN z3LbIvR|%{Zo>j7c&v<0x{5zXe5e(gv1&E48k-Eh9fBfOt9+%2aF#l~x&A;H{D@l$vQ&8y4iGp|(l7IpcE z8I|TM`>H($)||YM+i8K$d%um8WX0qfX&I@H8vV+36)$w+QhNYIAFnnjNC;LYF+(W-|RkT-~R5oz_xkIR^X)V=@A*>`l*v(CF>33(s8&T(e z)gjTm3*!FaO3&&iUfs5rZpE3ConOK2t}hJ@v%7V zlOHU6{%}h4aR>)S1o>_J0SN)D(5bBHkP+X_Op}S;@Ivx?>g_oQbtV+Ab;i7ifp~#sPs`JP34h~lU&01X$9@-Oz%M*@UDR~C0Tq2eF7XY z{E=@w?*J86sH&WC*j^tnk1LAI5>8;ym3%;>yb}~39OQ!bVKXSQ2WpR(3OyvJpOwjg zQj;oo9DN8^92z!u!xYrM%5q9o2$L&{KXW&c(9+Foym>(&OGw+1sj@z8N}fEeaWEQM zov2_xS1!#0BqCppUI2l#EdYyrR%x4DU*>LQ1WDb!R`|w7n&xwtA?ZVD^Z9B|=6g%K z0x2^eRl7Aw2&m@eTe1hL14{9S2WaQ_ClFe6fD4KS?7it`q~bYN)0mi~ZrhwhTooMq zwun8tH4zvMbTZn$V(p~9|KBr0(o~HH(DmkfsVjvdD}W3YpxUm#HA~S3-52#uQtd`un2Jh+W>h0^>ld8QIm3ib0pNJnum6I>_VVO)y zM)zI{S#-t%O;FTH6XW+?6J{%wXNs>eahvz&%zgdV02GhQk2i`l1O6YJjs9g21OrH8 zTzXA9&>#f#E-v!2=WpU->VH2j==0$~Zb*=_(g0*l_5lDf*e8iTbIc^R>1)Kxua2== zlExnxs{;fkaxw#xTk3~Rv|r&S)og5~p6YPB(e}WQU#zkw*cu5j-;YDy)PSfVPeJ^;@anoFU)ou>Q@L!$+ArGaxs0i4yE9F_Ma zF)l%reSL4m=3!AhKr(6%0>Id#TRIKdRl}?D7S65E6^v3r z$oglkaxz`GI?ipGRGOXc30XDF*EiQpuT-V=<687t97`P>vHI23e(rixj}a6T=I`^D z(T(Oi7hh*7?tCH%dqW9-QV(VjIboEUPuy$-z*+);(!_D-afD9(IbW;6!$ur@oo zV4@g@b%>V&ALxGIDF{YD^k@euwhquaRE!o=*GO##r?9b4&3haB7v{a1X6Lzh7$Vlk zVw9eghC~j%3cAk;g3@F)xFzxh2azBEJj;W;2d=3XI^REJ&YMhJN?tnt4~HoCTBf5JXDmcJ^1nU?YESKO01a%>t4%n;pFA<_>YRTX&$?Bv55B=F8l@G7ssb$ZM^@Zuqa7nkaR)^bc##U5YkI zJ|SN_oHjHFO_qK&1N)OKnvoM}c@=rvyN>+w6yAEv##^`i^_2G`e|~wTO1>R_J$@PKIE& z)2N81%`j>08tdA6}Gk1;Css^a-NLVja4nB&msvqnWJA?~Z8<2lGxt3@LRF7f{LQ6)K7FBdS)*2a(mrCD$g8vv3*hF477Tq>^*6~?ci{i66Bmkhi`8^VgujawLp#q> zTgHACmFFXse|+9Sw!GO(;10bFwi#Kr6j?X{m4V`}_Q;jvJ2kLsU5iF)M%f$OpDS@{ zNL#o1Z|9RRB&j)y)IioPO0miXp~1r% z5MUc-`3L3}6_R}{OP!A8+^t%#o>EsHFmkFf5z6}rpebs-jSpwkZ?xe+v=kigCSx_E_%YE9L2`Fkg=t1aHD|9NfPZc8 zVms=`UX=mDx$_a-^1C3VTKZT3B)9^wKj!p3<4si>kD&c8 z(hErKWTR0QrdSY(MSuzT-;0-KRIi5i^mn+CMSEEl`c?JYrrKUAk4AgI;w7b4eHu;4 z^#QDVfni}Bf$LmKd%Gk9^m~WF!Q(&_)3gc@fFTKO_;U)o3{h5|U7(>*%d2Gr^^gq9 zkihMh-v?vu;AZ(khGc>;xABtzLZ{FafL0=PeBA|w2S6Z`^IwK;+*IFTSgv#()rPDT zebIN;SV6h>q)&D7yf?G>ZVERTcSg^My~53RL@#^`&ag%I5}c&MrDf*aP3q+;%cpW9*8=qo zK2-QKIDRjywBf_emK9Q*dFrcsjY|6J@1zt;7F?-aD}IfMfAOW=luef!!e^KEaCEsg z<`21(`zEhd_8Ub2OOAYv&L;B4O@d`lbjtU&(ep;ZK#%LoAu zJokwb22$0U$E8loRrD?IZj8`JXFP2y_2Ks0OiZjgE{~iXaA@$D!);#|%1KPvo*Wu& z?a!<4)}MM(=h>2x_kiJ>|Cr=@;mg5O!T-izE8hFEkhbW}{*-A*3A|vAcGihilAuKr zWR$d{^9ndoclI{o&dQ?3EsuJk<^)ctYZm|D?CHh`O61jLmCXdKey)GA`qHDhKz>D8 zZZ2}lNgt~wVA6P!F3L;J8>me^ab|nB4L9Qn zl}5z^)_a+H>MzEc_mGq8ueZURs~0*^ZfGBbV-{vQuhRtH%4!zKY2UHND48g_WEM5^(5;WNW7z+WWML}hc5sW1*M#qIU&f1 zTm=@Fm$m-LFtz>8qP3tRPIveKfFKj;yU-~iX)|jSG5!%{DSY6;^%TeRYEL&4RgFe^ z_}xs^ZD2d3(NPwEu?|jtUXLnv_s*yJ_^j+0MQ3{>BhZSvPzG+8b7w3u)7k?Bn6nZ% zcVdD+lX|c-8qdt(ySQ?bfRutx*5sTo-hji2%Y0FnxHDIsV^;mv^y$Pk-S^jOORDLb zBLc4mU}pgCACbSlD&mzET*e)ti62!04&n*j!3%gnEs*yeB|9tI+&P2A_QsOPzQzQg z%pXk(AkCv7heOO&q>DlB6CX|Gn;gAahoywsr(LykhZAmv)miRSdI3WQaf|y885P9O zc)EFY@)bOD^sNSn`DvoTWAd~*ZyU7DzV!Ltxlu<8o4Xk$8SS~7<_Kqf{cE5b$Ed&6 zQyX5I_g^8u@S$jF2uh`UPAo|WZS*bT=kjMvJjZf;+>j4=Vc}4e1mJeaeoZ&rn65 znFUk(_s1nwTB_4>5>7g4W%kn9^siT@Lqa@jKFmOZ)AHh?|8+}GrEOiNR%(lOU-Y#? zF=)>PMq?uV5uvL+dXh-JW=rofE!z^FtplB9cplJeWQ*WNhLN+ z%mCCjTUd_ztH|i&?`aV^-nlassEBDZzlI9|)9c-G?G=pzyOI_>R^1Hgm^wE}HL#j& zZ9O~(b?XsoT}C0y!OE&{gh8*t`$vEu&`r{S~e zeAKauTz>-3fVQyEO8;qzd*d69WVW7vUNiQ*WjbrS>U4wy;xIzgt1E&!Srk=((4lRh|q%}wBVzO1;`DEs|-?MDY3WnTcUdZ(Z)~x>FS?yU5>a( z=$2gT8n`Z95Uhl!d)Y`wS&~N8=e~E(*etqzb5UR8kLzC)buUmg&F?YghgYCX@xxofEQUdn9Td0OZcsFPBU&D5wK!wpTs z%jlOKc}(9XiKp1lmeugiYh2Fg;nTiaEtkFYNqh(OlVPy__cy_ zKH?Z4p?p56>DOo6g0I329zueQcs)}av_vJ0&QR~$zZOpei45&5L1Wg1#s(Ov zC?(mlD8cTdOXaebgT)8OGq=w8SAUyd%fuat5eB|kz62}5D!K( z!|%=uCi>Zzj+DGF{uJ+P0xL#(_=*=F&it*&w?`X`+IfHEB0?1q$Y)d_I$=?a%cqHrn$YpX2QblzLn?nCJgXCF9{|8un zGH%J3d|PM*yY#8ontQ*#UF1|1K95cws+O9uB~N)gsb3o%L_Rh6*JZSQbggN5EL!~J zG=9`XXyqHSiP^6t;u0<^{(E4`Kx$0dHpQsPecohDj=n9BMT^uf*1&K^V7Yw}HdXTR z@PB|YN2GAC1a8mS4ZAT3*Q(a@A8>+71XMcuy@+qPdQT;KxCm-aUyOu)B|>$ zN)Fj7)COr=Z|e07)@mYc(YlAD!@XFA2valf!lmZYQv(hWJI2>FA{$Z_EvI_lNPEC0 zDqTq_S&yXpm@g(T`9INd%~Csaq<S_}w50BE6nS;E}o#$N@FRd2U9E-M}{46f^a4>qkszNbG=r*iW zR*NcsP1^VI+3X)@X!xAyHxrs*2d^i;xW6>hKl5mLAPr-Kp2q~x8fnNs&_iU7rdTND zz3*YdJIUIuUZ^s5Kh7F<(%;XG_;t=uGT-hw>i_bfPd!3H3%n^R(Gu?dEoKAL7JjInigH&#T~Bq`8UxlEt(1^2}M*gkOva2J;C#I`Ov<)6KoqVhg5ugRn;k z-UL?SUaN(-Tu(a^*>@@4fJr%jdt_WwH4*sKp7#7*yPgxvdiwoJ9W>ACVf8libF}u0BE!P4r ztL$RSQrwnfLn=keew^n$HUCG2_H-Kjfu0oyRPSp>igOZft!vXBVDWzqrlT^KR4k(E zpp49i2DUhAB@ZE@NJ*CWF>V+XcKokut5)&r_b3fmlF-T{z1drBrNci4OhNJn2l`Qh zCF;iB@h0OZGX>AZk@@rLpJft{v~~%JJ|DyBUR^}}{^eT!`}cNF`UM;GfQ}{PNnC*zXr3Q+8!!%sbdt@7DVuB4#2aO|dvV4-;GCyk8n`urSz1}cm1Tv3UhmAaQ^ z&(ZMwt`-}WpYxi;WJB6-Nv~rkb$9uWi9l}ur(@MrEyOOw#J{f}&~hLRBPP!njB2xH zk^>!Gc69US9}gPfR-g1`kOvBj^0`M6sp;LUy6T9;lPaojepV_Xr0oV(h3?T`VewF7 zxHaq-M8asc^*hlex`18GTt@z1K zCc0s|#go=(x^}J~=Uy?#P^gjpi^gah>t(v-+pmT6SZPYqFPJjERzKH&c%(vit(9z@ z;%p@6s-d<}O)m9GGI@5PmjZv)*r~|0t!P}Dw1u`+c;Nrsjy3GGA;a5ujLHMO*2#!N z{mRc-E`LF5>GK3V2X@SgKhu_p;6(8V8otjAS21lq)BmCc)YzX)waB!iH&HSFT=ABB z{CPh*^t5pLAz#6_-u@>R$#2@}4t|MhEK>O)1^)*yv-*0I>=C)N%GXesEhTv*(5XK< zBTF;GRn2YbHOhIr`Q-V-I-3V|PrJtRhJG84tR^Sy^(PaxbYs;?c3y^tD}&nknzP^Z z#y?eRCvFrok6j{1{~g|EJXh$zF^qdM)?5~!%#`B>pQb-Y_c7bjy|+Oh;(Q2Co(+Xl z!qgHZ8w+^c6}=VOaGF_iI4y@Iz6*Zt5Xs8$%Z}#_@8{GlJuB4X?=({Q&^|0c!Dfr0 zG52Deknh?QENUF~K=zWcbM~<;TN*;0XBr*>vW&MTgSWpWs1RozuKnddJGx};u`g`G z;a)YIOMExH`&|@YGUqmg)r(A{l{b-ESFXEOeqLd8EGe}H#qQn-^EB_d z@mo71mZNsRC#o_4QR=BuxT$~kh!M$L7Lkkgd(?RN{Z&+qD1X@pRn>&P4>UQ*#VaG1 zf`1#$PbZEKi!8?*xr+mu9>2Wk7-0WVqsE=cNo^TTYpQ7AnoX0&hgVk}bR=F=6M%u;s_hW)rk3kY&hD66K`Gh}vL7QiyK+$@j zq3w~$Cp$KWe`K`1BeH*ud!#Tkf%=KBx9N8*n+3h>#CH(tDesFd0v%*bjD8l2TlMpB z*>;)YTsNyHWTvyz3UYU>{5E~A10U~`6DL1{2Z=E}Ng^u6MqK0SoT-^o^oB!WaYL}@ z&Xn(mXw(Mw+@l3I7}bTCye)KK8ShV0xsJ0$ybm9m7{csU;4@c;uPtj*8k`1Atg9A( zobc(@9XtuPSSpr&1G?r)yC1^ilo>pJdwSb`C((dWn5=>~t9xkcs3=6%$78-@1~1K7 z@!$;NA96yIOpl`UHioP zWnRb!OFv4;EVBEM*0@)5ToFLF|7QL2%a;>cw?z%#J=KX~7@my&%culQB(7Rq{Re^W z*GGopGj*gG#ow2F1y~6qha?U83rBG|KZS-GIu?n<_X8icOS2BgKCG5eQAyYDa6%WA zPfl)2?!I&v@KxR9Sd{H@0M~z=k@@w*R-L=<;{dL|;>B zyFCPt$-JGAk&G;aBhbowdVO#2Nl^;YwYkA)*pE|Ci{+p9_a{jQdV}J4%@>DLU5U)L zD4zE`syS1Y=i09=i7kN{W@TygNCy)QVvpY2>&?hQxZGPFf3?Mk1Z%9v077F0pIXO~ zS%*EL@~|ygRQ>Wpdk&!^q8}rYB%{yB%+>jBhOB-}UF5+(5j zX%Wni&Ht3&hfUa+<2h{kcu{9q-oiPRP+h6rsGs;>A7bOl%-EQI6F#Z2)Q;;c_iWUx z--D0x)1;h{Rz3Q(?Y$54MES?vk>Doi1ajZ=yH@fuVyU6Q^Uk}hyz>abp8^u>LOby< ztEqkr{c{Ayhlgk^JQpjojx$;zLlgv-KV%UtI%VIptutSnxUc!BVoAR@n9$YiYv3g z%u-)}r4`Wg?RN*2xrXmv(RIdV^-U`!r*?AhuvVTQ26&zHc96_X$!AUu4xZIoNO#Pow$WB*Rc*0lrUtLFW$BfJYka=e33@#)Q`29a z3KrKF_Rdn5aXP-p zQNPmR_*oQ0x{A|gfBXA&Vu{Jr2gTBMC+lB<$xUe~ZkDIfw6VtRW2AGIsN#C?V?A@& zg)X-%urfQmAClJWXM}iM(LBZ}T;s=x=HIun)Ps#QuNYra^Xf`GbFbVJt6R8IVK{FhH0nNWCS(?4pkByhxH<>_Z>(dbG_Bw^j^!8q z7i0tQ>A%oVL4S-z=CTGQzUD<|8?ey<#Y8xIWKtYg5d5L+0X33Xl<$3|Db5Maa!9hmR5y1l0Wiqz2O(1 zzp#AeL}}P5gfAcJjvuPPhaQ2Mw%^u{PidS50)SWCjCk}Ahs zksHSL-x_t`9zr&{j^uMag%Tj8#r6M_@Lpmtw?+jM{Sfx^oQ{L?OKoIQfYb*r%)oxWva1 zGm~kd@NH$cni8eXi|?_W3nJYr3c{>vo8AaG&T|JSi|wFeSzUuh9kZWJ%?*J#<%5>r z%{Zp&UrYQC(6`N8jb5LaOE&4AbiB&NH4o&BNsUeZrPCN9*?tw*qe!{f;0%`!P2TaR zyq9e%zAu)8OEhEgmd(Ui5;_e(09n7VOM-pVR7e|Z#U!0YL5N=YAgiwz!33Cvj3QH8 zNk?mTI*T_uv6&t>)6Pn{F8eaqi(l*?4}qx-AGzEkbSkUaFj`=Fa&=!L{<^WUu9&Jw zlilWOQ>#HMS;+LXIh~<+%PG6%)B5(xP0?rD#Kdh*sV=PtbaJi&Gb>Ep!ixBy!KqL) zA-R%dtw;Ys&Nha*cbBPSDTs+ip}`Qjt5d9h;N*Pen>HP@$Xm|4jr0k&4-P@b1#l3? zl9b%P-6)EhEzA{hQBSAo9B5{|3~U2T$-heOFW)i!!7pDjSyTQcVduBrl;-B&B9BR_ zhgVCy@(qY}{N5NosrPuMSDdgoC@9&)LAOb;JO21vhI-#E4vR^1L;3K#N4HjI_iM2` zQwuW@fMD(tO|b@0E*(+K+oh0KFibxXk6}}UJzaBQeHbM6?{Fd{^}ej62udu0`c5li zVFA@hGQQfx%k#7{rAEBku5eDqu3WGA+d#q4cCq!?N;Gb6GR6bRp6T$iyzHwX*)R6#OHdqn$W0&V00czSt}sJQcoR$q<~Ti zoc`VIW4cgfT3B8S9g?zisV+N{0)shs(PB}t@IGLP(i@*vCOFjY;h67q-KVh`jko28 z^I2T^4ffS0f@hJwM#_83saHGG0WoS8-TA`K@aIJB@xHucoi5nvL$dFCI~ZgW!$u;K z$aKPuSq`qXh?1nxbch{@1-)e=f~BC;X@$LVd1XFajqm zO|NCbe@wLZTH<0fu6!h%#BC-7n9qy?O8cuuZL6?4@zbo4cJ*-G?)+NWg*@Y9#O-5E z=`?S4wRnxOHz5*=$|A9$U{F55g2kCa+1HCSXMgfb?&j#9`g-p*1npy+3@~{UU}N~t zR__e9Q6LweGyCx%`Y$Dq?o3!aZO9OXs1~o{8h|#qLvzreYOas3i7`1~QY*mB+r?|t zbO-6!SQtQ$my@=0*o)+^oZyRoEn-|AT|_~n@H!X`Qf57!$f+C);;N!kaf*jvNN10S zD5O0R;6gUmkzxro$FA9&$5kM^C_01h3v5cW!eTL|(S!CvVaF$ap>iEPPAvZ^I~EOA z3VM<6#5|96bsNJPn!eMpKeZnsA_Lj=n@Wpg;d8uwe4AMNO9{WGPxyoy-%}C!z8um9 z57rLZ2X!+e7|S#r!`?fo}hlpy|&3Lxqn1i(ZkuYcT6{Vq^_x)MM5 zy~|!jW+tTQA1LU~Mg5bVcNi1y&Rv!S*kp`L zw_Ds4XKlCUDx9-`KwcIkDy9?fKln=DwZTw8Zl1fv!D*x)xl3%URiifX42h{FSkLvO zUp@EIuQ_+_G`>;JEn>I15dm1*#0|JJU7+}$zO)6q1PZH~otVdC+5YuF=%^UGy(RRd zxL>xjB{fuxEcAqcUY~W7w2`=^If$qdGo6?aDU$doM>tsS4-He)Q!?O7*i_|2&LDSy zLPLYPUzJUDgUr7tNwqk$yLzuSOsA?Y?Pk~SHDw?k*(w4E=7dW$t14}Io*V~lt>fV%a)b$=?%ZFncUUG9;Yxi?=>?2 zB477D=o*|gNKQJ$?q7`_SuZ63_24i-EN=Lt5_=~IW?h|5EmlXfot;nnXI&LXf}eGk zM#6RpP`zwV;l@(>UN4dkay*(wQ*+K$Bo;v6lTfT z+Fw@v-a2<^PUJA-r;TtG=_Y|WYDdv55P^8av}h>WV|y{8NWuaK)^>ur!?^Qt*V`yT-xx9%bccU+*M6ZrC!rt*0Mi( zM`B0jAK=DF2qA3%L!H`OJ20VmFM@_Rp|!u1(Z_9A=F$7lya4 zi>d(L?8SKAnL4c8FC+b(DU|XEkQwO@6oC(gyz2z ziq#>djUWUdtlLfZv7%xxbb+AYacPeB>2@UnP)Ctqbk|2Jc)(;2L;-6U^1e0%bf>Lt zy>Q4u-7d>Xb!UUYYEDa&2vn>SnD_E3t~YRSYRAhCWN~~MtZPW^r05owk|aV(6QFD) zrvI(C_IR7Cf>~n7Vx5U>+Ql>s`U1GZuVEb|C8)D38r^x)`7;4i2STZX0191icC436b4qrP$8MNgkdvqLb2t%C%~Pk``Yzl|aeZOo zj(ffDSrAO>kzwWQ?6Cc$$bS$R~l6qARF!L)!S?Td0NS{FXTCS_lRm=&tFBo z1)BHt(Z#j&N3;d|)wE9vi;*97{b>o$lzLf`I%*m(A5gZzfx&UD!x`u59fzAKkKIK{ zAK96|4?ZNv!A*&8MZ);1$27z*%`~bTeABA#vQ4JKr|aac zSh#cl*zZm@=wWsJkQP)OII3A$hn3}huZP5|EJ=hc+FMSY{rdxDm09)*o9!tA5$ZQj zD=W7@yjUH_y7yJWc}l-NY)hRYco9i4JP=^k705lVYa%`fQVDL{YCz|zM;Oj)VhQ!* zjyuSef_<%1?}M5yGuCsb#o>+}Qlwwk+|vfedXHq`$hkXNTGD6w6G8^BnN7p84GZTT zm@BtV{rFzkk@oQ?o}MZEnG>9nXS*dD^QfzwrqdVL%AATenR_FJa59AANG7LduB}P? zgTV!M&@7+qrBg>LsZCuuj}yW~V{qJ6uCvB)aP`;47X}w6?yD!HrdY6ni~z*;WqzrH z?vtDG=Jf`-lFSu_Lc2%;Os5?%b%+%nJ+u7YBJA^Pw&G zR&SC%Ti+;^G($Q(7<#&6zJ*9sPqo;xGf#gcmg&4jCqL7O+cE6O%4N3kCwl4qzT=mo zQr|o!&p+8{op|R%xJSFW;8P zP#=mk=DWqYGR4Etqur_{O6#8!n7BsF9%mw)SJP*BFpWa1w-!9yw}Mbl{jK*s?`?Kd zj=|87TT0a$H_~K^*N}^WDI0Cvd@2QIc9t|I-(u6mp4`gRIH8@8Up*9oB_vE`mF&WhompWc0DXvG@Tq46 z;c-z}LwRr|qzo8EU42{2KaH#7l?=MOe6EGstGqGl4&+k%$*erCPt%XU+u3H2I@72z zkx>UJ%9J&XF4irHVvuUC{W?uCe531_4g7qcfmx}>&v4{j_~ir5{yb^il;^k4G7g?s zGLA7Qt{OBxviB!TEX2l^EPqIKllZPn=+m7^(-?S6Ija-&U;dC5w=HKpn(BiZ2o{}Z z*C$_B;;mtIpP#DM@(;3;RQS2Mc>(y1ydv=F+P(gZZJf@eW@jO9Oj3}tvTC1#H{HYC zVXf!k7ME%CVp(59zFU7UDh12ELkcENcpYi>;T67gnRBa6cQxw~Nt^Cior&tIs+L*b zm~XS}Auabna5H-Eaf>}V>QRw3SXy+{^2v}h-`W%`u9xGFK3_aaI(`aNS|WlnY#Q!D z&F|;Svr!{O&cAh?o3vtN``ToFHn_hV&VSO#ih@vM;@UV}6g-|Shb=6|0IAiw$CTv1 zTV`h-S7q&SWmP36+3$HEkLx#`$G#a4=2oE{&nDDlnmk(;1Cy*LBDhd$>)G^Jbc3=H zH(7X_acKL_rj|=~1>l#eOc1*;_ntX~zOAkI*_~aN*?q~ED9U?jQV_3JNZBThSS(2& z4ltzRk|S~$1E3?(jv|%FzM3|%vwKo%TlGHxdSi7vRwwLNeG_`3 zB(c6aX~u68Uu84S&hU->oGYfM)tFA!Asci2KR|Ny{@)dsi8|K%WVGEPX2as=(?QNs zK#a$Q4lr>jK$=tq$Z$jHZ}30BcY|y1g(E^Si-c#QNO&J?S%b z3Hwk<({T4Fu@&-w1PCTTVtL(I?LU+vg~w;61L~TJZg+r7;8aFZ-pbcUtn-y$_xOG}%wwzg07GYTjQ(5qlArsW5C zO_DV*SjHE{@D&W;*@=ip04#yyYxxl3t2pBwDri3_d_bSyGA$KZ(j>0euz4wGl3skn zqpTi)H8i}+UmsgP){tt+xaPEQX@i*`x5)%}n|m`6xbq2VUpk=dwClu{-)S*AzUs&F zP-xTxBN!%DUOPC-eQjU<9ZC&U+mk=+hPl@W?A;mGSOi!e=zn=&PG9t%MvHwbtB)mo z6#*r^LmsS+v9vJFJk{mGVUi9vEU&AoZ=5{b=bOZ{uKGU{Lh79oN^ET>PdC%ux9bJp z>3K5e=Jb+yuHtOB#^@FNoUN?Q!OS0#AfSXeSkTQDDGY4NR3MW&A5*T0cI%6tLq9xaWu&>5>Vk_wk8 zHq*f#|KLjZZ5Nba`NyB()6b{+m~JSVBbv3EkC#t0*r=;xb2LG(DLH3Q^5RowW?c%t zfv?6%=F|sgihpXNp{pHTgmcucM&agWn&veUirozArm6;=%o=HX0!kg2b1U3ALH+8* zhL;XkVKH7qWkpkT{C?jgN2Ej$60ruuc<6PT8;X*N46;i=0D?p*=7cFXWStg`=1I>R zy4a}49g#vF>~|gN)4%LF@e>h_e`fJ^UP5*PT?O?hzEC7zw&mzq_a`#lCP_Y%BdPOH;?t-A0opMPGfoGKZpC4UWTCVqe-8Qg&CVj+-^U zb4eFlwSP4`wR^lFSX`1dKphv|nb!0L!Oa~a64!R|g*7;T`g;L^!vzyUWy3^P9^zxF z#0e#5;uIh2ca{IN1~}OTP}5Kek^rJJVjsF_#~;xK*9y<{_N{l)xoiXvX-X0q2Q?>C z0h0d%1baAj{mjpwQ4?%FJ#`c^-QY85s`72houdRB6B397b`~%C9;oLsill9jBlc#N zHa>P1O}yL%2e$#Cj!b8d`5)ko0LvI)RFDjT6AT3Ax3%^0s_u+LVb)e&gGztCuaJPpINr@jU0dXd0>%O#b$GRR{0C?9=s=%I&Rxp3rv_<i(tbZvH0j`f+>c+aNN z+{jaHmE$sE_Hk3s>>Q@mh0lw>dhT5u?$&yAOI{-X4&y8g=;aDlaKBGK`Cp0Aoi*;5 z?+d`uhH%ho&+C{Uhm@rmEen`x4XJB7m8HKgDS@Y<2QKWK7Ps<&6hvOXv`zd-TxjGR z)49sheaL3)2JT6UiwA$qQEfzHz7B0t+S|JsW+{jTl5VxdRd6%AK}Z7NRJW}7dy>(>^3CGpxuT`VFh@YqZjIFZKn1y}%c zkK(|X1;rUJz0_q8+K%Z1a06h2GAG*#!nqr7$(0c#^dvzFRbwS za;b#Mxvf_lE5dc-qH&`ZuV=5lqPD)jpy9B&e-BcPd}F7G$16Btqsu7Mm%6`r^}9`_ zZ7pZ=`d9XV{iv;GwwJ=*2=cVe3ejYRKF^rLq7tk3ahJf(G5kji#hZ8LCyIPecd1=V zBTv1hV$9^T4bDkoPu;G-?q^MloEiB^%i#WqtZ>bN2rL{s|o{(tIxcuoX(jCfa5Hn0ggdofIe&hTL2zCe~5GC{{Zkvl0V^5e%TGR ze|Kr%vys;$!Cw-yj!rUn5PewSbT!s$^BlL#aB#qnQaWdm$@{^2WMF2#+KNvP3vFp% zO)bwG*{xEtclqCKJ~py%7g}1qX{*P3C`DO2Ztv%@%4&BkS-nOEPTcO#40>?8nulfW6}wC*92M<@-Hi8M= zS@PZ`y0R(5Dv->ee8F<05=rRGj`kO?7V4*)?X8A9r&UVG=Wp51oN*0;g%*Pc67(r&EAA!yHQpTKe`$-*=N6 zF)T>h!CQ-aS5A4YsY9ARim{nPb z@W;d`qWQod=-vVG8g2!6D(>Y=V~hiUK_lmMn`~A)lcX6MaJ>Q6RD~(v) z>a#O5>Kc}%c6nTbB=S0ejJoYs0Y>5n$^&tV^0$4u?vUg#4RREG!~vNO(ULGnCno@% ztOraU+!SQ6^wh1*?4zo)yqseCZ@a&Be>0yEX<{VelU&ZuQL<6Gw*KzPtrgYP?5}&8 zgGu)FD>{h@~uQ6I~ke7JSq5eEDZm@y^7qUO2VXwy~He8(*wm143gIR!*HmR$&>|=qY zTgh5dx+jM%gki$Ip(4dDpa5wiv-?!*_YQsA#{U2j$HVJ+qG|NaLt51*g`%3lR`%u# zfgh0ummREeLjcmW^^L6bm@W~_sc{X#i(t5{`>lIO_)X!H;r%*TbsL=wHH%9bChJx4 z#pSSFQu^8?QTB+mAX7)uZb^7zxoeoEP^~7sjAA><>R-sSuRWw#q3%igD-v|Y5I1Fpe^r(ejHo6$#FDEom<7% z5VD!&nkjcm&mu@g#pS_!WN6rwlt;EaT@S+c-Yv0@#2zJY_(Q%Ccxj`!u(P@*-rrL; z>;!jLhA}L&%XjAa3?PnKu4gZ2riZwm;_A3Rh+i1>9}__S9Prh&o)z$Aw5xA#Z*4SI zTF$R#k@-per92xAu9jm5$lZsj5+H*XC;1A-#tXE-+Mz_H>LKzhq?H(;(vm^9BFCbp9|STs(qX)&!p(r zNOZ=zR#3M-CD(0?kEmQv4*vi$#>PvJnM^lQLa~U`<-ZmDN%41!;`=tGs5E+18H(S- z+FDJe=+Po0Cz@?yB;5Hi;G2v2Wq*~%tET(tYS!ZVLZl`Ni!&QU8sOBpK%~Lj3FVHY-O7aE58kwP@?&o_O-5@ z=TqLBm%FS~m%Dv;*4KS*aaP7vsiSI~G)fTBB<-Wx>&aWn{dcY|pjg&7pX`wZ-x9?f zGRq>x^0b6`k|na|aCrcT2-9;E4H~Z#d8%p}#EYls$t3ftm1$JGkVcp)WPQ>yO|^;5 z+ZBy=xriAPEnO|HHE`G0vVUgj2;aZCkb@=UjkSbo6D>Tlf6F^4a~i+O?98nh^c@ev zl4=$Ld5id8!VKR$^AftYxK{_uSitk{rj-LC+FO;jU7;nJoqo=}v#CoD8_BM1G)qoq zqOHoW&1IrXb-U_kPMfJK#_Bg)Y0Q99zLkj{+FeKcIYcgJW3_L<{Bn)Fogo{ytR2BG8KNB$CRMG@wQ!dex~eocY|d9C5p zFXJZ4#x{7KBX3}r7ooQ=nylE9r@Otk(`;nXd@F4>kEOSjDY=4pKen|SF%*H{QM&>; zA+%tdB(SxSU{sK0HwMoIso6mowvrX{)ZC_^sc}4TED)%gcC?acB;A(*sWnOjUqNOTvy|iDvYp%)iMcd(uZGSc0j5k@nh7>bs$Dw^`__$0$8+bZLKZQIcR3Z69ke!b zUL~gRFKkWP#H1uv*^Wrw-V|8^O>c&U;(&l=@71~|WCMjX7~ytJ=*S}<+$t@_y~v%UIXdG?hi?H6Tq zti9q6D$j?QgV@WilBW29&bPk#MfKNaR@=reu)B{{Xu#8+h6z>7T>iC7GTy)_fgw z=u%(ozp!XaZ7z87qPI&VU>%Ak)tMZemncdzbDEx)d1fRU{{V$G3piVcyYT-2`evWA zaB^Qr)LMI4BV`RC7FV|0;|d}>0NZ!N$vDa|*3wEY&FyBnt$jKz+FIz$`D(^o*PZm% zQC4f+ZC~AKYqL+#>@+=dNxHF&XxH&caShbEv6S3Ks_MJiO9@c3nN^?)u&kExyEVY` z8Yh!`YTR90+i7}q(^^_ZadIGvNsDbN z32AzaqF)W_QLX$yxVN!sG|gN}7#?&jO`{hWb^whw=5o)3L@1=xw!SFwmxm^6Jx(i) zdfwa2J4A9@>Tn3-D6`37aH45UAR{b|4CKDnj&<5iOt5jBlZ5W?cNu%K*!tN=p5-EHHj`=p0Pv6ND`l&TC?}L@@};Gensf~; zuQl;hxr%#>fRV_lD2-lOWQFinNmoMZdprA^JFRXu(Y4!~f9(O{UkF0*U8#(qcGWba z6UB3Aj2>A_g7Xrq5|g$=!uW6E1&#Yy!KBC|)n$xBb3OYDVFQbmW}i@m%)&_GFXclF zQKV=hE?3Drhh-L<16)St=nY0o6D{5Pm@}wu6QFfrEPzM0UC`L6w}Ik~M9m)MX!t5q zoF!_Dm8EFOT}iKY>gz_Yrz=f9%<587QRR}7cGB%DzC@ExReqYK*H&|WC-Ci-sc!c^ zAWL0R)@c|)<6jS3hPH^xr^-Ge)6f}o`Nr_~5}^#N-cV)2SGtlVzy<8C;&3jP%2p=Q;3dQ;PS9CHx315woh$6aNlzy9wWXGz@r1V1W{J$M zuxe`~O>3!(g=Bk|To|KiSxPWn_P)m*(@P$Qr`y|HP9AMT!LqT7!#eax5M0mUyP0DN zrs{IYtRsP#LP~jT@iG@W)2%2Zn)hV1O)E!8-sxYHYqu9>?W9((8PbgI)zp%!QJyn&ht30;eJAGacw%Oa*UD{n1Sm#@io>j_*Z!SpXLnL=e8Cc9N_%6$|Ip;J0a6;qRPisdrOTWdr%wSNfSX|q3y{0b$FtzFk& z@U7HxCH0KxzHIPnb_g0-;6*!Q)Dkf|J|&Jzh@NnVhPA7I6C}diTG{H>&gT0^zL3jt zX%g>mJ{ioJn!w0^aXbpf2f<+(EL(4DqMTPeFKH&4lx@o0F|Uzs?8vtkc(|}|OGgrz z1B!a)k89$&jFH6JFO6*Q(Fk2W$9&NsB5gY4fV0BVI16lrt}H_c;!BGr3m2wIYLBg8 zwV;XY<~I#3u|#Q7Ql;&r^LEd1<&*oxCCq!FSKX5(Eq2pLn!%yFh9bjkkiDd03#e{m z^Gp{oTqL`#r$PjRLdd}2hRWrt6|E@B38`61F6!xMt#$Eldv2AISJAmaHEAo^E$@Am zmWukXno7&D^2VWMH21eQx`n#fc#Sv5HN1#ox7EUAWQJ8#ymkbsMG?qzhWUmttgq+O zB=RL@`zb9HvC0UN(bTWLgw)*RByS2+Ye$IL)%d)liw0FJymb+`GMcsH$ zU54IMqg>tW(luL!7S}9rnqH%v+g_ss8parvSsWJ)7(zhW;LYM)DXw6XOS@HuNw4RQ z-c%buvvs9ck~X*biGssak7TyxlwxL*HDFOe@%XN!vHirGgd$z4CCHk}bT|NYv$os5x^;HfZS?iN zuFCqpi)OCA6qD$!=(Ot3M;<1(k#`k9!9WeSBXI$6Nehr$fIt~M0g<@DdE!W~Exb3L#xbDE(#E=0Q z+;N<GtNVI>^S2GanIKTb;+ra z+w}RpH)N6bK?(``**F*&7zA=is!shaZ61otYiP99di5)trz=)=O8ef|(^YF*UEh`1 z)oz2J$Oor#I+NF@18y_G?Oj)an2#FxB!a9*jeH}=emp~_^PUe-Ib1FValywtrrYnF zjN}|{=Nu7|K_fh83di9(7XE{z2#uzd?h?7;ao`o(~iM z0A42T)qA@0b=J-6>)pMu&;6!~v;HMNm7G?t+h1FCcF}5kC+(LbN&8s-(GoTZe~TU_ zUI#xc$bq)-2>JuN18K+^`KNCr0x^?@INElqfyYu0UNPt}25afR+Y{`k_OAV*@>~}9 zui|6L?$bofF^urXfH~`cNEP#07Ntq~uusj~f-ni>XCs5_jxt7T44tp+yuRP`1%_S! z0Oiyjuhz}&>!q$%J*SPuc2(w|eI;(aeRW&DruEc>=+;UYe6mURMn^yf2N@h~?Vi|S z$37o9!N~-H_l`%(dHH!HfzSeY7zeK0uWD>DK(RwbqidOI*up>Oz_2fzy$Wzzzlp9fu?311rqQ_EDDJdB;w@a0mlvU^9=G86PMeSi3DcTFvRB zdTDNr_TPOq))IPMSuRws(^&Mq*H^ZyrpIyN&1*^1E#&(`O4ke=D+AF_2WenV3Bu<+ zI0x?<)wS^kksX}SVrb{Mc?-y_1MFgUrv9fK6M_i?gWA06F>HT{xe9P`j-x&L;O#p| z3>SsXP7R<@%V6aCfu0KjMmfef&q4P}v%-XkWX|KyoEY`g)L$cXlMDHbiIz_LAtNC^Ak3(M+*<2jm#O>s`lGvdje4r|V zIO)Lz3~oG}f(IdcbZ;)^xW+u!Vh0#i%9QF(cmvl3NEkS(09%3vo*iI&t%U1A&9IfEO7thCzdzDCFln@}L~&p(Kp1GCo`>=CzASy&d1C zuFKcc&f7J<6OY+#K8r_dX|3&j+uqwdTc<*k5v8ge;9Txt0qneYJGsU&oabubiqFF5 zmM5LS^#?crXP!Ma0tw&>nI%zX7bO1tHy|EB!34H5k~!LYU~;E5_oCwjjPyHzBZ1uK zI5^~Cn-~M;CX_TyS$t0ECiHx^wY67v*Vj#KIW4WxB(_@U{{RHl(%Sl#RDwoM3CLC? zV>~DXu-pMW2HG=#0LRR1M<+jca5l3Ol5vb=kpnuPsb$I0OPPFh^itRPi#&gZ9cka z-j-VReO~)-d+8Ln^!uAw7jwQCaxkF!ZNnUvBWPbjzaYWus}7-TOpX98*!93T0A%2u z#|jy64glw970Ik&PYb(oeFbqd2?T_pI2vPeG=PSwb!>ZX|!tb{k7}b?|$7ZH&I6;Pr=+7h+tbPSP~aI zbCJg2c_SU`snhSb_;bYtRe;@~bGIa7_4v*T@s9aDameS0iULM(c^Kz7A9Uar>NjvW z9D<_+*JY$wvv_00?n8W%_-HU+x(vF6;ACK(*+KjxuRp{qjW}pfH9TFUTXAq-4qslW1OBkE(stU z4xD3lHsj?6xAu`<>|3(kUg^Ja-qw0OZ+%|9tYVUqT58(p^-j&(tG&}&Yi%{yiaq}T za5fZu@^S$u7$p3_1M=~Ja1}>WT1jlcbQtIkdbS4)%n2Y2f)oNq;4(gAYR<|@q>dP3 zc^+c1M;t28ER1kf6k~gq=m71G00fU=u<+)I;TvdmKNbkDwMHIgkB7r7v7+==zED7t zK==kSe1su`8Qg7)mcBX^R8qX^P1+Qrtfla!wu;?bcIoTWOA6}UzF0;vSDSw7Uh7)5 z?{3oN>ag8hYY!5G0ALW8+kbArz?!)4gg|r!*1-`V^@)~I8|oGKp4PQW0Q=9 z05A**7$kc&zr>q34s84n;beS*4A#5$qc&80u^>EvHi8!*1swwPT6e||5Ujy0yg%Vf zK(cNP4vY%{oM0AVk)M@*P`Tg$QFi&*jK>`qu3Q{iO5eP%7~1@=TSiUWPThSMO)M53 zO-5LmboXOQP1{W`CmxsW)25~GfxZvcH9cEgXmq>jk^B$iL_#et4(4qJc4f6~y+8+jf3V64~dhUbae-C&|Th;tU;tT6-H%8MftYlelFQ+O|T1izF3wR<& zxV*fbqPDTMifgO6BDR7@t}Ead#7~I+Ch=_A28{~pTE?s4ZxmYSx;~4fLfVd_tIwp( z4x4AE+p4sZ+)r}p6fxt=8}lJlR%HD=pW<}CvZsQs{0XM`iZ2p=(jF?)MX$t<8ELl= zO{M%L(r+V;?mi#*GV0w-a(IS#*<=A5mf zN%ExSrJG*qeK&>w0A;TN>z@a{8EW>Luf;zUSPeVl&&Dk#Ru2SGv3Widd^pqsCC#6Q zwD}mv;!Ro>itAOsNnU1(=tXa#{(N}TU1$Nfw!+%PqBL0kR0yCVY$>z_RYBAca6lLv zM-8ZaMZT3-Jj^0c%45kKvH72>yD>S-Hs@yfvVQY&7yczpK^b06+m{N(!yKF(5u9fj z#&MkdxHa;bZcm7%RoBGH)vHnSR;#Zx=kDF>WTL*rBksmFNjG-=yk0tl;q0hKk`VV` zuVonBHkw+#WvlAj>#@%3+SBe}Uv~3=KJif5;FEKE^xPu|GE7&&Zh zZOjhhFh&692Pzm6b~UGSE3qxK7GO(f<=h57=-_~U=)uVu&TEFdosS%nGlnE*I2;h% z@J=}cJSZTF{R0OG!Z5P=cUpG0-{*Z#mag2S@89p+v$u4*H?vzJTc!lDa20Wa2h7KV zhB!ITAdD{Iz{7HANqkgu_py$>$WxL}%v84F!1=H-kPazNCUNPF#~&%nU>->5a5%!2 z!C$;aapt)rpbNAB2I14V!RWcj0C3pZfOB5WINhbow%)pIlCymud%pVcN=iMO(Yw7B z?Pa3TJ8tZgwd{1zYH~urhX5P_%MuCa0k;fiYXDDm0Y(YWfq1XPGDYKW5I3C4{{U}7 z3qL?CtpNdX+~Xh|lg4r}UY^&121x;wWs4qE5TJD=um>tm(i?D4INW||@tnoHVd4f1 zSbt~?;DsDo+io3>PDU4|I2b1t^cgM^6R%gED$=EErTyqF+PZeOwr^GDk25i@)jCcM z#q+DE=)M)A(dwUmsov=J?GMHaI>!~m23^X8oR&E%tU)D6JTmSW&kKUZox6GTT{l;R zye2U#DI|P>hE%cRYXDbp&+z9MZKo^pO`fAH2YQ}Y00K@hO5pR!Ckz1?=r)xrn)NRa zc+TeAY4Z*a)cLY-4i4Th2mwfA$OHqom zK3K_G&dKcWWq#WeEENi|Q=uiSn`-Ln@>gB$ZTEXw-&f-BMC!^m;Y$V1di2O8um|1) zIQfUmf=zb%P&iU>4;Uw@3{(N0qyi2I#s~lcNhQ;Ga!91%NC5TqA+dl+%MLI~l_%!F z$RzG*npCRjHejgbjsVLAz$LzJTYyFjV{UQ?uc5=^sMJw$n$=#*mg(r7?%nNeEq(UY z-_Ngulv7Ua^t1DdYfgbXF^a(D?h| zqXy4aB!Hyhau2s3&vnd15EyMcK>!hfoZ~I(dW8tZkTiEByY05OQZ7C$NlWnEHyG<=NvRYa0`!%Hl9@ZcgDyNbF-+_Vm&)yi|b4?u7?;3&b(blwYG__M=V1c9yTpx~0k8+r! zt!lkg07u)U0DEAA$Eab!&0X*$W=|b>9TV?AjQl35M_iqMO&H0~*MM?x2Xk81fAE`C z$=N(C^jm34>gg*j8h*NN(x>rl*KmNyxyU+ooNZ?>Dg_uo~$mfNKw$l1z~kQ9T1*p8>$7{S48 zZQvZUbAZIK<+%V6=sxktIRJ&nakOL|)ZAbxBLI*yoRN|~_e_F*P%tt91a!yg>|lUAEs_Y`5&hpUX?W*R`~1eD+^> zrIdm;pH4x^9-Q_(;N#}NUNg!AxPi2ei;@pc0){?>;3&Y!80VUDuI#ep@_EJv0Z_wn zImSi~0_PYYcb!ulu)r({>Q2*+Is=Wl10Vth-lsK;s#$G&X>EM9T06hd>8|?1mD;|| z{{WTmqgL0e(%UT&5QUiZ$osv9al;Zx1cTUMXB$DzY5xFc1ZRwJ2&VVWZQpeAyz1%NRsN@YXQt`)7kZYbs7oEShLxvU&8TXZ z*AkUfx3RIaj%%x_<=hn_f*B=Z09eW3`StN|r3qB4RupN)YUJ${lUKdkR!?4uYuTN& zFtV#P8c>v_D_JP>w|-kLx7PYDmh&@Uv>6OpKxM%g=rXJK_&FbVW3VIwLt~-R^ocbK zt4ljrCcC}7o-12BJ2)n}zP!4f)gZOCvw}G%y1ALijw^U0d1h^~q-?|*`_sa|@K3)K zcxOPyswA<00J~g-^MqS&J@KJ?}*~i zEG^}dJBj?uep{@!{kT38{>>KmdI#(Q@O``s;x~p%3-8*;nlx>oj>%CYx!h8;C1d#_2>aE-2&&*(4y z3A6hy_=n-&{1WHKdS~qwqHEs=BGkSzc#pqy zwwTb_+3IlH->fr1c`d42U0Xb!L-BX^jnRA`r`>o%;Lei16wu>YZKc=d3nz#*gbESm zc~>IUCLcbQ=vt$9m z2h`&=>s82VW^}T=MtM>->QKSKPY+2>7%0{Dla!>Xw<%Of$|*XR(Jd9*UpGTFjt;(S zODlw^)1EqZt3Fv`XAfsaDlSP{E3KfldN%ZD9pg_MY8u7N^IhG|JhM4>nrRG@Nh1bk zGCSm!ED0r>IrYtWrT(FDB$5(cfzJGf!Q_F-;PfEi4aYg?LG&LMcynFQ?!+3+oVGGd zs_Km-G7-HaaIRvKRgOhT6`3DvqOc6AK^20~>5*9%k%5(g9Y%6`0vLyE;Af6_2eo^Y z9vclx3l5_wG?Y~&oL6pJJ*=&C^lJ8fIch@@T5eUPB`aP|Tk7MwcD{>yUAFD1!Tq!6 z%Y(RbxyU@=V2)2#!w?Sa`kbDCc*^=cKl?o-3kv`^BOzD?$Rq%MZi5&(+6T;8y!%tU ziEgD4k+(P}8&?_RDLLbxU`Q)~c{F3X-UmDkh0Ah!4nZK1k%CC*2+m6r**Y}qMhzfb6I{s`|NxcEQ&XtzLYycAal zjmN=16M0q`IovW^0DaOy8P9L1TmJJb*}{e+oD+__iu|XN4tXGBJxzJ1{1L)pp9jBe z?aV+nJ_;&19Dl+a@i%sI0nU149FC-Xz<0XU?$&*+z|Ic<XG8ndZ95(WgGK0{p~bXSKoB3 z`=+}kW1;)Dl(b8gCv|(;GSc2!`K>qA8osj?jkvY8Jg_L`LBYr?xZtQHfKGFQ%1FTE z@mF^*EVj^{-!g_`Nd7JcS0e?RAPf>gRZ?3GSvs}hYny$*jqXciZ2*}t2?TO542vD*y$>$&kApjeKmFJ4uG}Jxoy{{(izqxmNSzUEnTeZYiAEcBrI=xrO|U{Flb#RE{17k;Wm^Z6_Mhx} z>!x_iPrG8f^?Oek#TyK?n$ikxl9gg6jf=1E-_)hBK=bqaen9p-0r)sj7 zHxjZa+({w2}VbY+g;R<)=w`FT9H>$bmB$f;Eu;*na(zCL)-j@DW)P39e?X!Itno3)Bvt3)fdM(ph z>7&&*yEnASe%pOh zA=P5H169^gk6-9btJ5uD94q*{0l{Ud(qcx zp0*B(g7%V*v1vv()yhgb>7r3i`u=INnZ5f@k2Re}TZuojG(9dglf=59Viv~A8KRN= zKW8WaPpD2qU3h}x3`u)`Ftdqpz+86z7x3MOi{MWX>rW4deh>IDi$P&HlHdDk;?Ttz zyt)GtNiE4gW}V;?N++51^L-4J)i08KOMvnIuUI*~NOTQ88WuuI0x3I}0 zTwUHu$I22+f=QBPc_4<|eXVd3BV4b<{{V=v_=&B2E8+Bt*TDWCf3xX!(8nq+rEzHw zmYS2s6c@8Z44QScr0tF5no@4=AItLEm1!z8uNb9iHGkbxYA;p)06%A{S6=FU?sdCU zQmIiXJF6$BJl88~-^#RIF70j1?}^?%zVY?Ny{()npm<9}Xe|G*cq@Y}*E2{g;#8R@ zk;5@oa^xg&M0XjGC`9Lgt&!|uX;Xw_N}AV6|vo?C!q)3hjFsTpr2Bq}W|{J%QlU7#U-k;Cu0Zix?o!d~jl4x!_zwp_(+ zbnvyNj*S$OeWLpT<7?<1CKkG0Ue?K!i44~}r6 zK251=9whN%IMrv0!$P&)9M-YjEw-6vWb)f?x2)hj?b4r^SXr&j!w^+qhC*}21y-X~ zDm4||?31-Ke%w)?9k-%F-+`j5noKT2h>&|x~I)G+xo ztWLtx+DPO8y!X-)u8;SnSjhs+9Es=B3ynF2bgk{BV1 zc$h22v@t`pYEz{qsV3?xUD--c;k$2TfA4bbv$c%mr!GW`{x71TEuRFj$@NfhC{wE2#hlHmmU?oj@6;@4z~`I zWg?lzgP@?WwRl32hP1J1bqz`4-H$U-mQwNaG{^3Z9aF{{cAm3AF0H2cekPUTT|UC* zB$P(+v~ovveC#hIgeRA|U_@4ne$#Td% z=8yuwv%05cO%hb8ySA>?(^iUFM$XBt9*Xz9 z_v+U|mpTuJQVUNH=^lD1hB14pKrDh>jLNb+R)AbOMH^wHnd6Qo+@w1~oB927RMaj3 z8iuVU%uNhZ?ei8JSk^e%QYfK-qZwDs{n3ykJ_|Q2(T_URekkZF&TQ>98=!_ljWjSr zCgMxR#paqx3&hUF4pmjTRAbkR)x3Lke7j??x)HfDu$FI~$z7uj5*9=mIaE6U-Mr&9 zy(}EuuO!>DZc=w|ZSQrXeJtBu7KU=K9h9P${IS_>yGr)A`5mmv-)Wic-W!On(WZ`7 zNI|!QYb=lrlBg^Ih?vF#utyHTSq9ubC)M<5;-u>+K(``(nS;oyvmRG&q z`f}-|^nLYdyLNBe?ys~hax8e8MulVrB28Dr@WmXllZ6*D+0TYMPWgcyU>r|x7Cj-BU5Q_Z-w1tfnYZE$5Sj6)cu`PfO6@R6Esl$390D7hr%??v7+c24ap z_14QqHCl0(El2L?oR*1MrSC_3tzGW5O8cYeySte6nQgU8eL!g*Dbi+34L@AAf@xtY zg&`V$h+;7y)HIue<}%H5nPL%#D-Zg)xXpLNQfpe3&F+Z|UK9A8qA9$&&~2l1i&wW* zX%4O7`9iAdT6O;b%`MKBJkK#)n8}ns+Io)(YWilaXK!$yrJ2WQz9^4cf_N^iZLPdZr`x*f8Y+(>N87l*sisRaMdn-2DwL8b6wPNjXs1H? zV@7Wfr_T+=g~hD1iOT4m#4KK$waHEN}EjmLVl=qi0jhFgq4;<=n@C^CT@bY+xHT@P#sqGU^)%5K^ z+jyH!SXw)qNhDWU88=FjwUzgl?H1VDNSDlw!$_#F)ddN-N-)z-Xx{v{YgOJaqgH9( zo2oN>(Y#xC(%02Jz9jmjl=kJ&#`4P+DAMRz`yID^4XmX zQaZ7j_7Iy`u^U-<{Y0KRi`s4Np1?WKD=t6Ri2 z(uQ#)Q^rq}d#P8v4 za?>!gR5G^ zkjEKREW|4ueTM2{<~CvFT2CWF=g5&t`KF^9-N7~Bh``2QBUQ2lgJq~>fprow%uve5 zYbi{mq@g>oYq#C22N_!b01I2B(o0LL`g++tj#vA+rk_;Rw{J@)Yd5RuZeI4YJuAm{ zG1y&60$io$m46D!YUzm*T{7|aqX_{Kyw;P*R54N(Hw7>pBKYZ+?jZJW#MW)F5TTk& zai1ndW?&m&J4gU4D=M5ZEPW$H)nCLO5W4W~*e|JgZDzT$mm#H_OqE(WBT~vtqTQPT zP7p$2Rw=Pud48jaWRBuO?)I+Mmmo1lc$adk0>l+P0`ET~<12tGDp!xYC3hVx?e8R& zn%U~K)xB+NTF+@t{`7XTc5XT)%G!6=SGv9RyqWTRZbBYEyMiz~4aD=vAg~zgj9_p? zneW+1ARO`z2h2%b-(GMA(a0vCLxGTfP*jo!vXxwrbDVYnumBwV*p%lU=Wa$$0M0N; z0I(k4d!~6UUaNXr(^q{iqL)isroB4bel;sJ?b}z=NM7mfr(Lxa6O-3D?hXOY4tI6= zl#Vgzan_%_fIvCq9P~V3^<&VE1_l_6930{i$-w;ZPUSej&m0_b20{D0=QQ^9Y=Cf2 z1JOs!OJJ`(v7BIF15(wj`d>@g?Q37w`h2%5O|7PuZEvh?-FA9ucJHpzd5xUszBuXu z>Pc<6=hLYe0OS!MaK!r@4EA4_jGX5n;BD#cjMZ%L0677&#GXEFpaM=a(;RiiKia3G zDIlDTV1eoV(03ig9)sn;+m7LZuT|w8E!$5$@AF;t9Ajtlib*{ZX|(Oq`n`2lu{dMD zB=sX`zzPZ5j;Aae1Pl&(ePs>^1OmM|&+DI{>JCp%pqj22l39u5fC=l2WP(p8AOX2tvB2C zOH#_YI3LEpZG|$&gUnNgPt+KBy-P= zcERFycB4~!^^KD0)&2gu?}t~fMX&k!PfPUXinCo3_j!7AG<#?5gv{TySM3GUKk&6Y zN=p;#G7O%6UPn%cqTmdloA;BI8SBZ;IOsXx9N^@P5_lOSHS|yIfs^}Ge$ZzPlkrc) zrLudQh3?#tcp!BnBN?xp2^cx+kTcNd7y+}Kk-$-ooDY6%pZ-O8eg6RH5`+0TL(f*# z^|RAZ$J^_;yDM6>-J7@DSJSUEeztyw!%D{5G$i0VcH`y%0!~kJ=ne+l2KlO(U;qFU z$s8PXJpnlDf&n=Pr%aIPG9isiWD>`r0aSs|oCZ1LC*{ETdzz0bI~;I2^~nPx8%YG5 zbs77-;I(>D+Sk9l+g`1HI``YL#^kSM{nq~ItLd*-YxMHf>V`jNjRtUBHVN;vXQ>2( z$n-v^B%1j=9=zj|&}BwSo^jU%bpvSkX6&M_LaLP`2P6^z!Q|ywG8#(s* zxjVaz=L8Ng56hm7>U4_HUtKq{+1p2Mt#@Al?m!X0hVDA~-&T^@Sy?x`wvT6SiK5yz zSObys44i?CVEn|Bfq=t3X__*Yi$pfxP1byHNjzP@ISZ8iXY;G9H+;M_(F~-)$2qz=~ zS?JrCjqCs*gVX`W0pxPSgSP~Qz{dpIQZbyiFagi;9zI@9NXP(S0CBYAsTGye->*$w zuV>ZtPgiETv1_7lT`sKLw}aLB>2E%rRkda;Kp6KR;E}XrC)1E{0MAajHV~dM)Zml1 zqi1OVlb&#Kjz5Paf@+u}f(}8zg?~n`dZe#wbxXV*LL28#e8D~j2^raGDdPwI2a(6 zbN{8~`!5p&0ID3=bL3JFo+f zyWDl^HjL-);~6zeOKWzt=Dqgiz1{bBc5iFGj?Pu?pIce&Z7rj|w(ZkRO(>*3Ta0aE zv=QGKTxUIVfsf)R<>LgEjmgH|gY@A!EKW!{Ba8$0M>#D~8!EsPoMSv>eb5&tvGqJ2 zSB|u?vkknAa0u(v3=E#V3jDl~2**=ayt~_5`FH61_1C_oyWZMrw@T~gwcgs>Un6ia zHmam!GruDP9B>IIo^UuFvBxCDy$BgBPbaTZI3=(MBx8Y`@IU~Q8oPa&2{_#&l6qs6 z$jJlK8NeibxebyP2_Z-!Ffp9&Cj|#5_=gzbbDjnU<4tJZ_fKD4*7_&AZ`aQ8DB0<* z-zBFnT`v6A?(J@^DQ3VbMhFD94sut3a(4r?bH?NHjk^sh7oSfxBB%WAtj-NI*^ueq4>cxf$;O9IZ2pnXNbI<@e`!DKHOAM-Z_8V9(+!43$F~L0ixEbBZ0OKdnbUiE&26*(a3Q~UsVF}61nx3PA z9R0%K8)(2RsK8(;uU_~Q@Ds;>9(;SFd^z}gr3>wAQw?)_dv+v`MexptZt;yr#J(cE zL~&uG>FFZ0j#aKM?j*O<^!Tnd8@qU9{c_VhP4Fk+Z-ceJfuFV~GLorRk-k_ZtBe)pHnmGlTS@)`#ioPOEP_eMIXF9b&&)H7WGMN$=hLInd@ZT# zcWGy*TM17(SMrFB`@Ub8`1RS)A2vlMSU(~ONAF!u}Ja=n%@jv!a*EKH_ zd_IOZ)I3Y@&sAHCuZeyIBqPgXq`+g6>&3Q6Oo?X;dD_rLPqN*3tTeZf{(N|!#Oq;i zH-`K(Zzh$eTS)NUyr}VNR~JyTLpi)MFPf68sg78kRL3Iudm;$Yk4G)ysu|Q2a1xid zjg}&nWh!+rveTM1skeS;wP^C`B(E7b>T+WEey&|5JXM`7>C~kCq$?{$-kjrg%iT$H zEu2)ZXl`$GKLNw`O&~+8c%783-mc0T*H3Y|Om;|et+lcOf>@E6SRIh3n@x9de>}HW zb4fkKuf9p-V(#q6kV9YvEyAe40D!o{)hSh&hGu5Va!wfJft-_roaa4>&q7Ywp;E_a z2Z9MXB%JNeGlD@mQh3~QIO|_ahlD95Hr(q?E_#yqn|!xX(Wu3xqPH!Zx^DOJ>rQiO z5Q>dByYj~B+N)o8Cu`mBr^wc~hjCmDzju@K9B@G_akz7g1sOP8a7pd-T_S7Q?Jcb> zZZB_ct{}9svb2UvySv-FsbY%O($dx-*B3W86G)KT!2&$D63CE88_MXXn6Zen$B5oW zk>iFaV^@-CB$h;uC}NH^X{MT2VH|PC8F?L}iZy8&LH%aUoDc-oE1Ue66nmRO4N zO4QZvqMesDN!{{6J$n18v(|nP_(M$njyx-@{jKfpe`@a+cn`!^w-*pR7qNT=@X698 zxQ|AO^EJ2pC%VL5RGPKKCSUC6z_W>#${#me`5x!Q6I@9o_cPCNb345E7Zb?SO*O>Q z7n94c4uj1+|2ul-O=cJ{noLo__I>gF7933EO!)&Qfpd@mQ$Bg$fiRsbQ%ps&HH1-Mr^! zxvEcBDd>}GDI}5D-)qcr1Lp)NBLi{4!1=jiPDT$W0eIrM)2_)IlCm=bdKdL7IKr+$ z3xxwYA%dPoayK{VbC)9@HdK&sM*y6I^9~6BkCd-c4P#4w9IyqHg~mZ2Fa%&^;jnuU z21m=&ll2sEuu9ywR@YAUR`uO^H~08eE6K|I%~{`1`*&C8dprH!eyW%8jKBW7ThM zv};we_3z!otfd}VS-Zun-L#h~U3$AWd#7~vW^L4r2@Q~Qv^ODmDmh|uK;VIaoG8H{ zlZiX!loljogO8YSF}oxXGNj}Ik~V-y)mIR1IaiT@5oWmmTaDJ&vF$101!F(=f%zsigmIGD%Z*ZJx}^PC%DMT85lY2 zNG86kCU&hfll~IY`rXP2?w4&g{6Fwn4#16L#GsN+RfMs9-1X|?q zrd>2{hkJ2@!2=xd3lo!(#|3lpj-gF@o{O)~5KXf(k^+Oz`y>qTGk_I=${b?=@;utv zT$k`CC|O-Dj?FC=op0&*zWR9UFW$vU&dqNtd%E;-z4u!mZ~Rm67m2)W`v81t@MnPZ z8~*?nc%xMD4xcuW;q49+cdF_sW8&`tYFDdcXO(-Ypt7*Kxo9CjXptcz80Mb}{{YSZ z0EskBf5RH1Xuc}YwVw;?aFUbhJ|xnw^es{%xC|dp)otx=fDFeZL{)<1G2oxxFN)g! zr62qgqvL*~W2j%)>K2|Y@a*=twl^}_-P+3!#4m@6liOX}n66=(GT2!mbzoSbB`^o& z$A-UdkJ=+m(rr93<1KH(-y8fNXsHxF7WnDl%^%`5io%KI2w~LqC?nV5A~guIuA?N8 zg;qnkR~}|_Q$NAgz`P|4CN`46)90mDwD8!AsmVD)qNP@qOX+A$Qe4+=qvlC=WUDL1 zQO8ETTG)BKWZY*8QLRh(bgritDpQ8P6r<056_%{|EGRoq9)z46o;v3Q;A5~X2n+LP zG9nCMbT~Q4`9aTf>zon?Ios4`zS%z&zhn;{?Qe*mvgW<;zfzSzpTr-tx5SC<>=Hxw z?j!Igj^Vq|p-|wz*=*&Fa0F4105mVb&)GA@Dv#h#+P?e2)6R1qiSgUvKDDHn3vv?U z#hwkh)O1!{sg34a0EJHR87;JMLy6@{rI}@UwgKMF{Z->>Zyi+d62zqsIr~13-P!sQ z$-Sb!6CHuXb6U}LU&k znmo5Uls0zy#+Pqv9o#JUb81>0&Z%h?v}ml&Jd&gVR5tOqHPJpI$?+5_)2Eo>U1v&m zr&g+^Tbq|e>D1(?p0;b2_tCD8o*6!4O1&9R30IL$pT7j>8*@e7N*9H?-ume7@2|>! zD^*_}G zy%cfC88CRwB#XtqEJ+lpkHs47WD$a_nx)E>KPV)E2qPHzPbY3_PXXlk=fMGAYd4I% zDin@S&93SFcqHVK3uRQ}1Ofpb?5EF_)U$3c2Hmfty%gKF&t~41*7jQ8f)M4$$3~>F zX*SljRTh`)Z98e@bH4qe2JeqQ89?0G_?P0+Sb{ihT2q6Q-H78kBozc4W5iiWDmo8c z#fj=h2{~+#LFf)KjmI_ZU$j9l@!#VRX$DWkZxpj*AP@MNN>1JZ9eGi~3Ul)ej~P{Y z7$hkqj5+<>Zz1Ps!N6ucFw23J0C2>ytfqF$Fb(bXN*2{=dT@GceV2Pay-3Ux`t~g) zuhwcgX}zku>Cr88S9-Cir;LnXfHw@D!;*UE1Y`l86m88Z8?XQ>Nh5J5B}*XWu`Phu z7*)$-X9N>k*4iGka#di`wF$F~5p5s`l>?b}4x}zX0D+8dg%!!rO^9Y`HA2?P^f)gQyJhgw_b#Qy*sJS&yRlGnkyF1O;_mm_H^ zmoY{N0O}>hkn!88xfK}y< z%91jtn)B*sFtxDQY*sFEvR=y%I&f`SFWy%6RQlfTR@YY6hiyErNyXR1VQ57qe`#6{ zOX0fYrR^tm(Q>5P^gJdw*K(m?T1+ZNr!u=S3ZYja-MGdS1D}*B+nV?91AfeZ8+?Cg zHC-#fxB54SHt(0k{yV#|@E?UOt@zE%y3dN{(^hMA3Q21SZ%I`lW5(LMZTm@U{un^N z3p@+(%i&o7ta_$_;cI<=#cHR82gLp?I=#=E*h>wh4V*Hv?PFd~;{O1Mo;Ub`b}xK& z<3AL5!s$+9ZxL%(`kWBtp?>Cmo|CBhCY^>2(`Foq2oE#5^5G`<}0{r$vo z`GyJ0u1`-N?Zd8oJG7rj{gu8K_zU)2)8>us=J9`pV4ud{8?`HT4H+7z#!nhYeXLlt zi=D~gdo2NClOJc6F@in^mU7B4dH_Mfg~uQa00|q3UA$){NaQi7*O({fz!=EnZaoht z403axIqEiyk;eFE4T+kmnqn~-wBq@kF*4-BChXO)bfXFqQFi5Zp;Bx4y1u2J)S|tf z0*xF5ZOhF@4prK+{{WZsa;mPnLQsvq%Fy&r5%{NG@rJQ|;!hQ8n%9avNvlfp>b@fJ zF0ZI-+U}`4;Iy~;#;rZo?bEaF!II)kj3NaCHN@T%7~DB0uNXM_ah#PuH`6c2LDp+i zCB!pN9CExiQ7rc}M;p9$ki5{r9M@8iQYhNyXkbT>pn2qmA^X`QR{Ar+SKb5h27!Cw z1K>XnrjMrlF7bzmym#aMa@K2)8d>`3TZwbg5E2A zetY@TU5fJSR)MX1@k*XuMk^17UdjzdaH63I(T$^R8;#zoF;Q1?X)P~oD0@t0N9}91 zQfrznr!#dO)||@s-MLGfl_lwa-k2_Wa@h+DRoLkFnCqdPJ(q~!Pd)Y0Z zn^6qWvqrI{!F3V&kL9P!F2anJ?7#3&JL{=`;F13T5@pser;^)E_}#7P#zjca*))rI zJ_d+wEfdOyB!=2KcEu9Lpi8}hW|7PM$?+rNY;7#sev@eg+H^Ko8dZ$?rBZ*{ppDOY;?u=8$N#&}XT7M7B*0(*O+Bx{6KGDixG%Nj$ zRh7Yw=6@}6QA~t|3~)eFFb)O@>JLD23FORE-%3^>#c{NglAvdtl1~Jld$0fuuwz?c zFww#(URIC0%NKVTD8@P_?)jQt^YyixX4UZ$#5l!8sdBz%qL($)WvWX>_H6aGyDc&# znpxx{4CLo&8;(IaBoYZZ_Fh0Ejk|{3otmIot_IcQg$>RC2M0J~ogvoCT$t%0zVnMx_vo-<8J92QR1Ez9Yn(3)K z#_^P42&?lwFLs@*?3&fBUiu~|w-&C3V{{a601cua8{uMXv zj|@NnbngZQQM7Kyggzvo01h|=068ZIJ&5n`;WA0)K2b;|fg?R~*xncbGk^ztfyg4f zfBp$arr!8-;eYL8_To}&jW@y5G)I!Lr-c3?5U#zC%vryY{w~{I*Is62Ss4*j9(r&X zA3_+Bk}?M%2Jc%@e%lX1RGeiQDxUq`vQytxtG`VbovzP5ZZz?DrBXJWT{PjdyQLSZ z-79o{df77zUex1>8r}xLQp0vOmOD0rSm3ZEVD&%3ILSV5cPmJ|vBOFMVon&U^(36_ z$l#oACjbHosr7s2cYI0nGqz-6a@ZSy1&Lx0OsMVx;GCXy+HH~Tb&#xuwudPpB?i?c zv6dwL(nbLcMlw%KDX1j3lS$~+oA*~+xVtyf?OpUl&Z3h}_VP-}TGqG4WS+javfO3U z1E^a@N^THCoPv32MnEKtmf!%Rg(Lx;wPwapm-?;CWy}#=kjcSNkohRxMi+B;0D=G~ zaW#>7Jd3JE^Ft&mR@Gu>QyffJ1pf47FgPcYauhJmGH+>YTGv*P1#dd$8&XP{G3VYW z3LBE(tYnejb7L!#u2PMfY1@{~JGSj>+TM0eUE1wzD800^R@TXa;Uzz|B!Y6u4)gaF}z$-yCk1u_#P9PTIW-`TElKkZMY1#HJ*;r{>|Y4L^Nf1!Lc z@ghj9c_BoeV;(>mVmUcK8TbxAwRqah01uTh+`t316_pohE>IFn64?W2J4q_SzOns| zZhqhUN5gZtVeCFD%ku!uCf@+~vuk7$7_L)}SSTtREV%ieAk!|#yQZUnt*=Dq6?-j` zc3Uo+rMI(`X^Fz6XDMQ7H+G-$JvuFA_p51kkDIkb52yHra2I9Goa=ya1KB2a<#U$g zuoxsJLjxE!cGLDE z3m#Mg0)63=mIRzJ72^??lf*h=sVuR|@@*=|dq)=b8(5XWDi;I}K~5VvtTjtgO8Th9 z$tSIxAoun1Pw!^af^&NHTC~02e%me8m!_)eYE$tuvg`V^%!6!xWO4^xrZ1dM%&f!} zUoLE^4a+G7MnJ9)Oe=S&+-i3*k!z;I_UV+S%(4J1t$;g&5RwVyjEw!JTW|qo0B-z2 zxRO0rP=#g!YrELs$R$F+VTex6v;x4yhj`-zF)pfdx%z#nn%_v#V~ymw)#Qfyc+7{) zo(P#%&Ib$%`M0PN0%xRRXAde$wRYsD0&0Z=x`>xSTU7OoP?|ZxKOd$QIdpoT+ zZpta>ovg09t)Az#d^er^9pRr8{7}D%C%%d?rg(WJb&cO%zha;xI3?n=a{}CvnIpHb z)KsaB8aKJ&-8WFMu(s1|6~~Qyda5V9DrK8X@ch!radCZk(V&(KjaA-#Lr_U08)KO; z16oFmo-2;V(^1iU7jPq!!`}^bi1m*Xt20Rr_lUJ9rX$h7YbxW5j zWCfS6)Acy~58>TI;y$WT{9)p7wwex|a}<#ncSQ@?*+n1B&1Yj8i>tIORbh(W&&*bs z1M{`2I+B#qyz5FT5mweJNm7g7-P4|3EhL`o_9?|-$277cqb{32mW-`)b+snc)MSfxwXs4X6QJ;Sx4Z&1 zl1o@)^5b`oKi%$F!67#l$$1L~U9N?fhh}C1sn4jivs_)>$Y;B|noEnPebP-W_1j4# zvb2g+i5f;FvN+B`WgAvWwFHLI?xZXuh5}`2rNNCD)4&Bx0QKIO= zFtz0D=OnJ>H_F@FMSZW+TO4&Ny0T4kMQLRBjC5;#S9gD1$hB==4LZ@Tq-AgUcUWQ) zgEZiiY8n`gDN9zRePCk8Mduk*g+_# zDw1|lOIb;W?(==Oe0@~kCeJb7f z?)KDO-s&!kbr*-?nh;vv-BDFz)<7yIebK|G+lP&0B@B(>z9;eh?x}HcVd0y!pLtt7 zM_-yZk_Mg3c@_xEB-)mzI}#FASsGBNk;EeaivA$+F0JG1p{MCa{@cUyG}FpncDB?! zLa~+mPN8=^?IP(q7}>t&dD!j>eCaM{*%VOe8eF%NeT%}=2;#PlpuO=*TNrI^AQ<~a zw}uu)A7r-+m%H%=-Y>35W{g|LQaL#3(p1~6UHeM1v$MY~J6g%xbe_>yeoX21ib^!; zd$it-+U{Fk+bw##+wisuXz8cjM{Rj$eXDqa@FG38(@m! zFs`0$dNla1UhiDgQd{ef-ds;|{{Zlkc#3HOC(M#2kZE>qG36Dwns>KdrD6ybSE4Fa zTwJ-K8!v{+q?Ob6Qqr7nYr8jYwzaa8jW_PNyE|U%l|40ju4e70o$Pg5_r%>>ScUC8 zKckBc5D;UJ%@%fn3X!tz{Zi4cM3LitwTzZF2MUDWs4^Z1TKJ2^2$4yuUR}U8pt11v zjnuZN3}gk(n%P<~C~(a**9rh^f-zaQ-Yd4XW?eH(iRF!orlH~oZD#El1_R2pbxkJK zhShC}XER3GZNzYS>-~4cdaPt$>l&2ymX2e!-1At_CBq*E$t>()kF&X(z0@pzvkD}R? zI>w^<)!0Dd$4`^&np&vKn5Dh>WSxFoVi==WC4$PwiqR(vCsoS)w@_Divgvk{zSp(% zVHTxnMI@IlvU|14`f8Hy`X{owBi-ToB@o%_Z9Jq6w)S2go%cTFQ7+LQ^T7n+MirVf zhRCjJ`oj2MP2^Z=HwX#+=z>^+#>}{h;f;#G=opq5I|(4C?)d6%{73dRTYVnh+eWup z1b$AOt8e#11Zl4bH&NMguN)*}EpCuofAbjpyyb**&yR>l|m75AFTrcbiiE!pzeJ2aEV zuQaP7sNo3Dm$dQ#-%3l@aT-6F9zw{nMtruGR%3*jrC>|Qj8(*JOAVlsLBuU{Ew{~M zJn^&2lFaDptpegqg?QveD<3SXz?i@rLhb^zlbecXpf*n#(G&%>jIEk_qiz+Uq>zu$iL;+aXTi12H?31AAr2G?#aY z;ER@E(n)I>P`M)lOJ-7_5X=c&;098~QEQ-+R!QPmbtvG~6K23~m7ek_ck?7SkOjK8 zXqN-zmE!=b<-q4UeHzO3l<5~qBgvd;y0ppXlHo~PEm>J(WAgx!T?pAe^GI^6Vh^RA z*KKWPo7UIWt@Kt~?{?bh%GzCdlYb4>lY1_@FDIfgX3(_Tub$Q8X#;?tW4no_;{_YZ zn-dnxjuD3DJ4alud&jS7)8^Mwn0b31IIk8+rcH+mV3_66)F@cwjpM;A+=5L>cctB0 z%Oo2nwz|oX*=h)@F#wIG-bow>NeLn*M=HP)uZ9&-HCxzR+fO90p3vTgp3U*KKmvWu z2y%pcj-zNQ91_K}jBj+>aeH4^vem6yTe~Im+>50xF1EIod*4fI=X)j7yMB#n@g_Z9 z8+{|<4x0MCv`8a^TUH<2x^gOcYxXnw0fnL)SfHw z)J`LdSGV4p?u`<2IcVIUDT1A; z&n!G*`Kf!d-9f)`-K`bA7TwmGUFw~zwS{KdQ}>hmT3ubm`^{SRcY11{M}2zOrM=VV zUl4d^_(0(b&vP7QZ6{X2du@A6#`|)?forJL+mdq}%FG!0E{o$^9db)6Inv+5`u(#; z7fyC#Ypo{N4ElBXR!fLxXLoB^Hr*^>s!MR5S&xj3w4W3Y?F|Y@d^h6wPTiVWw3aeJ#n2!0zYp9vNiF6M z3kwx2RG|?9KuYD5Ayu_ea?NRX6r~rY`fC=pdg*PQ(a{M?EjYet%G+%1Ydu}!)s>db z>7%jqquxWPG&&xsB(d8`b}sxotk}w}bK&i1FlcFGwYmb|yb z&}vcYlIs(|koeC=SC3k?galrr%B0 z?ow$V%(t=CZkGb^sA!_G)Up&>>JS$pXKWw6h@mzq|uX%+kvlWz8mV~9+#$pevt2u5KdO#vZgRUtzH(Sgx? z*IBT(CMP&3Z7Uqta}-G9(pSrZzi_wr+*N5P{hEk=9~VE@&Gp=w~gA}ik!$x$Cz6q=5SZ?z1Fe5n=3AtSG}zId{m%=%WYf? z4E4@9VsqDwZ5*BkGm`LdN$b%_?z}e}>o5J1r8|TXep>of1~jE30d?J!NHU zUw!JqX-SQO5@y^vCg2QNTDj&Ozus zR2<|VOap*&00#inr{?N1dpBGGfI%nbKX)S?@&I4FQ_-ig)9x^(f1A~rybeGie7uEY2ru6$zwV#@AOZ?4fSy!WNZC0J$mR|HU z>vev*rn_i+SM6~w{{Y&9nF@7i49_@?_^Tu<5 zj0^x1pO~IJqfD~^m;D0a{(riHcS~&&*4F8wdaT0F8;ZTGtIhe{NhN-cIyHk?1l82U_(~w`S~{e|N6CUhlf;uL|2ob)&Vm z_-)$OYg=i$*HY?{und5pj1n`FNCbjNW0RgZ2LVq~YBh7Xdj0N3L2d{cVlp_v!T$hc zV>^O|#CgUxfs%PF53cO+4lp+0;~6J*U^|O(jBV-3892s0KbRIXK5Wuo(yuhFN`Cw(_sJ?`6S-RieZB5=g8$s}+(0B``{oZx|uFa~%S>5Eah zd3x-w;k|w*qgKB5_iW!q-&^Xnv)=e-7$=}9!6P{%kGygY zI0FMKjx)_!SuzM^+QWFXTpeBGvhgy2&5pMMmIJF z0M80`^HDB&8_y&H*clxLGJ1^XovJw6LF+_bsjXw~y&F$XRjOKE->u(x>#FU2+u3Q; zZFIV~a_YGNbU48WBa!!Uxb+zXWS+$b%rR1<6Zb*JM>roYN8QQi0~j0*2n3zj6wvnE zNXYjdyb?a3;3z*R;DL#e!h!~KoOQtLILYX67x;J^K^<#o$va-{zK=y`%AU7+?$y=R z?e9C>*H*m0HLCvrf%qcqY~fHKGCJb|<^103LO!RPLb44Qhl4Y;=l0FnXcfCoGr zw;2Ey=mL@msEl#-11AHoLb*MTF~G?^fjf$+!5ne`0FrP{1{ID;$vIJuxEy4R(rG_F zyKQxL)%AMl@2{SXi&wV4E&V%p=)E*I%MY^KlBx>hEz)WBY~VBU7_QJWkO&72*CVe?jl&!q;w>9P)U`PhI|~cD=VA#q zw$n^GDo$J>jYb9uEIv@g07Dx0Uk&^r@kQdKw-8(DP_EG=nvCiSj495@yv>K@7!ooZ zW4Ytc#pX09L8(=z2EFL3rrr5^Cfoe?ecRrK9<64SAttW9=Cr%E{Vi^*$@Es{v|Ti2 zGl9aE$z1MS4_pFskU_>&l>iaP)1L)C4fxaJH;yz9hhGo0M%H{!uTByOSeR@y+bBXk z{oHEDcT;@=Qmn`<2t z!^;u!#7eT>U*Fw>aJqhzr$Uc)s%m#n1Qu4Y$t;b#$&PQ*9ZTXb!Ef1P!#eN4zk^WT zc$39C)G1~0pW>dGb|9Nwyo8Y_fxJ7b$^MsT;f*?0mK*5w(F|yLqe_?fyIbYtx}AseDS- z?YBj7;ZF)r36gy?z&bpVU09&En-|E}F^Q-9Uax(r`A3KJJ6{iYJH@x&D?=5Tm%}WY zYz)tFGR1u`iV1?^I8s+=)qx7?GIF359&InhtBCDZ+d$GZpATEAkg00~Z7#({K&8Yf z8{=;qRE5C+Y#BKt#5dZXgFYeL-rY}f(Z7Ta`6PTt=Ic`i2%rU3Ioq@-A9Lnmw;vaW z%Q0%7@7%qvBE2e@tW4iFClOK9r+G?C-HO>l5%*yPqZE=po~|x~npE6fIy9#W6k!({ zG~pQD$}irQ?aESjl$&nvQ?HBT2aGgd5NX~Z@NTbt;JdvA&-NSW6E(E9akdfTnL-$^ z;JI9-&6VtT7I#PrPXww+KA+-g{sI2iQ8YgoBGWzw{Ck=uk52gI;hjAr@Gp(8_JxWs ziar~PNFuViot0y65L?d!F6DEo+1cB}q1=30HAXxkzy}1g0l>fvGNiCLBevs^0Ab3u zru^WJMh-9mPzM~~HbKV#ZX<3t1D|c>5mKjL3o4i_WhMKZULEq*jlUtf+m;J%2#Bv%vI+(%`sSftVa0BC8Jo@6FZ z9bKq5ZU6uaHy8uuB%JQa!59GLxEb~R9Pl5<>-`7AGyF60{)MM}SNJcfIyLvhuM?9X z($88ZC=-Wvf90jvD&2NBV-UziDpDIB%t#xQF)9A4LO^?FR zmLD_0&b~4+P{P*2LQfBlo{ABgT+azM-Ri26bh%WVYBZb|lUF6eSFEdGaWSQbZ~dZ< zB60S(Xf9VL7P(buN!~H!YHm#_#a%aN;J1J@kJ*pInm5K@i8?*Dqw&+k7Hg>d8~AUl zz-5c!^^~esABlc6u#tB~;uQ=f@WzpFt1gsE%*vYMNiTxS*#-1S6yj9|DQhi%r z)-GQ2QN5o(Gcnr~7V)2w3oB(siq6s@<-rPhQI#OIa#LzXKp3$nDgnSFoQ2Ln(X;Ow83ca2h zi%BM$ok@GKb!ypObCsR7YAVr6);+JmdXQ~HU)<+E@Pc^Y;Xzel{eg7gwl?$t^PX|e zNEPIF8i)Xm!{z`02r8iM1Z1{B8w(yXRlZ(Hu7|*yiCs%w+T$a@J~}zU3~}MhzH{Gb z<2VQaAoOhcM7OxcA9i~1NCcg~#7}Gyw;5ta7lPh~4-BJTx{jXhC-}?Lt<%-Mk9Kg? zsd`kKdZ#

eb<@>GxXNzg@ZSS(t?(R2=6d?;`*y$;sy+5WhGBjDq!?_kplZ;lN&` z?#W!XPt4h2!NA;j^{iLB2e}#BhB&}EQH-|)WDps4lZ~LR-Nu}^ib>ztBCgy6&fW=Q zz$_SU01^fQj2ic8Vf0C*9j~XNzL$4zb+xRv(BP?6-6YnQZLM{+mrHMNO>MI`UhETq za54ZVo<;@<$RuZSf(Jpg0CG%gs4^YH3UC8tagqjD79gAxk-#K?gz=Nkz0{1sfD5!> z@)?gK11vH@JOUIJ8D0R$gY5(!tVcrG0Q0mFmIHx-!iC?BpsQfFVxbn2X*S$%Yg+#5 zcXxMtZ1ldHwD5HrwWQPN*G&`E>YDrdF2{dsuN)L|F~G@ULtw5>2~3fK0RtrP0Ou3U zBsXJvm15Zqw0Ahb$2l2e&<`+@7n~aNVRVBde<895%Yp{ns3e^7paKRC6?iL_n%`BG z7?8(mft=oWRphT{w)S@qtl1?~Z57?#?Qf@B zUEgMJ+(OZYAxRnQ^BxZha(3sVV2mG^7|0;}=i&erx@AYIV~RR$#+Wceb$}M zG(LIZvR7^tjD6e!&9`<4z#ukwT!WHyE#=CL@Kka#G6x4}J%Kn-Kwa2XI3P7=&2ChI zf(CMW@CoCRazkLR1Otq9=A?jky=xU_SVfL z-P(KIC)2gLyooC`oz<;Djv_NtA8D$m#}2 zA&AC0@OaqR@I!H)4o?{)0G16BXl(5;^qf0Oy~}IqB(2PfN#LW7B1LtM0Yv{V%F^2&J=HCf<*0G}Y4C ze71ej)!AGUQ~+?K1v$>{nHeXzJODsA0CcYJN|>hC1O_a@fMQR~6oRaH>_7{g91a4K zJhsV*I4r<$cW@6l`E!uK9tQ)Gae;$f{*xvQcw$=^B;yB=06956n}YLQw|Bgx!1Kg7R= zkt(|Zfe~f_oPwwryI=-o{13Ubxzn#Cvbiyfn@K#Ge2G%#9otamDUqd)RD6P^SgQgE zY=Ud|ui`ZOf8dz^039|tSsTV$B8EcBz^BBohOdQ@PE~;blBWtd;0)K`h0M~=Ik>r% z=bmQ|H1aul9!>`5I2kRBU=kRC+;h#D-c@kBH5?=s&sWbUr&jN!?bg=lYm-a&IH;#N zKd#N$Jrd-mo%GV$B;ERSMw(9L20$EuNx?b5CoD(Iq=GpL4+D%7R@UW+&f+t{1cI%| zC$Zz4jCJ99;f@~gzyMegfz)7*G66U(f&dr*wm`sQq{y-m2_%KiLC$lG5Ds!Ma2Ftg zc^Jvuc)1qbt6OiUXQq~S`QF`aucdjdZtkydiu!V^dU@))rjog-Ac|65p^4k&D&{pT z4n`SYX&{Fu1RuSe9N?c?_%W{diVuoE4z%lE5Npub-T1pgx45#4TGbNHSYGZmlHOZY zyIXl7a8+cC#8s4SD~#8VD+k&(l{j8W;Nut>Jo0h@0A%4t4>jt)1u%Xud@||@@wS1$ z$=rV15XJ^e9xaZ0&01fTd|%>#Hx1_>+qa-?EHFlMfOmAl zk+_Oyfv)F1IPg;woOr*&VFF9w!77fQh>iU1~9CnIl&_ZvMb0&rF{@l70l6n-}P)^!Ol3qT&UUtH5T~fW9GRL_*b~4h}+tjxA(tB&IudUUcpUvw_dwU_ow^vdX z$NI~em=1pLFOK^`$IO0Hz!|3ATOTo^Mr;wekd_@zOR*${Cpqhp-v=%ESm2h($zDh} z<2hr=&!_+#ZN}iuT3RlTf8s4?Owcr#Mb4+KUt4LKb+gSB2|eZH(ZK>4=Xl|TS>0nY z%E=Oz!C}cgt}sz@l8THHa&o<`Wb}F@tex)k*K1tmi=3pR9%puv<(s>bl2*5#x7YEy zDel{Vr;MGzboq$ma0)>g?f1Ipv6*JT!N3Jr6(qJYLB?}{p!2wA8Q_fJy*uH*hBOUJ zOYu*Lb?@veh;$3T4(Yabo+a1yEeFG2Yu4XanroeE_d^e^Tt{tdqD>8!lclx2)#cUF z$kU~@obgG;__IvZJTu~pt84u;O46LqX{>3sI$i7Qeja@*P>vl(Nt;L1r@ho4SJ3Zl zrGi^)n~U3-ZeVtb>O(ru8gs`LN~L;~AexmZ^Ih_#CgTZOEjzs@8_Sg?rJdQ;DivWy zomSI?`qwssIex5=dHHugH^jjL*2AJ!y=?qbpWRi|lJ_jkS<)h;dI zxOl8}h^+1%tnXkEi>oWRA@r-CiT*E72t}=Up8n%jzSsO|;m;X(FGCj4zK!7>6TsT0 zp(dlQXj&{Px_5^(y<1Un;f*g((_yr*yRgzV!Ep(S&cbPC@pIbg8W+VoBAO5UB0ezG zbpHSld_3_47q(i5iF{dl{wcQBG{(6Q-d|rsWntl){{RuTwGHLAoOEqwVW#>20BpN^ zTaG7<#Y(Lu?CC~6-`UTR%Bq@Er5SQfs9I3=l5IFiw+Zs-n>!XBjA_le%1_y;>u9(; zHx}aglTxxv-uqo!*XH?TH~@MD1YtK5fDY#%Z9J%AKqL&2g4Ngf{{Z3stKb>*xb;0x zLDXMYwP~XoE~6FXmh#)hXfGq3BMgsi4b8;XR(idg-Dvu}_F9W*_t%hG$u)6O5J7GT z=t(_E$M>*#$Sg2-9smq6RT)M>P!qYp<+r}`*krRaHyr%LjFE%tRE(VA%QYA%zIZq% z?Hi0*T-Qz(dc8GX>api4u#9CMUTH}#SzX7L+_zk+>8E$-)%IHZx56)tQ~W8g@nxo; z;e8hW095flhjpgM;v0qgMyF+R%Vhda`#o884Fc~;(sc`IHH5OCMwWYxO>E|Cq!t$O ztNa1+a!-f)CyI32e+76S#hRarZ#0{?*L-WHUU-fjENL=a+}ow6gr~cQ!g`aPM&xQ@ zPY~%E&7i!svXEGxvc-=9XB?h+&IrZ;z~FS4&-@ZA_Jq}SE0?>}uKquG%Tc=yNSLA znVn&RIBo6YcidyQw}J>FQn5o6afFS3J$z#`eX*BoJ8$6^g(q}_pe#?h?hX$C8vOwO z0D^c}+<(KL{x_zj6~+MWKoP%}75@OnUliOyE&LB^WVCy)g5oR4Qgw}_ww0k|ige!` zj2ywA0FwYI*8l{J9CpHOiGL36R2 z=8!1JTpp}OS82<410-WA^I3%yTiHe;jaZ{UDo+eDbMqEpMsj&Q22SGHVb%OWezumD z_c!+vxm1GL3x&x&mmyGYUD@DZ<%ixK?T>@}G2uAk)ckv>EZ0D@$KmT123KSm0`^rW z%NYPNugnQK&r{{%aWv>jD$;eT$@`dUNx3%pQujMwNlHy9>8`5Y8xD9U$#b^LC>JzTWBTzET(h^i2qZ#B9Nj2WyYF-%d zC8)O11Uja;71rZXkwHi##y@ex1|ifGY#f1xTpZU6;!lc~x|B<$=y0xwqQu1`v9u*O z#&8$Sd~RaOdgNr5Uf8cUYqyod$V&s0)pNOu=W`rmB>dPJJ9s3HaQeO{8#vDv)fz3P zu&|R-vgK>qNn2g?T5PWOTFVhb45bV`s#H$yywgi)-9a~Ww6)!~(#ps05Bw6RR=d^y z8h+UKcd|UvJ(q;C?sotWgT5l10gNh+cq@{gS-dH{hR7%s{G)>01D?3Z-~*G4 z5tEb2f59X0-wD5LtTsT?JR0ht{{YmN@gy9R>Q^}poE(n%)A18+FP!#JbGKTvLhMi~Tb zc?DInag{t0L3@^$c1sm!kw|66K|5D-?Ko~o!hqN~VSs9~YBw-Dd2`AaC7L^evRk{M zAfZ`zoNT}Z7A!^>qi!ZAD=jxyy|3lls=c;$zRB6X%4wbzGPVAF2?|<2Q0z1fx9OkDOTIk{7a;&n67P%3oE49Sep$rP5Y-ZTe-#= zn1Etna9^ur^A|dWg~!ZdTX{?6+T9tTax=Z22LX}G9!M-kF_pk4TSd6gq+cgdiYvIw zU`(s$N{FkUFKi|Wqdzbum1OeRZs%!Jgx%uXT~@l?`>|KuYtd+~`Wr?+6_uKIR@+;2 z(@k2pd$qegr{TVO5;F`uXZ z0Afu)Qq%tcXuUg4)-3LAH4A?Xd{DTa3FF$qC-`OJ+2fcnJ7$J;QqWySS_x1<=H#AZcYbY$aoKkwia#XK;&hfGJfHZIpd?{{RI4 z0M_+QZ}x`pnAL9XF6Yzy5%DWXw32p7<^Ioy;eU)Lw~gm0rG>wkVfou|RTu;=Yvp)~ zX=K^0NJ&}Xs>R+qrlIcHrKYyi*UsMFRSV;=NvF;2={U6X)yGDb{z}?wtK9IJb}M*^ zcNX2I**H+3Yzqv?OBG;&K+5gT>~IwP!1)9*33bgJrqtVQbt_^;Qs}U$Ql)nt>~|>v zu;Ak?#DVOW7#AKZS6n=LC9ICbf)_E}qMg!iBPVV^T(AU;FkJYami|_!r#YJ}`eo=` zt4X&Lks5*u;Eb$6F@`w`2K-idN#2d4E8d+n`lh{{Z0zlJws+g{I;uj|Ez0f9D>TWsn4m&{fC5I@bT~QmFNLsK z%i;}R##)SJw2uc_O{la?tA|S!Xf&%p#gz%UyM}j2V{A3RwU8bDS`RNX71caZsdal> zi^PS#W1Fo;;jG|L!x<_BuepZeUw%p}t$Q`1+jwW;zJ;aTk1ae+aVEd5FlOE~O$Of9 z<{Nnq(y|-%C!5_f(fe;-co# zwc1Y6j<-oPo|%GX0)81R(hlf$7Dlu4yh+Yu`;4n%UcJ72DrLnmKuH`BkmV zmA2C9+Rn}Cy6JTKw!JIBdOfY!Zx`yx1*e8QHv_(%YkYxV5Ww)Xnw022c`|vQGe(Of zmskE(ls;gJeY}r~yiI-aBTYpfro^63pKcje2o@Gd zh1}64mnv~h;wN=0UOHdd#oE@_SxKv{Z+_aPy0y6@%GK`H$+c(iU!-(RZKlNfMvUGf zwz=6fx=(^F-DcJGTavbS{v~Ttn3my60}hu7P?~OuZbTN#<*bb@`ClU=#y&H#OJwl& zl+#*h0yM^#Zs`^Nu<;$L+PsL1_Dcr~x;-%;Xbi71O5jBn2aY^@CaolTPKW-5pjdw9 z#UqKK^AQ!Jj`5Y1!h;%-Z5DrUtj++Do!iM|krnV6rhTZ=O3Vwn3&OKx7FNi@a9rS! zFa>E&oT^Dwo{3q;o7-sGa?vLz*M3`BF4)erW9~)T?#^1P+m`A&YPR*Yp4xOej=6bt z0D>>{3sgkiYieF4Awg5-%ab&u;Z!JZEBHd8%N{a&(i}l%qG_ZAu~4K!7>wY8K`Ka6 zU4}E64$+E9Cz|?WZEDUDS7g(YKtuqe07(FlGFyOL0x-DAw_#{s_g1VTw}dy^uI1b$ zlMFY7c5I!=f)QC+@r(_mw`61GA9mesqH)zd@4B*A+p*2fDLc1&NocQSs(RYmYWCIa zSAx-ms0jOQ^MY0|5XBP_kfB3z%EZa@0;4S}u#9But(C35%bj7;{^BV2CYx_Jmu+v| zMdY4fc|LV@Xkz=!S^UGiik{-)D_F!fvv~*=%Syx>tCazxCkzLat%b}>#EN!}g}2ue zsp>H#v6yzd#1WZS%vQiHu^Y=cGBG8kEKo;#-=m9KwwuKoIUzcJHldb3={A!dpjc-3AjYi5lghyvlFjz23NVGI-J`@b*^xMXtI zx~LH(JEMUH2}APvih!;NS9d$Nebw8PU>ZdX8M5YU%Ya%*1)N{&cS=lb$Z&RoOGy6! zd}cJ*21xS@l11Au4_{p&yR@>ApxuYm^+_YJ(^M4R79k0n_YD*|GMb-*mHLBYp;dMi@vr09BmmSp*6yGPXSn^a2c+3 zBp|3+B{PKS!!bLxz{W<&fneR&oyU7_BvCf6 zt(j$(N!C!(VW5`Q7Pn#Z{ISHbe2Q0q119XYFb*me)ikNx{{U%eM%lxR-06(a$b^HB z^l6JB!7SKPql^HmxFz1!>aMrdS?hGPP5%JEcDb6ewz~CuY3}W-zgE-HUw33!O=fsm z#r3A&l~tyQd8&z=5Yf3=QFwEZNK#mBW16{Vb86`%mh2s6khcJCUCIik)$-j}b_1ye zOArx`7ZD3MuJQeos#{-@hi#sri);1H3G&uLq1!AFJadxHODcTZjvdvv+2$*GZ*`_z zpu)^kU}7*s305#UZ2ZiR8w9~BTYU=B(K|gfv%9la_g=qtol;{@RNl8%O{cz^C))b9 z`mZ#0f7`cl+bzDM0&4as-daaC^|`lGmECD_F)R||GFRs@kOpIB5+TpJw2JE9N45J# zp=vh=hC_{F$p+9%#HVfLx+!1YM42T+$bcwg&n?~5OPR;^g}yK@qEY9f06CTel$a{~ z<)b@}LFKSasdlgB-q~FQnkE}1fRt$2GT3mqaQ^^wFq3K)%CN=_D{}2*mtK$I`?~xs zJFRqOYooepw36Aan(|2{we4+RLoVU&G}ID7i@iQp!AS@zgz`yM;t5ef9Q=Wf?~r9f zR_;5pliB7cfT~IV04(k!Dgn+^lU-QEZEtN!Hx^DvWl%va8kSKk41VGb#X;VTz=bxN zY4ck5@6zcl^|r}7tLmFgirVP+NxiT3Te?=++V*-|d%GG^YLXHSz-b;AQ4RIBS5Se_ zf|AELRauG^W&nXEdPs!@dL4$nVdB+?P4NxLU0iHkBgGK~hjhUH;@4Kr-?H7QITt0B zXKonethMA;*Kyvf`GFGY2@*otTong&h*^OEKi*xtgJBp411*$2t2D4lhmkPbcDk}2 zO1cCJRe(7Je5~8ma>TARD8^|og{`Emew|gc*JkZ!uC`-^R|b`wlW|Ty^5~mwcedMi z(L0`ztJ$>D%cJY)hgFe0n_IHGEp?ctEyYm%rXabBM)~rk zA9E?r9Emqhs#dbUmF@3eSNGpb^f%^BDMt3wTeR=)=`Tm7x3a(eyWRMhTF-43u^Cw{ zHCWcuTek{)xFl?<+!LJdMop4QCh1NQ&UcLY-L?AKnY8P+S8H(M3CLmRS$y78p$-eM z1gnMNlpF#SX8!<$^~N^y_*+w7IJlSW)5sLhC7_Lv+c|JH-P>#iEP~8b0vPNk16j0^ z&DJR*kX~t0JH}X-YpW6oja@-I(a~^8$_LxP-IFngFS#vwY?IkF?(E+7@7C+8E#7TP zD($qnZSN-BTTR=hzP49ul#cCm>C#sJ0958id@w7x6M$5>%z(B6sMxp#G7bpgH7L*) zF}}hbij^f?5ON3`0gsRfagD^2@`Hx&Ui!jF5=fzob-*lCs{Dc1Axj1%6<|v#+(yyX zG+c4ovPTeSML=8<%e6@za!{`Cl;9{Ok5Hg8kOs8gyuS6c_iwG8mWtZnT^6bK=t?$R z-}nn}Z-py6-%B-lHrHP*%k~=XlNIz%7gy7SD|W?MS?5TZ?WaS7CU0UAD-ua-h?lHv z8nb*qc?i^!;4q5MT8!Fi2mx5_wG6XID(%1k$W)UfL&nuG*g_MljgM zHxp7##Hk;}6$^-HQX<0gy04fu1v7i+*~fwcS}b@4eEsuDq?gzcaE|(?t~e z@5!yUYRh%Dt8~M0+(8(|Fh~O=&;gUth+^y$~PU{sP&~^i$&J-WI4M-cFcn2Wolb(d0c^rNuV3F3MILCaD2spz30CWZ= zeL)?0;YUoD4cWjLVZZ|<^&A7xk%NZ*EMtN*Q?t_Tb-mU88+3ZRTd!uXd+M)cA5XQV zmm;>0;nvno*)3XjwSZ4MTwnrDM;w8{Z1>0kdY)8cHPiSpg80M1*=&#aOgt=dI;a}{ zo_A-cBW?izaDB$4%hXW8&`zBwxFDQ= zZt25mzFeGR!q<>JTk*zv0#9Od!0W~vu6eS%EV}`2 zm|6)W_q{l1`u_l%TJ2`>+T$@-ceQGY`|mEjZEJMx0paB@Zf&#_UAoZ#e~bosNl1A-wEFWvdEkf)|W zIOCEDT=v4`fPcH6QEHQSetp}ws=r>oM10|z{u{XyUk*)LEr zkVqK|$ml>EXBj7^2ntRJ3!l8*lGSucZ?D7MXy1Q5Z*1*uLeN=RJwYn{zm99*! zkOlzhjAV6TkV!o5;0$*d?NhH_4i~3f@y0rUdgO2b$iTtDs>n`GK_Kl2F~&v)az;)_ zz#Z@x9a!Fq7bI-l03l9E>$GrB@eXm&62PfB;9zH`2ftjf&l_?^0o(zulHW^aLd7x&>OpV;0ew$Xh51(m^#Os$HB3}# z**2T#t$Tbb-cR%U+twI&D?RV&bgZnlZq`ZdX8We?M^=Q%eLm6$7RR0dCe|FY4s*K; z(~sfdg=Cn{er|w)kbd?yfsEvkaknRvou{cI(6v1&p6*h^1gr!QM*v$z!O2ooReiP|Xc!OHChVRF^j0ET!B>w1b|G)*CfRkoebJc3A-*Ue{ZRo)6l^C&VZT6o97 zI#$Hcd<_lM%0n&QyL0Ee<2zWue%Q)cg5)I80zkk7gI;N^Ug|ony@sW!TuXO*dwZ+T zad9cj$t%xpnK)gFst_VZfJTujMu>`u8pWr^?(4M*5`6QJpaD;6Jq~N7CpDmr_np$Ym+Ro2Q zuX9g{o-n&n9h~-BExr^iI!%mG7{+iFW}EF2uRLWLILiQ_3hjIm;r{>|{7dmJhv7{Y z+gkB=iM&OB7M-JL@Jlt_&E?#{u?mv6m1}JTD)ZjnP378ITE#Wp)bQIyBd48sJHuMH zh_ziKK+trX&1+oNuWj`0CrHzvYrFkU{^^w|guzm$UopgA*iyQ*BAisQ7>R1*MhV@wc}`Y@Zsl{`%P>>Kw_g=f zRPc0K_OowUOGK#Bjnb7#HDtB6vU((R_t*X&{giwit9&5%XR26h9~rz+Y?gl-{w(Pd zWi%K;^B>`-fG>n=J-v;iu^Qf|35w$C^;+gtj`!?V+7HR?a;e7Pr3L``K<9wKz8LZb zcsq_e@_Cb~ge=VE%NCL3a%6US4qjO#bGhDEF7E7EnVE?tj%t+Jim@e`iDEu%;Pg}X zisgqKl_NMLV1Q50;Bv=@RVq}It%|QNX^F(id-ZBNce{-^Tb7kHlwlN=?{@u+USS%F z5T^*!p-FPkqXxNYMOoi#IZD^5JzJHVdLyrGV`%|NQU(af!RQ7FIc$PL^vM8Z4r{p3 zbwd9D4}K^+vng4;2oMv;I`ziw$8ihKVcc-U1CI@R$i{l^Jr4w6V`#}B@<8JUIKcHi z_lK{-{5bfYLx2s(fD|f*z$aX}U_lF=++(Q(a=0zeeSAD)N;ZZ60DXtm-9O_}PWF0l z=JmF>M;$uSl$z4colPvBij&)`_15c48K2rNa6^DYZek8IoPmOOa7jE2Wbl4%#-tbR zfw+vE4DRYi2Gf#rk_ZF=oCWu;KwU`0fP3{A>6Ijs*vKFO(6KmC&P_aAKgt6ha0$Zh z3QF}a$pnBgw+8@YC+6-{o7yc|rQZ84i$u2O*Hrr196b9sC)KxZWDpa4%LPeHe7#?|EHomLu7*GqM8moBR7 zee`$Vzr`-C^m1!X>EBhZ+9!SbJ3DA}?|s#iC6sLpNdV^@F<=QBn2woZG1ny0Yw2)C z;4_@A2W_JtFv~9QmzDXB6!LlJP2&JMu;;$h$pdQ^`It5^00TG+z!@~;yEr8LxGFLW zFBus5k0cS)i~<1%xg8Ynt#7MoF7L9^%`S^;_iV;hmESF;t(xhhOH1izt6zs(`u_lc zZy0KxA^HAa_&_{%S#UuZ@ZHxr$OH@kOJHXzdJufYuR|QHfx#FoakzcZ6!aYb01#1w z#u-mF(fmHT&Zpu42*B_cj)6V@0OVY{$YRQJamH|XBaGyqGdDv4cXB|&jBNn$c^Jna z@CeR89Fbb#s6}Ei7gxM!*|mG=DL%S3^iOLx#ZsemsW#umE7`qug6Njlzkd1~vR(pq zmkLG+3L7Wx{JV}0GoFj{50rt_)@z~w106sI89hM(i**MC3=VO(vsMdT;g8G)1~Pw) z9C5hvSAf5CbjC6>QMK0u^aE%FoMC=YGENUCvZ(|OxXuam)ijbxJyOwV^s?`(*2?W$ zUCuewN=ohY()VuZSv#kF-miUcew$KVG0!DJjAwTz7&yt=*eB%}3L6_nFik*bImuz1 zbCb(wXi=8OTwoR2I;iLkVm07VjAZ{&lJ(U5jLVO_bIvd_q@TP#YyhAVPZ&Fmd8W0gvTM4U zlYnkhKQYhE3f^op`YpC-=ETX`EhOzVe$LwYUuS3Jws*f- z9Pr#A+(t^^IXMREo`;~$(ST|H0Ax_af-%Ve5IMjY$>fjjkOpyqz^*zOnJ~#A z2Oxk6To6}+PCWSq} zWndLSBMZ;eZu!qR;eaEP$T$Zz)#+&2Uz2Wf!10bYjiiyB41Wk;x)hEHI#OxdZEfq( zz4v?S+tW+7+i_MhY1yWhyIHMOlX|;5@9C$1t^9uE{{X=;{y62b7sk3E{PNC*|Oi)D!8A*dv33U%MX=BxU~qf@gekh_V)M8fcBR zn_{W|0ELP0;DR&2+yNYtppr9^2>d9P*5yLV(J@2(aj115oyV09Pe6DB?*KU@jB`em z@Ts(~hNPFDElJ(0b$)iewelJyWZtZDGRLL{c^@gs z$zpi`e7OVwF~~JCFe8F8IpKx|anPO!BRC_BuH0jquAFm>92LthP7cxYWaqgDjJFH4 z^O@sZ5s+Au_k!?Az`&y>ykYz5Uki zt+PvHuXLV;==d9%SmPN#E^)x=pP6zO9WpSZk_~$Q0Km`>#vg^`{nO)r50XOXt=wRd zfDQ&RyBIjfB~E;bJ){LEX~r|u9CR5zqvhZb*elRxy^G*Ft9)npR;qbEJMj1!?f#n@ zwp%=%yaSG>Za6i=nNC01xYcK-7Q5=d<=VC0udhebRcCk8gNt~~DqV3Dm91-g@soON zt?=8oQ^tNG0zM#k@Q>l~r;1mBkNJ+@gVdblZ5$7njtC$c&+u7a_)UBkNFa|G_+X42 zl7F{!{BlO)f^bL!91Ic&tsjX9-|(?~f4~5E>&3X|zx*T`fFX{5i;kQUFbMf;Kfx;B z@S6B2je!3E!eilXTc~gC-85q)42+x;(61jh+@6@V{gW4`E5OG`)jBZMX|1h$@2#z& z%+<3UzveIGpS4QO-6ofH)$a5=Puc;$;`sbu$Ndz47Yvb%1FT$(WQ+ncgUQJm1Pbxi z{#gONRBatjNen(vLk-+10F0ks{h-zV0O5K3Vh+TU@gv47k=TuH=wyrol0nD>5;7F$ zHRFsOKnL5AkGp}%C!Rncka@sT4$^7mmsx%TYyDb{ntCqI*?L~zBs#DS4rybuj}2X ztKXgyl{rSF9HThO>89?Tm73XVucq7TwP&Zr@hecg)jUIS;=4oRJuk&^T1Bi_YB#T@ z+>xc-Nq3@NX_}^+Zi7qIbcto2D`}&%p4v-WtIHdkDeZ1#10!GYtLu07v&Ew6Hd=hX z7qjqYlcmWW#-=mlb2rtViK={7_=&1$ zk$7U`#k#aU7fn75F!*mwc(iQ_O+MKpir(7qOwu5-w!TfVD@bo*x_P8iEX?y3kondj z=mIHz;0))e1mhfIC!CyQ9u0K1eh%?1oCA<#hFKUKlI&__TN6>G zPLigblAUI*m%7sBr*|auz2^t{0)+^F5~HatA1x(x*SgZ@mY4KTOZgon-T=^iKZf{+ z35G3Iz9 z;p$s>>L|eGlkU{t5l8c#Fi}@JD~z z15ws>O-ohHC1kh?m#r%C%JN;YVFmTS;h>c6+P!)bS6+4L?J+I#+#z9_rILe%+NIiOUl1NOG*A6K+5yk+)Joez@ zC#ffajAV=)V6|IxxSF<*Vx zFMDkCy6^hyrO)2~0Qe+9{{V|m`(@#Y2TSmOTzsK?7x5r)6yy+FIPORT0~M>{AVkvq z-0f_(K2pOftaluryg)0raRWHbVSm9P3pc`_+a#4I8efGo{8%HwUl7O~{{RTwxFCyiHcBQqgK5HxQJ#T)ueqZI_PR}2T zR!#F#R`T{xwe;(*z3i{s%o)^qk1|N`1|gYODoNY9Nn%?J0~OlY+8h8_Z8ZD0{lOfXK z)cn=#z8AFCZR{`gD@nBNTGLInYwO(`Ub7O}Ut8J4ZYF{|n{V{1YnFx$kjuMr$tY)a z1Y@4G++ggL(@iF{>1DUApKE){?C7MN=Wd!^Ewo8pq_ul=*GGGqnqP|iQQ&Q9bopew z)NIW5e{a)Hr6jg`j5j5vj_$^5b;LJD6#d-Al1GWy%L!T9Hv9ho{t49+-2T#oo$4*bg%)Q4qmKqXsJUO#Z}=vKyMMz>_*fSuc5?aQdo)! z^wl3eU+s$L#HyPa$A@iLmiY^SX8}lkz>ut5uF>~KN`&X<*e5G`Bvp``dl{6mbGcaE zFa{-HIW7r=72)=&3{->kPQET}^?wqmP{vOUTNv=D{#z{bH1lUKc$RoN@2< zo@HKHgk{l$k?tP%s9M_ipT~M%g6zm^EihPET?ollO)El3u5aQ}>O!^dtkPPtqOwZb zYAmh1F-`;Fj1Zq2=}mA|?7SnQJ^j>2d#r!i+Irv3Gn|m6FRvnz2~ee@a#wPpe?s_0 zeAfDZj{YfXjHFpx-(JqLM#_XFeqb_MUB`%reO;D2^fKl_mD5E+pJT z`Hsw0g6Ao?DKQo^c&Aaio-J=h#22*Fb)~Eul2v}?ON-_ z32d^*4E9w9$pBTC$^FfFaXe-Y~Ojp-!Q>2XgWMLD|D)-=<-IBW2wb)t-2 zyWKZ^lCxV~!ZuvjX}vFXrrgapvgNv0ZO3G^Akws3o9W~5mY=%Ddz(9D@deZ&w`p25 zuCu|SnH6>>tEm3~$IiDS2fmw%K)cZum`R^4J07 z#zK$ymD@6r8e?tb;qK*k#B$W$E!AJadN2GUntZ|hMXtpq?}@b_(hGqF`iGpXjJy2( zO^@!$D=d0+aDy7O$XCSt*^~r``Cutr3^IVk0fqT;pkt!$Cjew&R%z3fMyD&Nts=jf zryI$xuIkH2qP>jjRZ(2MTKD9;D?U|z*L=-Cnl$dN7C8P?MQwJoqf zNVgCIwhmYjpqv4`j8wnX1aU_SD%x9w2HFKs<;EF7RSeA2x!9&=O`!a$yN(hI`{ucr zK@@4SH3k?|ksZ2%O0x~DsTz!y4fB`J&QJo?blo2FSGaVtkIyKj?)3|aqPNrSp%~vJ zw{BJ|YefX^Y)34^azs)vOtloOoSmC{UwgHy>YBZuO}5buC$hEQSoFUx*Gqe}{Ua4+ zWU7|F)G%d{;DJUONga_uT>P&o<=6%Q!xE6h5E&e?I`C*|Z)+X=(nY0d@4(gdP$OCP zg=hZCu`#{v?2Up0LXzx!#>|my3pCo6lcBJSOGrFLs=^t6wQize;r%^_AMq*EB-{O< zL+vSdeyaxH40a3(NO@c9yUjx3uXSt5wF|c&>#m)hw&g;{Z5t_A<4och;zf-D{IRM5 zmXzCTSg9+g)$OI0uKV4sbZ#$VwT->j+G%SWud`>p`skI~R?}OWbL;wkp4iZI(S14` ze{AdViKJ#9b*%J~?{6BC6_@RAaKL~XG&|P0+v~kgT4Qmm-(BA_1LdW}yJLkxBM`#C zTieE@kcko~;Nd{zNg(nUb8WUqD6h`X>u&NUrkhffmS)O{&OzKx*2dwGx!IE>Pa88bNgnOTEV2kLw+=Ym2K6N5 zEUzjV4-6CK3!2t)OI>~4ZSd~ZwCK`m`gX85JrYZ3?z<$EtgUX=QEOJU-DAyX9HVu+ z#sJ!StYi>J0J}S*9H3Q^5EGcgk+qD2TGi|n+uV=s3oyz)$EcUNUAV&tW>peJl>~-I zI9;u@oP()7yE|`G^CVRvoDZ{H?gxMz6K^@ja9$L4GSoTHucM4P2$8=lVL7CHN8 zYz2x+26l$DkqaDvy#-ul7SmU1>epRezwjO1+vv2rOqCZFuC2EAww$ePbluz0>$bNo zM<$tk%5>|O(r;U>h5LoHnfGU87lUH9SnXB0RA3G~%r#ZJwvi`T?qPi{{{R7!bvt6Y z3%6?=;U-xdkRNgt!1IO!9ND0?m@ycI`QIC^=!0iFOR@)qmKgcMfr7biwIn*F{+z#L zxkISwgyn4R%gBhNed{}wQufYNWNdFQYi=N(> zb+x?HcC%e{xJ!2S#7BCntAM|1i{`g-bN;k2Ed-o`;eo*z7*M;k;=M_dIPPR;MG^gz zP#KbIRSWVfw@Zsme9WJIFuom8lEfnbcviZm?b}`U@4dEn+g60q zcD3xR+IM}ozPcr?-LzKRb;NEm<0@6dD}#oNlaH6`&anX$jP zSoQ5VBWd@1qfBBLS27S=%>)lPDxJtyY=%io@N0Bsk9#N%0g6c2oyj7CO0qEr0ZvuU zPS9JPb3olqZzOkitkGOSD3vB0JaQ<=2ss!fa0cp$!<{snO(gl2={IjqwtC*$ zc0n0(y?z(Edg-H9w_eW6$=`0DR9l;X`m`Huwf!b#I*bvcM9$G}^6#R;?jgqEGN3Dh zNy?NbV*dGceJ@Y(B6B=#_I*kf8Q22@ENln&B+RjSj8sPI$}xo%uCB(bWe170^&i@H zBgxh5)e5B1>^@@1s4~dQxzPRN7{^FKY<(u;-qTVxisSna#4!^Z6S-l!A;5)z0Yma) zb^F`AqNQC_jGS6r%_iXantvrbdw)eJr+V@tK-&^SQ_0*~!-qPl4 zW>tGzo%dF3*$cIUd67m#D()bwro;DeNCe`sb(FP^HIgOSxMSsTO9QxKRR`rD@CuR+ z(t~MCR=%eUmhru^hBsPO#Ir!;vGZ-WaHsNB|mt0P}&@J|Q@K|;7t z10hgJYzO(26S)1|xZRV2qIZ1F*|wA2cHL-~O*Gc_wxvs@m6EoO`mLX9t6u4Ew%0}! z=L{GcdhJAb-!(Tj@K@Y{W+J!40caW__v zcWRmW1?8w>#Ws)&O$jJKQokt&V<{!Ot4TQNC1jUNLhD|sw|9P*THTP9-LKRQ<|8bdFpY;VbhHMopXRdj2@uVNGp@UCj%p(;{avw4?}_mN%?R< z%^4&e*jC2UMo$EcsV&>kh3AmKo=MIK7##^cI%9%cCj+27_ZiL&C8uY)Ys*f*m7h&F z1%2<^O)b-BYukPG^wPj$0U0^ng4n?5IVAIsaJf7Wm#C3gx8C4(B=tF8ym`s!1`hxz z$0nl#p5K`C=Oms_Z@>UDGfo5oI`-;)vCp6#vD<<}@IIODH14(<0_tG=3c-R_&# z_ty8-N6%HJw^!)y_Gx+iN!hJzN%x39Hy{9e=NydS0yl5~=Zp|Blhb%amGNhUiT?nh zufs&1yFk|T@^Wwv0T{>}aolsu4Ce%u&wOAH)2|yU%UQNQ|2Lmj5-~bP=%U(5tMmz9MJ90TAjFLu12RQ>7>y}oOa5yHK z<#<{#c2~Wr)4q;3(|uOfOIu#CseNk{?vnQPEbQKjZ+p8t+4R+0s<~;-;5OhX3PTb% z0!BZGbnB8p2N=dl#Chj|jzXVOat=v6_Q!mTugifNys;H zPDvnuI`R+HlaI?IAmfu>i&|;g?Q7(>>aMzVdR=OAq?b<0&iZ^hY|~q7Z8~+efad@y z&M*l81I_>$CoD1wmIIs&^}&%C;B+H6$8r2Wcwmq_XO|mW6ll-PMqM3F+7qE z2GDbYGtir`sBVCP$3MgKU=fme?GR+fKB-y@Lzjr@^lid}HxkJ{{0Z8g89o5Y)U`;>}DI(L5pH_;)?l zt*TtJMG%z71nZ|*G|E9Kb=C$Wn`#&#nc)E)9 zYi~~lO|<=_tz{~*S5#?rca)NXZeLHAU@1Zi8;n+=7L__l^3M}dala!cyQZ5@Cgu{41UE3 zbrhY4J6jJMhC_^MmC|aXQnaGfrZr*}ZOz(SteUlA?-i65v0@cLYZSFtVvnkkT18PI zR_wiM^ZWAs0l9MJoFwO*_kEuGUQ9dO^N*6^UW&KYF>1M&0u`RPI%dmC+v`?jP#JBm zb7wH&q&I;%8(1GrB8 zJGXuwxIIV4%XI<)6MPuwvUU!euzG!8DR4X)Zl-tnX2WWZh)6K@r|g4qY3O&yhXSqN z%-^5SrbFxh)D0?5ZC5()+@Glf4>bJCc13`36}rl z!mIAhYybeQWVnA`Wj5662+mdx^54EGf9&OH)Pv@tQOqk&uhp(gnbvkF4|(Jp0CQp! z)dg~i(-hIjt@mu%O|fM(hGo+Z+t3! zh;%6r*5CDpt-Dqhhztw-o?770An#(#P1P3BS3m_MH~y`aza8&`Wa2=`E!QGEjNqL+ z!EP;VpO18l8w*X!i%cAxTHdkrj3n4(ww}1ml_QJPC3?^t{Wq{SsFs|ZqgJ2LB3P}7 zbS5i;e2H1qa*j86w_a&YxtFuH2Xr@{&f81o{=xCVP?vgbL;D}s9m|@Us@kv}_-&<=lYi&+sQn(StLX!KTWaC2w`qr`y?U4+^I1jZXqaQ#*gNd?)Y*?< z9j6S=%oYENr#Z%4X)FFY4m(_#x{xu`K{1<5ScdU3O3B{e#>bcQbLOgGeQfMSbMxj! zbKEQKwj8Ja{>?^nr{>b;Xxe0grgWo2VWt5oeZ|+^Xv)o8V*x}MYus3-2dt8^9JpbU zt*lT2%GJ|p$;CX(U=GKK-}zHInW8^CQKZTb)h$#HOj!sPP1Z?vIR}-Qq;o#hK9(@K zANNpY_Sdg}_E=GsdVgHSNL(IDvQaSpl^~rEy(v1Z(~hJB^o;+zigIFEC3Q@S+$iIz zXlzMFaSmxO>YYenvgw!^>Ru%ULvjP{)o&4_!^UWHCJ*vrY52FRa-)UMh#MPo+!wje zq=hNwX&IUUWPftaLH6IWb?`gu<;j!w%im$mbHm=r6YH4q_FLbM970$sKI%-`cDTv0 z(`Qtpdf{Z&$$cGs)LaqaB7x;M4_&*4qjQC1Z6^_7FNN7F>V14|SYOVQuE|4gPQ8(f zcSJNEpo=-0ikC4c6$uu}q&hb9U6nSAQ^Pq1u~n+W4g^9GAlbU04^$_TGPh^MGuW$+wA|gz`v@8jsX^)l_}EtrUH+-8tB`8KF9IoC^dM$4Ij%4S(Au)+w!$P7=OA`2&OyNhnpqNiju6I4 znA7yFkk)Fsvl2j%7TI!xgv>8uDcu()K#oZ*ffg`eR80}!BBc_9 zV11>wj=qf>X4_Y@AJB=)ASl=e@bd(_rMg;RcwJkX?r+52)DV~<_Wf}o{@bw^t>0G+#@0729xL* za(q8>b!9)&lh$8en12oP=k@Zb?=KhKDlX)OY=~CEItelrxr-HP#{_XQh3sEv03_JP zh87Mlf`YBt5yD-1{2nujB5GtgvZf^X^<97v30DM3WO93BRZt)xa*wpQl;8rkOPS}Yrg*unsY0OjutnwW)8u)h;_2}e4ka;vi{B+YD$?SY}pK&Lb%v0}4-?ciE zGih`tru21XaNDl{nEq7r)b5|ji&tVAP$FMoZi>(nqkA}&uT>`0%eY1tP#3 zhkI20dk@f8)-K_70!Hqm1qg%T@*J)}Y8JT;1G~B{0B6(PKSw$N4Jg3rPc_u6ELoPvv>V^gkxCq@mi&=?Q}>C-jU|B*r+n@?30WnDG}|_K}W_F z36h@7btFOR?!qPrh^JaAM6UjX>;VrM%${)AVbJ)WXhWY7B<(^pks{nJVAZX2jRpjg z&XLk_zse5`?>(7f#(@<&8!jHO=b!7Gk@_#;)GZCNJ zTN!|Q2P4N-ZLT3dG%5lZCd?o3zg~5N^2mc$OV0d;tN%~>VcKu6)Zts+#m`I`x}^PavRO(eMr2`$WD?p!eH}#i z9!(H2Vy>722@L-(B5t6Agqd(*vS167rRuxB_R~WtnI>MzBjR=^lOb)fW)`nnYX0ch z>2t&jX*?fS1m01hxGY6HKT#SWtJr)iBs&@z08Eo!T_SQ-2$O)xUpl7~I53GWX91){ za75qQ6i!D`0w{rR@igTHM{I&%xhZdFWa5+9nzF?9?b@J;d__1v10My{UVDW(@Kt6+sjjb zjvM)MLrXjlZ1wF(bb8*s7^r}Y%|XAq3y@qsJKHCmULmxW&otLq$ zJET-f?>@%KzcA{3i~Sc7^?Q+!==9!pdRd#4ptb#jDcxkGO^(z4Ed3{QPKL6FNWAN( zd9&|Tr^(7y6J$527~le5E{r6s$W(rZYm9<24-a#lm=|Qw@3ez;Zfc{^oC8Ht2eTrv zO>0||hST}%$8gX%^cUOqm^(@pHkOAch{89A4Lrg(jPJSHBr-P6L^mVDn-K;x&_3zp zAry__U(sY zd3;v7tk_eN9fe9*Gx6webJ;{+d+#QhNd*zp>T*S$fP(3`)Ol>Cnnis-XQ}ex+TJ}z z0Kk$o&*`}6E$-t$NHSe?iEfex$itWBl^+(e_1IWX-RRSygGcNhp3P`-cOQs2$JY$NJh6MI^{F@N}baO^SrU4aTYf#wu7|i z%#(fKl@*~`~kOri6HZBCB(~2lTGII4}PCTEUJcf_nyXl zNp9|)71k#m7ipCey63;QsX@Jfd2)&5g@4t_z2=nK%yzQR_i{njEpeghk0RJiQB-8i zy(UK%(JyH)ZN+~keDb~DWY#($&MLhh`IBl|e-t7}d(H93{OS8ayrgU|b6g(d>t5@M zWlPzUtEf;b?iMfW)AD^;sfN1kyFa7pKU{LzhB9T0d%IAY)VW?=6wXK>L4yE2)11nZ=Nek3C|G|JW$g+ILWK6EL(S3pP| zLSiAkb{W%M@79|y{Qsc8Wrly?x=&DnIl*lH`KS+dm*TFm#B$JF%G7USVlI?*S45&U>R zox$AE{PAs~>n;8nd}KK(VCJUkGFQ#XIk{t*F@$04LVwmZ( zuhanVp_}N0EOwjw5OR7h1X&M&BD~KA_=w5_dKLx+QD9U6Ha27^F%n&E4R!f^@}242 zM#!Df&d0FrHo=juFV6PDChFdgFaBCeR#0=5z1;h78bCEvvM<$%DIf+oRBcKgb+LGU zsIS2)4JlKozM{23K0LRmc!$>z1)m2drCiA5Wlg#m=1aSNAFmT+HM}}g$-u{Mg-RtoiAS@tDo{!1Y+`2veB-Eocv?E*GlP{ylRgFo1@`R;nMvj zvnv`Z5ULD9EE<_KQj6sGK4CAV_qp1yRs$Uvt*>%DNsM= zFTc>aJ#Uf~+B~L6xV0urwWqa~d>Z(}hrT!uO%`Wp^00iL17v*P*5fZ;o*69LPGn;` z{fa$J_=!Jm%y}Ji?_e-azDlOU*(1~(SpRPdhDv?NtB77&<@XQysi#8_ zb&Phln|R1`kZm$-d#};j-nIVe5=vA57bfs|3n_B%`sMxGkG&RmrTO!eTU7E-we9zZ z+6w&+vb}0u3rzZM*iyNuj~Lg6KUZhvJ=I;oJoYd=RuAjmp!ppJQK zE+}ACqDxk6we+D8RNd2xcf9xrekZ*qVpMih?~lFxh^mKyPk^f$1E_uGccG>_7i2@- zxXAZeV98cpO!HJ-SwQHgYvG{R`;VeWiuP}<&4N4i_pl$fT`sv6y5kbgF=KVg+xOR% z`)&vGkBJGHCYx)wDqJ>bxw)r;)0iQt%sAYRU(YKl&aIg{A=-5U|DX^w?cJP=d4@ml zR63rPVipT5>D(H6G?ZDeccUnfArzKE1lX(FAHSqH=tj!u!i8g8U0|x)ZRH!+j>Hn3 zihBEJQ>BM0QxIYv$tB3;m0E7^^!GY3)Us!q#G(s2Jt{zlb}2ZW${Z#jEdK+%%5Jei z8+Og|XVGej>-4%UxR0Sc==?jod^xDv#;!hm`~RzgPqzxIn~x(W6_zm6mx(Vwdx*$$ z?7GjyH=G7`$G?ulQs0`Sh?q>Cgt|0ztUBC6I8B$${n;~VKk+LH7ClaOG86Ni`!4H5 z@48LfZF1ZrzIpLo(5LJw*rjB7GJe+D9=#{g$5N#<5OVAf0Iq$P0^7SE+8~h?%A^*L zmrV5fLAX1D+63#%Z43%mzMa@AnF^u}ZSAA*a7P4KKQz9@DA)UTkJ=I-O=SJNN#Y!^ zJ@qxzQGYt!gc(jBEIkiWgE>`JwxjbC7V_0e>1|J&d7OpG+mh9vz2OVyR#SxoQ5xbOP9lZqMA+6mp%Gh zow#yk@PaZmeEgA;TRxP8;8w_)ciBXFs?9oHH#Hvx?u<0=6Mj}; zi&nO`zLX!fWm=fg^S8KV>Qv(fP*pl^B6s5HJ>d_ob&cN;fma3#ej%7R#=Hs7{fHj0Em=mwl#C3wc=h(N@WZ&^X!k-GPnL(Pxa$aHn zHcDB4@18X?*9st92*zKJV+T<8HFP{Sx)_Rfb)o(c1oLQqrL-_;XBO6fJE}7!?*j*= z?_(Lcn|eDGWQVICFDFq#-$7`RM@2kBLXpuu0b#w`oxqrL@)4WbQ&(baOQhj%fjouf z51-(yv-HXAwxNOHJ~iQTc9b!6w0f=MrRu+U)@3W5_+7DcK7@apUs{hY_z5kkb(8AT zlV1K@9}E2c-GcskMg^;jGgfzn({9KY0ekCBsUQH@9hj7Gg9PAxC zXBqlE+&3|n>Iy6j7H!(d#@4qbb0l1HTOMKgO*{h3+5@D-*Ne>4n|#jh{?y7cgZ;J`j{`=U^c zPD8l)J*lC8)kwtA`m*w*e1m-K(q56f!5<9|JDa1DQ-qyZ`bR2nG`^%ijhctaW*Ttb z->Xll;r()R&T>?}MFg`<_Sykqtbv@%(%Dp=@qp@BM66hLdUwN#gcRqkD&sI7NQicu4Nz zOLZ-_**>;CxM`iBGFIWOBIj{;=+9~th)FwI>q+%!!TaM{rlm8mIv`TWU{-$)!)MQ!Q zN%j6Xl2+fpQ%bH6zTloCTFB^lUt9fP+97SQ#O!KZOPMwwYD@8C8wq|iDga!1xPIw# zhh-q~R^g{)T7Q0@&(Pk1n~0xChAJ?ip+ZeP?4MHjkkAiTh7A>GeNe4Zp-Ih)Z$kRf zv(?{eZP{oe_|sTxP)pNhV*#QCx|^fx+fK(d*xRjZMTJ){Y7=1aEsWDyMP*T;!~QJZ zPlW^f>09GI`3g*{`?B%NsOc-&yp1!#dy2TNx?;lql6v6tj|^o_CQW8T$@zax{o3^D z^Zk67om-?FAP$Th>4(BwDYpW zJdrBS)c*jr^9NgFTpmO4{r)9SMS(IR+u13R3!XGOG`Tfu_U}bX<72<}NKQL!TAX>m z`L1oCz@XcCe5q%d1z}_IK(u@L-%soVMmL}euV7zBr;(KoBljdP`2DAbshFXb24()s zA3>8+Is^`$rC*AQ^BODK*#nByzl1un$F+?;J|uRB_&HuAHR#JtCeJ?Yk9?qQGQFc8=fZLMOy4ricX;|!jSDiz)cgrsBfa*# zSl`er0_XmV`f-x>+G;4Tu1}B0xA4PCe8eqm-8P z38$8+ra0#ChClmECvc~(ey5EUEBfJ~iMN`unZ+C5F}t1eeAVgMap$9c*Ba67twHO& z9)%YjQ7z-PL(Adg;-!PUOXL#R*qfuMd!G-zUCfEvk$jd2hbC!02xiPGJ^Hhlj*EgV zm0B~_)IK2c4O{a;r_M@#pm&AY6=t820rc$MH+(n=sMkov&7Wso=R>)-v-61XNrzH2 zPH0RzkH!1yPwhO87L*(jZWLoB zAg@NAuETAcd2U*ce%ruL%WQp|kF>S6jf*C?OQbaUBbG&co%#@u6MphH!&goG#O{y1 z&TLS;&sR*siRm`acH(oJoQ?Bkz89ZajfM1-?yy+NccxJCB))nWc^gt70#N2b+^h(; zwYSZ4aq*irgrBbycE51?8#@F#v`)Lh&tdtl7QTTO7=1ffpzk5vR{S|nc-bFr#| z+irG5BK-|EH;$VcG!!N|Rm#;Loz)^yBr}wY6@>9MmXV28LqlJ+b{_E|8Me1>VxHDn zulTU7Kx=!fJR3FobVz(ggMRlIEdIHhofmf(@wqbC-_!5@?Ed2YeOlN$rtsa^JZGvN zK#aLcz5@V3F!eJk59ybsH%*5+s{9A=Hsf^BPsL~!iAA{AI$j?Hz|0!W%jdlJ3X**c zf~z4lRTx}D#y@BtnW?#9Tm|9E!90!1)NMUAOw!tb&(_#qx?Q@|sr!g-n z8QBTETK^ga-mK2!jjL_7vG=X*hM32oDGtR3mI6adBPiuC&UD;~N6T=<6VA_n2E(8+ z2EJ$b?e(u-C5>$ce{?MFswwSYc1bms=~jN*u^!iQt%Lr<)Xjrndex(O{$oml5f1i{g#T-OxFYo;>+QI+7tywO z@CnB&*BcBf92I={C4@D(P}Ee)%2VNm36X`<1g6sXLDlTM>NZj<1 zAsHmntgiIS7Tro!F}e+q!9^J$s9bWJaxXI|@1$~2=T9qBLPl$m0)Hu5b*879P#eiQ_?4S%qO{WLj3 z`=r;SQ_%WWb?AtzQN&Xy&AnBW{~3Y{?t8!9$HD=Y;anb4F|1bVoYfYkAsj?%B-)%f zT#Ap4m+PKnrL$J zxO4S&F23ZR_I5S`eYVLJRs6BaUQO{Ru;0OXe0hv@ab+;Xf4e{{U2IN38O0a={lW5G z#b(KWX5Ai;O#Er=2jB2TA-N3Z*CS|#n%6gHo#B7`f+G5enCk3_9c_bVOv!rwCOq9h z9lL|svgS74b*XDjpBi`Bv@5H~{QYH>Q-DAA^@z~>B}MZ0jeXw2%h8X3CCoz;%uA*T z+D?rWz9M{vW#olxEd20KJPH;(E(}9EG!Jf&r&DNrKTWYSEvQySGH|4xX$n4baMMfp z=ih;CaQOl%`01>Szvt%oqD0uT*E+5<@w))c=0T#emBu|_SRYR##o9J6@2>qyIXqUe z+4Ur2+HSkzL}deSt`;l~zxt=9vHfUCKpf`CAiyktlS`{(AtrgnRe~(#(cjL6q)hIe z?kyK!*zE!SR3(UrP>1b|YFc!3r#?>6R-)@Z(_#xHW#MZ7!#fykdGi2<>oLO_OSuY^ zxBs=g1pbETE~C~wm~)BD{Mnsi*ayIwbJ?p0hl-0x#i<8Aay;|5ih_5sww0^4PG)UL zMza_AZAfLUVOwR*Nb~IWrr*w^1<#jKQA-(eFGXyq+(<<~h|l*0ZvU*mi^k+devGaCt-NObDcM9whRsh`WtYi{k0X55{WF*rnSwPgVX5kQiB9=2L zslD#V;4U8eQVPH71yk02>Oy$?Rt{+W8tF#H@M2Uq2;=Y+l{(jvHq8&;+RisL7*lm| zc;wp-3#<^2uNb=EZ^`~=g3n$`Ps4{a{55nva$5UwxYFBd7x%{td=^s?aK{Jxv{7Oe zW?WHsFC z4B^=EIj1QWsf+UU{`%egn%3ot5{scpOqNP<-`jwkdD!YlTA(%6BKs?w3dL8RIO(KL z=nJP#+wW5vL(SGw1wA6x_I|cA0c1;!R+_(j(51AzqdD4;2XW2s2AhhZGrik@q@hJn z64GT@PDO%~kHfH?=K|s6l-?&@DnLvuBOBIGu<=mR#|cK6;wtoJD<%w7*JUe?4@b%= zeX_47(v~e2TnI2X=$F^K~iEX0($&)iYS)tbx13BrkkGAUmhLM zJk|vDc*s~Lte94xY1~AUdmbQdj?Re~p&KivFd1?DA;4{a^3}UFYqvxcso09K~79dA}1AA2}RXY9An8%A3E3O0#OcM}!&2 zPEOj@-x!|cpO&@>MA{|VAZUmQibH@7z8Um6;`y4y3#bKV-TB04a?+{wGHkv1x^8l; z`EX66C=xL5CW%ZWNs)Qiggd&dslj)yBe*DzJD1!$AP0)>@xh8@V1-siO}LvlL$AV( z)rcM_1RzXW<4>tTfv6kI+wEVVGP0kSEdR8QS8O}Y>1EZ|H=XhOIuw=9=wl26yz9JC z&FLqh{CvF;Ne#(sN+AXIlf@mYG7X|5ey0Bcx-}Q9^oZAt33PXpn%y3be*}_ZRjci8 zdfw6p5koWa{+oRg9YD~Aa0F?X#60vLAnKK1w6utaqO|(Lc7thBocREHj~+^4={d%V zKK&RZN>Vdu6qI9PZcdn;;|HhAWFCmWp=zxcWeM_{c5&XlHCLl9Wz6qA=}Ee@zgOTq zCGMLIQ?|I5ArW%DXtE(<19-oqZxbD1E+kLu<~gJ?q~S>#bsCBzJon!;%&1>{s##B`5$2Ny#3rXy1|OxG;)dBUP8#I!>8oTI`MK8NRL@;gA0rIY9-H7q8WFY{c$T7LMKi-IP zxF12r{{Kv)6wB==1hFODQ?eZ@Wgf9TccC(}ArfH|P z7(aiN(%F8PxKpW;n(7z|9y;H-DqT^F{-JmgO?%JMzIfhNrDtC4j%G*!oJk>YVT|Jo^|uEy zH#jPu|9J)})}dLC^bY;JMAjtmdlgAeL$OpX!OT9t6i)^vfWU1M0jk0}DTQ2;^+n~X z|I8YTps-mF0_Xc;yl{=mgP87LEhzEeeF(Efd7Hjpy-PdD z?8tv6E_sQG?T}nsHh1G?tsCgvGx+K=%8J4dMppu*nxT1(_04tJ+dJg~@4Wq1F%4MZ zeu{l%iljksQa{V>`4TN+;=as!f<;rmCFp2{0?d%b;(QpcGUV}mjxRu%Fp?MZ3-mA8 z(4)AswmM19e+lRz{i#8fNQTaL`l3X{Nb z@j|({n)el4JtOyR%YN~^u(9-28$+NoBv;g#-1k^|P@E5(r6Fbrj~q>{q^3Hv_^QkF zalop?>S2C#tobmreL%TKAy~(RFnt<3YvNe~DQI)Zq;&p920)PbRbViD$-TkDjp~)n zpF|UzFM4)%f0Mq)jjDF1JYi?HPx`zCq;}^)FyG*s2ze4DEPMMvl*IPiboc98*!kXl zq%P%OB%ZrT^LMH+dCzo8*_& z+tjRz0O& zD8Jh+%U*?PKW+DSE$*McB0msKo9+}lnYFmoGZ|n{Y`PRiVbbC$COm3?WZA)*V_hl6 z>o2bCt`GJ8?7~GKDd{wzj?d2zbooh0$^$scA^SLuuY)IVfkEFoPMhJ5&1vk{gluwL1`0S`4nc3>Zoopyft~g=i*Enq3GJBxgPrFAfITFa( z23PL5DeLS4u$+7`S=bN8zA^imjPj|V3y2sat#P{!$sL6~1`LaFKrXg!ga|D6*n=Dm zAdkXTeu<-Gf#Fmjgl+pghqmL%?^ydKy<$9}DA2-Zw?FX6aaIL#(pIE-JPx6<8&YJE zrk&?O%_O?l-2q5UBO@K%S`_~uyWbgpbs}drh`Ws-)1v7ai&{EZT)Hd@tE*(jt%-<> zQ?Me!a4f13D02Zt{~k9t&r=Vhh`K~MDMeLlWd}{3^cV8|@?(fv? z(D@G?e9AzbR_Pp?Ro9^89+~Ims(Z0>Cx2Mr$D`$9*8$kJRzmVkPgPxm$*Dn^op#^Z zZEq98H+(SdN}Fe06cBZb0p%fwv&P}f1B5TWq!r_rJ0Vg)WTG2X;ta?bV!9;oo2*lZ z+GOSWuTVaK_YN8Lds?}r)#Sb&WdkXN#2ZjoJeE#{Mfs*D4roU@J0-vsK!QS`waWXn zZR2KMc+*L1JvJR*{qeb({`LgkB3bVPY>g{yu5d=j#oH$UQdt^!X^g2PiBVe9ZC$)Z@#3K} zWw>EeVWR;4452np(VDnEHQ zHyQ~FB&%n?{R)5GJQGJFbiMg0Cg`ze&51d_m#foU;4R9ZZHkTst|Wixp?ntXHw;d; zeAKvf0DCMCV$GN6>;O?>X{naJYhP`vVgCaNkR%C?gYBHY-ma70I*xklUMj;H-*;rw zr>{YOp96m0o|51h=q1rWRAda34+X}9$Pl-cj+2u6D9Co)J3unZxDFm@hxVqiqLnYO zmx57)&JSD-m5x|XCf%$*Oc>CP4~+ki{1>3Infxa#sz*pTb5r|lt#Z{a`K)bt$9FQj z)fcOg9(p^c6>}Nq=^=$ALr5}8tfx`Obs_1LSigOqgsw`HJ~hxICo)0HJp%DON()M{ z9PRmgS(!ye0^&xssHj0|D%He;4u*wm?pafSS69{%U*OvZME0elGk-$fxAb7qxv|if zYX2rq;3?kC2LVTh@o{Fs8z(!1uA;dV3wmLPE|64qauP7L!xKS+XYi*;9?@W)|A1V+zr=_b<>}$45n_tZBa-@nAPS!S9(f3fKMpc~ zZZJA#c3J6ybrG+?AJ=~lY&9=gZysr=A04g@C@M0DqZf^ao@u`Ha#^w@JG|qw8sBm? zo7%rYX>z`WMA=$or~r3*W1Dp>g!plC?=7dtWOQke^z(@m>wc~VCZ$gCf0YP)bL zZL|{K@I0c1umVT~KPmrJGzGMy#~EJ@v>9BPk%$%^CI;|tlHU(*!?lZjp)lM>!t zr?Wten%zVK%%|P6pe5NS_8TSJ!C~+uZ(R3tlqV9se?&TJM8&0~L^{AFjzwj776IN=JIRP2V1{AdQ=3lj;d0xEpNuL1V#7RH1DX-4rAP)4 zAaqo(mpw{KiT@BeJj>s4QH~~7Nw6Y-Q59m;UEH)D?hT;~J(3SLPmI`F5q_XMHM?_ggH13&_EB=@{J-0O1YWtLmxHVZ*bg z#q1I0K5mnBUB*wZODSgO4vt|?-`DFgCV@o;a#>N(P210Ut#y-AqxF+|*tQ&uVxD&= ziBF1V2t$a_n;y_9(i4cSeIv@IIfe)o=qeDvKq5KK1C%>9GYjunDY~Q4D1R;vc9f*g zkYdO#HC1_(EwOm!d05gU5Y@OH_FJff!8JwGZkqgg;O_q;1 zXu64Lh%^p)BB+eOOG~s!n>%9hn)M+=@{rT3JsX#^+(q#y!$_8h;5J$LALt4)0s1~6 zJ@S@QRJ;%rFfS(GK}`6Ja#NJD2X$0>UuC3b9Y>zBHpfFwvliYAYrWbK7G$QVl8VWJ zN`TgLr9^#x?eE}Tem9&Q{I>qGTd;p5+lVpTU8Lp^zlZmByEA3;7hOMQ&bDM$ zeD-qs#6EfXta2l2_Q&zYfO)^G3rVV(7(e7h5OCV0`O;MPKup}xz8RBCWJBIgh|RqZ zeTQBA_>=UD!p7EHN`jG=>5tC15{0`R?)nFOOI$*|tbZ{|Qk=M2uKH3W0**T8&!f9- zjD7qQe|M}%_)UK0<7YPCd0r%;0In(G-lTc6>Ge;&$1wK2k?9z7>dHT1KgpUR1JMoL z-9Z|S(GPi76J^=s+1WX9rdRY=HK9(sr!e=KAd$V0jPGkXcgCa@PI5R}CvyHc=5UN3 z#WsH~`x1r!q4tUIg%fjOU_taw1-w#_vTiguiEkmY9cpK}-8W;j1m_H=>+TboNdu|egl&%Fs7K2XMa)} zIqKfsbSU@=>Y2f;9BxdHr&-wNg{5^_(z%lcF6SOf%pF~~?)S*g|JxE#UWM)`_W>9p z!3an4vks{mIw)77`&>L3$rtQ)51{DK+=OIRIj5Zuz3Hebjlv-xOGphQY?| zdi`rnb`TF0t&E?Ioz=kOj~&*IT$&XPrSp@hE=7W{e~dgSE( z4FN#Id{puhTolBxLrXH;3Pw@M8o9(MiKIOY7b&nWSrDQUTA8g{%mDiDq8V?1 z*o4dqXm?6S9PExQZq2E0=goPSSDc$09en$zdSWsq7%ljse5y4k(;R1ZFfB<*0qkx@j!p>>5j2k>e5cmsWmHtQRMPDmW_K}N z!e{_`X0w#ogerQesrhIqtl0#7h;)A;HkR8xTTG_*sBMAW)#cIMrGM+Ct%M)q$!Cxz zOj+9lcx79(Z_V2wx%oZi`6b#rl4$Z9d_q*PNa_gf>R^><`8GWh!WQQXu5|SqE%|(Izr2?UoHRyV(0i>@9wTe~^?R*j<2Am_VwEd+ZX0%aS z9*}y*cY6Znk503GYBbOJ-23B zhR4lSAAa`!4{(z?xwU1nvD%>N`3+7FOiT>;G>$a92;?2%C!MHnp)$@eJV zg!WLog;@E4I;B}}=A0cYRp7B=mEMztk@s88{`}dyg2wz!+qRoFWk(}~jWqlkW;8nL zM+Xr;3MDltm|__c|8gLyIv@E>lnW2&(vPWRULv-s7VGmu0UswWrgfu3GR3kUjHk4W9AeZ^n(9eZ=PFPqgzxRR9 zw7L(^y7_LZSAa|~K_GQ|F7PG4#gQ2){AYo=8^m;lnF)&=yL`TLkN%?t!(T+;K_idy zFlTM#kWxItLbP#64IGAL2QQ(hRzM&C@E6j%V)Ob&p;P<3#rD93ugh4Am>R%{T$VXV zlZzRA2f%)~nPbop`bnjB5P}9*%g~$!EJw)!rD}cw0Cb)SaGEQFv~|uGW!o*&SmJu% zQRBf3ZbhP?&`Hw3q_j|j1@^6}vdi(*msiJ7fXSpj5omF10IC?t+`3uRHROS_H?lcJ7__#su^soSvjJ2rpS=pVa7?{PV@KQDaVezNPYqHpZFgAxekX(f z5X_KB=MUVqYMt!HD(Bu5(efdu=zV**`l#^tmT|-&G>EpWLL$yCh7kGuc-(3E^Zt$|1q+6+_A#M zrdev}m4a&-y13czJh!Nx+f!>+UcM@6;og1<@_W8m3VB`fEH{c(kTy#%D91?81yQ9{ z8BRqRBJbzerPbc@+oq;2X`wc4@nB<7F=_}eio(Azh*@0EKLj&w=!gs_;_8p9U)Hqm zskO@PUH{1eXXL8Adk_)wjQMul>a-o-e*oG`z3-~A9;IyAf&&-fAR9xLl<*Mh1fIgK zv&@xdKa-fjoug6Q?8dsW+56GI=jd?y%@n>YRrl$_6cg9))9r?N0l9RSM(-ELE-j>W z6~6{amI&LNO=T*+4*tOSSEu`PqMQMl*(a`fO>h&RfxEKa3sM-7RZK3HVnT#QO~^|A zK|8aggMyQKZ(`;jNK&FL?JxCQaDsxj(ChUDS!;ugg@<=@+Kd=3;9*r0dPNe&m2gt$cv@dzPJ_J`Qg*D}%4- z-z;P{Qta}jCbGo@q@?FOX>7@~{Y==r7HOPq=#Rcsj;T;~8_?DlOGZ<^LVf=kKmvkW ztsFVtOFa)|IBbSb3~f73{<_r1M}poExTMF0$;^}WD@Pn7+x-j>oS8OOkbZ#3*;^ygjd5)gZZQCK$H4~Eu8{=n~ZcklAa z{hHLpHyh`b%oz1Tavj+(FNooKP>=Do!FqM>69Wgww3us5`c>bwdnr<4rJ=<1cWNrO^2sRSgZ3>?a5_Z_Oh$w+E2{{yZ49@W zQD93`nCb&O+{n_7tqE~iBmD7N8_${4R2-PE*Diy6DusoU7$CY@!Z75?xb=pK>*BlOVc*26T14|@Dhckl*HBNl1>%l~8O+~b-4 z|0w=pbBhpN$gsX9<(5k^xr7Sii;`RJ*W|L9xnCQi+j5!Em(j&Nw_JyXt%MOmu5(#! zlKY)p>i7FR_V@nz+}`i^Ij{3P(PS|GSVq=V3(Bx{?U|umJ|d3x>@?Oh?iB}vzX(byACKOy99A5`0|OzLbDiR26xJ?Pm+{GW-L$f9#0}zp)lLZxGPTQGCbN(tEV8ob2y#RdccZe44`6 zl`%5~m(jV_JVv1P3M2gOIdXl|=-IpZp>@MbV!3^$&VQ{$uJ3CsHAy_%2hJn2#eSfq zE+1ENATILT-%NQfF+OSfrs%(#^F^fzsJru1uMwDcSTFv-vuWs+*+0Iix4vmc+OB_m z&v1C{=m^;SsNv!1C%J)haWdXT)6E_TJ^^AnEb@HVxoqN>BMPi;b@CylWL{W2Ng_+g}_jQ#wnq_4Gkzp+Y{=$$`j;-Z0nV+Z99 zw^BhNYJ|SJ9iIYT3*|h|iLE_C?z_jE09ogF6@K<;hD_le<5VVipjN2z#)^V9*S68I z;_A7rvklF`vu=U$42j9QXg zZ$k6D`&!&Yjm?mP#FYu(K=}j)f0BRd3$&&tpbF(Vm;RE6YWuMz^KIja>Q&d<9C_LB z>)xUsGp8qU3Ex5fj=UtT;Mn&Ur$4zIM7(KCxv=}l`o=lVmv12tCev`4UL_k{bB5eEc5VO4J3;G{$A*+J#h8)J-)Wn)sEM_1^~_XdS2)R0V{6X!$NKzt-ZnPAwPa_B~PwAp%PxM1jf^T z2`W{gXkG&^WBYr_}O#za~uyU9f}+2jz9R zx%psw@Yl~4=BH>{t!C{tW{v()q^!kCSk46A*d316^xj;WYiOxG)7+zThj8jRENfG~ zY>G!VF%8wPG7i1ghwrepZl@eGQz59F=x1lgH!%c`V%F!8F(SHKPsj3+4Pu`FBLH?|{Xt{`39;Tq8-uP%+ls)CQL`rSl){yv?(ayrMixF|fN zI&?O{hAt@JX1mdz!}YdeL-ad0_Feld`%GC;y>;HqQhr&DjtEKr(suO1Xumk&)| znXBH;1`j8atNv3pDM8mR{*#sBHPEMqKV+rB70o!B?K1_rmpP04Dtk(MI%j3dEg@J7 z6!bMbo$^-g9L+;@Gpo3w)5|-|*ULtpU!>D4R62rP>`g|p1y0gDOa$C)(Y20E+$K&_ zj-sTNDxL8WJPa-I^+Kn0MuJA2Bc`&%+3q95tiaZ9w{6MsS=Ijl+;$YD>UqOlthhs% zz$qFmzMuP4GB=Dw+DNgm>=A+{o_|!Pky}o~*;l|{G*PeVR&`PHgyo^!9IS6B&MYEsL{M7nBYxvZZ* zjp?{&#WS;YE6W9-kBZ(a&^e~lUf;G74K5i3}asqlId+l`S-R6O-&HYjNT+6dX5tLz8$3=&jzsUDyo0 zKttD{0>;uh^NmAT7hDPZp-N5X1~a9iN$lLO%o zWWy>$M~c^~U7i(}T?8w)d>=&ZKC&2Xoy{>>mAT1uJjX-Fu$q`_!iVtc~bwd8wDrGKldMHS=HD>E>>&He9AzqTh_+R`Of zP}MrzzqMEx#A9Tq9M865>g%2mUZxh?bo*!NG#-SjR@F zpY9_VAyk)7>H6??pv`W~O8DT!w6_0oGL zHApbwhtC;L#1|NV0B5*VL5jw%B;`LRwvU{6zX>x5@|De6-O5)#vOYmBM#-fZMbc#Q zu@U`OnGk}gVfe2@g`&3~oL}Wvm!OrJ8W}br)&7;${sH-^HjTYEGB&3?#n(tIkhjpU zo`$3`$WX80c-`)<*D#Wsz^fM_AbJG}uqutGaK>;FXtTjGz6n*!z=HEah`R`vAaFYw#! zFIU`l?*-VIVA^*rj^E$8v3{YkZz)SdO?=UZ4_Cy-%+f*jDJ0>o*(?2WXw-{q`*^}HFmb_|wdYA~_4N`Du$ zMW_S03W6suvJ>&z0-gwh6c6kK6+-fP1u5n^R#`Igt9ak}ub3{TBL4}Zk`Z3@vN~Gy zZlzQCH*$Ye=+MfZe{=(AuQK5hb{JmBw@q%9xOgK~5=;E{v-eIW9l{z+wwDiLBh6B` z8xT0rB@SnI6y?Iwn`#0$jZ{>`*0u3QT7V#abS3i*4*0t+t`k!t$ygw8nxPf&23Lyi z8uB}b)P~hfV73|N{{x(H2^qdyXmphSy{sp`Rav!d$)ow= z7rMKkXLl}fN8Gu)5!T@O{SPN&0;9DqP<4=BV8+f0(f~xGfB-y+l zAOTk(0t`($ep{~3`)6Xcfq!)K`;!RkTL#3RKU{8Tj4nc^ESQMfWwK(+c6++v9WAb( zR!%QbU5-&4^Q`t`swIAZJrBYVj` z`DxZa(Jn_X3f_jwKM2#l={h^8q&(J~_=$GYuDb86>hH{q7xNO=eE26g0>E?aW^j++0T{i%FFSDAZ2^7rT^;!+2>Q~6=gND@}dDshR{Q00n6$*9+&<$4Ok0T)}r15nPjo|CEAEAS`Dl0<6A;E}bhX_B zubsV$hb2Jp1ed83G&V_eas6(r628I(=5aOugr#ynh8hY{zpIgvn2SqY-+!#oRUay zAHDbOy!ya7?T92zAl z@*49eQ=*iruaq0DTnf{no9!3=VQ6}7w>|4qD9?+UDMKEQkMCdmfa=6`NCl;w0Ug{&UTMlNT)gc>(dNGcUQ^^v~JwK_xwZGbQw5?q~C9l=-%~US7ajOJHSAti$Nc z7<2Z?*|Ef*O(~z>whjeqeGAdvK(sh-xk2;ZP6=q@e33;Li+r_l%Pks1=Eb?@E(7ln}2)pI`7-1I`g{@&U%=!s4LM2N`GIoj0VTk-V}}KJIVijd?@5<)(9oVJjT$Eq1Bt&SpM zCXfQgz;|pjoE-|0j!gc@b0=9@&4`yhk6a)L7RFGSDF7YJsnTz&_QKNCNm<|V*5Cod zcitC(#k@{?oooH3W!iT>R@5P8Z}QJx?_?3CH&d381J)rg)eTl17DOtKW0tz9{g%?o zYW>E*)~~o<;`FLsv(~Nzo!}F5MXjLEWDD7gdOiz*%_|lp-OhicWA`85fA~(j1c;Q` z2?C+fLfZ#pp@G-(TMA)hxpGHzV4%8t4}Wt#`EjrY^^)R~ffKf29&a0vxH~B4clC~A z4JMaARICjB4a6;s?B%~(yyUEynblWVkqzcZzkTtIbKk4Uo6wq!67V9qZ4sO3`%znl zQ`elSn>+ym%=HeOAYZ4T9q11DpYx*cLf`MuCJnT^7pDce?YY>im*0LrMO)?NAJG4F zIN=tI=a9r2;W%{P#*4y386`B~$M&-@cG)Dj2iT!X8e2={|p&1xT z*?#04f_5}>p*OCk*JjW^;&FnSQkDU@NH^>_6}rtJ9Mk!-+K(DQ&d1ZFz*cQw;9o%y zVtW%M@ff}tMIfQY2XJ8|Y}_g@{eqnKI*Pv^N$=+oXR`2dPCoG|+s!s$G=0c-wrG3t z=rDXq*?BZCYwhML!?`7}fuSq(QBync%5c5c?@OOcL6b7%i5_O6OD0UuN^i-dSrjx; zu~Q^LTn95j&4M-16Xgcp>^I+|lg;{^lI4YxKA1Mk$^9If5+#al5cxr=79{3fKJWI~ zfa|^3PQTGfDa*}86qM8VPC}?(eZ61a&h+HL-AXOzwbt2LhpSk}qQ1r)7wwSIgQB|a zd$}lz1fB(53GghQs)3XC!~j;{zwY@#V&@_j2%CaDJSqCR8Uz@c+32s+o7RzUAeWzr z*HR)*B@Xitgw{@~`y4~jA(>#iGQgvgZ^Q>AL&Ru(A?4-T4wDKYlYhc}m#Xr^DKFOI zsxgl3s|(TO*ao`?Pu|Q6n$WhX+WOiiOP$R#uZ>V>z-BRt?y^(JX3%${PevvPkqVG4fK1L!84vuS<-Mn1^zt@4Ywr8l1V6itMJ!$WR?J$?UuOP&<16q>@C#Hn>r-$(4dHgG zhT@D25N@8Jt;fP>Z=Rfo_7ee3?3ZXx1Fd5Q;3ek?@1-Lly7v{>X@V*ol3F@ARM%HG z0sO7tL|d6S93S*xn;nY4M=7iDh)rrqq?*R&G)^wHwzMy8s@4t14xwBQCKsmB`{5R& zApQMMwp+O9-}H#6b#As!EE0an#jcE{<%P+`V^q`BGsryYbhxnUCm*r>cfRbvtnR~Ilm|mWewEii~!nD2^ zlNp~y|0mqEuYNgim|?WqxUjFgP4qkXRZ%@w;JCcER8(EFLw+m>4k)$5YCA+(O0aoo zica|Y@(QdJ$k*S0dekwGQP@bULRlGUhC)+bcA{wFa%mDgZ^Y@<UUL}lyr7H*k9fSWDtdRQ3wLE{AN3jM>ce>_CKpzo<5izF#Ki^oRLLiy`lFIf)fmw zSR=zE*wKhPfCQvn*q$kT%=ZI83cz8V(s1&IK%5u@%wXN_=U7M~m3HcX5`Pr;2IYjc zoT1U=YS^A_(*@#JSXs-^$(H`m;cP4TnTM#AIlj08+%*F^9_WAHvng2d6W|4 zyDW|b3&+~xz8pjRDbRzKA+mm#F_}QGikuA|4P`;|g9q(>O6lu1Q1JZfNn*cx3GjiP z%(k~I?`+1Cat@?-Z-Jsx{TP*Nk{dkO<#S&r5kEJSd&wLh7KgyY*zPA^scU82wQyT& z6cV0U-7VZ6+hB}2N8x_|4`^hr_*dBQheVAe)J2`oU!2^IP0iI)<9sC+r(DLa{w)32 zzkv!>*+_ZM&Ck)Z&72pX#2$~FBUH4ckZ_vk3%o4O1OZMRQ7kb8ET2znl~?ciM%TrS zYL>hp@9(+|$w)v-$EQ+xl(uMji<=Ju(ibx)yG2$9WX>tCXdz(nIzEcvHpNYKQO_w^ zTyNERZSJK;)^F3}$}NLQM-^HB14>*kohjBnQJmf}FnHy*Gs6e;_NO+?vNleC_{0;| zP=@qS%^RyrDGB1L>(_JoejUGicPKG3ke@zhhC>Y6>eC>n8ymrfCCoXMfb=}_kC07PdNet4pgdh>ZW!4m+p@rX)?CxhLGP{slqC3Y^TA`H-kmXc z8bI5xsnPGe&vPH((pg#j!5BcFnk0r@(qyC@z6U=NmC zr=6C8Z+CJF%{UPhV7Nj&A2b2D^OeY$?3)?23yZqEnlsH<8+NW@Ni>8PlX|^}4z3LP zWwqJ9*Hp9+prq*pQzl?XVB)!PpASRLFzD@JGYVxp(ADnC zK%9MeoL@}A1sB7RnG~7qp^fB{@f{hmK{v~v0e7hThU}ccXkcE_@%Han+ zYomK()#2f>e)4^h_1nMd+gj`Q9gEUF+B4Gt=4l-^Rt+^*Lx_3kla9aI@k#Ed8~`*0 zzTQvW@H#5wNC1HK<0dE>B+QMYQy(GpgQh_HrNtkgfKttZXJin0FnL0E5|ec})hQB2 zy!1XwNfjA&cL(jV;_L#3FI{%fc9uz@Q8SvYRU_5yX7+y*9(Z0%ctDelQ@ddginOUx z=fEa|XQ}a1(m#0M!Ci)N;NQ+fJpX%dl1UVTyTRr$C^lO}z0(M^j>bm+2h?(X{0zP( zZ-0|d^kRN5RTDW7!NKd-GQMpO;DWY-i3+S)VN(;Cv3VqNQI)WPxAca)3BR^0aBy87 zKP4ThcsVkE(lk`!*YttLaEq^k!Yf_F{{b#v0_r2^k!aJWb;C21@UibLj#B=hvZ0t z$jhPFKDFo#X=9HvTs<^AIporufphv0Le-Di2tn0h-Dap@wh2e!6SH7yPey{pm*;(S zR&p0YfFpfC1`?0q{$ZJ$*e_&3BApu05whuq=PYe=ZJm!dT(NOG(=0PbrPGmc0igNX zC6_9VpSJ!5b&c)(GkX>@;nAV*-;u>o8bw8G<%6ZI&KW2~#qwH1y~*GFcIKm9FzCo} z4YLP1r>LXedx0sG)GivFU=&3RO8qYP`U-ni1X7r>MYI^{J}iOc<9OxH#qFxcr=hOh zct8_a2H7q?4;UleJg23k7zsGw_nnQ)!l+fj;S?|;vakh)NN=3@FhSMcC9pZWAXwMZwogM|NYcve=EibvmG*AyRf`KiE`fEC%1ob zk@t`q5$cX2tVd z4C)U4Q(4#E)3Kz>`F*Vtt(9+A8Y(9JMjh*O>-36q+vSJREwXP>{^a78z_QT@5Btgc zVKsF5aPgBsPk}tp&9zzJCMLIT0o<#<_iq&qNXns z9oFg{?HbGbM>GF=SMz~9i7lE>cwl5mhqe;6Jz^~2gnPVNg$jp)IDfs2nhBwXSNY7` zACTXiaLacvb@J6GK4IQZ;3W1bt4oNAQnv?>T+Z{ZE~cNxCACM~B}-Pk-ma#t@%y(B zGVVH3B5emxKBUGIFTx?cu_?n(UcP^kWQU_z{QIwA#v!P-Lmxkp{Zo9TegXAWE+Ovx zYvs+xod+EL%>ov`lD{e9I~hUZ)?L|8kJ>x5n!H{%TtpdR>*@v%zqT~IZCLQXI}s`E z^Xa{-ecOr=&d$L_1v7dSTDN2TbH3wpd&7rTXE~=#)85NV{z@Y+Mjv^-x_obD;q~U+ zy@{mFk7L+-J9ZzQmL}@Tb??ApzuMf0bgtGZ_eNuw{)dzvg)eQ$n5*kCX9e>%gub^w zd-OQw3c9@Ot>2_G>raWzaG;KPsB)2KDNWwMS7*{`%RrZub_NA7jpKf2mN@cg84&{~xDXEZ~j()+V&UVq&pxXIoej)7ama(my(=!SdsV#9zrq73N=Mbtg%t4^ApQc}5 zaaHDO!(hqRGM2>KE3o$$%F&OAx&;@$ep%*^>5|A4XKU*}u2RD-P55R#3onZhGTJ1y zR+4hIY16!F0ga7yc7)ab38H>!!DIZ5bHh9X9}G*!$o<@UX7+Y{5-AIXHROE*1$?pH z?RphKFP%EKgRH!Wtd{KOI{K^S(n&|xxGHNO_gwnV*IQ{LNn%b$GZkvjW!yhli($AV zp=5cxqD#;_?TR+LW_EF{m%M@vN_*B?(7Sc!e~%rwdQTU8(v$H&UKP>n*rG3R0$c^} zO`MX=L|>jeoz^0yhcf?=AQ(mZcPRUc0pLRYBmMN|!G(L@@-L;c8ogZW z7O331`o}K^Xvr5ytM=TD3_HC!)BkQ`VMFN)RTw&UsYCcZlI|}_7fh!^Jj_!h-ZmEDtV%t%c?$;)!eNIU6nV{Q2K#Z)d?c`~pu7qQzOi;i=?^=G`W zY7LX!kh3@()xd}@DtfLRdM_Py?8KP>ujh{i+*b4YmwB14dG>6e&_`!9uUWAyq!0i0 zx(899ae{lSEmZcwgAl+hs4E+DBJPe%W^d9Bs^Oy5 zHLo6b%AAR`x?sIur$#$woGsf^%lqRN{{{1&ho$?G_Eh9&ax@}yXr|9Mwvp_Tv#|KJ zegwoop|_towBB(lQz$&}rL@A-{KC0`AN>BIYO_%xfV%irzb=7+((r{n&saogJ zcW!SUm21nM9^D;$n5<@?fj_ELq*z}Z!DxlWysx+8BJBF@9<|gJ@hkg(r?v#{<-CiX9*Dtvu3)2RVAKf(|mAXY_Efb4an+Oc`=#s z`_5kYs6wWuSFUflwxjt_tlu3*pF%xx`lh2z9d3Bcyz15EG7{JKlfti8TqN#yMrt2m zY(9lR0dw2g53BO})JZ<7yo!2Lnnk4Zr?n(&K*~H)TH8PlQtkt6FB&Ks+c>`#;h5y> zza3R74in%)B6~b#TL=j%D#(e%UX7{N@Xd*ak{<_0`DDA^+!;Fu-?t4_#F3)PtgPu7 zhQIfVmn^li&cQT6`$yXPfGPwNfe9kTlf}`JS4B^vq+gaH*iWQ?3cQzpB0I$j>gD#> zH=sma02Gc5{1?-epkj3Q8!KOfaOum;e=>8>ydooB?)oG8xyPBu&h$EB!?I+eveIb? zAPk1lIgyE8bg0eER&WWA3-fiYs`_*2TJx^q;8$f~z2#I}wykZP9qQOi#6C3W?ORX zJxb!ftNNVNJRFr^PhxvwIH2=>nN&cj$!&A=%AFS<<>QHQm^WMBL^v>@WAQ!6e!;t; z(mP~k#c_Lfz2+@(&o<8~42>wLYuH<8X=$jx_)25?_l5Y(srrYTlF7H}NS~k=wgJp_ zgMcpkJ%hI#!s?URA~G5E4E16c9X^eRK#I}H3xH2hRldJbCTBjD$4DCsObV)5{0zY9 z#eGn*Qb*KdQSkR3C(j9t^YAB6Cv|fel6>Z&Fbuaf(acf~t^9{kt|SqAd4X};6a`vY zvuNp0MMo7YvyRGBM@zfU?!G-{Exc(|$ju)lHnow|Z`fUgZGu+!cB(tsbYIw@Kwbp? zV-e{EUsmjZ#iw-@U{w<$wr$7^En8*iYdkf!Q}LK4hcN(0gxdBbHYWwQWF~Yec8ea{ z_vnD+^&7I&L;?4N*XI(CQ&9g@oe~KH?M_!4jI+xMdE!c-^J!lMF>126e~{tTe!N{z zKJ@mo5G2Kj*{uD9hXjP}Kma!6t`$judrp79Ch6}9dN-A>K-P)xN1htdZMtB~^ zLrU_w@yASsh$E$=-dCNoVsjyR)`C)Ad(D$z=uRGZP*V)W5L;)iU6}oOwAYaV`Zzfg z^%trYW{oPQGg+arwpr8FO`Yl=0ws(-i=7&eJp9B1B+-G@#in1u`C=d3!*sSe0%auf zZe#1F|6Z@hL5ybVq|N?a!CNHn4`M&sSn+Ne*T<-d~@{m8d&s_wkZ2hvUiISZ{FpXJ-muv+_CF ze_rN&w|=GU-mA=^kboO!Z(=9lu)ToBQ$2O=X?Sei3hRxy9gjcZh?Y$fl)vP>@{X+T zcvx<|JvyB?vg`2VuItTvYjMtvE3Lc!CB{_^9n})t&~gQ~hDO2!n3r4*ko+wpr@LkA zBRi_y#A{XZ#cA`7zo?>@K)w({#5ijlWAIL0<)cXf$2gH&QxTunZDGNg#>)z~y2@56 zqN+(mO5pk}vx#AfRLN#-6As!0m7TG9;8I=OUYxawigO4so-UY0Uk2GSSL!y$iR+z* znY<_Z8lz(pu*X<|SPlA1hP37s6fDN^3zAPOdEOP&)tjD32|}>vg76dCK}3HK7F$R( zBq_(FS#>^!gH7i{H zh7DGRpx^kdgtUKPg`$bGj$q8_a$_&1>mynI3g7mg+qrL*h4|H910w$k$9xjM_)~eM z=n32_*cL6Ecj@j>;goD0G4dQ&>X&o(`%M!`FRc1LCOq#4`fw+lCHQ+CyXk!m9d^Jf z0&Qo-+!X2)3q?}r{k;+-nm>3qY{=7_#6q=oPEqB*czVx^8GiOOwCwxR{3(*;ed+1q zWYMN+&tB|K%I?geQ>k_jow9W|W|Gmrhbq5Plt-SsHd^#`(ynj#**tciAR;3YDF^X~ z%`4%Xx)F9sbxNH>*vp3rPDJ&?_qf8NX)`Z^&wc4g19e7*1d9K{4A)MLXJVadlNByP z+)87Gt8TN@Tfo1Aefgn)^fH|qm>GYLS0H#xltz~fdoSN1qLyoBk*7Q~xUb;AXw4nI zhn5tjpg_A~G_0-B{9t)`HSceLA?~Utgohvk(C9j=9>!u~VvBw@pd=*TZy4WAmqab{ z-cp~HZ2EE`LQIZ7MerB_5882{Ob_Y4U}SRMkdZAz*mkG=I`dO0k?`j`UPxXA=RZhh zd570dPV4P9#N~b;>T_6#X>43Fu6h-Pm`Czx>0E@&K_pTAC@mU)LQvu-;lF%K@dP#- z%L5RN?@+xZk>bcJr|p@gaxh}t1`kYiA0-B6{kZgDXR)--?|D-x>f{nd%W4~4K@~wQ z{s*qDtrcL*{8B#cAfy$vgFqSUsE{YUALw!oeEMzB3hvXNKF|7lV-Cek#6kqLz%H@iT+F09^J&G;b zF`D7>w)Rg{*kSH4x%go-;O2!x>F(=z=ZeFy+AQ%O1p;O&z$y#M;*lx!P%*aP5Z3`X zx;fbSL0_dxHgv!YU1yYAXbC|os9PpqJzq<%8lIlU9h89O(`vuLF#YSwKRxZ2m1?8V zo`WhTqsycwwv~1|fyj5^K%zp&27FzYK=n@*Wu+cTW`l7%)cGA{?+>o&t z_UhE#!r$pE-~T%2$JTg}0EnEq(`iZX2Q%_wVttVZZ{);*b#*-0yCO0LW7Q1UfL`wW zkGoqs4}NUng?8tLK_`HyW{feu9-n5&mQqM*Oezdmp&{qx7KoP6!xRgRd8Aw}pR$t@ z|JvDG4&@5C>o@)V$9&l6#}=WBn*N8VE3!v}VRp6+m4D_Qe7-;FSc9Z$X&YH0VqR}f zkxn65(C5vo+RhSY&25y%;bphz^4@Iw@5yj8^;2|N`mJ<0v`>8{1^J>r={6toz?no= zHwX+onK9M>@q$OH;E>5@eFzdMChmzplaXZQ|IO=L<&mhja&B=C@psCmMyl<|TkZC` zH(0*mkljy`Q;9lMpQz-;bVVoocUw5?vgn=S)^F3zR&yWNLoEc!mZi{<`jFdi+qBvo zg6c9Bcb?sTy7aCA#FAT7t=+9(=gz+NNJkf2`#a@8=FAhF>wM={Jl&HAxBt_hh53`r z<t{VAUNRe~Z(R_CnTCMvz51LE~$%K#Ko-FXdFu ziQ=*_+zck9IO_5-7zhDD;NAIu*HIkCa^XU24sc`;~ubFC4Qxy~8ice8weV$~!k^9+-y z^Cw3b43f*$lD509{P#0KOVKoQ%2J#P2sCma*jSAnF({_;;;>WASVZ|t&fW*DA+LZlrhj+wb+N(Ahz0uM@a~vr72ukv;Qb;wvdv ziE0yb;3SZ0K1V?4t2f9_lTPD*!}~P_l=*<5q{A-RzqkYTH66BR{3biTNx;pG(~!ke z>9?@tAM$*6)?#eLta6C5R5{doxaBYqt?`!V>$kf0&US|3`<@)MshX0Tii-feQ+QWC z;RWp1py@+BL0~rO|Hpy;07=aSYWh_^WQ;+N7yN`sM4oKF zk3_K3w6w&jVqLoG^sZYGP?1k^`4$`lQ_`B3%M3Su zTgNWQ4o3!TH&C2sv$3JjO_hC1cswyE<71LyS3VL( zzzctmFWK+Mo@&-T6r$i!%YsG`0!ClCwR*N5I|&yi>l@4?m`MoM912^+ioz$45*~VG!q3`(CLjgaspn!0LoMr10ywV_=`lmFl{s67y{0g9ihR zdwVZJ8(V%=?2%iBqAq8(th8khN=W1rj504BBCf0Ysu*|N$Myuk>)>qjfsF|3KZOF?ZLjlA)+N=<{mYl z2574iElhNjt=-b}`@H$O)`?iq%n14_01EqaEBX48y&cslJ-XLUb(+DxH5ov@%qtYw(Mqsr)s`#(t#0B(H?Zd<2jD!z6DT?h*!T)UsaRJMYE|h|(Mg{KggZj#-*o9)OXZ=i=si*u z^;6`N-uP$q7T!Y7{~|={I!y3UBJJaLpVy=Pzq`1p;7w9~{>#n?vHoN0I6t=+KDst5 zk^#HqBfXZYs?qQ^FQV041H00{v6{O&c4vB)e8;560OE_JPR)#qA=qKmPW7+BX7iT} z#|PM|@!vwlsoGI2shu1NBHul>^viIhm=>%0HTyXwvV`eW6IA z7e{BPwqbZ-+J&LqTYcyJ5ZU}RMdQ!3CSyM&JaF~v86Nlwa=O7-5-+VTC8(E&r(J$) zjEjr$A!MY!W$(~|m}VFkGeJIO^L5Ziwiind;da`?0?87S1H${Xzv!s+%uBRx5ke)f zkuU*Re2Ur~hbzaGiEX>+&yE&kaMU8DlE}{7X&j7eTTLCAn3)b;>}}S)o{UIoW@Zd$ zZ26QJP!IrM<@}S}Lj||EYIcEN7(q?xi5dA*Og9A>j5#jQ;dX8f&v#@ZAQT{!yP9@f zzUKIcn#o8gGpQfBkMD+gLP#pz@Uvm&4nzV@`grBZ?Dzu zS#zz*+UA0vo9c{JdN89c7i@|{m6-vLtIfY zEV2HA&a0zvcz&U1H_T_1g&z_2n0vOdg>CAd_uDj?k6)lm;DRz*C6xUgcE_A0SHkuv zlrg)ais|XCjGt!Sb+r@MLMIw`mq(umHcV5;<CFXszc@>p2 zi+h0;_(1Ton1>x9N7tzz(?QV=A`!DUm87d>=N37zG9LNW?1Yq-817gfmw55I__6#n#9tXO- zJniC$t&I3CC)j4N3npak4sUh!$eXZ=arJN2cA$_Gvp2n3NGPqazF8JQp*ie zEQ$awvSz`_azKKh5wa{3ES!*ta}CVp`8mLYJi>D0nybZ8F_ z(`dRnYFp2kp z^2yKaj!dIxy@p$e!*g#oQ@e(YyDXn8q!@!P{gdtps^#y>1}Z>@c}ib^Yarn{o4ij% z^*hpRBlwoSnZBGaz4I}PL9~t^YE9iuveMIy3AIpb7jL`x4!loCat`Yd_^Nw%H-8WQ z^5h>y70pfqxEB))rC@P!7#yF=Ytik<8_l&9t-t;UjIYy=e$jSjW7`~dHfpM~ zC7;^;4mxE!`k*5)_Fy|KDl+G6ebSD^0z{y7g+3MBxo-l~EQ8KP-~g!bMBe}e8c!08 z7_iI*MBXVJ-1B)@om4Ue~9B)SFxE|5*?{{ zwTve5{*272Uo@ACm`e23!nZ3Sc`H>Z)6;97PgjYi-hXeSPRKE7x?<#DWP<~16Y;H%XcL~MrUHw9o( z(kk7Ps?X>2sq%dHu-qq=O?Y(e(^?(jX$-6wU;+rMroGA{4+hlRj=8j+wT%vpMf+C2 zZC$BGYcFOTXmxSmy}{5KAG1*-r9e@@eq%Ee3Ede0ylTYz0q6;egnHAx zY(+aLgd{*BrM}=GZ3_LH*9^J8K*XbE;@9Xhq!T1US|kLD>7=5>Wy0E8CPEuWHy6gp z;opY+9Sg{gYopUgd7bZhh#(nDW5&3bj39B)I)&gX@YqFP1e5bad^%kg*ZPnLT_T~2P18EN8TjGZfI{G zkwY12tXznVDqgNcSBLB_6z5E@fK-f(>m(A#I6FQQ7R64_R|Du07K2--g+Y~9P!Cg* z*96@(%?GHxo{$C}67$b+zeR)&nyv+Jw3bpQ953`T>iDy~E(pL@*aFG$M)8)s=6(Rc z-#~4*`1KqtRpwW>%_*nL+Z}?iwav+4x(dpz0w;DAz#I7LByn)iz?C1`25w{)6RzR}w)X zV7kEHzq%oBsCJ}Pbds?+^6J?m*Oixl+gFIFfV?+16$*!x2h;EU5n%*xbosVq>N&$5x|2G5!;p# zpESPZf98u-l<=ARyYpfaDJYkxVXUBiBi_ECD^<@n!y6iw!rPTokN$+@&N^4eV*W4! z>Ma&WSNERPO+Cq_KMv8mKc8TNgbN1|gTEzM>Z^~nt`A+#4pN@sm*0%kdn8w;L|f?R z74M8$tN#k8oKe?^aO%0c5Z=f#lMF7-X#fA*t8R+()@P5h@+0(DJYaGx*9DGiBO?Of@) zb|1XKeA}B3?mb}C>?ZfM5h0%QkiVzoIs`U3=u-wdDJGv|9&JQT$u4mkmNnV*51HmI zWy$ypTkta7lOs9o?S^p;iJ3Wrl=8r^7NyH!55ihr<$r%yLi#bCRh!T@D{!u;KCCt@ z+F>{R+wX$T3Rl|{HRGP&(9Bz5>mW8(_6giGgADn3?Ee&-&~YE zvai)J5=z-wNkaDCtB|f8itADt+1cAATrNd+u61#Bt;@aUwQj%j^N0WLdFS5t&?FbqX|)gThPy2{{_L8jzT?~ejyD4ST^0A@ zn)*j(4g(&6fR$E;xr3=RHl)Lo_>-iDOvA>uG`VgnV{d&hI2B&rt{%{pOYm>=&rUjy zxc&Of`m!=p`v!l`)2|!BI~a?=&Z>!W;)HB2Ncc&7vc5C=r8(W5m~5J$A!F?!@icFP z1DW><9bFtm=Zp_&uH$)4L-Vrx)T<>B>6U9GsDDokfFHfiIV+`5T z7}pXpea$}yv_`$&{^8j+W{fMd-dWhsV)9VMJOb-d39AT-shsHQ9Vh^HnRHk|Du%0l zba+`%AS7f2%NnN$|0b#a!W&N0u7YJ9=y+HL+>6bgW{?XzpX93_nvd^n&Mmbb&nq&F zTKU-=EArQbX}vt`%C*^RJ&7P~8u>kJovA+9_}rR1`D_Rgd_8rUdeb#i%cGvx9@xAK9Oqpeet>P{ZBcsX8jC~_SNKU*{6j6hF=tnFJXA? z{#!M8pkD)i^0iHl3f*!a?ea{)DH3$n3zB|HIKP-Mdov)n`yzxLoWA!3urdw`(L+4M zzsltg^-3Y>r=wXD!_CPg@^Exlzg(3i zlKi71{X2=3BUR}i$nReE*nDvO)Pht@5)Ure+$vWw9hUymJcQS>o*u&Au4x}czL4)q zAj(hD4xB^Uwz19#rGQ%EDaYJ97+4>5pEgURsa7a+#ZKtX%vrW&O8C?Cw@)D;sjtt5 zBE8ZaxIr9PBuJ&E9k>k9D+*M5Mo3Q;J6F|=W10?^%)|R5T!wNVKVZ85rQ`Wwc-O8X zVeDkvlq9JcS>p)mdl_MPCqbR-9rUcnx0i1?OP$@&m$4?>Z!MnRBuTocjvTP!{zfP{ z$|mJ!TV@zSN@$GL;5VT1C+y2#d z$GRu3u-!G^>Uj^N=|~af*$%p8zB^l8|3K!5^PA!d%u4cF5N90@d*M1*s^UVN^Hjo< zLS*79Fs)+NQxAN_Kf|2b|mhxI*Mk%~6t z&Z7~^9Hm|RZa|1OSijxftUP`n4zYLnp7_miPkO`C%3JeUB?mpt+R68Be1T58-g$;~ zSdIBq{&xPt;Zjg!Kv9){b$;`VStIa!3V1_1i%E*4#)i7_G>`0Oi;J~`UP=!4*wtbU zL&Winy;?V4uhQ;q-GDqd{hW36g+qBU9GvJVCMK#Y0%s}rrNXnhH6tGEJAuTGj z#PoZCqD;v>fz)BqA0ZA;zo*r8*U==#Ej|DZp2%j8HR)bji055(i)B$WM(b`KeQ4ht zM;dN?Su%uR!WyOg0}bmRUI07c$HFFSeV^}T4%U97 z{Vv(pP^}|I#~mBuyk;VNMYAmE@2{(skdtedas3%epXi}zRxJhnc@FA$6(M@{kB_@H zW;;EnXRJM%Dt?uEPz_nT^Fi9$C44U~>;XHK`G1HN1AOj^i_Go5VF~z^?KP8Q9V$!E z)gbE6PUcwl`)g7YJXq$;mQ{XV3#bE2d)JP(`mn$q1H8aFP+APKsm0+UC|sZrx4d`W zEQUUax%fM22C71<4B+oPTC%_FlBTT}?6!hRIs^BN!t;ysC&+Y|Q#Fnh8wxJM+dD{z9NiME&k9D5#?4A1I2?TQ0xdC%R~wcIOdD zEM<1^KRv!w6_Esx3!N^#b@d#|>I1cR)cXvb6P>L&FIj3Jvo9ABU5z2Gz^+W+8Z zF|1z!Y|luJq5^HQ&GN8^6zyqu{p6xn1G)Ff!M-DB~cG&*|(FI&Ie8R;U148Y~8BNBG>lX!i{8KY;JH)=aE{cpF z&RvmTex6~|Nz=Q;W;(*f*^JWQ9lkBdpX>9I^|D=Ic4p9D7hKf#*%>Qk z8ri5YizZ57^-?;Vm(M=Ekt0v<4K4kMVlkV%`5d7^iWo^)c1Pd9p*@N=L*G(pAm+y1 zWfzQIWMKdZqsdsQY~Qqd&c%6Tdhro&X&P2TH|t)uT9e3zdaBTu%hFnLuG-O(uZvsw z;))P?`|hHrfP7kjNj)mKsDwI8E#{s1MfK=FRnNr8J~whlqW<8Ixa;FqWctspsK{hM z6;|+M`&AFEA9h?>H%#h=OT!&5iUSM@>df_I7Aopl*5M6J&B$KhEbr3d^(Ly8I{fi8 zE~^LtV81_eKYvA1PTn~*i0PS>)?`0tiHcjKNya<=MZ46HGY3?}h7m`*$Ejj(YN0lH z(ry95F<%HfYkz{x*VNRv%j{j=r+FtKsX!Y_c#$Y0r zYvKc+^{j;Ofkp>6u%R=N-OOkD3mQiWKBVI(Z)k3joro7u{x7y|+fqj%P&49IFB*r= zaFPqI4!G&ZKTKWe?-3paeDJE-i?OJeCghu1sZP2*lOiOg0#9d<@AB;^SX=l5gNLy~ z?_Y^iuO^Z0mj?*wGne39l-+f*`5#F?K z$0WsV9hGo8n(XP)T-VUrn(-IkKR&PL;jXy$>oR>;+ z8#!ZL&}Z^Cl9wE_vYWVgsg_(@Nd|H|J!%X;vf0jc3aln{o0n~*GyrD|zl=8|WPZejCYkImEUTwPXYQ9j$xW&dw+z3ka)-qtX)QD1zUWxS z&u@0pDU4T?(O1FOGfWL$6`K|nt+@mRgt@)( z&x(imKAJ(WQ*IM^?J&W&n2Ep1g7FXEbGn>B$P%p<_O0Nx$1}@I1j5;!^GlP(LN)`W z`sL)M#0EYq7V4_ColnHMdlRM*M&%)jMyyafPTA7I1bwvBGYU*oE?j>@2pVrly^T*5U=V4{!=ldvg1b5pw)VAFH$^5hVV0+`Psh_D|hl{1E z>hJpb=a}$Uc6jyMW0sDJiCXWa!>^n@3g;p-tRk;rW?!{smo1xMl#iffMaR{U+ei*q zbL+ov!(@`e`LPA@NUp*-+p$K8D;9=Rk{wRW$4WUqwwOhZxlQNZke_0d0mSnu{iYAM zT+;gt)ZAE#zd6ZrzG)5lf-6=j{#gUb)lL5;n?ccJ%zWRJ@k1?aRwgpb5^Y=RGPE-> zzGYu|SVO*1)2Eeq9T*NK{sTE_Vd{^}FKQ1Yf`9$63>F*+L~xOsKWK|fH^hAl?)}lk zP50E($Zx=!mo|3m`o4XZpn%p(84Tx<`;=C_rpEboatyJ~z!TC~KY4EQ`6uG)RJE`} zyap@k)XzXnaS1dQ~Q3cKNTqJ&g#aMf@r~OTFz16en~GUlHQRT zxw$ep@4;B9IZIpYxhQ$Ra??)gev+>A5rXsLYlozn{`6HUrXSFygV6;SMk?(%i@HOqZ*Y zqRYy2g>W{KAnd=8{(*#s-q2i)g13jN(noW8U;d=V=MvsGXSotf`-1KcYh`OS3U0@p zX-5v)Nt!U7`w{tP5*(4OtqsH(*uko3EtZvs$**&+*Y0KtQ*crH-ktgR;2^8Uv2dGG z?Jeoj5=nrY_+rZ%PBE%k$ZF(hUXfK)z31ggEg`7{lL z@h5B&3(USHb_gYOC$KfsjPd@xpME}izZz{f6U-KpSO?;?QaMZT1@9?+yD}mlvZL%Ps~f^q^k27Qx5hpo$I@OHYZ&mE2#cOKoNH3h2(mTZ?K;qxR9#6!L z@G#2)!Bvh+P`uCo^Kmq`URC25%tG~2cGA&okzyE9ePILHHoohE$DGQx3YA=X<{%xc z3Unx|;tr41byQUqrxxaKp9UoyKBVk%zRFOVXY)We<%p@O%HC3cw~^Tn^QrHWRe7Bm zt-mVb7aI%(Da0&!%H^(C;zBy4WJj+xTR2cN3}<=-CNX@|^pq`RZ`TUWeG)OFSOoZV zJbahxGq!799!{@`u0jZ5Hept?3o?l2jZ-7vMe{~AkTB;1{vc40++QAS<~|!bQ(w=Y zCcJXP)NM4KTB+L|yZW{-?i%`crteRBAQqGmt>CwVXte5pBl^GKO;Kk0U==ag5!PoP z2$*5CduU#b_?fMO+5F&C83qic3}SHzmMPj*S4OHEI&jB2pNVf8479aZ_9Mo1S^o

=OugE0j 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 +> { + const [_auth, authError] = await getAuthContext(); + if (authError) return fail(authError); + + try { + const [res, error] = await financialPeriod.findAll(); + if (error) return fail(error); + return ok(res); + } catch (e) { + return fail(ActionError.from(e)); + } +} + +/** + * Creates a new financial period. + * + * @param data - The data for the new financial period. + * @returns Result with the created financial period. + */ +export async function createFinancialPeriodAction( + data: CreateFinancialPeriod, +): Promise> { + const [auth, authError] = await getAuthContext(); + if (authError) return fail(authError); + + logger.info("createFinancialPeriodAction", { + month: data.month, + year: data.year, + userId: auth.userId, + }); + + try { + const [res, error] = await financialPeriod.create(data, auth); + if (error) { + logger.error("createFinancialPeriodAction: failed", { + month: data.month, + year: data.year, + code: error.code, + message: error.message, + }); + return fail(error); + } + + revalidatePath("/finance", "page"); + return ok(res); + } catch (e) { + return fail(ActionError.from(e)); + } +} + +/** + * Locks a financial period. + * + * @param id - The ID of the financial period to lock. + * @returns Result with void. + */ +export async function lockFinancialPeriodAction( + id: string, +): Promise> { + const [auth, authError] = await getAuthContext(); + if (authError) return fail(authError); + + logger.info("lockFinancialPeriodAction", { + periodId: id, + userId: auth.userId, + }); + + try { + const [res, error] = await financialPeriod.lock(id, auth); + if (error) { + logger.error("lockFinancialPeriodAction: failed", { + periodId: id, + code: error.code, + message: error.message, + }); + return fail(error); + } + + revalidatePath("/finance", "page"); + return ok(res); + } catch (e) { + return fail(ActionError.from(e)); + } +} + +/** + * Unlocks a financial period. + * + * @param id - The ID of the financial period to unlock. + * @returns Result with void. + */ +export async function unlockFinancialPeriodAction( + id: string, +): Promise> { + const [auth, authError] = await getAuthContext(); + if (authError) return fail(authError); + + logger.info("unlockFinancialPeriodAction", { + periodId: id, + userId: auth.userId, + }); + + try { + const [res, error] = await financialPeriod.unlock(id, auth); + if (error) { + logger.error("unlockFinancialPeriodAction: failed", { + periodId: id, + code: error.code, + message: error.message, + }); + return fail(error); + } + + revalidatePath("/finance", "page"); + return ok(res); + } catch (e) { + return fail(ActionError.from(e)); + } +} + +/** + * Deletes a financial period. + * + * @param id - The ID of the financial period to delete. + * @returns Result with void. + */ +export async function deleteFinancialPeriodAction( + id: string, +): Promise> { + const [auth, authError] = await getAuthContext(); + if (authError) return fail(authError); + + logger.info("deleteFinancialPeriodAction", { + periodId: id, + userId: auth.userId, + }); + + try { + const [, error] = await financialPeriod.delete(id, auth); + if (error) { + logger.error("deleteFinancialPeriodAction: failed", { + periodId: id, + code: error.code, + message: error.message, + }); + return fail(error); + } + + revalidatePath("/finance", "page"); + return ok(undefined); + } catch (e) { + return fail(ActionError.from(e)); + } +} diff --git a/apps/dash/src/pages/finance/ui/CreateFinancialPeriodDialog.tsx b/apps/dash/src/pages/finance/ui/CreateFinancialPeriodDialog.tsx new file mode 100644 index 00000000..56878d09 --- /dev/null +++ b/apps/dash/src/pages/finance/ui/CreateFinancialPeriodDialog.tsx @@ -0,0 +1,159 @@ +"use client"; + +import { UserRole } from "@domus/core"; +import { Plus } from "lucide-react"; +import { useTranslations } from "next-intl"; +import { useState } from "react"; +import { toast } from "sonner"; +import { useAuthContext } from "@/shared/auth/context"; +import { Button } from "@/shared/ui/shadcn/button"; +import { + Dialog, + DialogContent, + DialogDescription, + DialogFooter, + DialogHeader, + DialogTitle, + DialogTrigger, +} from "@/shared/ui/shadcn/dialog"; +import { Label } from "@/shared/ui/shadcn/label"; +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from "@/shared/ui/shadcn/select"; +import { createFinancialPeriodAction } from "../actions/financial-period"; + +const MONTHS = [ + "Januari", + "Februari", + "Maret", + "April", + "Mei", + "Juni", + "Juli", + "Agustus", + "September", + "Oktober", + "November", + "Desember", +]; + +/** + * Dialog component for creating a new financial period. + * Automatically suggests the current month and year. + * Restricted to the Treasurer role. + */ +export function CreateFinancialPeriodDialog() { + const t = useTranslations("FinancialPeriodForm"); + const commonT = useTranslations("FinancePage"); + const { roles } = useAuthContext(); + const [open, setOpen] = useState(false); + const [loading, setLoading] = useState(false); + + const now = new Date(); + const [month, setMonth] = useState((now.getMonth() + 1).toString()); + const [year, setYear] = useState(now.getFullYear().toString()); + + // Only Treasurer can create periods + const isTreasurer = roles.includes(UserRole.Treasurer); + + if (!isTreasurer) return null; + + const handleSubmit = async () => { + setLoading(true); + const [, error] = await createFinancialPeriodAction({ + month: Number.parseInt(month, 10), + year: Number.parseInt(year, 10), + }); + + setLoading(false); + if (error) { + toast.error(commonT("createError")); + return; + } + + toast.success(commonT("createSuccess")); + setOpen(false); + }; + + const years = Array.from({ length: 5 }, (_, i) => + (now.getFullYear() - 2 + i).toString(), + ); + + return ( +

+ + + {commonT("addPeriod")} + + } + /> + + + {t("title")} + {t("description")} + +
+
+ +
+ +
+
+
+ +
+ +
+
+
+ + + + +
+
+ ); +} diff --git a/apps/dash/src/pages/finance/ui/FinancePage.tsx b/apps/dash/src/pages/finance/ui/FinancePage.tsx index d767c705..48d36e99 100644 --- a/apps/dash/src/pages/finance/ui/FinancePage.tsx +++ b/apps/dash/src/pages/finance/ui/FinancePage.tsx @@ -1,9 +1,14 @@ +"use client"; + +import { Wallet } from "lucide-react"; import { useTranslations } from "next-intl"; -import { UnderConstruction } from "@/shared/ui/components/UnderConstruction"; +import { PremiumHero } from "@/shared/ui/components/PremiumHero"; +import { CreateFinancialPeriodDialog } from "./CreateFinancialPeriodDialog"; +import { FinancialPeriodList } from "./FinancialPeriodList"; /** * Finance Page component. - * Displays an under construction notice for the finance section. + * Displays the financial period management dashboard. * * @returns The FinancePage component. */ @@ -11,6 +16,26 @@ export function FinancePage() { const t = useTranslations("FinancePage"); return ( - +
+ } + orgName="Finance Department" + actions={} + /> + +
+
+
+

+ Daftar Periode Keuangan +

+
+ +
+
+
); } diff --git a/apps/dash/src/pages/finance/ui/FinancialPeriodList.tsx b/apps/dash/src/pages/finance/ui/FinancialPeriodList.tsx new file mode 100644 index 00000000..b917eec1 --- /dev/null +++ b/apps/dash/src/pages/finance/ui/FinancialPeriodList.tsx @@ -0,0 +1,259 @@ +"use client"; + +import type { FinancialPeriod } from "@domus/core"; +import { PeriodStatus, UserRole } from "@domus/core"; +import { Lock, ShieldAlert, Trash2, Unlock } from "lucide-react"; +import { useTranslations } from "next-intl"; +import { useCallback, useEffect, useState } from "react"; +import { toast } from "sonner"; +import { useAuthContext } from "@/shared/auth/context"; +import { + AlertDialog, + AlertDialogAction, + AlertDialogCancel, + AlertDialogContent, + AlertDialogDescription, + AlertDialogFooter, + AlertDialogHeader, + AlertDialogTitle, +} from "@/shared/ui/shadcn/alert-dialog"; +import { Badge } from "@/shared/ui/shadcn/badge"; +import { Button } from "@/shared/ui/shadcn/button"; +import { + Table, + TableBody, + TableCell, + TableHead, + TableHeader, + TableRow, +} from "@/shared/ui/shadcn/table"; +import { + deleteFinancialPeriodAction, + getFinancialPeriodsAction, + lockFinancialPeriodAction, + unlockFinancialPeriodAction, +} from "../actions/financial-period"; + +/** + * List component for displaying and managing financial periods. + * Shows a table of periods with status, lock/unlock and delete actions. + */ +export function FinancialPeriodList() { + const t = useTranslations("FinancePage"); + const enumsT = useTranslations("Enums.PeriodStatus"); + const { roles } = useAuthContext(); + const [periods, setPeriods] = useState([]); + const [loading, setLoading] = useState(true); + + // Dialog states + const [confirmOpen, setConfirmOpen] = useState(false); + const [confirmType, setConfirmType] = useState< + "lock" | "unlock" | "delete" | null + >(null); + const [selectedId, setSelectedId] = useState(null); + const [actionLoading, setActionLoading] = useState(false); + + const isTreasurer = roles.includes(UserRole.Treasurer); + + const fetchPeriods = useCallback(async () => { + setLoading(true); + const [res, error] = await getFinancialPeriodsAction(); + if (!error && res) { + setPeriods(res); + } else { + toast.error(t("errorMessage")); + } + setLoading(false); + }, [t]); + + useEffect(() => { + fetchPeriods(); + }, [fetchPeriods]); + + const handleAction = async () => { + if (!selectedId || !confirmType) return; + + setActionLoading(true); + let error: unknown; + + if (confirmType === "lock") { + [, error] = await lockFinancialPeriodAction(selectedId); + } else if (confirmType === "unlock") { + [, error] = await unlockFinancialPeriodAction(selectedId); + } else if (confirmType === "delete") { + [, error] = await deleteFinancialPeriodAction(selectedId); + } + + setActionLoading(false); + setConfirmOpen(false); + + if (error) { + toast.error(t(`${confirmType}Error`)); + return; + } + + toast.success(t(`${confirmType}Success`)); + fetchPeriods(); + }; + + const openConfirm = (id: string, type: "lock" | "unlock" | "delete") => { + setSelectedId(id); + setConfirmType(type); + setConfirmOpen(true); + }; + + if (loading) { + return ( +
+
+
+ ); + } + + if (periods.length === 0) { + return ( +
+ +

{t("emptyState")}

+
+ ); + } + + const selectedPeriod = periods.find((p) => p.id === selectedId); + const periodLabel = selectedPeriod + ? `${new Date(0, selectedPeriod.month - 1).toLocaleString("id-ID", { + month: "long", + })} ${selectedPeriod.year}` + : ""; + + return ( +
+ + + + {t("colPeriod")} + {t("colStatus")} + {t("colLockedBy")} + {t("colLockedAt")} + {isTreasurer && ( + {t("colActions")} + )} + + + + {periods.map((period) => ( + + + {new Date(0, period.month - 1).toLocaleString("id-ID", { + month: "long", + })}{" "} + {period.year} + + + + {enumsT(period.status)} + + + {period.lockedBy || "-"} + + {period.lockedAt + ? new Date(period.lockedAt).toLocaleDateString("id-ID") + : "-"} + + {isTreasurer && ( + +
+ {period.status === PeriodStatus.Open ? ( + + ) : ( + + )} + +
+
+ )} +
+ ))} +
+
+ + + + + + {confirmType === "delete" + ? t("confirmDeleteTitle") + : t( + `confirm${confirmType + ?.charAt(0) + .toUpperCase()}${confirmType?.slice(1)}Title`, + )} + + + {confirmType === "delete" + ? t("confirmDeleteDesc", { period: periodLabel }) + : t( + `confirm${confirmType + ?.charAt(0) + .toUpperCase()}${confirmType?.slice(1)}Desc`, + )} + + + + + {t("btnCancel")} + + { + e.preventDefault(); + handleAction(); + }} + disabled={actionLoading} + className={ + confirmType === "delete" + ? "bg-destructive text-destructive-foreground hover:bg-destructive/90" + : "" + } + > + {actionLoading + ? "..." + : confirmType === "delete" + ? t("btnDelete") + : t( + `btn${confirmType + ?.charAt(0) + .toUpperCase()}${confirmType?.slice(1)}`, + )} + + + + +
+ ); +} diff --git a/apps/dash/src/shared/i18n/messages/id.json b/apps/dash/src/shared/i18n/messages/id.json index 11b506bb..f726e3e1 100644 --- a/apps/dash/src/shared/i18n/messages/id.json +++ b/apps/dash/src/shared/i18n/messages/id.json @@ -485,8 +485,42 @@ "description": "Memudahkan Anda memberikan konfirmasi kehadiran untuk berbagai kegiatan paroki mendatang." }, "FinancePage": { - "title": "Laporan Keuangan Segera Hadir", - "description": "Kami sedang menyiapkan sistem transparansi keuangan paroki yang real-time dan akurat untuk Anda." + "title": "Manajemen Periode Keuangan", + "description": "Kelola periode bulanan untuk pencatatan transaksi paroki.", + "addPeriod": "Tambah Periode", + "colPeriod": "Periode", + "colStatus": "Status", + "colLockedBy": "Dikunci Oleh", + "colLockedAt": "Waktu Kunci", + "colActions": "Aksi", + "btnLock": "Kunci", + "btnUnlock": "Buka Kunci", + "btnDelete": "Hapus", + "emptyState": "Belum ada periode keuangan.", + "errorTitle": "Terjadi Kesalahan", + "errorMessage": "Gagal memuat daftar periode.", + "createSuccess": "Periode berhasil dibuat.", + "createError": "Gagal membuat periode.", + "lockSuccess": "Periode berhasil dikunci.", + "lockError": "Gagal mengunci periode.", + "unlockSuccess": "Periode berhasil dibuka kuncinya.", + "unlockError": "Gagal membuka kunci periode.", + "deleteSuccess": "Periode berhasil dihapus.", + "deleteError": "Gagal menghapus periode.", + "confirmDeleteTitle": "Hapus Periode?", + "confirmDeleteDesc": "Apakah Anda yakin ingin menghapus periode {period}? Data yang dihapus tidak bisa dikembalikan.", + "confirmLockTitle": "Kunci Periode?", + "confirmLockDesc": "Setelah dikunci, tidak ada transaksi baru yang bisa ditambahkan ke periode ini.", + "confirmUnlockTitle": "Buka Kunci Periode?", + "confirmUnlockDesc": "Membuka kunci memungkinkan penambahan atau perubahan transaksi di periode ini." + }, + "FinancialPeriodForm": { + "title": "Tambah Periode Keuangan", + "description": "Pilih bulan dan tahun untuk periode baru.", + "monthLabel": "Bulan", + "yearLabel": "Tahun", + "btnSave": "Simpan Periode", + "btnCancel": "Batal" }, "EventPage": { "title": "Kegiatan & Agenda", diff --git a/packages/core/src/service/financial-period.ts b/packages/core/src/service/financial-period.ts index fd6a8ed8..9b87f61b 100644 --- a/packages/core/src/service/financial-period.ts +++ b/packages/core/src/service/financial-period.ts @@ -88,12 +88,8 @@ export class FinancialPeriodService { ctx: AuthContext, ): Promise> { try { - // Permission check: Bendahara, superAdmin, or adminParoki - if ( - !ctx.roles.includes(UserRole.Treasurer) && - !ctx.roles.includes(UserRole.SuperAdmin) && - !ctx.roles.includes(UserRole.ParishAdmin) - ) { + // Permission check: Strictly Treasurer only + if (!ctx.roles.includes(UserRole.Treasurer)) { this.logger.info('Unauthorized financial period creation attempt', { userId: ctx.userId, }); @@ -139,10 +135,8 @@ export class FinancialPeriodService { return fail(new NotFoundError('Financial Period')); } - if ( - !ctx.roles.includes(UserRole.Treasurer) && - !ctx.roles.includes(UserRole.SuperAdmin) - ) { + // Permission check: Strictly Treasurer only + if (!ctx.roles.includes(UserRole.Treasurer)) { this.logger.info('Unauthorized financial period lock attempt', { id, userId: ctx.userId, @@ -187,10 +181,8 @@ export class FinancialPeriodService { return fail(new NotFoundError('Financial Period')); } - if ( - !ctx.roles.includes(UserRole.Treasurer) && - !ctx.roles.includes(UserRole.SuperAdmin) - ) { + // Permission check: Strictly Treasurer only + if (!ctx.roles.includes(UserRole.Treasurer)) { this.logger.info('Unauthorized financial period unlock attempt', { id, userId: ctx.userId, @@ -227,17 +219,15 @@ export class FinancialPeriodService { try { const existing = await this.repo.findById(id); if (!existing) { - this.logger.info('Financial period not found for deletion', { + this.logger.info('Financial period not found for delete', { id, userId: ctx.userId, }); return fail(new NotFoundError('Financial Period')); } - if ( - !ctx.roles.includes(UserRole.Treasurer) && - !ctx.roles.includes(UserRole.SuperAdmin) - ) { + // Permission check: Strictly Treasurer only + if (!ctx.roles.includes(UserRole.Treasurer)) { this.logger.info('Unauthorized financial period deletion attempt', { id, userId: ctx.userId, diff --git a/packages/db/src/schema/financial-periods.ts b/packages/db/src/schema/financial-periods.ts index e996d70b..e31f99af 100644 --- a/packages/db/src/schema/financial-periods.ts +++ b/packages/db/src/schema/financial-periods.ts @@ -1,5 +1,12 @@ import { PeriodStatus } from '@domus/core'; -import { integer, pgEnum, pgTable, timestamp, uuid } from 'drizzle-orm/pg-core'; +import { + integer, + pgEnum, + pgTable, + timestamp, + uniqueIndex, + uuid, +} from 'drizzle-orm/pg-core'; import { v7 as uuidv7 } from 'uuid'; @@ -10,23 +17,36 @@ export const periodStatusEnum = pgEnum( Object.values(PeriodStatus) as [string, ...string[]], ); -export const financialPeriods = pgTable('financial_periods', { - id: uuid('id') - .primaryKey() - .$defaultFn(() => uuidv7()), +export const financialPeriods = pgTable( + 'financial_periods', + { + id: uuid('id') + .primaryKey() + .$defaultFn(() => uuidv7()), - month: integer('month').notNull(), - year: integer('year').notNull(), - status: periodStatusEnum('status').notNull(), - lockedBy: uuid('locked_by').references(() => user.id, { - onDelete: 'set null', - }), + month: integer('month').notNull(), + year: integer('year').notNull(), + status: periodStatusEnum('status').notNull(), + lockedBy: uuid('locked_by').references(() => user.id, { + onDelete: 'set null', + }), - lockedAt: timestamp('locked_at'), - createdAt: timestamp('created_at').defaultNow().notNull(), - updatedAt: timestamp('updated_at') - .defaultNow() - .$onUpdate(() => new Date()) - .notNull(), - deletedAt: timestamp('deleted_at'), -}); + lockedAt: timestamp('locked_at'), + createdAt: timestamp('created_at').defaultNow().notNull(), + updatedAt: timestamp('updated_at') + .defaultNow() + .$onUpdate(() => new Date()) + .notNull(), + deletedAt: timestamp('deleted_at'), + }, + (table) => { + return [ + { + uniqueMonthYear: uniqueIndex('financial_periods_month_year_unique').on( + table.month, + table.year, + ), + }, + ]; + }, +); From 0673570880fd75b8b4af9131ff74a6eee625ff07 Mon Sep 17 00:00:00 2001 From: Anthonius Munthi Date: Sat, 18 Apr 2026 14:55:20 +0800 Subject: [PATCH 02/10] feat(finance): refactor category management to use DomusForm system - Refactor CategoryForm to use useDomusForm for architectural consistency - Stabilize E2E tests by adding specific toast IDs and improving POM - Update Indonesian translations for consistent labels and actions - Pass all quality checks (format, lint, typecheck, e2e) Issue: #112 --- .../app/(dash)/setting/categories/page.tsx | 1 + .../setting/transaction-category.spec.ts | 50 ++++ apps/dash/e2e/helper/auth.ts | 19 ++ .../e2e/pages/setting/CategorySettingsPage.ts | 81 ++++++ .../finance/actions/transaction-category.ts | 148 +++++++++++ .../src/pages/finance/ui/CategoryForm.tsx | 110 ++++++++ .../src/pages/finance/ui/CategoryList.tsx | 238 ++++++++++++++++++ .../pages/finance/ui/CategorySettingsPage.tsx | 83 ++++++ .../finance/ui/TransactionCreatePage.tsx | 77 ++++++ .../pages/setting/ui/components/UserList.tsx | 12 +- apps/dash/src/shared/core/index.ts | 1 + apps/dash/src/shared/core/service.ts | 5 + apps/dash/src/shared/i18n/messages/en.json | 39 +++ apps/dash/src/shared/i18n/messages/id.json | 46 +++- packages/core/src/contract/index.ts | 1 + .../core/src/contract/transaction-category.ts | 88 +++++++ .../core/src/entity/transaction-category.ts | 28 +++ packages/core/src/error/error.ts | 10 + packages/core/src/service/index.ts | 1 + .../src/service/transaction-category.spec.ts | 179 +++++++++++++ .../core/src/service/transaction-category.ts | 220 ++++++++++++++++ packages/db/src/repository/index.ts | 3 + .../repository/transaction-category.spec.ts | 125 +++++++++ .../db/src/repository/transaction-category.ts | 157 ++++++++++++ packages/db/src/repository/user.ts | 11 +- 25 files changed, 1721 insertions(+), 12 deletions(-) create mode 100644 apps/dash/app/(dash)/setting/categories/page.tsx create mode 100644 apps/dash/e2e/features/setting/transaction-category.spec.ts create mode 100644 apps/dash/e2e/pages/setting/CategorySettingsPage.ts create mode 100644 apps/dash/src/pages/finance/actions/transaction-category.ts create mode 100644 apps/dash/src/pages/finance/ui/CategoryForm.tsx create mode 100644 apps/dash/src/pages/finance/ui/CategoryList.tsx create mode 100644 apps/dash/src/pages/finance/ui/CategorySettingsPage.tsx create mode 100644 apps/dash/src/pages/finance/ui/TransactionCreatePage.tsx create mode 100644 packages/core/src/contract/transaction-category.ts create mode 100644 packages/core/src/service/transaction-category.spec.ts create mode 100644 packages/core/src/service/transaction-category.ts create mode 100644 packages/db/src/repository/transaction-category.spec.ts create mode 100644 packages/db/src/repository/transaction-category.ts diff --git a/apps/dash/app/(dash)/setting/categories/page.tsx b/apps/dash/app/(dash)/setting/categories/page.tsx new file mode 100644 index 00000000..9340facc --- /dev/null +++ b/apps/dash/app/(dash)/setting/categories/page.tsx @@ -0,0 +1 @@ +export { CategorySettingsPage as default } from "@/pages/finance/ui/CategorySettingsPage"; diff --git a/apps/dash/e2e/features/setting/transaction-category.spec.ts b/apps/dash/e2e/features/setting/transaction-category.spec.ts new file mode 100644 index 00000000..4af9d0b5 --- /dev/null +++ b/apps/dash/e2e/features/setting/transaction-category.spec.ts @@ -0,0 +1,50 @@ +import { test } from "@playwright/test"; +import { + iHaveLoggedInAsApprovedParishioner, + iHaveLoggedInAsTreasurer, +} from "../../helper/auth"; +import { CategorySettingsPage } from "../../pages/setting/CategorySettingsPage"; + +test.describe("Transaction Category Management", () => { + test("Treasurer can manage categories (CRUD)", async ({ page, context }) => { + await iHaveLoggedInAsTreasurer(context); + const categoryPage = new CategorySettingsPage(page); + + await categoryPage.goto(); + + // 1. Create + await categoryPage.addCategory({ + name: "Iuran Wajib", + type: "Pemasukan", + }); + await categoryPage.expectCategoryVisible("Iuran Wajib"); + + // 2. Create another one + await categoryPage.addCategory({ + name: "Listrik Gereja", + type: "Pengeluaran", + }); + await categoryPage.expectCategoryVisible("Listrik Gereja"); + + // 3. Delete + await categoryPage.deleteCategory("Listrik Gereja"); + await categoryPage.expectCategoryHidden("Listrik Gereja"); + }); + + test("Ordinary parishioner cannot access category settings", async ({ + page, + context, + }) => { + await iHaveLoggedInAsApprovedParishioner(context); + + // Attempt to navigate + await page.goto("/setting/categories"); + + // Should be redirected to dashboard or see unauthorized + // In Domus, usually redirects to / or /pending if not allowed + // But since it's a treasurer/admin role required, the proxy might handle it + // Let's check for base dashboard element or breadcrumb that indicates we are NOT in categories + // For now, checking if URL is NOT categories or contains redirected status + await page.waitForURL(/\/(?!(setting\/categories))/); + }); +}); diff --git a/apps/dash/e2e/helper/auth.ts b/apps/dash/e2e/helper/auth.ts index 829cdc57..367e9763 100644 --- a/apps/dash/e2e/helper/auth.ts +++ b/apps/dash/e2e/helper/auth.ts @@ -42,6 +42,25 @@ export async function iHaveLoggedInAsApprovedParishioner( return iHaveLoggedInAs(context, withDefaults); } +/** + * Orchestrates a complete login flow for a Treasurer. + */ +export async function iHaveLoggedInAsTreasurer( + context: BrowserContext, + payload?: Partial, +) { + const withDefaults: UserPayload = { + email: "treasurer@example.com", + name: "Parish Treasurer", + password: "testing123", + accountStatus: AccountStatus.Approved, + role: [UserRole.Treasurer], + ...payload, + }; + + return iHaveLoggedInAs(context, withDefaults); +} + /** * Orchestrates an E2E login flow using the UI. */ diff --git a/apps/dash/e2e/pages/setting/CategorySettingsPage.ts b/apps/dash/e2e/pages/setting/CategorySettingsPage.ts new file mode 100644 index 00000000..0569ae22 --- /dev/null +++ b/apps/dash/e2e/pages/setting/CategorySettingsPage.ts @@ -0,0 +1,81 @@ +import { expect, type Locator, type Page } from "@playwright/test"; + +/** + * Page Object Model for Categoriy Settings Page. + */ +export class CategorySettingsPage { + readonly page: Page; + readonly addButton: Locator; + readonly dialogTitle: Locator; + readonly nameInput: Locator; + readonly typeSelect: Locator; + readonly submitButton: Locator; + readonly deleteButton: Locator; + readonly confirmDeleteButton: Locator; + + constructor(page: Page) { + this.page = page; + this.addButton = page.getByRole("button", { + name: /Tambah Kategori|Add Category/i, + }); + this.dialogTitle = page.getByText(/Formulir Kategori|Category Form/i); + this.nameInput = page.getByLabel(/Nama Kategori|Category Name/i); + this.typeSelect = page.getByRole("combobox"); + this.submitButton = page.getByRole("button", { name: /Simpan|Save/i }); + this.deleteButton = page.getByRole("button", { name: /Hapus|Delete/i }); + this.confirmDeleteButton = page.getByRole("button", { + name: /Ya, Hapus|Yes, Delete/i, + }); + } + + /** + * Navigates to the category settings page. + */ + async goto() { + await this.page.goto("/setting/categories"); + await expect(this.page).toHaveURL(/\/setting\/categories/); + } + + /** + * Adds a new category. + */ + async addCategory(payload: { name: string; type: string }) { + await this.addButton.click(); + await expect(this.dialogTitle).toBeVisible(); + + await this.nameInput.fill(payload.name); + + // Base UI Select handling matches what's used in other tests + await this.typeSelect.click(); + await this.page + .getByRole("option", { name: new RegExp(payload.type, "i") }) + .click(); + + await this.submitButton.click(); + await expect(this.page.getByRole("dialog")).toBeHidden(); + } + + /** + * Deletes a category by name. + */ + async deleteCategory(name: string) { + const row = this.page.locator("tr", { hasText: name }); + await row.getByRole("button", { name: /Hapus|Delete/i }).click(); + await this.confirmDeleteButton.click(); + await expect(this.page.getByRole("alertdialog")).toBeHidden(); + } + + /** + * Checks if category exists in the list. + */ + async expectCategoryVisible(name: string) { + await expect(this.page.locator("tr", { hasText: name })).toBeVisible(); + } + + /** + * Checks if category does not exist in the list. + */ + async expectCategoryHidden(name: string) { + await expect(this.page.locator("tr", { hasText: name })).toBeHidden(); + } +} diff --git a/apps/dash/src/pages/finance/actions/transaction-category.ts b/apps/dash/src/pages/finance/actions/transaction-category.ts new file mode 100644 index 00000000..550de904 --- /dev/null +++ b/apps/dash/src/pages/finance/actions/transaction-category.ts @@ -0,0 +1,148 @@ +"use server"; + +import { + type CreateTransactionCategory, + fail, + ok, + type Result, + type TransactionCategory, + type UpdateTransactionCategory, +} from "@domus/core"; +import { revalidatePath } from "next/cache"; +import { getAuthContext } from "@/shared/auth/server"; +import { transactionCategory } from "@/shared/core"; +import { logger } from "@/shared/core/logger"; +import { ActionError } from "@/shared/error/ActionError"; + +/** + * Retrieves all transaction categories. + * + * @returns Result with the list of transaction categories. + */ +export async function getTransactionCategoriesAction(): Promise< + Result +> { + const [, authError] = await getAuthContext(); + if (authError) return fail(authError); + + try { + const [res, error] = await transactionCategory.getCategories(); + if (error) return fail(error); + return ok(res); + } catch (e) { + return fail(ActionError.from(e)); + } +} + +/** + * Creates a new transaction category. + * + * @param data - The data for the new transaction category. + * @returns Result with the created transaction category. + */ +export async function createTransactionCategoryAction( + data: CreateTransactionCategory, +): Promise> { + const [auth, authError] = await getAuthContext(); + if (authError) return fail(authError); + + logger.info("createTransactionCategoryAction", { + name: data.name, + type: data.type, + userId: auth.userId, + }); + + try { + const [res, error] = await transactionCategory.createCategory(auth, data); + if (error) { + logger.error("createTransactionCategoryAction: failed", { + name: data.name, + type: data.type, + code: error.code, + message: error.message, + }); + return fail(error); + } + + revalidatePath("/setting/categories", "page"); + return ok(res); + } catch (e) { + return fail(ActionError.from(e)); + } +} + +/** + * Updates an existing transaction category. + * + * @param id - The ID of the transaction category to update. + * @param data - The update data. + * @returns Result with the updated transaction category. + */ +export async function updateTransactionCategoryAction( + id: string, + data: UpdateTransactionCategory, +): Promise> { + const [auth, authError] = await getAuthContext(); + if (authError) return fail(authError); + + logger.info("updateTransactionCategoryAction", { + categoryId: id, + userId: auth.userId, + }); + + try { + const [res, error] = await transactionCategory.updateCategory( + auth, + id, + data, + ); + if (error) { + logger.error("updateTransactionCategoryAction: failed", { + categoryId: id, + code: error.code, + message: error.message, + }); + return fail(error); + } + + revalidatePath("/setting/categories", "page"); + return ok(res); + } catch (e) { + return fail(ActionError.from(e)); + } +} + +/** + * Deletes a transaction category. + * + * @param id - The ID of the transaction category to delete. + * @returns Result with void. + */ +export async function deleteTransactionCategoryAction( + id: string, +): Promise> { + const [auth, authError] = await getAuthContext(); + if (authError) return fail(authError); + + logger.info("deleteTransactionCategoryAction", { + categoryId: id, + userId: auth.userId, + }); + + try { + const [, error] = await transactionCategory.deleteCategory(auth, id); + if (error) { + logger.error("deleteTransactionCategoryAction: failed", { + categoryId: id, + code: error.code, + message: error.message, + }); + return fail(error); + } + + revalidatePath("/setting/categories", "page"); + return ok(undefined); + } catch (e) { + return fail(ActionError.from(e)); + } +} diff --git a/apps/dash/src/pages/finance/ui/CategoryForm.tsx b/apps/dash/src/pages/finance/ui/CategoryForm.tsx new file mode 100644 index 00000000..0b47768b --- /dev/null +++ b/apps/dash/src/pages/finance/ui/CategoryForm.tsx @@ -0,0 +1,110 @@ +"use client"; + +import type { + CreateTransactionCategory, + TransactionCategory, +} from "@domus/core"; +import { TransactionType } from "@domus/core"; +import { Check, Tag, X } from "lucide-react"; +import { useTranslations } from "next-intl"; +import { PremiumAction, PremiumFooter } from "@/shared/ui/components"; +import { useDomusForm } from "@/shared/ui/fields/context"; + +/** + * Prop types for CategoryForm component. + */ +interface CategoryFormProps { + /** Initial data for editing existing category */ + initialData?: TransactionCategory; + /** Function to handle form submission */ + onSubmit: (data: CreateTransactionCategory) => Promise; + /** Function to handle cancellation */ + onCancel: () => void; + /** Flag to indicate if the form is submitting */ + loading?: boolean; +} + +/** + * Form component for creating or updating transaction categories using Domus Form System. + */ +export function CategoryForm({ + initialData, + onSubmit, + onCancel, + loading, +}: CategoryFormProps) { + const t = useTranslations("CategoryForm"); + const enumsT = useTranslations("Enums.TransactionType"); + + const form = useDomusForm({ + defaultValues: { + name: initialData?.name ?? "", + type: initialData?.type ?? TransactionType.Income, + } as CreateTransactionCategory, + onSubmit: async ({ value }) => { + await onSubmit(value); + }, + }); + + return ( +
{ + e.preventDefault(); + e.stopPropagation(); + form.handleSubmit(); + }} + className="space-y-6" + > + + {(field) => ( + } + dataTestId="field-name" + /> + )} + + + + {(field) => ( + + )} + + + + } + onClick={onCancel} + disabled={loading} + type="button" + > + {t("btnCancel")} + + + ⌛ + ) : ( + + ) + } + disabled={!form.state.canSubmit || loading} + > + {loading ? "..." : t("btnSave")} + + +
+ ); +} diff --git a/apps/dash/src/pages/finance/ui/CategoryList.tsx b/apps/dash/src/pages/finance/ui/CategoryList.tsx new file mode 100644 index 00000000..7409276b --- /dev/null +++ b/apps/dash/src/pages/finance/ui/CategoryList.tsx @@ -0,0 +1,238 @@ +"use client"; + +import { type TransactionCategory, TransactionType } from "@domus/core"; +import { Edit, ShieldAlert, Trash2 } from "lucide-react"; +import { useTranslations } from "next-intl"; +import { useCallback, useEffect, useState } from "react"; +import { toast } from "sonner"; +import { + AlertDialog, + AlertDialogAction, + AlertDialogCancel, + AlertDialogContent, + AlertDialogDescription, + AlertDialogFooter, + AlertDialogHeader, + AlertDialogTitle, +} from "@/shared/ui/shadcn/alert-dialog"; +import { Badge } from "@/shared/ui/shadcn/badge"; +import { Button } from "@/shared/ui/shadcn/button"; +import { + Dialog, + DialogContent, + DialogHeader, + DialogTitle, +} from "@/shared/ui/shadcn/dialog"; +import { + Table, + TableBody, + TableCell, + TableHead, + TableHeader, + TableRow, +} from "@/shared/ui/shadcn/table"; +import { + deleteTransactionCategoryAction, + getTransactionCategoriesAction, + updateTransactionCategoryAction, +} from "../actions/transaction-category"; +import { CategoryForm } from "./CategoryForm"; + +/** + * List component for displaying and managing transaction categories. + */ +export function CategoryList() { + const t = useTranslations("CategoryPage"); + const formT = useTranslations("CategoryForm"); + const enumsT = useTranslations("Enums.TransactionType"); + const [categories, setCategories] = useState([]); + const [loading, setLoading] = useState(true); + + // Dialog states + const [deleteId, setDeleteId] = useState(null); + const [editCategory, setEditCategory] = useState( + null, + ); + const [actionLoading, setActionLoading] = useState(false); + + const fetchCategories = useCallback(async () => { + setLoading(true); + const [res, error] = await getTransactionCategoriesAction(); + if (!error && res) { + setCategories(res); + } else { + toast.error(t("errorMessage")); + } + setLoading(false); + }, [t]); + + useEffect(() => { + fetchCategories(); + }, [fetchCategories]); + + const handleDelete = async () => { + if (!deleteId) return; + + setActionLoading(true); + const [, error] = await deleteTransactionCategoryAction(deleteId); + setActionLoading(false); + setDeleteId(null); + + if (error) { + toast.error(t("deleteError")); + return; + } + + toast.success(t("deleteSuccess"), { + id: "delete-category-success", + }); + setDeleteId(null); + }; + + const handleUpdate = async (data: Partial) => { + if (!editCategory) return; + + setActionLoading(true); + const [, error] = await updateTransactionCategoryAction( + editCategory.id, + data, + ); + setActionLoading(false); + + if (error) { + toast.error(t("updateError")); + return; + } + + toast.success(t("updateSuccess"), { + id: "update-category-success", + }); + setEditCategory(null); + fetchCategories(); + }; + + if (loading) { + return ( +
+
+
+ ); + } + + if (categories.length === 0) { + return ( +
+ +

{t("emptyState")}

+
+ ); + } + + const selectedDeleteCategory = categories.find((c) => c.id === deleteId); + + return ( +
+ + + + {t("colName")} + {t("colType")} + {t("colActions")} + + + + {categories.map((category) => ( + + {category.name} + + + {enumsT(category.type)} + + + +
+ + +
+
+
+ ))} +
+
+ + {/* Edit Dialog */} + !open && setEditCategory(null)} + > + + + {formT("titleUpdate")} + + {editCategory && ( + setEditCategory(null)} + loading={actionLoading} + /> + )} + + + + {/* Delete Confirmation */} + !open && setDeleteId(null)} + > + + + {t("confirmDeleteTitle")} + + {t("confirmDeleteDesc", { + name: selectedDeleteCategory?.name ?? "", + })} + + + + + {formT("btnCancel")} + + { + e.preventDefault(); + handleDelete(); + }} + disabled={actionLoading} + className="bg-destructive text-destructive-foreground hover:bg-destructive/90" + > + {actionLoading ? "..." : t("confirmDeleteAction")} + + + + +
+ ); +} diff --git a/apps/dash/src/pages/finance/ui/CategorySettingsPage.tsx b/apps/dash/src/pages/finance/ui/CategorySettingsPage.tsx new file mode 100644 index 00000000..176c157a --- /dev/null +++ b/apps/dash/src/pages/finance/ui/CategorySettingsPage.tsx @@ -0,0 +1,83 @@ +"use client"; + +import type { CreateTransactionCategory } from "@domus/core"; +import { Plus } from "lucide-react"; +import { useTranslations } from "next-intl"; +import { useState } from "react"; +import { toast } from "sonner"; +import { Button } from "@/shared/ui/shadcn/button"; +import { + Dialog, + DialogContent, + DialogHeader, + DialogTitle, + DialogTrigger, +} from "@/shared/ui/shadcn/dialog"; +import { createTransactionCategoryAction } from "../actions/transaction-category"; +import { CategoryForm } from "./CategoryForm"; +import { CategoryList } from "./CategoryList"; + +/** + * Page component for managing transaction categories. + * Provides a layout with a title, description, and an "Add Category" button + * that opens a dialog for creating a new category. + */ +export function CategorySettingsPage() { + const t = useTranslations("CategoryPage"); + const formT = useTranslations("CategoryForm"); + const [open, setOpen] = useState(false); + const [loading, setLoading] = useState(false); + const [refreshKey, setRefreshKey] = useState(0); + + const handleCreate = async (data: CreateTransactionCategory) => { + setLoading(true); + const [, error] = await createTransactionCategoryAction(data); + setLoading(false); + + if (error) { + toast.error(t("createError")); + return; + } + + toast.success(t("createSuccess"), { + id: "create-category-success", + }); + setOpen(false); + // Force refresh CategoryList + setRefreshKey((prev) => prev + 1); + }; + + return ( +
+
+
+

{t("title")}

+

{t("description")}

+
+ + + + + {t("addCategory")} + + } + /> + + + {formT("titleCreate")} + + setOpen(false)} + loading={loading} + /> + + +
+ + +
+ ); +} diff --git a/apps/dash/src/pages/finance/ui/TransactionCreatePage.tsx b/apps/dash/src/pages/finance/ui/TransactionCreatePage.tsx new file mode 100644 index 00000000..e9b5ee98 --- /dev/null +++ b/apps/dash/src/pages/finance/ui/TransactionCreatePage.tsx @@ -0,0 +1,77 @@ +"use client"; + +import type { TransactionCategory } from "@domus/core"; +import { Wallet } from "lucide-react"; +import { useTranslations } from "next-intl"; +import { useEffect, useState } from "react"; +import { PremiumHero } from "@/shared/ui/components/PremiumHero"; +import { Label } from "@/shared/ui/shadcn/label"; +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from "@/shared/ui/shadcn/select"; +import { getTransactionCategoriesAction } from "../actions/transaction-category"; + +/** + * Transaction Create Page — Skeleton implementation to demonstrate category integration. + */ +export function TransactionCreatePage() { + const t = useTranslations("TransactionPage"); + const [categories, setCategories] = useState([]); + const [loading, setLoading] = useState(true); + + useEffect(() => { + async function loadCategories() { + const [res, error] = await getTransactionCategoriesAction(); + if (!error && res) { + setCategories(res); + } + setLoading(false); + } + loadCategories(); + }, []); + + return ( +
+ } + orgName="Finance Department" + /> + +
+
+
+ + +

{t("categoryHelp")}

+
+ +
+ {t("skeletonNotice")} +
+
+
+
+ ); +} diff --git a/apps/dash/src/pages/setting/ui/components/UserList.tsx b/apps/dash/src/pages/setting/ui/components/UserList.tsx index ca6235f4..2c2a8148 100644 --- a/apps/dash/src/pages/setting/ui/components/UserList.tsx +++ b/apps/dash/src/pages/setting/ui/components/UserList.tsx @@ -1,6 +1,6 @@ "use client"; -import type { Result, User } from "@domus/core"; +import type { Result, User, UserRole } from "@domus/core"; import { AlertCircle, ShieldCheck, @@ -84,7 +84,10 @@ export function UserList({ promise, canManage = false }: UserListProps) { role: string, ) => { const confirmed = window.confirm( - t("confirmAssignDesc", { name: userName, role: tEnums(role as any) }), + t("confirmAssignDesc", { + name: userName, + role: tEnums(role as UserRole), + }), ); if (!confirmed) return; @@ -102,7 +105,10 @@ export function UserList({ promise, canManage = false }: UserListProps) { toast.error(t("errorAssign"), { description: error.message }); } else { toast.success( - t("successAssign", { name: userName, role: tEnums(role as any) }), + t("successAssign", { + name: userName, + role: tEnums(role as UserRole), + }), ); } }); diff --git a/apps/dash/src/shared/core/index.ts b/apps/dash/src/shared/core/index.ts index 3444eced..ba297fa9 100644 --- a/apps/dash/src/shared/core/index.ts +++ b/apps/dash/src/shared/core/index.ts @@ -14,6 +14,7 @@ export const service = { parishioner: s.parishioner, rsvp: s.rsvp, transaction: s.transaction, + transactionCategory: s.transactionCategory, user: s.user, diocese: s.diocese, parish: s.parish, diff --git a/apps/dash/src/shared/core/service.ts b/apps/dash/src/shared/core/service.ts index f140d4f6..0b25560d 100644 --- a/apps/dash/src/shared/core/service.ts +++ b/apps/dash/src/shared/core/service.ts @@ -14,6 +14,7 @@ import { PlacementService, RsvpService, TermService, + TransactionCategoryService, TransactionService, UnitService, UserService, @@ -114,6 +115,10 @@ export const transaction = new TransactionService( privateStorage, logger, ); +export const transactionCategory = new TransactionCategoryService( + repo.transactionCategory, + logger, +); export const user = new UserService( repo.user, publicStorage, diff --git a/apps/dash/src/shared/i18n/messages/en.json b/apps/dash/src/shared/i18n/messages/en.json index 282a0e39..252e453e 100644 --- a/apps/dash/src/shared/i18n/messages/en.json +++ b/apps/dash/src/shared/i18n/messages/en.json @@ -662,5 +662,44 @@ "noPending": "All attendance requests reviewed", "noAttendances": "No attendance data yet", "emptyState": "No attendance data yet" + }, + "CategoryPage": { + "title": "Transaction Categories", + "description": "Manage income and expense categories for financial bookkeeping.", + "addCategory": "Add Category", + "colName": "Category Name", + "colType": "Type", + "colActions": "Actions", + "emptyState": "No transaction categories yet.", + "errorTitle": "Error Occurred", + "errorMessage": "Failed to load category list.", + "createSuccess": "Category successfully created.", + "createError": "Failed to create category.", + "updateSuccess": "Category successfully updated.", + "updateError": "Failed to update category.", + "deleteSuccess": "Category successfully deleted.", + "deleteError": "Failed to delete category.", + "confirmDeleteTitle": "Delete Category?", + "confirmDeleteDesc": "Are you sure you want to delete the category {name}? Deleted categories cannot be used for new transactions.", + "btnEdit": "Edit", + "btnDelete": "Delete" + }, + "CategoryForm": { + "titleCreate": "Add New Category", + "titleUpdate": "Edit Category", + "nameLabel": "Category Name", + "namePlaceholder": "Example: Collection 1, Electricity, etc.", + "typeLabel": "Transaction Type", + "btnSave": "Save", + "btnCancel": "Cancel" + }, + "TransactionPage": { + "title": "Record Transaction", + "description": "Log new expense or income", + "categoryLabel": "Transaction Category", + "categoryPlaceholder": "Select Category", + "categoryHelp": "Select the appropriate category for this transaction.", + "skeletonNotice": "The rest of the transaction form will be implemented in a separate issue.", + "loading": "Loading..." } } diff --git a/apps/dash/src/shared/i18n/messages/id.json b/apps/dash/src/shared/i18n/messages/id.json index f726e3e1..b5ea3243 100644 --- a/apps/dash/src/shared/i18n/messages/id.json +++ b/apps/dash/src/shared/i18n/messages/id.json @@ -798,9 +798,47 @@ "recordModalTitle": "Input Presensi Manual", "recordModalSubtitle": "Catat kehadiran umat secara langsung", "searchPlaceholder": "Cari nama atau email umat...", - "noResults": "Umat tidak ditemukan", - "btnHadir": "Hadir", - "recordInstruction": "Klik tombol 'Hadir' untuk mencatat kehadiran secara instan.", - "recordSuccess": "Kehadiran berhasil dicatat" + "btnRecord": "Catat Kehadiran", + "recordSuccess": "Presensi berhasil dicatat untuk {name}." + }, + "CategoryPage": { + "title": "Kategori Transaksi", + "description": "Kelola kategori pemasukan dan pengeluaran untuk pembukuan keuangan.", + "addCategory": "Tambah Kategori", + "colName": "Nama Kategori", + "colType": "Tipe", + "colActions": "Aksi", + "emptyState": "Belum ada kategori transaksi.", + "errorTitle": "Terjadi Kesalahan", + "errorMessage": "Gagal memuat daftar kategori.", + "createSuccess": "Kategori berhasil dibuat.", + "createError": "Gagal membuat kategori.", + "updateSuccess": "Kategori berhasil diperbarui.", + "updateError": "Gagal memperbarui kategori.", + "deleteSuccess": "Kategori berhasil dihapus.", + "deleteError": "Gagal menghapus kategori.", + "confirmDeleteTitle": "Hapus Kategori?", + "confirmDeleteDesc": "Apakah Anda yakin ingin menghapus kategori {name}? Kategori yang dihapus tidak dapat digunakan untuk transaksi baru.", + "confirmDeleteAction": "Ya, Hapus", + "btnEdit": "Edit", + "btnDelete": "Hapus" + }, + "CategoryForm": { + "titleCreate": "Formulir Kategori", + "titleUpdate": "Edit Kategori", + "nameLabel": "Nama Kategori", + "namePlaceholder": "Contoh: Kolekte 1, Listrik, dll.", + "typeLabel": "Tipe Kategori", + "btnSave": "Simpan", + "btnCancel": "Batal" + }, + "TransactionPage": { + "title": "Catat Transaksi", + "description": "Rekam pengeluaran atau pemasukan baru", + "categoryLabel": "Kategori Transaksi", + "categoryPlaceholder": "Pilih Kategori", + "categoryHelp": "Pilih kategori yang sesuai untuk transaksi ini.", + "skeletonNotice": "Form transaksi lainnya akan diimplementasikan di issue terpisah.", + "loading": "Memuat..." } } diff --git a/packages/core/src/contract/index.ts b/packages/core/src/contract/index.ts index e7fdc9d2..3106b164 100644 --- a/packages/core/src/contract/index.ts +++ b/packages/core/src/contract/index.ts @@ -15,6 +15,7 @@ export * from './placement'; export * from './rsvp'; export * from './term'; export * from './transaction'; +export * from './transaction-category'; export * from './unit'; export * from './user'; export * from './vicariate'; diff --git a/packages/core/src/contract/transaction-category.ts b/packages/core/src/contract/transaction-category.ts new file mode 100644 index 00000000..183ea5d6 --- /dev/null +++ b/packages/core/src/contract/transaction-category.ts @@ -0,0 +1,88 @@ +import type { AuthContext } from '../entity/auth-context'; +import type { + CreateTransactionCategory, + TransactionCategory, + UpdateTransactionCategory, +} from '../entity/transaction-category'; +import type { Result } from '../utils'; + +/** + * Repository contract for transaction category data access. + */ +export interface ITransactionCategoryRepository { + /** + * Finds a category by its ID. + */ + findById(id: string): Promise; + + /** + * Finds all categories that are not soft-deleted. + */ + findAll(): Promise; + + /** + * Finds a category by name and type to prevent duplicates. + */ + findByNameAndType( + name: string, + type: string, + ): Promise; + + /** + * Creates a new transaction category. + */ + create(data: CreateTransactionCategory): Promise; + + /** + * Updates an existing transaction category. + */ + update( + id: string, + data: UpdateTransactionCategory, + ): Promise; + + /** + * Soft deletes a transaction category. + */ + delete(id: string): Promise; +} + +/** + * Service contract for transaction category business logic. + */ +export interface ITransactionCategoryService { + /** + * Retrieves all transaction categories. + */ + getCategories(): Promise>; + + /** + * Retrieves a single category by ID. + */ + getCategory(id: string): Promise>; + + /** + * Creates a new transaction category. + * Requires Treasurer or SuperAdmin role. + */ + createCategory( + ctx: AuthContext, + data: CreateTransactionCategory, + ): Promise>; + + /** + * Updates an existing transaction category. + * Requires Treasurer or SuperAdmin role. + */ + updateCategory( + ctx: AuthContext, + id: string, + data: UpdateTransactionCategory, + ): Promise>; + + /** + * Soft deletes a transaction category. + * Requires Treasurer or SuperAdmin role. + */ + deleteCategory(ctx: AuthContext, id: string): Promise>; +} diff --git a/packages/core/src/entity/transaction-category.ts b/packages/core/src/entity/transaction-category.ts index b872f26e..a715ab72 100644 --- a/packages/core/src/entity/transaction-category.ts +++ b/packages/core/src/entity/transaction-category.ts @@ -17,3 +17,31 @@ export const TransactionCategoryEntity = z.object({ * Inferred type for a financial transaction category entity. */ export type TransactionCategory = z.infer; + +/** + * Zod schema for creating a new transaction category. + */ +export const CreateTransactionCategorySchema = TransactionCategoryEntity.pick({ + name: true, + type: true, +}); + +/** + * Inferred type for creating a new transaction category. + */ +export type CreateTransactionCategory = z.infer< + typeof CreateTransactionCategorySchema +>; + +/** + * Zod schema for updating an existing transaction category. + */ +export const UpdateTransactionCategorySchema = + CreateTransactionCategorySchema.partial(); + +/** + * Inferred type for updating an existing transaction category. + */ +export type UpdateTransactionCategory = z.infer< + typeof UpdateTransactionCategorySchema +>; diff --git a/packages/core/src/error/error.ts b/packages/core/src/error/error.ts index e9494425..9a0ba4f8 100644 --- a/packages/core/src/error/error.ts +++ b/packages/core/src/error/error.ts @@ -99,3 +99,13 @@ export class LocationOutsideRadiusError extends CoreError { ); } } +/** + * Error thrown when a requested resource already exists or conflicts. + */ +export class ConflictError extends CoreError { + public override readonly logLevel = 'info'; + + constructor(message: string) { + super('CONFLICT', 409, message); + } +} diff --git a/packages/core/src/service/index.ts b/packages/core/src/service/index.ts index a50d883a..50f076f7 100644 --- a/packages/core/src/service/index.ts +++ b/packages/core/src/service/index.ts @@ -14,6 +14,7 @@ export * from './placement'; export * from './rsvp'; export * from './term'; export * from './transaction'; +export * from './transaction-category'; export * from './unit'; export * from './user'; export * from './vicariate'; diff --git a/packages/core/src/service/transaction-category.spec.ts b/packages/core/src/service/transaction-category.spec.ts new file mode 100644 index 00000000..b5775884 --- /dev/null +++ b/packages/core/src/service/transaction-category.spec.ts @@ -0,0 +1,179 @@ +import { v7 } from 'uuid'; +import { beforeEach, describe, expect, it, vi } from 'vitest'; +import { mock } from 'vitest-mock-extended'; +import type { ILogger } from '../contract/logger'; +import type { ITransactionCategoryRepository } from '../contract/transaction-category'; +import type { AuthContext } from '../entity/auth-context'; +import { AccountStatus, TransactionType, UserRole } from '../entity/enums'; +import { + type TransactionCategory, + TransactionCategoryEntity, +} from '../entity/transaction-category'; +import { ConflictError, ForbiddenError, NotFoundError } from '../error'; +import { createTransactionCategoryService } from './transaction-category'; + +describe('TransactionCategoryService', () => { + const repo = mock(); + const logger = mock(); + const service = createTransactionCategoryService(repo, logger); + + beforeEach(() => { + vi.clearAllMocks(); + }); + + const mockCategory: TransactionCategory = TransactionCategoryEntity.parse({ + id: v7(), + name: 'Kolekte 1', + type: TransactionType.Income, + createdAt: new Date(), + updatedAt: new Date(), + deletedAt: null, + }); + + const treasurerCtx: AuthContext = { + userId: v7(), + roles: [UserRole.Treasurer], + accountStatus: AccountStatus.Approved, + }; + + const parishionerCtx: AuthContext = { + userId: v7(), + roles: [UserRole.Parishioner], + accountStatus: AccountStatus.Approved, + }; + + describe('getCategories', () => { + it('should return all categories', async () => { + repo.findAll.mockResolvedValue([mockCategory]); + const [result, error] = await service.getCategories(); + expect(error).toBeNull(); + expect(result).toEqual([mockCategory]); + }); + }); + + describe('getCategory', () => { + it('should return category when found', async () => { + repo.findById.mockResolvedValue(mockCategory); + const [result, error] = await service.getCategory(mockCategory.id); + expect(error).toBeNull(); + expect(result).toEqual(mockCategory); + }); + + it('should return NotFoundError when not found', async () => { + repo.findById.mockResolvedValue(null); + const [result, error] = await service.getCategory('999'); + expect(result).toBeNull(); + expect(error).toBeInstanceOf(NotFoundError); + }); + }); + + describe('createCategory', () => { + it('should allow treasurer to create', async () => { + repo.findByNameAndType.mockResolvedValue(null); + repo.create.mockResolvedValue(mockCategory); + + const [result, error] = await service.createCategory(treasurerCtx, { + name: 'Kolekte 1', + type: TransactionType.Income, + }); + + expect(error).toBeNull(); + expect(result).toEqual(mockCategory); + }); + + it('should forbid parishioner to create', async () => { + const [result, error] = await service.createCategory(parishionerCtx, { + name: 'Kolekte 1', + type: TransactionType.Income, + }); + + expect(result).toBeNull(); + expect(error).toBeInstanceOf(ForbiddenError); + }); + + it('should return ConflictError if name+type already exists', async () => { + repo.findByNameAndType.mockResolvedValue(mockCategory); + + const [result, error] = await service.createCategory(treasurerCtx, { + name: 'Kolekte 1', + type: TransactionType.Income, + }); + + expect(result).toBeNull(); + expect(error).toBeInstanceOf(ConflictError); + }); + }); + + describe('updateCategory', () => { + it('should allow treasurer to update', async () => { + repo.findById.mockResolvedValue(mockCategory); + repo.findByNameAndType.mockResolvedValue(null); + repo.update.mockResolvedValue({ + ...mockCategory, + name: 'Kolekte Update', + }); + + const [result, error] = await service.updateCategory( + treasurerCtx, + mockCategory.id, + { name: 'Kolekte Update' }, + ); + + expect(error).toBeNull(); + expect(result?.name).toBe('Kolekte Update'); + }); + + it('should return NotFoundError if category does not exist', async () => { + repo.findById.mockResolvedValue(null); + + const [result, error] = await service.updateCategory(treasurerCtx, v7(), { + name: 'Update', + }); + + expect(result).toBeNull(); + expect(error).toBeInstanceOf(NotFoundError); + }); + + it('should return ConflictError if update causes duplicate name+type', async () => { + const otherCategory = { ...mockCategory, id: v7(), name: 'Other' }; + repo.findById.mockResolvedValue(mockCategory); + repo.findByNameAndType.mockResolvedValue(otherCategory); + + const [result, error] = await service.updateCategory( + treasurerCtx, + mockCategory.id, + { name: 'Other' }, + ); + + expect(result).toBeNull(); + expect(error).toBeInstanceOf(ConflictError); + }); + }); + + describe('deleteCategory', () => { + it('should allow treasurer to delete', async () => { + repo.findById.mockResolvedValue(mockCategory); + repo.delete.mockResolvedValue(undefined); + + const [_result, error] = await service.deleteCategory( + treasurerCtx, + mockCategory.id, + ); + + expect(error).toBeNull(); + expect(repo.delete).toHaveBeenCalledWith(mockCategory.id); + }); + + it('should forbid parishioner to delete', async () => { + repo.findById.mockResolvedValue(mockCategory); + + const [result, error] = await service.deleteCategory( + parishionerCtx, + mockCategory.id, + ); + + expect(result).toBeNull(); + expect(error).toBeInstanceOf(ForbiddenError); + }); + }); +}); diff --git a/packages/core/src/service/transaction-category.ts b/packages/core/src/service/transaction-category.ts new file mode 100644 index 00000000..7f7798cd --- /dev/null +++ b/packages/core/src/service/transaction-category.ts @@ -0,0 +1,220 @@ +import type { ILogger } from '../contract/logger'; +import type { + ITransactionCategoryRepository, + ITransactionCategoryService, +} from '../contract/transaction-category'; +import type { AuthContext } from '../entity/auth-context'; +import { UserRole } from '../entity/enums'; +import type { + CreateTransactionCategory, + TransactionCategory, + UpdateTransactionCategory, +} from '../entity/transaction-category'; +import { + ConflictError, + ForbiddenError, + InternalError, + NotFoundError, +} from '../error'; +import { fail, ok, type Result } from '../utils/result'; + +/** + * Service for managing transaction categories. + */ +export class TransactionCategoryService implements ITransactionCategoryService { + constructor( + private readonly repo: ITransactionCategoryRepository, + private readonly logger: ILogger, + ) {} + + /** + * Retrieves all transaction categories. + */ + async getCategories(): Promise> { + try { + const data = await this.repo.findAll(); + return ok(data); + } catch (error) { + this.logger.error('Failed to get transaction categories', { error }); + return fail(new InternalError(error)); + } + } + + /** + * Retrieves a single category by ID. + */ + async getCategory(id: string): Promise> { + try { + const data = await this.repo.findById(id); + if (!data) { + return fail(new NotFoundError('TransactionCategory')); + } + return ok(data); + } catch (error) { + this.logger.error('Failed to get transaction category', { id, error }); + return fail(new InternalError(error)); + } + } + + /** + * Creates a new transaction category. + * Requires Treasurer or SuperAdmin role. + */ + async createCategory( + ctx: AuthContext, + data: CreateTransactionCategory, + ): Promise> { + try { + // Permission check: Treasurer or SuperAdmin + const isAuthorized = + ctx.roles.includes(UserRole.Treasurer) || + ctx.roles.includes(UserRole.SuperAdmin); + + if (!isAuthorized) { + this.logger.info('Unauthorized transaction category creation attempt', { + userId: ctx.userId, + }); + return fail(new ForbiddenError()); + } + + // Check for duplicate name + type + const existing = await this.repo.findByNameAndType(data.name, data.type); + if (existing) { + return fail( + new ConflictError('Kategori dengan nama dan tipe tersebut sudah ada'), + ); + } + + const category = await this.repo.create(data); + + this.logger.info('Transaction category created', { + id: category.id, + name: category.name, + type: category.type, + userId: ctx.userId, + }); + + return ok(category); + } catch (error) { + this.logger.error('Failed to create transaction category', { + userId: ctx.userId, + error, + }); + return fail(new InternalError(error)); + } + } + + /** + * Updates an existing transaction category. + * Requires Treasurer or SuperAdmin role. + */ + async updateCategory( + ctx: AuthContext, + id: string, + data: UpdateTransactionCategory, + ): Promise> { + try { + const isAuthorized = + ctx.roles.includes(UserRole.Treasurer) || + ctx.roles.includes(UserRole.SuperAdmin); + + if (!isAuthorized) { + this.logger.info('Unauthorized transaction category update attempt', { + id, + userId: ctx.userId, + }); + return fail(new ForbiddenError()); + } + + const existing = await this.repo.findById(id); + if (!existing) { + return fail(new NotFoundError('TransactionCategory')); + } + + // If name or type is being updated, check for duplicates + if ( + (data.name && data.name !== existing.name) || + (data.type && data.type !== existing.type) + ) { + const duplicate = await this.repo.findByNameAndType( + data.name ?? existing.name, + data.type ?? existing.type, + ); + if (duplicate && duplicate.id !== id) { + return fail( + new ConflictError( + 'Kategori dengan nama dan tipe tersebut sudah ada', + ), + ); + } + } + + const updated = await this.repo.update(id, data); + + this.logger.info('Transaction category updated', { + id, + userId: ctx.userId, + }); + + return ok(updated); + } catch (error) { + this.logger.error('Failed to update transaction category', { + id, + userId: ctx.userId, + error, + }); + return fail(new InternalError(error)); + } + } + + /** + * Soft deletes a transaction category. + * Requires Treasurer or SuperAdmin role. + */ + async deleteCategory(ctx: AuthContext, id: string): Promise> { + try { + const isAuthorized = + ctx.roles.includes(UserRole.Treasurer) || + ctx.roles.includes(UserRole.SuperAdmin); + + if (!isAuthorized) { + this.logger.info('Unauthorized transaction category deletion attempt', { + id, + userId: ctx.userId, + }); + return fail(new ForbiddenError()); + } + + const existing = await this.repo.findById(id); + if (!existing) { + return fail(new NotFoundError('TransactionCategory')); + } + + await this.repo.delete(id); + + this.logger.info('Transaction category deleted', { + id, + userId: ctx.userId, + }); + + return ok(undefined); + } catch (error) { + this.logger.error('Failed to delete transaction category', { + id, + userId: ctx.userId, + error, + }); + return fail(new InternalError(error)); + } + } +} + +/** + * Factory function to create a new instance of TransactionCategoryService. + */ +export function createTransactionCategoryService( + repo: ITransactionCategoryRepository, + logger: ILogger, +): TransactionCategoryService { + return new TransactionCategoryService(repo, logger); +} diff --git a/packages/db/src/repository/index.ts b/packages/db/src/repository/index.ts index 4690b625..330bf94f 100644 --- a/packages/db/src/repository/index.ts +++ b/packages/db/src/repository/index.ts @@ -16,6 +16,7 @@ import { PlacementRepository } from './placement'; import { RsvpRepository } from './rsvp'; import { TermRepository } from './term'; import { TransactionRepository } from './transaction'; +import { TransactionCategoryRepository } from './transaction-category'; import { UnitRepository } from './unit'; import { UserRepository } from './user'; import { VicariateRepository } from './vicariate'; @@ -36,6 +37,7 @@ export * from './placement'; export * from './rsvp'; export * from './term'; export * from './transaction'; +export * from './transaction-category'; export * from './unit'; export * from './user'; export * from './vicariate'; @@ -63,6 +65,7 @@ export function createRepositories(db: DrizzleClient, logger: ILogger) { rsvp: new RsvpRepository(db, logger), term: new TermRepository(db, logger), transaction: new TransactionRepository(db, logger), + transactionCategory: new TransactionCategoryRepository(db, logger), unit: new UnitRepository(db, logger), user: new UserRepository(db, logger), diocese: new DioceseRepository(db, logger), diff --git a/packages/db/src/repository/transaction-category.spec.ts b/packages/db/src/repository/transaction-category.spec.ts new file mode 100644 index 00000000..32ea7e2f --- /dev/null +++ b/packages/db/src/repository/transaction-category.spec.ts @@ -0,0 +1,125 @@ +import { + type ILogger, + TransactionCategoryEntity, + TransactionType, +} from '@domus/core'; +import { beforeEach, describe, expect, it, vi } from 'vitest'; +import { mockDeep, mockReset } from 'vitest-mock-extended'; +import type { TestDrizzleClient } from '../../test/helper'; +import { transactionCategories } from '../schema/transaction-categories'; +import { TransactionCategoryRepository } from './transaction-category'; + +describe('TransactionCategoryRepository', () => { + const dbMock = mockDeep(); + const loggerMock = mockDeep(); + const repo = new TransactionCategoryRepository(dbMock, loggerMock); + + const VALID_ID = '0194b150-0001-7000-8000-000000000001'; + + beforeEach(() => { + mockReset(dbMock); + mockReset(loggerMock); + }); + + const mockCategoryRow = { + id: VALID_ID, + name: 'Kolekte 1', + type: TransactionType.Income, + createdAt: new Date(), + updatedAt: new Date(), + deletedAt: null, + }; + + const mockCategoryEntity = TransactionCategoryEntity.parse(mockCategoryRow); + + describe('findById', () => { + it('should return category when found', async () => { + // @ts-expect-error + dbMock.select.mockReturnValue({ + from: vi.fn().mockReturnValue({ + where: vi.fn().mockResolvedValue([mockCategoryRow]), + }), + }); + + const result = await repo.findById(VALID_ID); + expect(result).toEqual(mockCategoryEntity); + }); + }); + + describe('findAll', () => { + it('should return all categories', async () => { + // @ts-expect-error + dbMock.select.mockReturnValue({ + from: vi.fn().mockReturnValue({ + where: vi.fn().mockResolvedValue([mockCategoryRow]), + }), + }); + + const result = await repo.findAll(); + expect(result).toEqual([mockCategoryEntity]); + }); + }); + + describe('findByNameAndType', () => { + it('should return category when found', async () => { + // @ts-expect-error + dbMock.select.mockReturnValue({ + from: vi.fn().mockReturnValue({ + where: vi.fn().mockResolvedValue([mockCategoryRow]), + }), + }); + + const result = await repo.findByNameAndType( + 'Kolekte 1', + TransactionType.Income, + ); + expect(result).toEqual(mockCategoryEntity); + }); + }); + + describe('create', () => { + it('should create and return category', async () => { + // @ts-expect-error + dbMock.insert.mockReturnValue({ + values: vi.fn().mockReturnValue({ + returning: vi.fn().mockResolvedValue([mockCategoryRow]), + }), + }); + + const result = await repo.create(mockCategoryEntity); + expect(result).toEqual(mockCategoryEntity); + }); + }); + + describe('update', () => { + it('should update and return category', async () => { + // @ts-expect-error + dbMock.update.mockReturnValue({ + set: vi.fn().mockReturnValue({ + where: vi.fn().mockReturnValue({ + returning: vi.fn().mockResolvedValue([mockCategoryRow]), + }), + }), + }); + + const result = await repo.update(VALID_ID, { + name: 'Updated Name', + }); + expect(result).toEqual(mockCategoryEntity); + }); + }); + + describe('delete', () => { + it('should soft delete category', async () => { + // @ts-expect-error + dbMock.update.mockReturnValue({ + set: vi.fn().mockReturnValue({ + where: vi.fn().mockResolvedValue([{ id: VALID_ID }]), + }), + }); + + await repo.delete(VALID_ID); + expect(dbMock.update).toHaveBeenCalledWith(transactionCategories); + }); + }); +}); diff --git a/packages/db/src/repository/transaction-category.ts b/packages/db/src/repository/transaction-category.ts new file mode 100644 index 00000000..349a781b --- /dev/null +++ b/packages/db/src/repository/transaction-category.ts @@ -0,0 +1,157 @@ +import { + type CreateTransactionCategory, + type ILogger, + type ITransactionCategoryRepository, + type TransactionCategory, + TransactionCategoryEntity, + type TransactionType, + type UpdateTransactionCategory, +} from '@domus/core'; +import { and, eq, type InferInsertModel, isNull } from 'drizzle-orm'; +import { v7 as uuidv7 } from 'uuid'; +import type { DrizzleClient } from '../index'; +import { transactionCategories } from '../schema/transaction-categories'; + +/** + * Repository implementation for transaction categories. + */ +export class TransactionCategoryRepository + implements ITransactionCategoryRepository +{ + constructor( + private readonly db: DrizzleClient, + private readonly logger: ILogger, + ) {} + + /** + * Finds a transaction category by its unique ID. + */ + async findById(id: string): Promise { + this.logger.info('TransactionCategoryRepository.findById', { + categoryId: id, + }); + const [row] = await this.db + .select() + .from(transactionCategories) + .where( + and( + eq(transactionCategories.id, id), + isNull(transactionCategories.deletedAt), + ), + ); + + return row ? TransactionCategoryEntity.parse(row) : null; + } + + /** + * Retrieves all transaction categories that are not soft-deleted. + */ + async findAll(): Promise { + this.logger.info('TransactionCategoryRepository.findAll'); + const rows = await this.db + .select() + .from(transactionCategories) + .where(isNull(transactionCategories.deletedAt)); + + return rows.map((row) => TransactionCategoryEntity.parse(row)); + } + + /** + * Finds a category by name and type to prevent duplicates. + */ + async findByNameAndType( + name: string, + type: string, + ): Promise { + this.logger.info('TransactionCategoryRepository.findByNameAndType', { + name, + type, + }); + const [row] = await this.db + .select() + .from(transactionCategories) + .where( + and( + eq(transactionCategories.name, name), + eq(transactionCategories.type, type as TransactionType), + isNull(transactionCategories.deletedAt), + ), + ); + + return row ? TransactionCategoryEntity.parse(row) : null; + } + + /** + * Creates a new transaction category record. + */ + async create(data: CreateTransactionCategory): Promise { + this.logger.info('TransactionCategoryRepository.create', { + name: data.name, + type: data.type, + }); + const id = uuidv7(); + const values = { + id, + name: data.name, + type: data.type as TransactionType, + createdAt: new Date(), + updatedAt: new Date(), + } satisfies InferInsertModel; + + const [row] = await this.db + .insert(transactionCategories) + .values(values) + .returning(); + + if (!row) { + throw new Error('Failed to create transaction category'); + } + + return TransactionCategoryEntity.parse(row); + } + + /** + * Updates a transaction category record. + */ + async update( + id: string, + data: UpdateTransactionCategory, + ): Promise { + this.logger.info('TransactionCategoryRepository.update', { + categoryId: id, + }); + const [row] = await this.db + .update(transactionCategories) + .set({ + ...data, + type: data.type as TransactionType, + updatedAt: new Date(), + }) + .where( + and( + eq(transactionCategories.id, id), + isNull(transactionCategories.deletedAt), + ), + ) + .returning(); + + if (!row) { + throw new Error(`Transaction category with ID ${id} not found`); + } + + return TransactionCategoryEntity.parse(row); + } + + /** + * Soft deletes a transaction category record. + */ + async delete(id: string): Promise { + this.logger.info('TransactionCategoryRepository.delete', { + categoryId: id, + }); + await this.db + .update(transactionCategories) + .set({ deletedAt: new Date() }) + .where(eq(transactionCategories.id, id)); + } +} diff --git a/packages/db/src/repository/user.ts b/packages/db/src/repository/user.ts index dafc8c39..2662b6f6 100644 --- a/packages/db/src/repository/user.ts +++ b/packages/db/src/repository/user.ts @@ -140,12 +140,13 @@ export class UserRepository implements IUserRepository { const conditions = [isNull(user.deletedAt)]; if (query?.search) { - conditions.push( - or( - ilike(user.name, `%${query.search}%`), - ilike(user.email, `%${query.search}%`), - )!, + const searchCondition = or( + ilike(user.name, `%${query.search}%`), + ilike(user.email, `%${query.search}%`), ); + if (searchCondition) { + conditions.push(searchCondition); + } } if (query?.status && query.status.length > 0) { From ce1da1bfb3bef5d71c3cfb2760d8d4f619e099d5 Mon Sep 17 00:00:00 2001 From: Anthonius Munthi Date: Sat, 18 Apr 2026 17:18:19 +0800 Subject: [PATCH 03/10] feat(finance): implement transaction creation and receipt upload - Add unique constraint to transaction_categories table to stabilize tests - Implement DateField, ReceiptUploadField and register in DomusForm context - Create TransactionCreatePage with reactive category selection via form.Subscribe - Build server actions for transaction creation and Google Drive receipt upload - Add 'Catat Transaksi' navigation to FinancialPeriodList UI - Implement robust E2E test suite in serial mode for transaction recording Closes #113 --- GEMINI.md | 1 + .../[periodId]/transaction/create/page.tsx | 11 + .../finance/transaction-recording.spec.ts | 77 + .../features/setting/user-management.spec.ts | 6 +- apps/dash/e2e/helper/finance.ts | 74 + apps/dash/e2e/pages/finance/FinancePage.ts | 114 + .../src/pages/finance/actions/transaction.ts | 126 + .../pages/finance/actions/upload-receipt.ts | 60 + apps/dash/src/pages/finance/index.ts | 1 + .../pages/finance/ui/FinancialPeriodList.tsx | 19 +- .../finance/ui/TransactionCreatePage.tsx | 240 +- .../pages/setting/ui/components/UserList.tsx | 7 +- apps/dash/src/shared/core/index.ts | 1 + apps/dash/src/shared/core/service.ts | 17 + apps/dash/src/shared/i18n/messages/en.json | 79 +- apps/dash/src/shared/i18n/messages/id.json | 49 +- apps/dash/src/shared/ui/fields/DateField.tsx | 99 + .../src/shared/ui/fields/RadioGroupField.tsx | 4 + .../shared/ui/fields/ReceiptUploadField.tsx | 257 ++ apps/dash/src/shared/ui/fields/context.ts | 4 + apps/dash/src/shared/ui/fields/index.ts | 2 + .../src/shared/utils/image-compression.ts | 8 +- packages/core/src/entity/enums.ts | 1 + packages/core/src/service/attachment.spec.ts | 1 + packages/db/migrations/0004_daffy_wong.sql | 2 + .../db/migrations/meta/0004_snapshot.json | 2785 +++++++++++++++++ packages/db/migrations/meta/_journal.json | 7 + .../db/src/schema/transaction-categories.ts | 44 +- 28 files changed, 4015 insertions(+), 81 deletions(-) create mode 100644 GEMINI.md create mode 100644 apps/dash/app/(dash)/finance/period/[periodId]/transaction/create/page.tsx create mode 100644 apps/dash/e2e/features/finance/transaction-recording.spec.ts create mode 100644 apps/dash/e2e/helper/finance.ts create mode 100644 apps/dash/e2e/pages/finance/FinancePage.ts create mode 100644 apps/dash/src/pages/finance/actions/transaction.ts create mode 100644 apps/dash/src/pages/finance/actions/upload-receipt.ts create mode 100644 apps/dash/src/shared/ui/fields/DateField.tsx create mode 100644 apps/dash/src/shared/ui/fields/ReceiptUploadField.tsx create mode 100644 packages/db/migrations/0004_daffy_wong.sql create mode 100644 packages/db/migrations/meta/0004_snapshot.json diff --git a/GEMINI.md b/GEMINI.md new file mode 100644 index 00000000..8dfc6802 --- /dev/null +++ b/GEMINI.md @@ -0,0 +1 @@ +READ GUIDE at AGENTS.md \ No newline at end of file diff --git a/apps/dash/app/(dash)/finance/period/[periodId]/transaction/create/page.tsx b/apps/dash/app/(dash)/finance/period/[periodId]/transaction/create/page.tsx new file mode 100644 index 00000000..cd307110 --- /dev/null +++ b/apps/dash/app/(dash)/finance/period/[periodId]/transaction/create/page.tsx @@ -0,0 +1,11 @@ +import { TransactionCreatePage } from "@/pages/finance"; + +export default async function Page({ + params, +}: { + params: Promise<{ periodId: string }>; +}) { + const { periodId } = await params; + + return ; +} diff --git a/apps/dash/e2e/features/finance/transaction-recording.spec.ts b/apps/dash/e2e/features/finance/transaction-recording.spec.ts new file mode 100644 index 00000000..429ed1e0 --- /dev/null +++ b/apps/dash/e2e/features/finance/transaction-recording.spec.ts @@ -0,0 +1,77 @@ +import path from "node:path"; +import { TransactionType } from "@domus/core"; +import { expect, test } from "@playwright/test"; +import { iHaveLoggedInAsTreasurer } from "../../helper/auth"; +import { + iHaveOpenFinancialPeriod, + iHaveTransactionCategory, +} from "../../helper/finance"; +import { FinancePage } from "../../pages/finance/FinancePage"; + +test.describe("Finance - Transaction Recording", () => { + // Run serially to avoid race conditions in shared DB test data setup + test.describe.configure({ mode: "serial" }); + + let financePage: FinancePage; + + test.beforeEach(async ({ context, page }) => { + // 1. Ensure test data exists + const now = new Date(); + await iHaveOpenFinancialPeriod(now.getMonth() + 1, now.getFullYear()); + await iHaveTransactionCategory("Kolekte", TransactionType.Income); + await iHaveTransactionCategory("Listrik", TransactionType.Expense); + + // 2. Login as Treasurer + await iHaveLoggedInAsTreasurer(context); + + financePage = new FinancePage(page); + }); + + test("should successfully record an income transaction with receipt", async ({ + page, + }) => { + await financePage.goto(); + + // 1. Click record button for the open period + await financePage.btnRecordTransaction.first().click(); + await expect(page).toHaveURL(/\/transaction\/create/); + + // 2. Fill the form + const receiptPath = path.resolve(__dirname, "../../assets/dummy-id.png"); + + await financePage.fillTransactionForm({ + type: TransactionType.Income, + date: new Date().toISOString().split("T")[0], + category: "Kolekte", + amount: "500000", + description: "Kolekte Misa Minggu Ke-3", + receiptPath, + }); + + // 3. Submit + await financePage.submitTransaction(); + + // 4. Verify success + await financePage.expectSuccessToast(); + await expect(page).toHaveURL("/finance"); + }); + + test("should show validation errors for missing mandatory fields", async ({ + page, + }) => { + await financePage.goto(); + await financePage.btnRecordTransaction.first().click(); + + // Touch fields to trigger onChange validation, then submit + await financePage.inputAmount.click(); + await financePage.inputAmount.fill("0"); + await financePage.inputDescription.click(); + await financePage.inputDescription.fill(""); + + // Submit empty/invalid form + await financePage.submitTransaction(); + + // Should stay on the transaction create page (not navigate back to /finance) + await expect(page).toHaveURL(/\/transaction\/create/); + }); +}); diff --git a/apps/dash/e2e/features/setting/user-management.spec.ts b/apps/dash/e2e/features/setting/user-management.spec.ts index 61877a65..461d6758 100644 --- a/apps/dash/e2e/features/setting/user-management.spec.ts +++ b/apps/dash/e2e/features/setting/user-management.spec.ts @@ -1,4 +1,4 @@ -import { AccountStatus, UserRole } from "@domus/core"; +import { AccountStatus, type User, UserRole } from "@domus/core"; import { expect, test } from "@playwright/test"; import { iHaveLoggedInAsSuperAdmin, iHaveUser } from "../../helper"; import { UserManagementPage } from "../../pages/setting/UserManagementPage"; @@ -6,8 +6,8 @@ import { UserManagementPage } from "../../pages/setting/UserManagementPage"; test.describe("User Management Feature", () => { let userPage: UserManagementPage; - let budi: any; - let ani: any; + let budi: User; + let ani: User; test.beforeEach(async ({ page }) => { // 1. Login as Super Admin to access the page diff --git a/apps/dash/e2e/helper/finance.ts b/apps/dash/e2e/helper/finance.ts new file mode 100644 index 00000000..c406bde1 --- /dev/null +++ b/apps/dash/e2e/helper/finance.ts @@ -0,0 +1,74 @@ +import { PeriodStatus, type TransactionType, UserRole } from "@domus/core"; +import type { FinancialPeriod } from "@domus/core/entity/financial-period"; +import * as core from "@/shared/core/service"; + +/** + * Ensures a financial period exists and is open for the given month/year. + */ +export async function iHaveOpenFinancialPeriod( + month: number, + year: number, +): Promise { + // Try find existing + const [periods] = await core.financialPeriod.findAll(); + const existing = periods?.find( + (p) => + p.month === month && p.year === year && p.status === PeriodStatus.Open, + ); + + if (existing) return existing; + + // Create new + const [created, error] = await core.financialPeriod.create( + { + month, + year, + status: PeriodStatus.Open, + }, + { + userId: "system-test", // Mock system user + roles: [UserRole.Treasurer], + accountStatus: "approved", + orgRoles: {}, + parishId: "mock-parish-id", + }, + ); + + if (error) throw error; + if (!created) throw new Error("Failed to create financial period"); + + return created; +} + +/** + * Ensures a transaction category exists. + */ +export async function iHaveTransactionCategory( + name: string, + type: TransactionType, +) { + const [categories] = await core.transactionCategory.getCategories(); + const existing = categories?.find((c) => c.name === name && c.type === type); + + if (existing) return existing; + + const [created, error] = await core.transactionCategory.createCategory( + { + userId: "system-test", + roles: [UserRole.SuperAdmin], + accountStatus: "approved", + orgRoles: {}, + parishId: "mock-parish-id", + }, + { + name, + type, + }, + ); + + if (error) { + console.error("FINANCE CATEGORY CREATE ERROR:", error); + throw error; + } + return created; +} diff --git a/apps/dash/e2e/pages/finance/FinancePage.ts b/apps/dash/e2e/pages/finance/FinancePage.ts new file mode 100644 index 00000000..df1fd5f9 --- /dev/null +++ b/apps/dash/e2e/pages/finance/FinancePage.ts @@ -0,0 +1,114 @@ +import { TransactionType } from "@domus/core"; +import type { Page } from "@playwright/test"; +import { expect } from "@playwright/test"; + +/** + * Page Object Model for Finance management. + */ +export class FinancePage { + constructor(private readonly page: Page) {} + + /** + * Navigation + */ + async goto() { + await this.page.goto("/finance"); + } + + /** + * locators for Period List + */ + get btnRecordTransaction() { + return this.page.getByTestId("btn-record-transaction"); + } + + /** + * Transaction Form Locators + */ + get radioTypeIncome() { + return this.page + .getByTestId("radio-type") + .getByRole("radio", { name: /pemasukan/i }); + } + + get radioTypeExpense() { + return this.page + .getByTestId("radio-type") + .getByRole("radio", { name: /pengeluaran/i }); + } + + get inputDate() { + return this.page.getByTestId("input-date"); + } + + get selectCategory() { + return this.page.getByTestId("select-category"); + } + + get inputAmount() { + return this.page.getByTestId("input-amount"); + } + + get inputDescription() { + return this.page.getByTestId("input-description"); + } + + get inputReceipt() { + return this.page.getByTestId("input-receipt").locator('input[type="file"]'); + } + + get btnSubmit() { + return this.page.getByRole("button", { name: /simpan/i }); + } + + /** + * Actions + */ + async fillTransactionForm(data: { + type: TransactionType; + date: string; + category: string; + amount: string; + description: string; + receiptPath?: string; + }) { + if (data.type === TransactionType.Income) { + await this.radioTypeIncome.click(); + } else { + await this.radioTypeExpense.click(); + } + + // Date field usually uses a custom DatePicker, + // but TextField for date might just be a string or handled by Select + // Assuming it's a fillable input based on TextField standard + await this.inputDate.fill(data.date); + + // Select category (use .first() to handle potential parallel-worker duplicates in test DB) + await this.selectCategory.click(); + await this.page + .getByRole("option", { name: data.category }) + .first() + .click(); + + await this.inputAmount.fill(data.amount); + await this.inputDescription.fill(data.description); + + if (data.receiptPath) { + await this.inputReceipt.setInputFiles(data.receiptPath); + // Wait for upload success indicator if any + await expect(this.page.getByText(/berhasil diunggah/i)).toBeVisible(); + } + } + + async submitTransaction() { + await this.btnSubmit.click(); + } + + async expectSuccessToast() { + await expect( + this.page.getByText(/transaksi berhasil dicatat/i), + ).toBeVisible({ + timeout: 10000, + }); + } +} diff --git a/apps/dash/src/pages/finance/actions/transaction.ts b/apps/dash/src/pages/finance/actions/transaction.ts new file mode 100644 index 00000000..ef3ff264 --- /dev/null +++ b/apps/dash/src/pages/finance/actions/transaction.ts @@ -0,0 +1,126 @@ +"use server"; + +import { + type CreateTransaction, + fail, + ok, + type Result, + type Transaction, + type UpdateTransaction, +} from "@domus/core"; +import { revalidatePath } from "next/cache"; +import { getAuthContext } from "@/shared/auth/server"; +import { transaction } from "@/shared/core"; +import { logger } from "@/shared/core/logger"; +import { ActionError } from "@/shared/error/ActionError"; + +/** + * Creates a new financial transaction. + * + * @param data - The transaction data to create. + * @returns Result with the created transaction. + */ +export async function createTransactionAction( + data: CreateTransaction, +): Promise> { + const [auth, authError] = await getAuthContext(); + if (authError) return fail(authError); + + logger.info("createTransactionAction", { + userId: auth.userId, + periodId: data.periodId, + type: data.type, + amount: data.amount, + }); + + try { + const [res, error] = await transaction.create(data, auth); + + if (error) { + logger.error("createTransactionAction: failed", { + code: error.code, + message: error.message, + }); + return fail(error); + } + + revalidatePath("/finance", "layout"); + return ok(res); + } catch (e) { + return fail(ActionError.from(e)); + } +} + +/** + * Updates an existing financial transaction. + * + * @param id - The transaction ID. + * @param data - The data to update. + * @returns Result with the updated transaction. + */ +export async function updateTransactionAction( + id: string, + data: UpdateTransaction, +): Promise> { + const [auth, authError] = await getAuthContext(); + if (authError) return fail(authError); + + logger.info("updateTransactionAction", { + transactionId: id, + userId: auth.userId, + }); + + try { + const [res, error] = await transaction.update(id, data, auth); + + if (error) { + logger.error("updateTransactionAction: failed", { + transactionId: id, + code: error.code, + message: error.message, + }); + return fail(error); + } + + revalidatePath("/finance", "layout"); + return ok(res); + } catch (e) { + return fail(ActionError.from(e)); + } +} + +/** + * Deletes a financial transaction. + * + * @param id - The transaction ID to delete. + * @returns Result with void. + */ +export async function deleteTransactionAction( + id: string, +): Promise> { + const [auth, authError] = await getAuthContext(); + if (authError) return fail(authError); + + logger.info("deleteTransactionAction", { + transactionId: id, + userId: auth.userId, + }); + + try { + const [, error] = await transaction.delete(id, auth); + + if (error) { + logger.error("deleteTransactionAction: failed", { + transactionId: id, + code: error.code, + message: error.message, + }); + return fail(error); + } + + revalidatePath("/finance", "layout"); + return ok(undefined); + } catch (e) { + return fail(ActionError.from(e)); + } +} diff --git a/apps/dash/src/pages/finance/actions/upload-receipt.ts b/apps/dash/src/pages/finance/actions/upload-receipt.ts new file mode 100644 index 00000000..c97a689e --- /dev/null +++ b/apps/dash/src/pages/finance/actions/upload-receipt.ts @@ -0,0 +1,60 @@ +"use server"; + +import type { Attachment } from "@domus/core"; +import { AttachmentReferenceType, fail, ok, type Result } from "@domus/core"; +import { getAuthContext } from "@/shared/auth/server"; +import { attachment } from "@/shared/core"; +import { logger } from "@/shared/core/logger"; +import { ActionError } from "@/shared/error/ActionError"; + +/** + * Uploads a transaction receipt to private storage. + * + * @param transactionId - The ID of the transaction this receipt belongs to. + * @param formData - The FormData containing the `file`. + * @returns `Promise>` + */ +export async function uploadReceiptAction( + transactionId: string, + formData: FormData, +): Promise> { + const [auth, authError] = await getAuthContext(); + if (authError) return fail(authError); + + logger.info("uploadReceiptAction: start", { + userId: auth.userId, + transactionId, + }); + + const file = formData.get("file") as File | null; + if (!file) { + return fail(new ActionError("File tidak ditemukan")); + } + + // Basic validation (can be extended) + if (file.size > 10 * 1024 * 1024) { + return fail(new ActionError("Ukuran file terlalu besar (maksimal 10MB)")); + } + + try { + const result = await attachment.upload( + auth, + file, + transactionId, + AttachmentReferenceType.Transaction, + ); + + if (result[1]) { + logger.error("uploadReceiptAction: failed", { error: result[1] }); + return fail(result[1]); + } + + logger.info("uploadReceiptAction: succeeded", { + attachmentId: result[0].id, + }); + return ok(result[0]); + } catch (error: unknown) { + logger.error("uploadReceiptAction: error", { error }); + return fail(ActionError.from(error)); + } +} diff --git a/apps/dash/src/pages/finance/index.ts b/apps/dash/src/pages/finance/index.ts index aaf7337d..c857246a 100644 --- a/apps/dash/src/pages/finance/index.ts +++ b/apps/dash/src/pages/finance/index.ts @@ -1 +1,2 @@ export { FinancePage } from "./ui/FinancePage"; +export { TransactionCreatePage } from "./ui/TransactionCreatePage"; diff --git a/apps/dash/src/pages/finance/ui/FinancialPeriodList.tsx b/apps/dash/src/pages/finance/ui/FinancialPeriodList.tsx index b917eec1..7832124a 100644 --- a/apps/dash/src/pages/finance/ui/FinancialPeriodList.tsx +++ b/apps/dash/src/pages/finance/ui/FinancialPeriodList.tsx @@ -2,11 +2,13 @@ import type { FinancialPeriod } from "@domus/core"; import { PeriodStatus, UserRole } from "@domus/core"; -import { Lock, ShieldAlert, Trash2, Unlock } from "lucide-react"; +import { Lock, PlusCircle, ShieldAlert, Trash2, Unlock } from "lucide-react"; +import Link from "next/link"; import { useTranslations } from "next-intl"; import { useCallback, useEffect, useState } from "react"; import { toast } from "sonner"; import { useAuthContext } from "@/shared/auth/context"; +import { cn } from "@/shared/ui/common/utils"; import { AlertDialog, AlertDialogAction, @@ -18,7 +20,7 @@ import { AlertDialogTitle, } from "@/shared/ui/shadcn/alert-dialog"; import { Badge } from "@/shared/ui/shadcn/badge"; -import { Button } from "@/shared/ui/shadcn/button"; +import { Button, buttonVariants } from "@/shared/ui/shadcn/button"; import { Table, TableBody, @@ -169,6 +171,19 @@ export function FinancialPeriodList() { {isTreasurer && (
+ {period.status === PeriodStatus.Open && ( + + + {t("btnRecord")} + + )} {period.status === PeriodStatus.Open ? ( +
-
+
); diff --git a/apps/dash/src/pages/setting/ui/components/UserList.tsx b/apps/dash/src/pages/setting/ui/components/UserList.tsx index 2c2a8148..dcfbd952 100644 --- a/apps/dash/src/pages/setting/ui/components/UserList.tsx +++ b/apps/dash/src/pages/setting/ui/components/UserList.tsx @@ -7,6 +7,7 @@ import { ShieldPlus, User as UserIcon, } from "lucide-react"; +import Image from "next/image"; import { useTranslations } from "next-intl"; import { use, useTransition } from "react"; import { toast } from "sonner"; @@ -157,9 +158,11 @@ export function UserList({ promise, canManage = false }: UserListProps) {
{user.image ? ( - {user.name} ) : ( diff --git a/apps/dash/src/shared/core/index.ts b/apps/dash/src/shared/core/index.ts index ba297fa9..d8d7a8fb 100644 --- a/apps/dash/src/shared/core/index.ts +++ b/apps/dash/src/shared/core/index.ts @@ -19,6 +19,7 @@ export const service = { diocese: s.diocese, parish: s.parish, vicariate: s.vicariate, + attachment: s.attachment, }; export default service; diff --git a/apps/dash/src/shared/core/service.ts b/apps/dash/src/shared/core/service.ts index 0b25560d..1237a3d5 100644 --- a/apps/dash/src/shared/core/service.ts +++ b/apps/dash/src/shared/core/service.ts @@ -1,6 +1,8 @@ export const runtime = "nodejs"; import { + AttachmentReferenceType, + AttachmentService, AttendanceService, DioceseService, EnrollmentService, @@ -128,3 +130,18 @@ export const user = new UserService( export const diocese = new DioceseService(repo.diocese, logger); export const vicariate = new VicariateService(repo.vicariate, logger); export const parish = new ParishService(repo.parish, logger); +export const attachment = new AttachmentService( + repo.attachment, + privateStorage, + logger, + { + folderIds: { + [AttachmentReferenceType.Event]: process.env.GDRIVE_FOLDER_EVENT ?? "", + [AttachmentReferenceType.Organization]: + process.env.GDRIVE_FOLDER_ORG_DOCS ?? "", + [AttachmentReferenceType.Term]: process.env.GDRIVE_FOLDER_SK_DOC ?? "", + [AttachmentReferenceType.Transaction]: + process.env.GDRIVE_FOLDER_RECEIPT ?? "", + }, + }, +); diff --git a/apps/dash/src/shared/i18n/messages/en.json b/apps/dash/src/shared/i18n/messages/en.json index 252e453e..45944198 100644 --- a/apps/dash/src/shared/i18n/messages/en.json +++ b/apps/dash/src/shared/i18n/messages/en.json @@ -452,8 +452,35 @@ "description": "Making it easy for you to confirm attendance for various upcoming parish activities." }, "FinancePage": { - "title": "Finance Report Coming Soon", - "description": "We are preparing a real-time and accurate parish finance transparency system for you." + "title": "Financial Period Management", + "description": "Manage monthly periods for parish transaction recording.", + "addPeriod": "Add Period", + "colPeriod": "Period", + "colStatus": "Status", + "colLockedBy": "Locked By", + "colLockedAt": "Locked At", + "colActions": "Actions", + "btnLock": "Lock", + "btnUnlock": "Unlock", + "btnDelete": "Delete", + "btnRecord": "Record Transaction", + "emptyState": "No financial periods yet.", + "errorTitle": "An Error Occurred", + "errorMessage": "Failed to load period list.", + "createSuccess": "Period successfully created.", + "createError": "Failed to create period.", + "lockSuccess": "Period successfully locked.", + "lockError": "Failed to lock period.", + "unlockSuccess": "Period successfully unlocked.", + "unlockError": "Failed to unlock period.", + "deleteSuccess": "Period successfully deleted.", + "deleteError": "Failed to delete period.", + "confirmDeleteTitle": "Delete Period?", + "confirmDeleteDesc": "Are you sure you want to delete period {period}? Deleted data cannot be recovered.", + "confirmLockTitle": "Lock Period?", + "confirmLockDesc": "Once locked, no new transactions can be added to this period.", + "confirmUnlockTitle": "Unlock Period?", + "confirmUnlockDesc": "Unlocking allows adding or changing transactions in this period." }, "EventPage": { "title": "Event Schedule in Progress", @@ -693,13 +720,45 @@ "btnSave": "Save", "btnCancel": "Cancel" }, - "TransactionPage": { - "title": "Record Transaction", - "description": "Log new expense or income", - "categoryLabel": "Transaction Category", - "categoryPlaceholder": "Select Category", - "categoryHelp": "Select the appropriate category for this transaction.", - "skeletonNotice": "The rest of the transaction form will be implemented in a separate issue.", - "loading": "Loading..." + "TransactionCreatePage": { + "title": "Record New Transaction", + "description": "Record income or expense details for this period.", + "successToast": "Transaction successfully recorded.", + "errorToast": "Failed to record transaction." + }, + "TransactionDetailPage": { + "title": "Transaction Details", + "description": "View or update financial transaction details.", + "successToast": "Transaction successfully updated.", + "errorToast": "Failed to update transaction.", + "deleteSuccess": "Transaction successfully deleted.", + "deleteError": "Failed to delete transaction.", + "confirmDeleteTitle": "Delete Transaction?", + "confirmDeleteDesc": "Are you sure you want to delete this {amount} transaction? This action cannot be undone." + }, + "TransactionForm": { + "sectionBasic": "Transaction Information", + "sectionEvidence": "Transaction Evidence", + "dateLabel": "Transaction Date", + "amountLabel": "Amount (IDR)", + "amountPlaceholder": "Example: 50000", + "categoryLabel": "Category", + "categoryPlaceholder": "Select category...", + "noteLabel": "Note / Description", + "notePlaceholder": "Describe the transaction details...", + "receiptLabel": "Receipt / Invoice Photo (Optional)", + "receiptDescription": "Upload transaction evidence for digital archive. Max 1.5MB.", + "btnSave": "Save Transaction", + "btnCancel": "Cancel" + }, + "ReceiptUploadField": { + "clickToUpload": "Click to upload receipt", + "formats": "JPG, PNG, WebP, or PDF (Max 1.5MB)", + "uploading": "Uploading...", + "uploaded": "Successfully Uploaded", + "errorInvalidType": "File format not supported!", + "errorUploadFailed": "Failed to upload to server.", + "errorUploadInternal": "Internal error occurred during upload.", + "successUpload": "Receipt attached successfully!" } } diff --git a/apps/dash/src/shared/i18n/messages/id.json b/apps/dash/src/shared/i18n/messages/id.json index b5ea3243..d626258b 100644 --- a/apps/dash/src/shared/i18n/messages/id.json +++ b/apps/dash/src/shared/i18n/messages/id.json @@ -496,6 +496,7 @@ "btnLock": "Kunci", "btnUnlock": "Buka Kunci", "btnDelete": "Hapus", + "btnRecord": "Catat Transaksi", "emptyState": "Belum ada periode keuangan.", "errorTitle": "Terjadi Kesalahan", "errorMessage": "Gagal memuat daftar periode.", @@ -832,13 +833,45 @@ "btnSave": "Simpan", "btnCancel": "Batal" }, - "TransactionPage": { - "title": "Catat Transaksi", - "description": "Rekam pengeluaran atau pemasukan baru", - "categoryLabel": "Kategori Transaksi", - "categoryPlaceholder": "Pilih Kategori", - "categoryHelp": "Pilih kategori yang sesuai untuk transaksi ini.", - "skeletonNotice": "Form transaksi lainnya akan diimplementasikan di issue terpisah.", - "loading": "Memuat..." + "TransactionCreatePage": { + "title": "Catat Transaksi Baru", + "description": "Rekam detail pemasukan atau pengeluaran untuk periode ini.", + "successToast": "Transaksi berhasil dicatat.", + "errorToast": "Gagal mencatat transaksi." + }, + "TransactionDetailPage": { + "title": "Detail Transaksi", + "description": "Lihat atau ubah detail transaksi keuangan.", + "successToast": "Transaksi berhasil diperbarui.", + "errorToast": "Gagal memperbarui transaksi.", + "deleteSuccess": "Transaksi berhasil dihapus.", + "deleteError": "Gagal menghapus transaksi.", + "confirmDeleteTitle": "Hapus Transaksi?", + "confirmDeleteDesc": "Yakin mau hapus transaksi senilai {amount} ini? Data gak bisa dikembalikan lho." + }, + "TransactionForm": { + "sectionBasic": "Informasi Transaksi", + "sectionEvidence": "Bukti Transaksi", + "dateLabel": "Tanggal Transaksi", + "amountLabel": "Nominal (Rp)", + "amountPlaceholder": "Contoh: 50000", + "categoryLabel": "Kategori", + "categoryPlaceholder": "Pilih kategori...", + "noteLabel": "Catatan / Keterangan", + "notePlaceholder": "Ceritain detail transaksinya bray...", + "receiptLabel": "Foto Struk / Nota (Opsional)", + "receiptDescription": "Upload foto bukti transaksi buat arsip digital. Maks 1.5MB.", + "btnSave": "Simpan Transaksi", + "btnCancel": "Batal" + }, + "ReceiptUploadField": { + "clickToUpload": "Klik untuk unggah struk", + "formats": "JPG, PNG, WebP, atau PDF (Maks 1.5MB)", + "uploading": "Sedang Mengunggah", + "uploaded": "Berhasil Diunggah", + "errorInvalidType": "Format file gak didukung bray!", + "errorUploadFailed": "Gagal upload ke server.", + "errorUploadInternal": "Terjadi kesalahan internal pas upload.", + "successUpload": "Struk berhasil nempel!" } } diff --git a/apps/dash/src/shared/ui/fields/DateField.tsx b/apps/dash/src/shared/ui/fields/DateField.tsx new file mode 100644 index 00000000..da911176 --- /dev/null +++ b/apps/dash/src/shared/ui/fields/DateField.tsx @@ -0,0 +1,99 @@ +"use client"; + +import type * as React from "react"; +import { cn } from "@/shared/ui/common/utils"; +import { Input } from "@/shared/ui/shadcn/input"; +import { BaseField } from "./BaseField"; +import { useFieldContext } from "./context"; + +/** + * Props for the pre-bound DateField component. + */ +export interface DateFieldProps + extends Omit< + React.ComponentProps<"input">, + "value" | "onChange" | "onBlur" | "id" | "type" + > { + /** + * Label for the field. + */ + label?: string; + /** + * Optional helper text. + */ + description?: string; + /** + * Optional icon to display inside the input. + */ + icon?: React.ReactNode; + /** + * Animation delay for entrance stagger. + */ + delay?: number; + /** + * Optional test ID for E2E testing. + */ + dataTestId?: string; +} + +/** + * A pre-bound premium date input field. + * Consumes field state from TanStack Form context. + * Uses standard HTML5 date input but with Domus premium styling. + */ +export function DateField({ + label, + description, + className, + delay, + icon, + dataTestId, + ...props +}: DateFieldProps) { + const field = useFieldContext(); + const activeErrors = field.state.meta.errors; + const hasError = activeErrors.length > 0; + const isValidated = + field.state.meta.isTouched && !hasError && !!field.state.value; + + return ( + +
+ {icon && ( +
+ {icon} +
+ )} + field.handleChange(e.target.value)} + onBlur={field.handleBlur} + className={cn( + "h-8 bg-[var(--glass-background)] backdrop-blur-md border-[var(--glass-border)] ring-offset-background", + "transition-all duration-500 ease-[0.23,1,0.32,1]", + "focus-visible:bg-background/40 focus-visible:ring-primary/10 focus-visible:border-primary/40 focus-visible:shadow-[0_0_20px_-5px_rgba(var(--primary),0.2)]", + icon && "pl-9", + hasError && + "border-destructive/30 focus-visible:ring-destructive/10 focus-visible:border-destructive/50 focus-visible:shadow-[0_0_20px_-5px_rgba(239,68,68,0.2)]", + isValidated && + "border-success/30 focus-visible:ring-success/10 focus-visible:border-success/50 focus-visible:shadow-[0_0_20px_-5px_rgba(var(--success),0.2)]", + className, + )} + {...props} + /> +
+
+ ); +} diff --git a/apps/dash/src/shared/ui/fields/RadioGroupField.tsx b/apps/dash/src/shared/ui/fields/RadioGroupField.tsx index a88bd7a8..e91457bb 100644 --- a/apps/dash/src/shared/ui/fields/RadioGroupField.tsx +++ b/apps/dash/src/shared/ui/fields/RadioGroupField.tsx @@ -36,6 +36,8 @@ export interface RadioGroupFieldProps className?: string; /** Animation delay for entrance stagger. */ delay?: number; + /** Test ID for E2E testing. */ + dataTestId?: string; } /** @@ -48,6 +50,7 @@ export function RadioGroupField({ options, className, delay, + dataTestId, ...props }: RadioGroupFieldProps) { const field = useFieldContext(); @@ -72,6 +75,7 @@ export function RadioGroupField({ onBlur={field.handleBlur} name={field.name} className="flex flex-col gap-2 pt-2" + data-testid={dataTestId} {...props} > {options.map((option) => ( diff --git a/apps/dash/src/shared/ui/fields/ReceiptUploadField.tsx b/apps/dash/src/shared/ui/fields/ReceiptUploadField.tsx new file mode 100644 index 00000000..3de9dcea --- /dev/null +++ b/apps/dash/src/shared/ui/fields/ReceiptUploadField.tsx @@ -0,0 +1,257 @@ +"use client"; + +import type { Attachment } from "@domus/core"; +import { Check, FileText, FileUp, X } from "lucide-react"; +import { AnimatePresence, motion } from "motion/react"; +import Image from "next/image"; +import { useTranslations } from "next-intl"; +import { useId, useRef, useState } from "react"; +import { toast } from "sonner"; +import { uploadReceiptAction } from "@/pages/finance/actions/upload-receipt"; +import { cn } from "@/shared/ui/common/utils"; +import { Button } from "@/shared/ui/shadcn/button"; +import { compressImage } from "@/shared/utils/image-compression"; +import { useFieldContext } from "./context"; + +export interface ReceiptUploadFieldProps { + /** + * Label for the field. + */ + label?: string; + /** + * Optional helper text. + */ + description?: string; + /** + * The ID of the transaction to link the receipt to. + */ + transactionId: string; + /** + * Animation delay. + */ + delay?: number; + /** + * Optional test ID. + */ + dataTestId?: string; +} + +/** + * A premium receipt upload field for the Domus form system. + * Handles client-side compression, progress simulation, and private storage upload. + */ +export function ReceiptUploadField({ + label, + description, + transactionId, + delay = 0, + dataTestId, +}: ReceiptUploadFieldProps) { + const id = useId(); + const field = useFieldContext(); + const [isUploading, setIsUploading] = useState(false); + const [progress, setProgress] = useState(0); + const [preview, setPreview] = useState(null); + const fileInputRef = useRef(null); + const t = useTranslations("ReceiptUploadField"); + + const simulateProgress = () => { + setProgress(0); + const interval = setInterval(() => { + setProgress((v) => { + if (v >= 95) { + clearInterval(interval); + return 95; + } + return v + (100 - v) * 0.1; + }); + }, 150); + return () => clearInterval(interval); + }; + + const handleFileChange = async (e: React.ChangeEvent) => { + const file = e.target.files?.[0]; + if (!file) return; + + // Validate type + const allowedTypes = [ + "image/jpeg", + "image/png", + "image/webp", + "application/pdf", + ]; + if (!allowedTypes.includes(file.type)) { + toast.error(t("errorInvalidType")); + return; + } + + setIsUploading(true); + const stopSimulation = simulateProgress(); + + try { + let fileToUpload = file; + if (file.type.startsWith("image/")) { + fileToUpload = await compressImage(file, { preset: "receipt" }); + } + + const formData = new FormData(); + formData.append("file", fileToUpload); + + const [data, error] = await uploadReceiptAction(transactionId, formData); + + if (error) { + toast.error(error.message || t("errorUploadFailed")); + return; + } + + if (data) { + setPreview(data); + field.handleChange(data.id); + toast.success(t("successUpload")); + } + } catch (err) { + console.error("[ReceiptUploadField] Upload error:", err); + toast.error(t("errorUploadInternal")); + } finally { + stopSimulation(); + setProgress(100); + setTimeout(() => { + setIsUploading(false); + setProgress(0); + }, 400); + } + }; + + const removeFile = () => { + setPreview(null); + field.handleChange(null); + if (fileInputRef.current) fileInputRef.current.value = ""; + }; + + return ( +
+ {label && ( + + )} + +
+ + {!preview && !isUploading && ( + fileInputRef.current?.click()} + > +
+ +
+

+ {t("clickToUpload")} +

+

+ {t("formats")} +

+
+ )} + + {isUploading && ( + +
+ +
+

+ {t("uploading")} {Math.round(progress)}% +

+
+ )} + + {preview && ( + +
+ {preview.mimeType?.startsWith("image/") ? ( + Receipt + ) : ( +
+ + + PDF + +
+ )} +
+
+

+ {preview.name} +

+
+
+ + {t("uploaded")} +
+
+
+ +
+ )} +
+ + +
+ + {description && ( +

+ {description} +

+ )} +
+ ); +} diff --git a/apps/dash/src/shared/ui/fields/context.ts b/apps/dash/src/shared/ui/fields/context.ts index 534d725a..efedff6c 100644 --- a/apps/dash/src/shared/ui/fields/context.ts +++ b/apps/dash/src/shared/ui/fields/context.ts @@ -1,6 +1,8 @@ import { createFormHook, createFormHookContexts } from "@tanstack/react-form"; import { CheckboxField } from "./CheckboxField"; +import { DateField } from "./DateField"; import { RadioGroupField } from "./RadioGroupField"; +import { ReceiptUploadField } from "./ReceiptUploadField"; import { SelectField } from "./SelectField"; import { TextAreaField } from "./TextAreaField"; import { TextField } from "./TextField"; @@ -37,6 +39,8 @@ export const { useAppForm: useDomusForm, withForm } = createFormHook({ TextAreaField, CheckboxField, RadioGroupField, + DateField, + ReceiptUploadField, }, formComponents: {}, }); diff --git a/apps/dash/src/shared/ui/fields/index.ts b/apps/dash/src/shared/ui/fields/index.ts index 5c38eeb8..fa2a8363 100644 --- a/apps/dash/src/shared/ui/fields/index.ts +++ b/apps/dash/src/shared/ui/fields/index.ts @@ -1,7 +1,9 @@ export * from "./BaseField"; export * from "./CheckboxField"; export * from "./context"; +export * from "./DateField"; export * from "./RadioGroupField"; +export * from "./ReceiptUploadField"; export * from "./SelectField"; export * from "./TextAreaField"; export * from "./TextField"; diff --git a/apps/dash/src/shared/utils/image-compression.ts b/apps/dash/src/shared/utils/image-compression.ts index c1c53db0..f13c587d 100644 --- a/apps/dash/src/shared/utils/image-compression.ts +++ b/apps/dash/src/shared/utils/image-compression.ts @@ -5,7 +5,7 @@ import imageCompression from "browser-image-compression"; */ export type CompressImageOptions = { /** Compression preset. Defaults to `'default'`. */ - preset?: "id-card" | "org-logo" | "org-cover" | "default"; + preset?: "id-card" | "org-logo" | "org-cover" | "receipt" | "default"; }; type CompressionConfig = { @@ -36,6 +36,12 @@ const PRESETS: Record< maxWidthOrHeight: 1280, useWebWorker: true, }, + /** Financial receipt — sharp enough for OCR/auditing. */ + receipt: { + maxSizeMB: 1.5, + maxWidthOrHeight: 2048, + useWebWorker: true, + }, /** Generic fallback preset. */ default: { maxSizeMB: 1, diff --git a/packages/core/src/entity/enums.ts b/packages/core/src/entity/enums.ts index c31a86b2..debad6ef 100644 --- a/packages/core/src/entity/enums.ts +++ b/packages/core/src/entity/enums.ts @@ -269,6 +269,7 @@ export const AttachmentReferenceType = { Event: 'Event', Organization: 'Organization', Term: 'Term', + Transaction: 'Transaction', } as const; /** diff --git a/packages/core/src/service/attachment.spec.ts b/packages/core/src/service/attachment.spec.ts index 31a9d542..2afd3bb7 100644 --- a/packages/core/src/service/attachment.spec.ts +++ b/packages/core/src/service/attachment.spec.ts @@ -23,6 +23,7 @@ describe('AttachmentService', () => { [AttachmentReferenceType.Event]: 'folder-event', [AttachmentReferenceType.Organization]: 'folder-org', [AttachmentReferenceType.Term]: 'folder-term', + [AttachmentReferenceType.Transaction]: 'folder-transaction', }, }; diff --git a/packages/db/migrations/0004_daffy_wong.sql b/packages/db/migrations/0004_daffy_wong.sql new file mode 100644 index 00000000..4ac3141d --- /dev/null +++ b/packages/db/migrations/0004_daffy_wong.sql @@ -0,0 +1,2 @@ +ALTER TYPE "public"."attachment_reference_type" ADD VALUE 'Transaction';--> statement-breakpoint +ALTER TABLE "transaction_categories" ADD CONSTRAINT "transaction_categories_name_type_unique" UNIQUE("name","type"); \ No newline at end of file diff --git a/packages/db/migrations/meta/0004_snapshot.json b/packages/db/migrations/meta/0004_snapshot.json new file mode 100644 index 00000000..0d426969 --- /dev/null +++ b/packages/db/migrations/meta/0004_snapshot.json @@ -0,0 +1,2785 @@ +{ + "id": "a08de57c-6dac-448c-ac62-82f8f1832e89", + "prevId": "fe0f105c-f0fc-4435-b7c4-b9157a29d849", + "version": "7", + "dialect": "postgresql", + "tables": { + "public.account": { + "name": "account", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true + }, + "account_id": { + "name": "account_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "provider_id": { + "name": "provider_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "access_token": { + "name": "access_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "refresh_token": { + "name": "refresh_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "id_token": { + "name": "id_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "access_token_expires_at": { + "name": "access_token_expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "refresh_token_expires_at": { + "name": "refresh_token_expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "scope": { + "name": "scope", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "password": { + "name": "password", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "account_userId_idx": { + "name": "account_userId_idx", + "columns": [ + { + "expression": "user_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "account_user_id_user_id_fk": { + "name": "account_user_id_user_id_fk", + "tableFrom": "account", + "tableTo": "user", + "columnsFrom": ["user_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.invitation": { + "name": "invitation", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true + }, + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "role": { + "name": "role", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "status": { + "name": "status", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'pending'" + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "inviter_id": { + "name": "inviter_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "invitation_organizationId_idx": { + "name": "invitation_organizationId_idx", + "columns": [ + { + "expression": "organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "invitation_email_idx": { + "name": "invitation_email_idx", + "columns": [ + { + "expression": "email", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "invitation_organization_id_organization_id_fk": { + "name": "invitation_organization_id_organization_id_fk", + "tableFrom": "invitation", + "tableTo": "organization", + "columnsFrom": ["organization_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "invitation_inviter_id_user_id_fk": { + "name": "invitation_inviter_id_user_id_fk", + "tableFrom": "invitation", + "tableTo": "user", + "columnsFrom": ["inviter_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.member": { + "name": "member", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true + }, + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "role": { + "name": "role", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'member'" + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + } + }, + "indexes": { + "member_organizationId_idx": { + "name": "member_organizationId_idx", + "columns": [ + { + "expression": "organization_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + }, + "member_userId_idx": { + "name": "member_userId_idx", + "columns": [ + { + "expression": "user_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "member_organization_id_organization_id_fk": { + "name": "member_organization_id_organization_id_fk", + "tableFrom": "member", + "tableTo": "organization", + "columnsFrom": ["organization_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "member_user_id_user_id_fk": { + "name": "member_user_id_user_id_fk", + "tableFrom": "member", + "tableTo": "user", + "columnsFrom": ["user_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.organization": { + "name": "organization", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true + }, + "parish_id": { + "name": "parish_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "slug": { + "name": "slug", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "logo": { + "name": "logo", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "metadata": { + "name": "metadata", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "type": { + "name": "type", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "parent_id": { + "name": "parent_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "cover": { + "name": "cover", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "join_id": { + "name": "join_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "deleted_at": { + "name": "deleted_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "short_name": { + "name": "short_name", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "organization_slug_uidx": { + "name": "organization_slug_uidx", + "columns": [ + { + "expression": "slug", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": true, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "organization_parish_id_parishes_id_fk": { + "name": "organization_parish_id_parishes_id_fk", + "tableFrom": "organization", + "tableTo": "parishes", + "columnsFrom": ["parish_id"], + "columnsTo": ["id"], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "organization_slug_unique": { + "name": "organization_slug_unique", + "nullsNotDistinct": false, + "columns": ["slug"] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.session": { + "name": "session", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "token": { + "name": "token", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "ip_address": { + "name": "ip_address", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "user_agent": { + "name": "user_agent", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "impersonated_by": { + "name": "impersonated_by", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "active_organization_id": { + "name": "active_organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + } + }, + "indexes": { + "session_userId_idx": { + "name": "session_userId_idx", + "columns": [ + { + "expression": "user_id", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "session_user_id_user_id_fk": { + "name": "session_user_id_user_id_fk", + "tableFrom": "session", + "tableTo": "user", + "columnsFrom": ["user_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "session_token_unique": { + "name": "session_token_unique", + "nullsNotDistinct": false, + "columns": ["token"] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.user": { + "name": "user", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "email_verified": { + "name": "email_verified", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "image": { + "name": "image", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "role": { + "name": "role", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "banned": { + "name": "banned", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "ban_reason": { + "name": "ban_reason", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "ban_expires": { + "name": "ban_expires", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "account_status": { + "name": "account_status", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'pending'" + }, + "deleted_at": { + "name": "deleted_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "parishioner_id": { + "name": "parishioner_id", + "type": "text", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "user_email_unique": { + "name": "user_email_unique", + "nullsNotDistinct": false, + "columns": ["email"] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.verification": { + "name": "verification", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true + }, + "identifier": { + "name": "identifier", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "value": { + "name": "value", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "verification_identifier_idx": { + "name": "verification_identifier_idx", + "columns": [ + { + "expression": "identifier", + "isExpression": false, + "asc": true, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.attachments": { + "name": "attachments", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true + }, + "reference_id": { + "name": "reference_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "reference_type": { + "name": "reference_type", + "type": "attachment_reference_type", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "file_id": { + "name": "file_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "viewer_url": { + "name": "viewer_url", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "mime_type": { + "name": "mime_type", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "size": { + "name": "size", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "uploaded_by": { + "name": "uploaded_by", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "deleted_at": { + "name": "deleted_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "attachments_uploaded_by_user_id_fk": { + "name": "attachments_uploaded_by_user_id_fk", + "tableFrom": "attachments", + "tableTo": "user", + "columnsFrom": ["uploaded_by"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.attendances": { + "name": "attendances", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true + }, + "event_id": { + "name": "event_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "parishioner_id": { + "name": "parishioner_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "method": { + "name": "method", + "type": "attendance_method", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "status": { + "name": "status", + "type": "attendance_status", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "verified_by": { + "name": "verified_by", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "verified_at": { + "name": "verified_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "deleted_at": { + "name": "deleted_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "attendances_event_id_events_id_fk": { + "name": "attendances_event_id_events_id_fk", + "tableFrom": "attendances", + "tableTo": "events", + "columnsFrom": ["event_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "attendances_parishioner_id_parishioners_id_fk": { + "name": "attendances_parishioner_id_parishioners_id_fk", + "tableFrom": "attendances", + "tableTo": "parishioners", + "columnsFrom": ["parishioner_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "attendances_verified_by_user_id_fk": { + "name": "attendances_verified_by_user_id_fk", + "tableFrom": "attendances", + "tableTo": "user", + "columnsFrom": ["verified_by"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "attendances_event_id_parishioner_id_unique": { + "name": "attendances_event_id_parishioner_id_unique", + "nullsNotDistinct": false, + "columns": ["event_id", "parishioner_id"] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.dioceses": { + "name": "dioceses", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "address": { + "name": "address", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "phone": { + "name": "phone", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "logo": { + "name": "logo", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "website": { + "name": "website", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "deleted_at": { + "name": "deleted_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.events": { + "name": "events", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true + }, + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "location": { + "name": "location", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "latitude": { + "name": "latitude", + "type": "double precision", + "primaryKey": false, + "notNull": false + }, + "longitude": { + "name": "longitude", + "type": "double precision", + "primaryKey": false, + "notNull": false + }, + "radius_meters": { + "name": "radius_meters", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 100 + }, + "start_date_time": { + "name": "start_date_time", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "end_date_time": { + "name": "end_date_time", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "qr_code": { + "name": "qr_code", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "visibility": { + "name": "visibility", + "type": "event_visibility", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "is_rsvp_enabled": { + "name": "is_rsvp_enabled", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "status": { + "name": "status", + "type": "event_status", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "created_by": { + "name": "created_by", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "deleted_at": { + "name": "deleted_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "events_organization_id_organization_id_fk": { + "name": "events_organization_id_organization_id_fk", + "tableFrom": "events", + "tableTo": "organization", + "columnsFrom": ["organization_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "events_created_by_user_id_fk": { + "name": "events_created_by_user_id_fk", + "tableFrom": "events", + "tableTo": "user", + "columnsFrom": ["created_by"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.financial_periods": { + "name": "financial_periods", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true + }, + "month": { + "name": "month", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "year": { + "name": "year", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "status": { + "name": "status", + "type": "period_status", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "locked_by": { + "name": "locked_by", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "locked_at": { + "name": "locked_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "deleted_at": { + "name": "deleted_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "financial_periods_locked_by_user_id_fk": { + "name": "financial_periods_locked_by_user_id_fk", + "tableFrom": "financial_periods", + "tableTo": "user", + "columnsFrom": ["locked_by"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.notifications": { + "name": "notifications", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "title": { + "name": "title", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "body": { + "name": "body", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "type": { + "name": "type", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "channel": { + "name": "channel", + "type": "notification_channel", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "is_read": { + "name": "is_read", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "status": { + "name": "status", + "type": "notification_status", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "reference_id": { + "name": "reference_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "reference_type": { + "name": "reference_type", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "sent_at": { + "name": "sent_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "deleted_at": { + "name": "deleted_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "notifications_user_id_user_id_fk": { + "name": "notifications_user_id_user_id_fk", + "tableFrom": "notifications", + "tableTo": "user", + "columnsFrom": ["user_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.org_enrollments": { + "name": "org_enrollments", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true + }, + "parishioner_id": { + "name": "parishioner_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "unit_id": { + "name": "unit_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "status": { + "name": "status", + "type": "enrollment_status", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "joined_at": { + "name": "joined_at", + "type": "date", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "deleted_at": { + "name": "deleted_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "org_enrollments_parishioner_id_parishioners_id_fk": { + "name": "org_enrollments_parishioner_id_parishioners_id_fk", + "tableFrom": "org_enrollments", + "tableTo": "parishioners", + "columnsFrom": ["parishioner_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "org_enrollments_organization_id_organization_id_fk": { + "name": "org_enrollments_organization_id_organization_id_fk", + "tableFrom": "org_enrollments", + "tableTo": "organization", + "columnsFrom": ["organization_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "org_enrollments_unit_id_org_units_id_fk": { + "name": "org_enrollments_unit_id_org_units_id_fk", + "tableFrom": "org_enrollments", + "tableTo": "org_units", + "columnsFrom": ["unit_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "org_enrollments_parishioner_id_organization_id_unique": { + "name": "org_enrollments_parishioner_id_organization_id_unique", + "nullsNotDistinct": false, + "columns": ["parishioner_id", "organization_id"] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.org_placements": { + "name": "org_placements", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true + }, + "enrollment_id": { + "name": "enrollment_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "term_id": { + "name": "term_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "unit_id": { + "name": "unit_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "position": { + "name": "position", + "type": "text", + "primaryKey": false, + "notNull": true, + "default": "'anggota'" + }, + "order": { + "name": "order", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 0 + }, + "start_date": { + "name": "start_date", + "type": "date", + "primaryKey": false, + "notNull": false + }, + "end_date": { + "name": "end_date", + "type": "date", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "deleted_at": { + "name": "deleted_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "org_placements_enrollment_id_org_enrollments_id_fk": { + "name": "org_placements_enrollment_id_org_enrollments_id_fk", + "tableFrom": "org_placements", + "tableTo": "org_enrollments", + "columnsFrom": ["enrollment_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "org_placements_term_id_org_terms_id_fk": { + "name": "org_placements_term_id_org_terms_id_fk", + "tableFrom": "org_placements", + "tableTo": "org_terms", + "columnsFrom": ["term_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + }, + "org_placements_unit_id_org_units_id_fk": { + "name": "org_placements_unit_id_org_units_id_fk", + "tableFrom": "org_placements", + "tableTo": "org_units", + "columnsFrom": ["unit_id"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.org_terms": { + "name": "org_terms", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true + }, + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "start_date": { + "name": "start_date", + "type": "date", + "primaryKey": false, + "notNull": false + }, + "end_date": { + "name": "end_date", + "type": "date", + "primaryKey": false, + "notNull": false + }, + "sk_number": { + "name": "sk_number", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "sk_date": { + "name": "sk_date", + "type": "date", + "primaryKey": false, + "notNull": false + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "deleted_at": { + "name": "deleted_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "org_terms_organization_id_organization_id_fk": { + "name": "org_terms_organization_id_organization_id_fk", + "tableFrom": "org_terms", + "tableTo": "organization", + "columnsFrom": ["organization_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.org_units": { + "name": "org_units", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true + }, + "organization_id": { + "name": "organization_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "position": { + "name": "position", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 0 + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "deleted_at": { + "name": "deleted_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "org_units_organization_id_organization_id_fk": { + "name": "org_units_organization_id_organization_id_fk", + "tableFrom": "org_units", + "tableTo": "organization", + "columnsFrom": ["organization_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.parishes": { + "name": "parishes", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true + }, + "vicariate_id": { + "name": "vicariate_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "sync_id": { + "name": "sync_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "address": { + "name": "address", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "phone": { + "name": "phone", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "logo": { + "name": "logo", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "website": { + "name": "website", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "regency_id": { + "name": "regency_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "district_id": { + "name": "district_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "deleted_at": { + "name": "deleted_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "parishes_vicariate_id_vicariates_id_fk": { + "name": "parishes_vicariate_id_vicariates_id_fk", + "tableFrom": "parishes", + "tableTo": "vicariates", + "columnsFrom": ["vicariate_id"], + "columnsTo": ["id"], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "parishes_sync_id_unique": { + "name": "parishes_sync_id_unique", + "nullsNotDistinct": false, + "columns": ["sync_id"] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.parishioners": { + "name": "parishioners", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "avatar_url": { + "name": "avatar_url", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "full_name": { + "name": "full_name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "honorific": { + "name": "honorific", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "suffix": { + "name": "suffix", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "birth_place": { + "name": "birth_place", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "birth_date": { + "name": "birth_date", + "type": "date", + "primaryKey": false, + "notNull": false + }, + "gender": { + "name": "gender", + "type": "gender", + "typeSchema": "public", + "primaryKey": false, + "notNull": false + }, + "education_level": { + "name": "education_level", + "type": "education_level", + "typeSchema": "public", + "primaryKey": false, + "notNull": false + }, + "id_card_number": { + "name": "id_card_number", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "id_card_photo": { + "name": "id_card_photo", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "regency_id": { + "name": "regency_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "district_id": { + "name": "district_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "village_id": { + "name": "village_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "sync_id": { + "name": "sync_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "synced_at": { + "name": "synced_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "baptism_name": { + "name": "baptism_name", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "family_card_number": { + "name": "family_card_number", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "blood_type": { + "name": "blood_type", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "ethnicity": { + "name": "ethnicity", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "religion": { + "name": "religion", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "citizenship": { + "name": "citizenship", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "family_relation": { + "name": "family_relation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "marital_status": { + "name": "marital_status", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "marriage_date": { + "name": "marriage_date", + "type": "date", + "primaryKey": false, + "notNull": false + }, + "address": { + "name": "address", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "house_status": { + "name": "house_status", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "phone": { + "name": "phone", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "education_major": { + "name": "education_major", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "occupation": { + "name": "occupation", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "profession": { + "name": "profession", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "skills": { + "name": "skills", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "physical_condition": { + "name": "physical_condition", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "economic_status": { + "name": "economic_status", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "social_activity": { + "name": "social_activity", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "deleted_at": { + "name": "deleted_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "parishioners_user_id_user_id_fk": { + "name": "parishioners_user_id_user_id_fk", + "tableFrom": "parishioners", + "tableTo": "user", + "columnsFrom": ["user_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "parishioners_regency_id_regencies_id_fk": { + "name": "parishioners_regency_id_regencies_id_fk", + "tableFrom": "parishioners", + "tableTo": "regencies", + "columnsFrom": ["regency_id"], + "columnsTo": ["id"], + "onDelete": "no action", + "onUpdate": "no action" + }, + "parishioners_district_id_districts_id_fk": { + "name": "parishioners_district_id_districts_id_fk", + "tableFrom": "parishioners", + "tableTo": "districts", + "columnsFrom": ["district_id"], + "columnsTo": ["id"], + "onDelete": "no action", + "onUpdate": "no action" + }, + "parishioners_village_id_villages_id_fk": { + "name": "parishioners_village_id_villages_id_fk", + "tableFrom": "parishioners", + "tableTo": "villages", + "columnsFrom": ["village_id"], + "columnsTo": ["id"], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "parishioners_sync_id_unique": { + "name": "parishioners_sync_id_unique", + "nullsNotDistinct": false, + "columns": ["sync_id"] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.districts": { + "name": "districts", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true + }, + "regency_id": { + "name": "regency_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "sync_id": { + "name": "sync_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "districts_regency_id_regencies_id_fk": { + "name": "districts_regency_id_regencies_id_fk", + "tableFrom": "districts", + "tableTo": "regencies", + "columnsFrom": ["regency_id"], + "columnsTo": ["id"], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.provinces": { + "name": "provinces", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.regencies": { + "name": "regencies", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "integer", + "primaryKey": true, + "notNull": true + }, + "province_id": { + "name": "province_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "sync_id": { + "name": "sync_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "regencies_province_id_provinces_id_fk": { + "name": "regencies_province_id_provinces_id_fk", + "tableFrom": "regencies", + "tableTo": "provinces", + "columnsFrom": ["province_id"], + "columnsTo": ["id"], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.villages": { + "name": "villages", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "bigint", + "primaryKey": true, + "notNull": true + }, + "district_id": { + "name": "district_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "sync_id": { + "name": "sync_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "villages_district_id_districts_id_fk": { + "name": "villages_district_id_districts_id_fk", + "tableFrom": "villages", + "tableTo": "districts", + "columnsFrom": ["district_id"], + "columnsTo": ["id"], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.rsvp": { + "name": "rsvp", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true + }, + "event_id": { + "name": "event_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "parishioner_id": { + "name": "parishioner_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "status": { + "name": "status", + "type": "rsvp_status", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "deleted_at": { + "name": "deleted_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "rsvp_event_id_events_id_fk": { + "name": "rsvp_event_id_events_id_fk", + "tableFrom": "rsvp", + "tableTo": "events", + "columnsFrom": ["event_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "rsvp_parishioner_id_parishioners_id_fk": { + "name": "rsvp_parishioner_id_parishioners_id_fk", + "tableFrom": "rsvp", + "tableTo": "parishioners", + "columnsFrom": ["parishioner_id"], + "columnsTo": ["id"], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "rsvp_event_id_parishioner_id_unique": { + "name": "rsvp_event_id_parishioner_id_unique", + "nullsNotDistinct": false, + "columns": ["event_id", "parishioner_id"] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.transaction_categories": { + "name": "transaction_categories", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "type": { + "name": "type", + "type": "transaction_type", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "deleted_at": { + "name": "deleted_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "transaction_categories_name_type_unique": { + "name": "transaction_categories_name_type_unique", + "nullsNotDistinct": false, + "columns": ["name", "type"] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.transactions": { + "name": "transactions", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true + }, + "period_id": { + "name": "period_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "category_id": { + "name": "category_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "type": { + "name": "type", + "type": "transaction_type", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "amount": { + "name": "amount", + "type": "double precision", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "date": { + "name": "date", + "type": "date", + "primaryKey": false, + "notNull": true + }, + "receipt_photo": { + "name": "receipt_photo", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_by": { + "name": "created_by", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "updated_by": { + "name": "updated_by", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "deleted_at": { + "name": "deleted_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "transactions_period_id_financial_periods_id_fk": { + "name": "transactions_period_id_financial_periods_id_fk", + "tableFrom": "transactions", + "tableTo": "financial_periods", + "columnsFrom": ["period_id"], + "columnsTo": ["id"], + "onDelete": "restrict", + "onUpdate": "no action" + }, + "transactions_category_id_transaction_categories_id_fk": { + "name": "transactions_category_id_transaction_categories_id_fk", + "tableFrom": "transactions", + "tableTo": "transaction_categories", + "columnsFrom": ["category_id"], + "columnsTo": ["id"], + "onDelete": "restrict", + "onUpdate": "no action" + }, + "transactions_created_by_user_id_fk": { + "name": "transactions_created_by_user_id_fk", + "tableFrom": "transactions", + "tableTo": "user", + "columnsFrom": ["created_by"], + "columnsTo": ["id"], + "onDelete": "restrict", + "onUpdate": "no action" + }, + "transactions_updated_by_user_id_fk": { + "name": "transactions_updated_by_user_id_fk", + "tableFrom": "transactions", + "tableTo": "user", + "columnsFrom": ["updated_by"], + "columnsTo": ["id"], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.vicariates": { + "name": "vicariates", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "uuid", + "primaryKey": true, + "notNull": true + }, + "diocese_id": { + "name": "diocese_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "sync_id": { + "name": "sync_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "address": { + "name": "address", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "phone": { + "name": "phone", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "deleted_at": { + "name": "deleted_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "vicariates_diocese_id_dioceses_id_fk": { + "name": "vicariates_diocese_id_dioceses_id_fk", + "tableFrom": "vicariates", + "tableTo": "dioceses", + "columnsFrom": ["diocese_id"], + "columnsTo": ["id"], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "vicariates_sync_id_unique": { + "name": "vicariates_sync_id_unique", + "nullsNotDistinct": false, + "columns": ["sync_id"] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + } + }, + "enums": { + "public.attachment_reference_type": { + "name": "attachment_reference_type", + "schema": "public", + "values": ["Event", "Organization", "Term", "Transaction"] + }, + "public.attendance_method": { + "name": "attendance_method", + "schema": "public", + "values": ["qr-code", "gps", "manual"] + }, + "public.attendance_status": { + "name": "attendance_status", + "schema": "public", + "values": ["present", "pending", "absent"] + }, + "public.event_status": { + "name": "event_status", + "schema": "public", + "values": ["published", "completed"] + }, + "public.event_visibility": { + "name": "event_visibility", + "schema": "public", + "values": ["public", "private"] + }, + "public.period_status": { + "name": "period_status", + "schema": "public", + "values": ["open", "locked"] + }, + "public.notification_channel": { + "name": "notification_channel", + "schema": "public", + "values": ["in-app", "email", "push"] + }, + "public.notification_status": { + "name": "notification_status", + "schema": "public", + "values": ["pending", "sent", "failed"] + }, + "public.enrollment_status": { + "name": "enrollment_status", + "schema": "public", + "values": ["pending", "active", "inactive"] + }, + "public.education_level": { + "name": "education_level", + "schema": "public", + "values": [ + "kindergarten", + "primary", + "junior-high", + "senior-high", + "diploma-1", + "diploma-2", + "diploma-3", + "diploma-4", + "bachelor", + "master", + "doctorate", + "special-needs", + "non-formal", + "other" + ] + }, + "public.gender": { + "name": "gender", + "schema": "public", + "values": ["male", "female"] + }, + "public.rsvp_status": { + "name": "rsvp_status", + "schema": "public", + "values": ["attending", "not-attending", "maybe"] + }, + "public.transaction_type": { + "name": "transaction_type", + "schema": "public", + "values": ["income", "expense"] + } + }, + "schemas": {}, + "sequences": {}, + "roles": {}, + "policies": {}, + "views": {}, + "_meta": { + "columns": {}, + "schemas": {}, + "tables": {} + } +} diff --git a/packages/db/migrations/meta/_journal.json b/packages/db/migrations/meta/_journal.json index 9648d112..d047bc5a 100644 --- a/packages/db/migrations/meta/_journal.json +++ b/packages/db/migrations/meta/_journal.json @@ -29,6 +29,13 @@ "when": 1776324714458, "tag": "0003_motionless_jack_murdock", "breakpoints": true + }, + { + "idx": 4, + "version": "7", + "when": 1776499964034, + "tag": "0004_daffy_wong", + "breakpoints": true } ] } diff --git a/packages/db/src/schema/transaction-categories.ts b/packages/db/src/schema/transaction-categories.ts index 39a6ad40..65033a53 100644 --- a/packages/db/src/schema/transaction-categories.ts +++ b/packages/db/src/schema/transaction-categories.ts @@ -1,5 +1,12 @@ import { TransactionType } from '@domus/core'; -import { pgEnum, pgTable, text, timestamp, uuid } from 'drizzle-orm/pg-core'; +import { + pgEnum, + pgTable, + text, + timestamp, + unique, + uuid, +} from 'drizzle-orm/pg-core'; import { v7 as uuidv7 } from 'uuid'; @@ -8,17 +15,26 @@ export const transactionTypeEnum = pgEnum( Object.values(TransactionType) as [string, ...string[]], ); -export const transactionCategories = pgTable('transaction_categories', { - id: uuid('id') - .primaryKey() - .$defaultFn(() => uuidv7()), +export const transactionCategories = pgTable( + 'transaction_categories', + { + id: uuid('id') + .primaryKey() + .$defaultFn(() => uuidv7()), - name: text('name').notNull(), - type: transactionTypeEnum('type').notNull(), - createdAt: timestamp('created_at').defaultNow().notNull(), - updatedAt: timestamp('updated_at') - .defaultNow() - .$onUpdate(() => new Date()) - .notNull(), - deletedAt: timestamp('deleted_at'), -}); + name: text('name').notNull(), + type: transactionTypeEnum('type').notNull(), + createdAt: timestamp('created_at').defaultNow().notNull(), + updatedAt: timestamp('updated_at') + .defaultNow() + .$onUpdate(() => new Date()) + .notNull(), + deletedAt: timestamp('deleted_at'), + }, + (table) => [ + unique('transaction_categories_name_type_unique').on( + table.name, + table.type, + ), + ], +); From a06d40ebc7c6fbd9767df40fa312bedc7a93c5d4 Mon Sep 17 00:00:00 2001 From: Anthonius Munthi Date: Sat, 18 Apr 2026 18:31:59 +0800 Subject: [PATCH 04/10] feat(finance): implement financial reporting system - add yearly report table with total income/expense per month - add monthly report collapsible with per-category transaction details - implement transaction grouping logic in core service - fix type safety and linting issues in finance modules Closes #114 --- .../[locale]/finance/[year]/[month]/page.tsx | 25 ++ apps/dash/src/pages/finance/actions/report.ts | 100 +++++++ apps/dash/src/pages/finance/ui/Accordion.tsx | 60 ++++ .../dash/src/pages/finance/ui/FinancePage.tsx | 47 +++- .../pages/finance/ui/FinancialReportTable.tsx | 221 +++++++++++++++ .../finance/ui/MonthlyReportCollapsible.tsx | 266 ++++++++++++++++++ .../pages/finance/ui/MonthlyReportPage.tsx | 54 ++++ apps/dash/src/shared/core/service.ts | 1 + apps/dash/src/shared/i18n/messages/en.json | 17 +- apps/dash/src/shared/i18n/messages/id.json | 17 +- .../core/src/contract/financial-period.ts | 5 + packages/core/src/entity/financial-report.ts | 56 ++++ packages/core/src/entity/index.ts | 1 + packages/core/src/service/transaction.spec.ts | 53 ++++ packages/core/src/service/transaction.ts | 169 ++++++++++- .../db/src/repository/financial-period.ts | 18 ++ 16 files changed, 1098 insertions(+), 12 deletions(-) create mode 100644 apps/dash/src/app/[locale]/finance/[year]/[month]/page.tsx create mode 100644 apps/dash/src/pages/finance/actions/report.ts create mode 100644 apps/dash/src/pages/finance/ui/Accordion.tsx create mode 100644 apps/dash/src/pages/finance/ui/FinancialReportTable.tsx create mode 100644 apps/dash/src/pages/finance/ui/MonthlyReportCollapsible.tsx create mode 100644 apps/dash/src/pages/finance/ui/MonthlyReportPage.tsx create mode 100644 packages/core/src/entity/financial-report.ts diff --git a/apps/dash/src/app/[locale]/finance/[year]/[month]/page.tsx b/apps/dash/src/app/[locale]/finance/[year]/[month]/page.tsx new file mode 100644 index 00000000..19051c1c --- /dev/null +++ b/apps/dash/src/app/[locale]/finance/[year]/[month]/page.tsx @@ -0,0 +1,25 @@ +"use client"; + +import { use } from "react"; +import { MonthlyReportPage } from "@/pages/finance/ui/MonthlyReportPage"; + +interface PageProps { + params: Promise<{ + year: string; + month: string; + }>; +} + +/** + * Monthly Report Page (Thin Export). + */ +export default function Page({ params }: PageProps) { + const { year, month } = use(params); + + return ( + + ); +} diff --git a/apps/dash/src/pages/finance/actions/report.ts b/apps/dash/src/pages/finance/actions/report.ts new file mode 100644 index 00000000..99d7153c --- /dev/null +++ b/apps/dash/src/pages/finance/actions/report.ts @@ -0,0 +1,100 @@ +"use server"; + +import { + fail, + type MonthlyReport, + ok, + type Result, + type YearlyReport, +} from "@domus/core"; +import { getAuthContext } from "@/shared/auth/server"; +import { transaction } from "@/shared/core"; +import { logger } from "@/shared/core/logger"; +import { ActionError } from "@/shared/error/ActionError"; + +/** + * Retrieves a yearly financial report. + * + * @param year - The year to retrieve the report for. + * @returns Result with the yearly report. + */ +export async function getYearlyReportAction( + year: number, +): Promise> { + const [auth, authError] = await getAuthContext(); + if (authError) return fail(authError); + + logger.info("getYearlyReportAction", { + userId: auth.userId, + year, + }); + + try { + const [res, error] = await transaction.getYearlyReport(year, auth); + + if (error) { + logger.error("getYearlyReportAction: failed", { + year, + code: error.code, + message: error.message, + }); + return fail(error); + } + + return ok(res); + } catch (e) { + return fail(ActionError.from(e as Error)); + } +} + +/** + * Retrieves a monthly financial report. + * + * @param year - The year of the report. + * @param month - The month of the report. + * @returns Result with the monthly report. + */ +export async function getMonthlyReportAction( + year: number, + month: number, +): Promise> { + const [auth, authError] = await getAuthContext(); + if (authError) return fail(authError); + + logger.info("getMonthlyReportAction", { + userId: auth.userId, + year, + month, + }); + + try { + // We need to find the periodId for this year/month + const [periods, periodError] = await transaction.getYearlyReport( + year, + auth, + ); + if (periodError) return fail(periodError); + + const period = periods.stats.find((p) => p.month === month); + if (!period) + return fail(new ActionError("Financial period not found for this month")); + + const [res, error] = await transaction.getMonthlyReport( + period.periodId, + auth, + ); + + if (error) { + logger.error("getMonthlyReportAction: failed", { + periodId: period.periodId, + code: error.code, + message: error.message, + }); + return fail(error); + } + + return ok(res); + } catch (e) { + return fail(ActionError.from(e as Error)); + } +} diff --git a/apps/dash/src/pages/finance/ui/Accordion.tsx b/apps/dash/src/pages/finance/ui/Accordion.tsx new file mode 100644 index 00000000..9fb75293 --- /dev/null +++ b/apps/dash/src/pages/finance/ui/Accordion.tsx @@ -0,0 +1,60 @@ +"use client"; + +import { Accordion as AccordionPrimitive } from "@base-ui/react/accordion"; +import { ChevronDown } from "lucide-react"; +import * as React from "react"; +import { cn } from "@/shared/ui/common/utils"; + +const Accordion = React.forwardRef< + HTMLDivElement, + AccordionPrimitive.Root.Props +>((props, ref) => ); +Accordion.displayName = "Accordion"; + +const AccordionItem = React.forwardRef< + HTMLDivElement, + AccordionPrimitive.Item.Props +>(({ className, ...props }, ref) => ( + +)); +AccordionItem.displayName = "AccordionItem"; + +const AccordionTrigger = React.forwardRef< + HTMLButtonElement, + AccordionPrimitive.Trigger.Props +>(({ className, children, ...props }, ref) => ( + + svg]:rotate-180", + className, + )} + {...props} + > + {children} + + + +)); +AccordionTrigger.displayName = "AccordionTrigger"; + +const AccordionContent = React.forwardRef< + HTMLDivElement, + AccordionPrimitive.Panel.Props +>(({ className, children, ...props }, ref) => ( + +
{children}
+
+)); +AccordionContent.displayName = "AccordionContent"; + +export { Accordion, AccordionContent, AccordionItem, AccordionTrigger }; diff --git a/apps/dash/src/pages/finance/ui/FinancePage.tsx b/apps/dash/src/pages/finance/ui/FinancePage.tsx index 48d36e99..694cfb37 100644 --- a/apps/dash/src/pages/finance/ui/FinancePage.tsx +++ b/apps/dash/src/pages/finance/ui/FinancePage.tsx @@ -1,14 +1,19 @@ -"use client"; - -import { Wallet } from "lucide-react"; +import { ListOrdered, Wallet } from "lucide-react"; import { useTranslations } from "next-intl"; import { PremiumHero } from "@/shared/ui/components/PremiumHero"; +import { + Tabs, + TabsContent, + TabsList, + TabsTrigger, +} from "@/shared/ui/shadcn/tabs"; import { CreateFinancialPeriodDialog } from "./CreateFinancialPeriodDialog"; import { FinancialPeriodList } from "./FinancialPeriodList"; +import { FinancialReportTable } from "./FinancialReportTable"; /** * Finance Page component. - * Displays the financial period management dashboard. + * Displays the financial period management dashboard and reports. * * @returns The FinancePage component. */ @@ -27,14 +32,38 @@ export function FinancePage() { />
-
-
+ +

- Daftar Periode Keuangan + {t("dashboardTitle")}

+ + + + {t("tabReports")} + + + + {t("tabPeriods")} + +
- -
+ + + + + + +
+
+

+ {t("periodListTitle")} +

+
+ +
+
+
); diff --git a/apps/dash/src/pages/finance/ui/FinancialReportTable.tsx b/apps/dash/src/pages/finance/ui/FinancialReportTable.tsx new file mode 100644 index 00000000..e719bbce --- /dev/null +++ b/apps/dash/src/pages/finance/ui/FinancialReportTable.tsx @@ -0,0 +1,221 @@ +"use client"; + +import type { YearlyReport } from "@domus/core"; +import { + ArrowRight, + ChevronLeft, + ChevronRight, + FileText, + TrendingDown, + TrendingUp, +} from "lucide-react"; +import Link from "next/link"; +import { useTranslations } from "next-intl"; +import { useCallback, useEffect, useState } from "react"; +import { toast } from "sonner"; +import { Button, buttonVariants } from "@/shared/ui/shadcn/button"; +import { Card, CardContent } from "@/shared/ui/shadcn/card"; +import { + Table, + TableBody, + TableCell, + TableHead, + TableHeader, + TableRow, +} from "@/shared/ui/shadcn/table"; +import { getYearlyReportAction } from "../actions/report"; + +/** + * Component for displaying the yearly financial report table. + */ +export function FinancialReportTable() { + const t = useTranslations("FinancePage"); + const [report, setReport] = useState(null); + const [loading, setLoading] = useState(true); + const [year, setYear] = useState(new Date().getFullYear()); + + const fetchReport = useCallback( + async (targetYear: number) => { + setLoading(true); + const [res, error] = await getYearlyReportAction(targetYear); + if (!error && res) { + setReport(res); + } else if (error) { + toast.error(t("errorMessage")); + } + setLoading(false); + }, + [t], + ); + + useEffect(() => { + fetchReport(year); + }, [year, fetchReport]); + + const formatCurrency = (amount: number) => { + return new Intl.NumberFormat("id-ID", { + style: "currency", + currency: "IDR", + minimumFractionDigits: 0, + }).format(amount); + }; + + if (loading) { + return ( +
+
+
+ ); + } + + return ( +
+
+
+ +

{year}

+ +
+ +
+ + +
+ +
+
+

+ {t("income")} +

+

+ {formatCurrency(report?.totalIncome ?? 0)} +

+
+
+
+ + +
+ +
+
+

+ {t("expense")} +

+

+ {formatCurrency(report?.totalExpense ?? 0)} +

+
+
+
+
+
+ +
+ + + + {t("month")} + {t("income")} + {t("expense")} + {t("balance")} + {t("actions")} + + + + {report?.stats.length === 0 ? ( + + + {t("emptyState")} + + + ) : ( + report?.stats.map((stat) => ( + + + {new Date(0, stat.month - 1).toLocaleString("id-ID", { + month: "long", + })} + + + {formatCurrency(stat.income)} + + + {formatCurrency(stat.expense)} + + = 0 + ? "text-slate-900 dark:text-slate-100" + : "text-red-700 dark:text-red-300", + )} + > + {formatCurrency(stat.balance)} + + + + + {t("viewDetail")} + + + + + )) + )} + + {report && report.stats.length > 0 && ( + + + {t("total")} + + {formatCurrency(report.totalIncome)} + + + {formatCurrency(report.totalExpense)} + + = 0 ? "text-primary" : "text-red-700", + )} + > + {formatCurrency(report.netBalance)} + + + + + )} +
+
+
+ ); +} + +function cn(...classes: (string | boolean | undefined)[]) { + return classes.filter(Boolean).join(" "); +} diff --git a/apps/dash/src/pages/finance/ui/MonthlyReportCollapsible.tsx b/apps/dash/src/pages/finance/ui/MonthlyReportCollapsible.tsx new file mode 100644 index 00000000..50ae5b7a --- /dev/null +++ b/apps/dash/src/pages/finance/ui/MonthlyReportCollapsible.tsx @@ -0,0 +1,266 @@ +"use client"; + +import type { MonthlyReport } from "@domus/core"; +import { TrendingDown, TrendingUp, Wallet } from "lucide-react"; +import { useTranslations } from "next-intl"; +import { useCallback, useEffect, useState } from "react"; +import { toast } from "sonner"; +import { Badge } from "@/shared/ui/shadcn/badge"; +import { Card, CardContent } from "@/shared/ui/shadcn/card"; +import { Separator } from "@/shared/ui/shadcn/separator"; +import { getMonthlyReportAction } from "../actions/report"; +import { + Accordion, + AccordionContent, + AccordionItem, + AccordionTrigger, +} from "./Accordion"; + +interface MonthlyReportCollapsibleProps { + year: number; + month: number; +} + +/** + * Component for displaying the monthly financial report with collapsible categories. + */ +export function MonthlyReportCollapsible({ + year, + month, +}: MonthlyReportCollapsibleProps) { + const t = useTranslations("FinancePage"); + const [report, setReport] = useState(null); + const [loading, setLoading] = useState(true); + + const fetchReport = useCallback(async () => { + setLoading(true); + const [res, error] = await getMonthlyReportAction(year, month); + if (!error && res) { + setReport(res); + } else if (error) { + toast.error(t("errorMessage")); + } + setLoading(false); + }, [year, month, t]); + + useEffect(() => { + fetchReport(); + }, [fetchReport]); + + const formatCurrency = (amount: number) => { + return new Intl.NumberFormat("id-ID", { + style: "currency", + currency: "IDR", + minimumFractionDigits: 0, + }).format(amount); + }; + + if (loading) { + return ( +
+
+
+ ); + } + + if (!report) return null; + + const _monthName = new Date(year, month - 1).toLocaleString("id-ID", { + month: "long", + }); + + return ( +
+ {/* Summary Cards */} +
+ + +
+ +
+
+

+ {t("income")} +

+

+ {formatCurrency(report.totalIncome)} +

+
+
+
+ + + +
+ +
+
+

+ {t("expense")} +

+

+ {formatCurrency(report.totalExpense)} +

+
+
+
+ + + +
+ +
+
+

+ {t("netBalance")} +

+

+ {formatCurrency(report.balance)} +

+
+
+
+
+ +
+ {/* Income Categories */} +
+
+
+

+ + {t("incomeByCategory")} +

+
+ + + {report.incomeCategories.map((cat) => ( + + +
+ + {cat.categoryName} + + + {formatCurrency(cat.amount)} + +
+
+ +
+ +
+ {cat.transactions.map((tx) => ( +
+
+ + {tx.description} + + + {new Date(tx.date).toLocaleDateString("id-ID", { + day: "numeric", + month: "long", + year: "numeric", + })} + +
+ + {formatCurrency(tx.amount)} + +
+ ))} +
+
+
+
+ ))} + {report.incomeCategories.length === 0 && ( +

+ {t("noIncome")} +

+ )} +
+
+ + {/* Expense Categories */} +
+
+
+

+ + {t("expenseByCategory")} +

+
+ + + {report.expenseCategories.map((cat) => ( + + +
+ + {cat.categoryName} + + + {formatCurrency(cat.amount)} + +
+
+ +
+ +
+ {cat.transactions.map((tx) => ( +
+
+ + {tx.description} + + + {new Date(tx.date).toLocaleDateString("id-ID", { + day: "numeric", + month: "long", + year: "numeric", + })} + +
+ + {formatCurrency(tx.amount)} + +
+ ))} +
+
+
+
+ ))} + {report.expenseCategories.length === 0 && ( +

+ {t("noExpense")} +

+ )} +
+
+
+
+ ); +} diff --git a/apps/dash/src/pages/finance/ui/MonthlyReportPage.tsx b/apps/dash/src/pages/finance/ui/MonthlyReportPage.tsx new file mode 100644 index 00000000..6bfce06e --- /dev/null +++ b/apps/dash/src/pages/finance/ui/MonthlyReportPage.tsx @@ -0,0 +1,54 @@ +"use client"; + +import { ChevronLeft, FileText } from "lucide-react"; +import Link from "next/link"; +import { useTranslations } from "next-intl"; +import { cn } from "@/shared/ui/common/utils"; +import { PremiumHero } from "@/shared/ui/components/PremiumHero"; +import { buttonVariants } from "@/shared/ui/shadcn/button"; +import { MonthlyReportCollapsible } from "./MonthlyReportCollapsible"; + +interface MonthlyReportPageProps { + year: number; + month: number; +} + +/** + * Monthly Report Page component. + * Displays detailed category-based report for a specific month. + */ +export function MonthlyReportPage({ year, month }: MonthlyReportPageProps) { + const t = useTranslations("FinancePage"); + + const monthName = new Date(year, month - 1).toLocaleString("id-ID", { + month: "long", + }); + + return ( +
+ } + orgName="Finance Department" + actions={ + + + {t("btnBackToYearly")} + + } + /> + +
+ +
+
+ ); +} diff --git a/apps/dash/src/shared/core/service.ts b/apps/dash/src/shared/core/service.ts index 1237a3d5..25ab41bb 100644 --- a/apps/dash/src/shared/core/service.ts +++ b/apps/dash/src/shared/core/service.ts @@ -113,6 +113,7 @@ export const rsvp = new RsvpService( export const transaction = new TransactionService( repo.transaction, repo.financialPeriod, + repo.transactionCategory, publicStorage, privateStorage, logger, diff --git a/apps/dash/src/shared/i18n/messages/en.json b/apps/dash/src/shared/i18n/messages/en.json index 45944198..12d893c9 100644 --- a/apps/dash/src/shared/i18n/messages/en.json +++ b/apps/dash/src/shared/i18n/messages/en.json @@ -480,7 +480,22 @@ "confirmLockTitle": "Lock Period?", "confirmLockDesc": "Once locked, no new transactions can be added to this period.", "confirmUnlockTitle": "Unlock Period?", - "confirmUnlockDesc": "Unlocking allows adding or changing transactions in this period." + "confirmUnlockDesc": "Unlocking allows adding or changing transactions in this period.", + "yearlyReportTitle": "Yearly Financial Report", + "monthlyDetailTitle": "Financial Report Details", + "income": "Income", + "expense": "Expense", + "balance": "Balance", + "netBalance": "Net Balance", + "total": "Total", + "month": "Month", + "actions": "Actions", + "viewDetail": "View Detail", + "category": "Category", + "amount": "Amount", + "transactions": "Transaction List", + "noTransactions": "No transactions.", + "backToYearly": "Back to Yearly Report" }, "EventPage": { "title": "Event Schedule in Progress", diff --git a/apps/dash/src/shared/i18n/messages/id.json b/apps/dash/src/shared/i18n/messages/id.json index d626258b..98135e8e 100644 --- a/apps/dash/src/shared/i18n/messages/id.json +++ b/apps/dash/src/shared/i18n/messages/id.json @@ -513,7 +513,22 @@ "confirmLockTitle": "Kunci Periode?", "confirmLockDesc": "Setelah dikunci, tidak ada transaksi baru yang bisa ditambahkan ke periode ini.", "confirmUnlockTitle": "Buka Kunci Periode?", - "confirmUnlockDesc": "Membuka kunci memungkinkan penambahan atau perubahan transaksi di periode ini." + "confirmUnlockDesc": "Membuka kunci memungkinkan penambahan atau perubahan transaksi di periode ini.", + "yearlyReportTitle": "Laporan Keuangan Tahunan", + "monthlyDetailTitle": "Detail Laporan Keuangan", + "income": "Pemasukan", + "expense": "Pengeluaran", + "balance": "Saldo", + "netBalance": "Saldo Bersih", + "total": "Total", + "month": "Bulan", + "actions": "Aksi", + "viewDetail": "Lihat Detail", + "category": "Kategori", + "amount": "Jumlah", + "transactions": "Daftar Transaksi", + "noTransactions": "Tidak ada transaksi.", + "backToYearly": "Kembali ke Laporan Tahunan" }, "FinancialPeriodForm": { "title": "Tambah Periode Keuangan", diff --git a/packages/core/src/contract/financial-period.ts b/packages/core/src/contract/financial-period.ts index 1f0b8ec8..113b9547 100644 --- a/packages/core/src/contract/financial-period.ts +++ b/packages/core/src/contract/financial-period.ts @@ -21,6 +21,11 @@ export interface IFinancialPeriodRepository { year: number, ): Promise; + /** + * Finds all financial periods for a specific year. + */ + findByYear(year: number): Promise; + /** * Retrieves all financial periods. */ diff --git a/packages/core/src/entity/financial-report.ts b/packages/core/src/entity/financial-report.ts new file mode 100644 index 00000000..593d279d --- /dev/null +++ b/packages/core/src/entity/financial-report.ts @@ -0,0 +1,56 @@ +import { z } from 'zod'; +import { TransactionEntity } from './transaction'; + +/** + * Monthly statistics for a yearly overview. + */ +export const MonthlyStatsSchema = z.object({ + periodId: z.string(), + month: z.number().min(1).max(12), + income: z.number(), + expense: z.number(), + balance: z.number(), +}); + +export type MonthlyStats = z.infer; + +/** + * Yearly report summary. + */ +export const YearlyReportSchema = z.object({ + year: z.number(), + stats: z.array(MonthlyStatsSchema), + totalIncome: z.number(), + totalExpense: z.number(), + netBalance: z.number(), +}); + +export type YearlyReport = z.infer; + +/** + * Detailed category statistics for a month, including transactions. + */ +export const CategoryReportSchema = z.object({ + categoryId: z.string(), + categoryName: z.string(), + amount: z.number(), + transactions: z.array(TransactionEntity), +}); + +export type CategoryReport = z.infer; + +/** + * Monthly detailed report. + */ +export const MonthlyReportSchema = z.object({ + periodId: z.string(), + year: z.number(), + month: z.number(), + incomeCategories: z.array(CategoryReportSchema), + expenseCategories: z.array(CategoryReportSchema), + totalIncome: z.number(), + totalExpense: z.number(), + balance: z.number(), +}); + +export type MonthlyReport = z.infer; diff --git a/packages/core/src/entity/index.ts b/packages/core/src/entity/index.ts index 94b04f83..698fdddb 100644 --- a/packages/core/src/entity/index.ts +++ b/packages/core/src/entity/index.ts @@ -7,6 +7,7 @@ export * from './enrollment'; export * from './enums'; export * from './event'; export * from './financial-period'; +export * from './financial-report'; export * from './join'; export * from './notification'; export * from './organization'; diff --git a/packages/core/src/service/transaction.spec.ts b/packages/core/src/service/transaction.spec.ts index a262c1ff..b0712977 100644 --- a/packages/core/src/service/transaction.spec.ts +++ b/packages/core/src/service/transaction.spec.ts @@ -6,6 +6,7 @@ import type { ILogger } from '../contract/logger'; import type { IPrivateStorage } from '../contract/storage-private'; import type { IPublicStorage } from '../contract/storage-public'; import type { ITransactionRepository } from '../contract/transaction'; +import type { ITransactionCategoryRepository } from '../contract/transaction-category'; import type { AuthContext } from '../entity/auth-context'; import { AccountStatus, @@ -15,18 +16,21 @@ import { } from '../entity/enums'; import type { FinancialPeriod } from '../entity/financial-period'; import type { Transaction } from '../entity/transaction'; +import type { TransactionCategory } from '../entity/transaction-category'; import { ForbiddenError, ValidationError } from '../error'; import { TransactionService } from './transaction'; describe('TransactionService', () => { const repo = mock(); const periodRepo = mock(); + const categoryRepo = mock(); const publicStorage = mock(); const privateStorage = mock(); const logger = mock(); const service = new TransactionService( repo, periodRepo, + categoryRepo, publicStorage, privateStorage, logger, @@ -204,4 +208,53 @@ describe('TransactionService', () => { expect(error?.message).toContain('locked'); }); }); + + describe('getYearlyReport', () => { + it('should return yearly report', async () => { + periodRepo.findByYear.mockResolvedValue([ + mockPeriod as unknown as FinancialPeriod, + ]); + repo.findByPeriodId.mockResolvedValue([ + mockTransaction as unknown as Transaction, + ]); + + const [result, error] = await service.getYearlyReport(2026, bendaharaCtx); + + expect(error).toBeNull(); + expect(result?.year).toBe(2026); + expect(result?.stats).toHaveLength(1); + }); + + it('should forbid regular parishioners', async () => { + const [_result, error] = await service.getYearlyReport(2026, _userCtx); + expect(error).toBeInstanceOf(ForbiddenError); + }); + }); + + describe('getMonthlyReport', () => { + it('should return monthly report with categories', async () => { + periodRepo.findById.mockResolvedValue( + mockPeriod as unknown as FinancialPeriod, + ); + repo.findByPeriodId.mockResolvedValue([ + mockTransaction as unknown as Transaction, + ]); + categoryRepo.findAll.mockResolvedValue([ + { + id: catId, + name: 'Donasi', + type: TransactionType.Income, + } as unknown as TransactionCategory, + ]); + + const [result, error] = await service.getMonthlyReport( + periodId, + bendaharaCtx, + ); + + expect(error).toBeNull(); + expect(result?.incomeCategories).toHaveLength(1); + expect(result?.incomeCategories[0]?.categoryName).toBe('Donasi'); + }); + }); }); diff --git a/packages/core/src/service/transaction.ts b/packages/core/src/service/transaction.ts index 5f4a6acc..ba78a531 100644 --- a/packages/core/src/service/transaction.ts +++ b/packages/core/src/service/transaction.ts @@ -3,8 +3,14 @@ import type { ILogger } from '../contract/logger'; import type { IPrivateStorage } from '../contract/storage-private'; import type { IPublicStorage } from '../contract/storage-public'; import type { ITransactionRepository } from '../contract/transaction'; +import type { ITransactionCategoryRepository } from '../contract/transaction-category'; import type { AuthContext } from '../entity/auth-context'; -import { PeriodStatus, UserRole } from '../entity/enums'; +import { PeriodStatus, TransactionType, UserRole } from '../entity/enums'; +import type { + MonthlyReport, + MonthlyStats, + YearlyReport, +} from '../entity/financial-report'; import type { CreateTransaction, Transaction, @@ -25,6 +31,7 @@ export class TransactionService { constructor( private readonly repo: ITransactionRepository, private readonly periodRepo: IFinancialPeriodRepository, + private readonly categoryRepo: ITransactionCategoryRepository, readonly _publicStorage: IPublicStorage, readonly _privateStorage: IPrivateStorage, private readonly logger: ILogger, @@ -245,4 +252,164 @@ export class TransactionService { return fail(new InternalError(error)); } } + + /** + * Generates a yearly financial report overview. + * Access restricted to Treasurer, Pastor, and Executive Board. + */ + async getYearlyReport( + year: number, + ctx: AuthContext, + ): Promise> { + try { + if ( + !ctx.roles.includes(UserRole.Treasurer) && + !ctx.roles.includes(UserRole.Pastor) && + !ctx.roles.includes(UserRole.ExecutiveBoard) && + !ctx.roles.includes(UserRole.SuperAdmin) + ) { + return fail(new ForbiddenError()); + } + + const periods = await this.periodRepo.findByYear(year); + const stats: MonthlyStats[] = []; + + for (const period of periods) { + const transactions = await this.repo.findByPeriodId(period.id); + let income = 0; + let expense = 0; + + for (const tx of transactions) { + if (tx.type === TransactionType.Income) { + income += tx.amount; + } else { + expense += tx.amount; + } + } + + stats.push({ + periodId: period.id, + month: period.month, + income, + expense, + balance: income - expense, + }); + } + + // Sort by month + stats.sort((a, b) => a.month - b.month); + + const totalIncome = stats.reduce((sum, s) => sum + s.income, 0); + const totalExpense = stats.reduce((sum, s) => sum + s.expense, 0); + + return ok({ + year, + stats, + totalIncome, + totalExpense, + netBalance: totalIncome - totalExpense, + }); + } catch (error) { + this.logger.error('Failed to generate yearly report', { year, error }); + return fail(new InternalError(error)); + } + } + + /** + * Generates a monthly financial report detail. + * Access restricted to Treasurer, Pastor, and Executive Board. + */ + async getMonthlyReport( + periodId: string, + ctx: AuthContext, + ): Promise> { + try { + if ( + !ctx.roles.includes(UserRole.Treasurer) && + !ctx.roles.includes(UserRole.Pastor) && + !ctx.roles.includes(UserRole.ExecutiveBoard) && + !ctx.roles.includes(UserRole.SuperAdmin) + ) { + return fail(new ForbiddenError()); + } + + const period = await this.periodRepo.findById(periodId); + if (!period) { + return fail(new NotFoundError('Financial Period')); + } + + const transactions = await this.repo.findByPeriodId(periodId); + const categories = await this.categoryRepo.findAll(); + + const incomeCategories: MonthlyReport['incomeCategories'] = []; + const expenseCategories: MonthlyReport['expenseCategories'] = []; + + // Group by category + const grouped = transactions.reduce( + (acc, tx) => { + let item = acc[tx.categoryId]; + if (!item) { + item = { + categoryId: tx.categoryId, + categoryName: + categories.find((c) => c.id === tx.categoryId)?.name ?? + 'Unknown', + amount: 0, + transactions: [], + }; + acc[tx.categoryId] = item; + } + item.amount += tx.amount; + item.transactions.push(tx); + return acc; + }, + {} as Record< + string, + { + categoryId: string; + categoryName: string; + amount: number; + transactions: Transaction[]; + } + >, + ); + + for (const catId in grouped) { + const item = grouped[catId]; + if (!item) continue; + const category = categories.find((c) => c.id === catId); + if (category?.type === TransactionType.Income) { + incomeCategories.push(item); + } else { + expenseCategories.push(item); + } + } + + const totalIncome = incomeCategories.reduce( + (sum, c) => sum + c.amount, + 0, + ); + const totalExpense = expenseCategories.reduce( + (sum, c) => sum + c.amount, + 0, + ); + + return ok({ + periodId, + year: period.year, + month: period.month, + incomeCategories, + expenseCategories, + totalIncome, + totalExpense, + balance: totalIncome - totalExpense, + }); + } catch (error) { + this.logger.error('Failed to generate monthly report', { + periodId, + error, + }); + return fail(new InternalError(error)); + } + } } diff --git a/packages/db/src/repository/financial-period.ts b/packages/db/src/repository/financial-period.ts index 22d41d2c..a386931e 100644 --- a/packages/db/src/repository/financial-period.ts +++ b/packages/db/src/repository/financial-period.ts @@ -74,6 +74,24 @@ export class FinancialPeriodRepository implements IFinancialPeriodRepository { return row ? FinancialPeriodEntity.parse(row) : null; } + /** + * Finds all financial periods for a specific year. + */ + async findByYear(year: number): Promise { + this.logger.info('FinancialPeriodRepository.findByYear', { year }); + const rows = await this.db + .select() + .from(financialPeriods) + .where( + and( + eq(financialPeriods.year, year), + isNull(financialPeriods.deletedAt), + ), + ); + + return rows.map((row) => FinancialPeriodEntity.parse(row)); + } + /** * Retrieves all financial periods. */ From d8a2a84c3a2670148d0a70daeac565358eab63bd Mon Sep 17 00:00:00 2001 From: Anthonius Munthi Date: Sat, 18 Apr 2026 19:14:30 +0800 Subject: [PATCH 05/10] fix(finance): stabilize transaction recording E2E tests - Added runtime validation with Zod in createTransactionAction to handle form data coercion. - Updated TransactionEntity to use z.coerce for amount and date fields. - Relaxed UUID validation from z.uuidv7() to z.uuid() for compatibility with Better Auth IDs. - Fixed translation key mismatch in FinancePage POM (dicatat vs disimpan). - Added guard for dynamic translation key in FinancialPeriodList to prevent 'undefined' warnings. - Cleaned up verbose debug logging in repository and service layers. --- .../finance/transaction-recording.spec.ts | 2 ++ apps/dash/e2e/pages/AttendancePage.ts | 2 +- apps/dash/e2e/pages/finance/FinancePage.ts | 29 ++++++++++++++++--- apps/dash/next.config.ts | 4 +++ .../pages/event/ui/RecordAttendanceDialog.tsx | 6 ++-- .../src/pages/finance/actions/transaction.ts | 9 +++++- .../pages/finance/ui/FinancialPeriodList.tsx | 12 ++++---- apps/dash/src/shared/i18n/messages/en.json | 18 ++++++++++-- apps/dash/src/shared/i18n/messages/id.json | 15 +++++++--- packages/core/src/entity/transaction.ts | 18 ++++++------ packages/db/package.json | 3 +- pnpm-lock.yaml | 9 ++++-- 12 files changed, 93 insertions(+), 34 deletions(-) diff --git a/apps/dash/e2e/features/finance/transaction-recording.spec.ts b/apps/dash/e2e/features/finance/transaction-recording.spec.ts index 429ed1e0..a3bbb6a7 100644 --- a/apps/dash/e2e/features/finance/transaction-recording.spec.ts +++ b/apps/dash/e2e/features/finance/transaction-recording.spec.ts @@ -31,6 +31,7 @@ test.describe("Finance - Transaction Recording", () => { page, }) => { await financePage.goto(); + await financePage.switchToPeriodsTab(); // 1. Click record button for the open period await financePage.btnRecordTransaction.first().click(); @@ -60,6 +61,7 @@ test.describe("Finance - Transaction Recording", () => { page, }) => { await financePage.goto(); + await financePage.switchToPeriodsTab(); await financePage.btnRecordTransaction.first().click(); // Touch fields to trigger onChange validation, then submit diff --git a/apps/dash/e2e/pages/AttendancePage.ts b/apps/dash/e2e/pages/AttendancePage.ts index 6007e965..edb013a7 100644 --- a/apps/dash/e2e/pages/AttendancePage.ts +++ b/apps/dash/e2e/pages/AttendancePage.ts @@ -87,7 +87,7 @@ export class AttendancePage { await expect( this.page.getByText(/kehadiran berhasil dicatat/i), - ).toBeVisible(); + ).toBeVisible({ timeout: 10000 }); // Close dialog by clicking outside or escape (Dialog is usually persistent until closed) await this.page.keyboard.press("Escape"); diff --git a/apps/dash/e2e/pages/finance/FinancePage.ts b/apps/dash/e2e/pages/finance/FinancePage.ts index df1fd5f9..6d7f4a2d 100644 --- a/apps/dash/e2e/pages/finance/FinancePage.ts +++ b/apps/dash/e2e/pages/finance/FinancePage.ts @@ -22,6 +22,14 @@ export class FinancePage { return this.page.getByTestId("btn-record-transaction"); } + get tabPeriods() { + return this.page.getByRole("tab", { name: /periode|periods/i }); + } + + async switchToPeriodsTab() { + await this.tabPeriods.click(); + } + /** * Transaction Form Locators */ @@ -54,7 +62,7 @@ export class FinancePage { } get inputReceipt() { - return this.page.getByTestId("input-receipt").locator('input[type="file"]'); + return this.page.getByTestId("input-receipt"); } get btnSubmit() { @@ -94,9 +102,22 @@ export class FinancePage { await this.inputDescription.fill(data.description); if (data.receiptPath) { - await this.inputReceipt.setInputFiles(data.receiptPath); - // Wait for upload success indicator if any - await expect(this.page.getByText(/berhasil diunggah/i)).toBeVisible(); + const fileChooserPromise = this.page.waitForEvent("filechooser"); + await this.page.getByText(/klik untuk unggah/i).click(); + const fileChooser = await fileChooserPromise; + await fileChooser.setFiles(data.receiptPath); + + // Wait for the empty state to disappear + await expect(this.page.getByText(/klik untuk unggah/i)).toBeHidden({ + timeout: 15000, + }); + + // Wait for upload success indicator + await expect( + this.page.getByText(/berhasil diunggah/i).first(), + ).toBeVisible({ + timeout: 15000, + }); } } diff --git a/apps/dash/next.config.ts b/apps/dash/next.config.ts index 2f5a39e8..9cf20dc6 100644 --- a/apps/dash/next.config.ts +++ b/apps/dash/next.config.ts @@ -33,6 +33,10 @@ const nextConfig: NextConfig = { protocol: "https", hostname: "**.pkrbt.id", }, + { + protocol: "https", + hostname: "drive.google.com", + }, ], }, }; diff --git a/apps/dash/src/pages/event/ui/RecordAttendanceDialog.tsx b/apps/dash/src/pages/event/ui/RecordAttendanceDialog.tsx index 67d756bf..d264c795 100644 --- a/apps/dash/src/pages/event/ui/RecordAttendanceDialog.tsx +++ b/apps/dash/src/pages/event/ui/RecordAttendanceDialog.tsx @@ -67,7 +67,7 @@ export function RecordAttendanceDialog({ search(); }, [debouncedQuery]); - const handleRecord = async (parishionerId: string) => { + const handleRecord = async (parishionerId: string, name: string) => { // Prevent double-click or multiple simultaneous records if (isRecording) return; @@ -82,7 +82,7 @@ export function RecordAttendanceDialog({ } setLastRecordedId(parishionerId); - toast.success(t("recordSuccess")); + toast.success(t("recordSuccess", { name })); onSuccess?.(); // Clear last recorded highlight after a while @@ -174,7 +174,7 @@ export function RecordAttendanceDialog({
handleRecord(p.id)} + onClick={() => handleRecord(p.id, p.fullName)} disabled={isRecording} icon={ isRecording && lastRecordedId === null ? ( diff --git a/apps/dash/src/pages/finance/actions/transaction.ts b/apps/dash/src/pages/finance/actions/transaction.ts index ef3ff264..d8efdb6a 100644 --- a/apps/dash/src/pages/finance/actions/transaction.ts +++ b/apps/dash/src/pages/finance/actions/transaction.ts @@ -2,6 +2,7 @@ import { type CreateTransaction, + CreateTransactionSchema, fail, ok, type Result, @@ -21,11 +22,17 @@ import { ActionError } from "@/shared/error/ActionError"; * @returns Result with the created transaction. */ export async function createTransactionAction( - data: CreateTransaction, + rawData: CreateTransaction, ): Promise> { const [auth, authError] = await getAuthContext(); if (authError) return fail(authError); + const parsed = CreateTransactionSchema.safeParse(rawData); + if (!parsed.success) { + return fail(new ActionError("Data tidak valid", "VALIDATION_ERROR", 400)); + } + const data = parsed.data; + logger.info("createTransactionAction", { userId: auth.userId, periodId: data.periodId, diff --git a/apps/dash/src/pages/finance/ui/FinancialPeriodList.tsx b/apps/dash/src/pages/finance/ui/FinancialPeriodList.tsx index 7832124a..4926c15c 100644 --- a/apps/dash/src/pages/finance/ui/FinancialPeriodList.tsx +++ b/apps/dash/src/pages/finance/ui/FinancialPeriodList.tsx @@ -260,11 +260,13 @@ export function FinancialPeriodList() { ? "..." : confirmType === "delete" ? t("btnDelete") - : t( - `btn${confirmType - ?.charAt(0) - .toUpperCase()}${confirmType?.slice(1)}`, - )} + : confirmType + ? t( + `btn${confirmType + .charAt(0) + .toUpperCase()}${confirmType.slice(1)}`, + ) + : ""} diff --git a/apps/dash/src/shared/i18n/messages/en.json b/apps/dash/src/shared/i18n/messages/en.json index 12d893c9..f18ce25c 100644 --- a/apps/dash/src/shared/i18n/messages/en.json +++ b/apps/dash/src/shared/i18n/messages/en.json @@ -477,10 +477,11 @@ "deleteError": "Failed to delete period.", "confirmDeleteTitle": "Delete Period?", "confirmDeleteDesc": "Are you sure you want to delete period {period}? Deleted data cannot be recovered.", - "confirmLockTitle": "Lock Period?", - "confirmLockDesc": "Once locked, no new transactions can be added to this period.", - "confirmUnlockTitle": "Unlock Period?", "confirmUnlockDesc": "Unlocking allows adding or changing transactions in this period.", + "dashboardTitle": "Financial Dashboard", + "tabReports": "Reports", + "tabPeriods": "Periods", + "periodListTitle": "Financial Period List", "yearlyReportTitle": "Yearly Financial Report", "monthlyDetailTitle": "Financial Report Details", "income": "Income", @@ -705,6 +706,17 @@ "noAttendances": "No attendance data yet", "emptyState": "No attendance data yet" }, + "EventAttendance": { + "btnRecordTitle": "Input Attendance", + "recordModalTitle": "Manual Attendance Input", + "recordModalSubtitle": "Record parishioner attendance directly", + "searchPlaceholder": "Search name or email...", + "btnRecord": "Record Attendance", + "btnHadir": "Present", + "recordInstruction": "Click 'Present' to record attendance.", + "noResults": "No parishioner found.", + "recordSuccess": "Attendance successfully recorded for {name}." + }, "CategoryPage": { "title": "Transaction Categories", "description": "Manage income and expense categories for financial bookkeeping.", diff --git a/apps/dash/src/shared/i18n/messages/id.json b/apps/dash/src/shared/i18n/messages/id.json index 98135e8e..671b05e1 100644 --- a/apps/dash/src/shared/i18n/messages/id.json +++ b/apps/dash/src/shared/i18n/messages/id.json @@ -514,6 +514,10 @@ "confirmLockDesc": "Setelah dikunci, tidak ada transaksi baru yang bisa ditambahkan ke periode ini.", "confirmUnlockTitle": "Buka Kunci Periode?", "confirmUnlockDesc": "Membuka kunci memungkinkan penambahan atau perubahan transaksi di periode ini.", + "dashboardTitle": "Dasbor Keuangan", + "tabReports": "Laporan", + "tabPeriods": "Periode", + "periodListTitle": "Daftar Periode Keuangan", "yearlyReportTitle": "Laporan Keuangan Tahunan", "monthlyDetailTitle": "Detail Laporan Keuangan", "income": "Pemasukan", @@ -810,12 +814,15 @@ "emptyState": "Belum ada data presensi" }, "EventAttendance": { - "btnRecordTitle": "Input Presensi", - "recordModalTitle": "Input Presensi Manual", + "btnRecordTitle": "Input Kehadiran", + "recordModalTitle": "Input Kehadiran Manual", "recordModalSubtitle": "Catat kehadiran umat secara langsung", "searchPlaceholder": "Cari nama atau email umat...", "btnRecord": "Catat Kehadiran", - "recordSuccess": "Presensi berhasil dicatat untuk {name}." + "btnHadir": "Hadir", + "recordInstruction": "Klik tombol 'Hadir' untuk mencatat kehadiran.", + "noResults": "Umat tidak ditemukan.", + "recordSuccess": "Kehadiran berhasil dicatat untuk {name}." }, "CategoryPage": { "title": "Kategori Transaksi", @@ -887,6 +894,6 @@ "errorInvalidType": "Format file gak didukung bray!", "errorUploadFailed": "Gagal upload ke server.", "errorUploadInternal": "Terjadi kesalahan internal pas upload.", - "successUpload": "Struk berhasil nempel!" + "successUpload": "Bukti transaksi berhasil diunggah" } } diff --git a/packages/core/src/entity/transaction.ts b/packages/core/src/entity/transaction.ts index 0c2a461a..d4bae13e 100644 --- a/packages/core/src/entity/transaction.ts +++ b/packages/core/src/entity/transaction.ts @@ -7,16 +7,16 @@ export { TransactionType }; * Zod schema for a financial transaction entity. */ export const TransactionEntity = z.object({ - id: z.uuidv7(), - periodId: z.uuidv7(), - categoryId: z.uuidv7(), + id: z.uuid(), + periodId: z.uuid(), + categoryId: z.uuid(), type: z.enum(Object.values(TransactionType) as [string, ...string[]]), - amount: z.number().positive(), + amount: z.coerce.number().positive(), description: z.string().min(1), - date: z.date(), + date: z.coerce.date(), receiptPhoto: z.string().nullish(), - createdBy: z.uuidv7(), - updatedBy: z.uuidv7().nullish(), + createdBy: z.uuid(), + updatedBy: z.uuid().nullish(), createdAt: z.date(), updatedAt: z.date(), deletedAt: z.date().nullable(), @@ -37,8 +37,8 @@ export const CreateTransactionSchema = TransactionEntity.omit({ updatedAt: true, deletedAt: true, }).extend({ - id: z.uuidv7().optional(), - createdBy: z.uuidv7().optional(), + id: z.uuid().optional(), + createdBy: z.uuid().optional(), }); /** diff --git a/packages/db/package.json b/packages/db/package.json index 067b4197..0033884a 100644 --- a/packages/db/package.json +++ b/packages/db/package.json @@ -35,6 +35,7 @@ "drizzle-orm": "^0.45.1", "pg": "^8.20.0", "tsx": "^4.21.0", - "uuid": "^13.0.0" + "uuid": "^13.0.0", + "zod": "^4.3.6" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 76b69385..16f3a67b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -123,7 +123,7 @@ importers: version: 1.29.0(react-dom@19.2.5(react@19.2.5))(react@19.2.5) better-auth: specifier: 1.6.2 - version: 1.6.2(@cloudflare/workers-types@4.20260412.1)(@opentelemetry/api@1.9.1)(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260412.1)(@neondatabase/serverless@1.0.2)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.3(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vitest@4.1.4) + version: 1.6.2(@cloudflare/workers-types@4.20260412.1)(@opentelemetry/api@1.9.1)(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260412.1)(@neondatabase/serverless@1.0.2)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.3(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vitest@4.1.4) browser-image-compression: specifier: ^2.0.2 version: 2.0.2 @@ -259,7 +259,7 @@ importers: version: link:../core better-auth: specifier: ^1.5.6 - version: 1.6.2(@cloudflare/workers-types@4.20260412.1)(@opentelemetry/api@1.9.1)(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260412.1)(@neondatabase/serverless@1.0.2)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.3(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vitest@4.1.4) + version: 1.6.2(@cloudflare/workers-types@4.20260412.1)(@opentelemetry/api@1.9.1)(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260412.1)(@neondatabase/serverless@1.0.2)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.3(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vitest@4.1.4) uuid: specifier: ^13.0.0 version: 13.0.0 @@ -365,6 +365,9 @@ importers: uuid: specifier: ^13.0.0 version: 13.0.0 + zod: + specifier: ^4.3.6 + version: 4.3.6 devDependencies: '@domus/tsconfig': specifier: workspace:* @@ -8939,7 +8942,7 @@ snapshots: baseline-browser-mapping@2.10.18: {} - better-auth@1.6.2(@cloudflare/workers-types@4.20260412.1)(@opentelemetry/api@1.9.1)(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260412.1)(@neondatabase/serverless@1.0.2)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.3(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vitest@4.1.4): + better-auth@1.6.2(@cloudflare/workers-types@4.20260412.1)(@opentelemetry/api@1.9.1)(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260412.1)(@neondatabase/serverless@1.0.2)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.3(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vitest@4.1.4): dependencies: '@better-auth/core': 1.6.2(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260412.1)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.3.6))(jose@6.2.2)(kysely@0.28.16)(nanostores@1.2.0) '@better-auth/drizzle-adapter': 1.6.2(@better-auth/core@1.6.2(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260412.1)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.3.6))(jose@6.2.2)(kysely@0.28.16)(nanostores@1.2.0))(@better-auth/utils@0.4.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260412.1)(@neondatabase/serverless@1.0.2)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0)) From c172c0c6427d9960644cb81263708d9bc832bd1c Mon Sep 17 00:00:00 2001 From: Anthonius Munthi Date: Sat, 18 Apr 2026 20:07:50 +0800 Subject: [PATCH 06/10] feat: implement attachment UI for events and organizations Ref #188 - Refactored AttachmentUpload to use standard react state, dropping react-hook-form - Fixed typechecking error in AttachmentList by using buttonVariants with standard anchor tag - Fixed server actions to properly handle AuthContext and updated file usage - Added basic error handling to AttachmentUpload callbacks - Successfully passed typecheck, lint, and formatting tests --- apps/dash/app/(dash)/event/[id]/page.tsx | 11 ++ .../features/attachment/actions/attachment.ts | 70 ++++++++ apps/dash/src/features/attachment/index.ts | 3 + .../features/attachment/ui/AttachmentList.tsx | 117 ++++++++++++ .../attachment/ui/AttachmentUpload.tsx | 166 ++++++++++++++++++ .../src/pages/event/ui/EventDetailPage.tsx | 59 +++++++ apps/dash/src/pages/org/ui/OrgDetailPage.tsx | 27 ++- .../ui/components/OrgAttachmentSection.tsx | 81 +++++++++ apps/dash/src/shared/i18n/messages/id.json | 17 ++ apps/dash/src/shared/utils/format.ts | 11 ++ 10 files changed, 557 insertions(+), 5 deletions(-) create mode 100644 apps/dash/src/features/attachment/actions/attachment.ts create mode 100644 apps/dash/src/features/attachment/index.ts create mode 100644 apps/dash/src/features/attachment/ui/AttachmentList.tsx create mode 100644 apps/dash/src/features/attachment/ui/AttachmentUpload.tsx create mode 100644 apps/dash/src/pages/org/ui/components/OrgAttachmentSection.tsx create mode 100644 apps/dash/src/shared/utils/format.ts diff --git a/apps/dash/app/(dash)/event/[id]/page.tsx b/apps/dash/app/(dash)/event/[id]/page.tsx index 9414d072..d1e8883b 100644 --- a/apps/dash/app/(dash)/event/[id]/page.tsx +++ b/apps/dash/app/(dash)/event/[id]/page.tsx @@ -1,7 +1,9 @@ +import { AttachmentReferenceType } from "@domus/core/entity/enums"; import { notFound, redirect } from "next/navigation"; import { EventDetailPage } from "@/pages/event"; import { getAuthContext } from "@/shared/auth/server"; import { + attachment as attachmentService, attendance as attendanceService, event as eventService, rsvp as rsvpService, @@ -69,12 +71,21 @@ export default async function Page({ rsvpSummary = summary || null; } + // Fetch Attachments + const [attachmentsData, _attError] = await attachmentService.findByReference( + auth, + id, + AttachmentReferenceType.Event, + ); + const attachments = attachmentsData || []; + return ( ); diff --git a/apps/dash/src/features/attachment/actions/attachment.ts b/apps/dash/src/features/attachment/actions/attachment.ts new file mode 100644 index 00000000..d7ecc7e7 --- /dev/null +++ b/apps/dash/src/features/attachment/actions/attachment.ts @@ -0,0 +1,70 @@ +"use server"; + +import { + ForbiddenError, + fail, + type Result, + ValidationError, +} from "@domus/core"; +import type { Attachment } from "@domus/core/entity/attachment"; +import type { AttachmentReferenceType } from "@domus/core/entity/enums"; +import { getAuthSession } from "@/shared/auth/server"; +import { attachment as attachmentService } from "@/shared/core"; + +export async function getAttachmentsByReferenceAction( + referenceId: string, + referenceType: AttachmentReferenceType, +): Promise> { + const [session, sessionError] = await getAuthSession(); + if (sessionError || !session) + return fail(sessionError || new ForbiddenError("Unauthorized")); + + return attachmentService.findByReference( + session.context, + referenceId, + referenceType, + ); +} + +export async function uploadAttachmentAction( + formData: FormData, +): Promise> { + const [session, sessionError] = await getAuthSession(); + if (sessionError || !session) + return fail(sessionError || new ForbiddenError("Unauthorized")); + + const referenceId = formData.get("referenceId") as string; + const referenceType = formData.get( + "referenceType", + ) as AttachmentReferenceType; + const name = formData.get("name") as string; + const file = formData.get("file") as File; + + if (!referenceId || !referenceType || !name || !file) { + return fail(new ValidationError("Missing required fields")); + } + + const fileData = { + name, + type: file.type, + size: file.size, + arrayBuffer: () => file.arrayBuffer(), + }; + + return attachmentService.upload( + session.context, + fileData, + referenceId, + referenceType, + ); +} + +export async function deleteAttachmentAction( + id: string, +): Promise> { + const [session, sessionError] = await getAuthSession(); + if (sessionError || !session) + return fail(sessionError || new ForbiddenError("Unauthorized")); + + return attachmentService.delete(session.context, id); +} diff --git a/apps/dash/src/features/attachment/index.ts b/apps/dash/src/features/attachment/index.ts new file mode 100644 index 00000000..af49fb2b --- /dev/null +++ b/apps/dash/src/features/attachment/index.ts @@ -0,0 +1,3 @@ +export * from "./actions/attachment"; +export * from "./ui/AttachmentList"; +export * from "./ui/AttachmentUpload"; diff --git a/apps/dash/src/features/attachment/ui/AttachmentList.tsx b/apps/dash/src/features/attachment/ui/AttachmentList.tsx new file mode 100644 index 00000000..dac5165b --- /dev/null +++ b/apps/dash/src/features/attachment/ui/AttachmentList.tsx @@ -0,0 +1,117 @@ +"use client"; + +import type { Attachment } from "@domus/core/entity/attachment"; +import { + ExternalLink, + File, + FileArchive, + FileImage, + FileText, + Trash, +} from "lucide-react"; +import { useTranslations } from "next-intl"; +import { cn } from "@/shared/ui/common/utils"; +import { Button, buttonVariants } from "@/shared/ui/shadcn/button"; +import { Card } from "@/shared/ui/shadcn/card"; +import { formatBytes } from "@/shared/utils/format"; + +type AttachmentListProps = { + attachments: Attachment[]; + onDelete?: (id: string) => void; + isDeleting?: string | null; + canManage?: boolean; +}; + +function getFileIcon(mimeType: string | null | undefined) { + if (!mimeType) return ; + if (mimeType.startsWith("image/")) + return ; + if ( + mimeType.includes("pdf") || + mimeType.includes("document") || + mimeType.startsWith("text/") + ) { + return ; + } + if ( + mimeType.includes("zip") || + mimeType.includes("tar") || + mimeType.includes("rar") + ) { + return ; + } + return ; +} + +export function AttachmentList({ + attachments, + onDelete, + isDeleting, + canManage = false, +}: AttachmentListProps) { + const t = useTranslations("AttachmentWidget"); + + if (attachments.length === 0) { + return ( +
+

{t("listEmpty")}

+
+ ); + } + + return ( +
+ ); +} diff --git a/apps/dash/src/features/attachment/ui/AttachmentUpload.tsx b/apps/dash/src/features/attachment/ui/AttachmentUpload.tsx new file mode 100644 index 00000000..de60a525 --- /dev/null +++ b/apps/dash/src/features/attachment/ui/AttachmentUpload.tsx @@ -0,0 +1,166 @@ +"use client"; + +import type { AttachmentReferenceType } from "@domus/core/entity/enums"; +import { UploadCloud, X } from "lucide-react"; +import { useTranslations } from "next-intl"; +import { useState } from "react"; +import { toast } from "sonner"; +import { Button } from "@/shared/ui/shadcn/button"; +import { Card, CardContent } from "@/shared/ui/shadcn/card"; +import { Input } from "@/shared/ui/shadcn/input"; +import { Label } from "@/shared/ui/shadcn/label"; + +type AttachmentUploadProps = { + referenceId: string; + referenceType: AttachmentReferenceType; + onSuccess?: () => void; + onError?: (err: Error) => void; + onUpload: (formData: FormData) => Promise; +}; + +export function AttachmentUpload({ + referenceId, + referenceType, + onSuccess, + onError, + onUpload, +}: AttachmentUploadProps) { + const t = useTranslations("AttachmentWidget"); + const [file, setFile] = useState(null); + const [name, setName] = useState(""); + const [isUploading, setIsUploading] = useState(false); + + const onSubmit = async (e: React.FormEvent) => { + e.preventDefault(); + + if (!file) { + toast.error(t("uploadError")); + return; + } + + if (!name.trim()) { + toast.error("Name is required"); + return; + } + + setIsUploading(true); + + try { + const formData = new FormData(); + formData.append("referenceId", referenceId); + formData.append("referenceType", referenceType); + formData.append("name", name); + formData.append("file", file); + + const [attachment, err] = await onUpload(formData); + + if (err || !attachment) { + if (onError) { + onError(err as Error); + } else { + toast.error(t("uploadError")); + } + } else { + toast.success(t("uploadSuccess")); + setName(""); + setFile(null); + onSuccess?.(); + } + } catch (e) { + if (onError) { + onError(e as Error); + } else { + toast.error(t("uploadError")); + } + } finally { + setIsUploading(false); + } + }; + + const handleFileChange = (e: React.ChangeEvent) => { + if (e.target.files?.[0]) { + const selectedFile = e.target.files[0]; + setFile(selectedFile); + // Auto-fill name if empty string + if (!name) { + const fileName = selectedFile.name.split(".").slice(0, -1).join("."); + setName(fileName); + } + } + }; + + return ( + + +
+
+ + + {file ? ( +
+ {file.name} + +
+ ) : ( +
+ +
+ )} +
+ +
+ + setName(e.target.value)} + disabled={isUploading || !file} + /> +
+ + +
+
+
+ ); +} diff --git a/apps/dash/src/pages/event/ui/EventDetailPage.tsx b/apps/dash/src/pages/event/ui/EventDetailPage.tsx index d6d33e06..025830ee 100644 --- a/apps/dash/src/pages/event/ui/EventDetailPage.tsx +++ b/apps/dash/src/pages/event/ui/EventDetailPage.tsx @@ -1,6 +1,7 @@ "use client"; import { + type Attachment, type Attendance, AttendanceStatus, type Event, @@ -10,6 +11,7 @@ import { RsvpStatus, type RsvpSummary, } from "@domus/core"; +import { AttachmentReferenceType } from "@domus/core/entity/enums"; import { format } from "date-fns"; import { id as idLocale } from "date-fns/locale"; import { @@ -28,6 +30,12 @@ import { useRouter } from "next/navigation"; import { useTranslations } from "next-intl"; import { useEffect, useState, useTransition } from "react"; import { toast } from "sonner"; +import { + AttachmentList, + AttachmentUpload, + deleteAttachmentAction, + uploadAttachmentAction, +} from "@/features/attachment"; import { Badge } from "@/shared/ui/shadcn/badge"; import { Button } from "@/shared/ui/shadcn/button"; import { @@ -50,6 +58,7 @@ interface EventDetailPageProps { attendance: Attendance | null; rsvp: Rsvp | null; rsvpSummary: RsvpSummary | null; + attachments: Attachment[]; isAdmin: boolean; } @@ -62,6 +71,7 @@ export function EventDetailPage({ attendance: initialAttendance, rsvp: initialRsvp, rsvpSummary, + attachments, isAdmin, }: EventDetailPageProps) { const t = useTranslations("EventDetailPage"); @@ -399,6 +409,55 @@ export function EventDetailPage({
)} + {/* Attachments Section */} +
+

+ + {t("attachmentsTitle", { fallback: "Dokumen & Lampiran" })} +

+ +
+ { + const [res, error] = await deleteAttachmentAction(id); + if (error) throw new Error(error.message); + return res; + } + : undefined + } + /> + + {isAdmin && ( +
+

+ {t("uploadNewAttachment", { + fallback: "Unggah Lampiran Baru", + })} +

+ { + toast.success( + t("attachmentUploaded", { + fallback: "Lampiran berhasil diunggah", + }), + ); + router.refresh(); + }} + onError={(err) => { + toast.error(err.message); + }} + onUpload={uploadAttachmentAction} + /> +
+ )} +
+
+

diff --git a/apps/dash/src/pages/org/ui/OrgDetailPage.tsx b/apps/dash/src/pages/org/ui/OrgDetailPage.tsx index 359f267b..16262829 100644 --- a/apps/dash/src/pages/org/ui/OrgDetailPage.tsx +++ b/apps/dash/src/pages/org/ui/OrgDetailPage.tsx @@ -1,5 +1,6 @@ "use server"; import { OrgRole, UserRole } from "@domus/core"; +import { AttachmentReferenceType } from "@domus/core/entity/enums"; import { UserPlus, Users } from "lucide-react"; import Link from "next/link"; import { notFound, redirect } from "next/navigation"; @@ -7,6 +8,7 @@ import { getTranslations } from "next-intl/server"; import { z } from "zod"; import { getAuthSession } from "@/shared/auth/server"; import { + attachment as attachmentService, organization as organizationService, unit as unitService, } from "@/shared/core"; @@ -18,6 +20,7 @@ import { deleteUnitAction } from "../actions/unit-delete"; import { reorderUnitsAction } from "../actions/unit-reorder"; import { updateUnitAction } from "../actions/unit-update"; import { DeleteOrgButton } from "./components/DeleteOrgButton"; +import { OrgAttachmentSection } from "./components/OrgAttachmentSection"; import { OrgHeader } from "./components/OrgHeader"; import { UnitList } from "./components/UnitList"; @@ -45,11 +48,19 @@ export async function OrgDetailPage({ params }: OrgDetailPageProps) { redirect("/auth/login"); } - // Parallel fetch org and units - const [[org, orgError], [units, _unitsError]] = await Promise.all([ - organizationService.findById(id), - unitService.findByOrganizationId(id), - ]); + // Parallel fetch org, units, attachments + const [[org, orgError], [units, _unitsError], [attachmentsData, _attError]] = + await Promise.all([ + organizationService.findById(id), + unitService.findByOrganizationId(id), + attachmentService.findByReference( + session.context, + id, + AttachmentReferenceType.Organization, + ), + ]); + + const attachments = attachmentsData || []; if (orgError || !org) { notFound(); @@ -96,6 +107,12 @@ export async function OrgDetailPage({ params }: OrgDetailPageProps) { /> + +

{/* Sidebar: Details & Stats */} diff --git a/apps/dash/src/pages/org/ui/components/OrgAttachmentSection.tsx b/apps/dash/src/pages/org/ui/components/OrgAttachmentSection.tsx new file mode 100644 index 00000000..b358c000 --- /dev/null +++ b/apps/dash/src/pages/org/ui/components/OrgAttachmentSection.tsx @@ -0,0 +1,81 @@ +"use client"; + +import { type Attachment, AttachmentReferenceType } from "@domus/core"; +import { FileEdit } from "lucide-react"; +import { useRouter } from "next/navigation"; +import { useTranslations } from "next-intl"; +import { toast } from "sonner"; +import { + AttachmentList, + AttachmentUpload, + deleteAttachmentAction, + uploadAttachmentAction, +} from "@/features/attachment"; +import { DomusCard, DomusCardContent } from "@/shared/ui/components/DomusCard"; + +interface OrgAttachmentSectionProps { + organizationId: string; + attachments: Attachment[]; + canReview: boolean; +} + +export function OrgAttachmentSection({ + organizationId, + attachments, + canReview, +}: OrgAttachmentSectionProps) { + const t = useTranslations("OrgDetailPage"); + const router = useRouter(); + + return ( + + +

+ + {t("attachmentsTitle", { fallback: "Dokumen & Lampiran" })} +

+
+ { + const [res, error] = await deleteAttachmentAction(id); + if (error) throw new Error(error.message); + return res; + } + : undefined + } + /> + + {canReview && ( +
+

+ {t("uploadNewAttachment", { fallback: "Unggah Lampiran Baru" })} +

+ { + toast.success( + t("attachmentUploaded", { + fallback: "Lampiran berhasil diunggah", + }), + ); + router.refresh(); + }} + onError={(err) => { + toast.error(err.message); + }} + onUpload={uploadAttachmentAction} + /> +
+ )} +
+
+
+ ); +} diff --git a/apps/dash/src/shared/i18n/messages/id.json b/apps/dash/src/shared/i18n/messages/id.json index 671b05e1..7a493123 100644 --- a/apps/dash/src/shared/i18n/messages/id.json +++ b/apps/dash/src/shared/i18n/messages/id.json @@ -895,5 +895,22 @@ "errorUploadFailed": "Gagal upload ke server.", "errorUploadInternal": "Terjadi kesalahan internal pas upload.", "successUpload": "Bukti transaksi berhasil diunggah" + }, + "AttachmentWidget": { + "listTitle": "Lampiran Dokumen", + "listEmpty": "Belum ada dokumen terlampir.", + "uploadTitle": "Unggah Lampiran", + "uploadNameLabel": "Nama Dokumen", + "uploadNamePlaceholder": "Contoh: Surat Keputusan...", + "uploadFileLabel": "Pilih Dokumen", + "uploadSuccess": "Lampiran berhasil diunggah.", + "uploadError": "Gagal mengunggah lampiran.", + "deleteSuccess": "Lampiran berhasil dihapus.", + "deleteError": "Gagal menghapus lampiran.", + "deleteConfirmTitle": "Hapus Lampiran?", + "deleteConfirmDesc": "Apakah Anda yakin ingin menghapus {name}? Dokumen akan dihapus secara permanen.", + "viewDocument": "Lihat Dokumen", + "btnUpload": "Unggah Dokumen", + "btnSubmitting": "Mengunggah..." } } diff --git a/apps/dash/src/shared/utils/format.ts b/apps/dash/src/shared/utils/format.ts new file mode 100644 index 00000000..c297e03e --- /dev/null +++ b/apps/dash/src/shared/utils/format.ts @@ -0,0 +1,11 @@ +export function formatBytes(bytes: number, decimals = 2): string { + if (!+bytes) return "0 Bytes"; + + const k = 1024; + const dm = decimals < 0 ? 0 : decimals; + const sizes = ["Bytes", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"]; + + const i = Math.floor(Math.log(bytes) / Math.log(k)); + + return `${parseFloat((bytes / k ** i).toFixed(dm))} ${sizes[i]}`; +} From 111a0566e0a06b1d8eb599210df84b2f7b8f289b Mon Sep 17 00:00:00 2001 From: Anthonius Munthi Date: Sat, 18 Apr 2026 23:34:36 +0800 Subject: [PATCH 07/10] feat(org): implement organizational term management and stabilize e2e tests - Implement organizational term management (ST-05) core logic and UI. - Stabilize term-management E2E tests by refining sync logic for Google Drive uploads. - Fix Playwright visibility issues caused by CSS truncate class in attachment items. - Improve POM with robust wait strategies for server-side revalidation. - Closes #188 --- apps/dash/e2e/assets/dummy.pdf | Bin 0 -> 14 bytes .../e2e/features/org/term-management.spec.ts | 83 ++++ apps/dash/e2e/pages/org/OrgDetailPage.ts | 230 +++++++++++- .../features/attachment/actions/attachment.ts | 19 +- .../features/attachment/ui/AttachmentList.tsx | 5 +- .../attachment/ui/AttachmentUpload.tsx | 5 + apps/dash/src/pages/org/actions/term.ts | 182 +++++++++ apps/dash/src/pages/org/ui/OrgDetailPage.tsx | 51 ++- .../ui/components/OrgAttachmentSection.tsx | 14 +- .../src/pages/org/ui/components/TermForm.tsx | 249 ++++++++++++ .../src/pages/org/ui/components/TermList.tsx | 355 ++++++++++++++++++ apps/dash/src/shared/core/service.ts | 7 +- apps/dash/src/shared/i18n/messages/id.json | 39 +- packages/core/src/entity/term.ts | 29 ++ packages/core/src/service/term.spec.ts | 162 ++++++-- packages/core/src/service/term.ts | 173 +++++++-- 16 files changed, 1515 insertions(+), 88 deletions(-) create mode 100644 apps/dash/e2e/assets/dummy.pdf create mode 100644 apps/dash/e2e/features/org/term-management.spec.ts create mode 100644 apps/dash/src/pages/org/actions/term.ts create mode 100644 apps/dash/src/pages/org/ui/components/TermForm.tsx create mode 100644 apps/dash/src/pages/org/ui/components/TermList.tsx diff --git a/apps/dash/e2e/assets/dummy.pdf b/apps/dash/e2e/assets/dummy.pdf new file mode 100644 index 0000000000000000000000000000000000000000..eaf5f7510320b6a327fb308379de2f94d8859a54 GIT binary patch literal 14 VcmYc(&CRV;NY2kINzE(a0stxH1yTS2 literal 0 HcmV?d00001 diff --git a/apps/dash/e2e/features/org/term-management.spec.ts b/apps/dash/e2e/features/org/term-management.spec.ts new file mode 100644 index 00000000..21b504c7 --- /dev/null +++ b/apps/dash/e2e/features/org/term-management.spec.ts @@ -0,0 +1,83 @@ +import path from "node:path"; +import { expect, test } from "@playwright/test"; +import { iHaveLoggedInAsSuperAdmin } from "../../helper/auth"; +import { OrgCreatePage } from "../../pages/org/OrgCreatePage"; +import { OrgDetailPage } from "../../pages/org/OrgDetailPage"; + +test.describe("Organizational Term Management", () => { + test("should manage terms in an organization", async ({ page, context }) => { + // Extend timeout: org create + term CRUD + Google Drive upload can take > 30s + test.setTimeout(90_000); + + // 0. Setup authentication and page objects + await iHaveLoggedInAsSuperAdmin(context); + const detailPage = new OrgDetailPage(page); + const createPage = new OrgCreatePage(page); + + // 1. Create a dedicated organization for this test to ensure isolation + const randomSuffix = Math.random().toString(36).substring(7); + const orgName = `Org E2E Term ${randomSuffix}`; + await createPage.goto(); + await createPage.fillName(orgName); + await createPage.submit(); + + // 2. Wait for redirect to details page and get the URL + await expect(page).toHaveURL(/\/org\/(?!new$)[^/]+$/); + + const termData = { + name: "Pengurus Periode 2025-2030", + startDate: "2025-01-01", + endDate: "2030-12-31", + skNumber: "SK/2025/001", + skDate: "2025-01-01", + description: "Masa jabatan pengurus periode baru.", + }; + + // 3. Create term + await detailPage.addTerm(termData); + + // 2. Verify in list + await expect(page.getByText(termData.name)).toBeVisible(); + + // 3. Update term + const updatedName = "Pengurus Periode 2025-2030 (Updated)"; + await detailPage.updateTermAt(0, { name: updatedName }); + + // 4. Verify update + await expect(page.getByText(updatedName)).toBeVisible(); + + // 5. Expand term + await detailPage.toggleTermExpandAt(0); + + // 6. Upload attachment + const attachmentName = `SK Pelantikan ${randomSuffix}`; + const dummyFilePath = path.join(process.cwd(), "e2e/assets/dummy.pdf"); + await detailPage.uploadTermAttachment(0, attachmentName, dummyFilePath); + + // 7. Verify attachment is in list + // Hard reload ensures fresh server data and clean React state. + // (router.refresh() can preserve stale expandedTerms causing false-hidden elements) + await page.reload(); + await page.waitForLoadState("networkidle"); + await detailPage.ensureTermExpandedAt(0); + + const attachmentItem = page + .getByTestId("attachment-item-name") + .filter({ hasText: attachmentName }); + + // Use toBeAttached — the

has class="truncate" (overflow:hidden) which can + // cause Playwright to report it as "hidden" even when the term section is visible. + await expect(attachmentItem).toBeAttached({ timeout: 10000 }); + + console.log( + "Term Management E2E: Successfully verified update and attachment", + ); + + // 8. Delete term + await detailPage.deleteTermAt(0); + + // 9. Verify removed + await expect(page.getByText(updatedName)).toHaveCount(0); + await expect(page.getByText("Belum ada masa jabatan.")).toBeVisible(); + }); +}); diff --git a/apps/dash/e2e/pages/org/OrgDetailPage.ts b/apps/dash/e2e/pages/org/OrgDetailPage.ts index 5853b92f..f215f83f 100644 --- a/apps/dash/e2e/pages/org/OrgDetailPage.ts +++ b/apps/dash/e2e/pages/org/OrgDetailPage.ts @@ -1,4 +1,4 @@ -import type { Locator, Page } from "@playwright/test"; +import { expect, type Locator, type Page } from "@playwright/test"; /** * Page Object Model for the Organization Detail page. @@ -20,6 +20,17 @@ export class OrgDetailPage { readonly unitNameInput: Locator; readonly unitDescriptionInput: Locator; readonly unitSubmitButton: Locator; + // Term management + readonly addTermButton: Locator; + readonly termForm: Locator; + readonly termNameInput: Locator; + readonly termStartDateInput: Locator; + readonly termEndDateInput: Locator; + readonly termSkNumberInput: Locator; + readonly termSkDateInput: Locator; + readonly termDescriptionInput: Locator; + readonly termSubmitButton: Locator; + readonly termList: Locator; constructor(page: Page) { this.page = page; @@ -40,6 +51,17 @@ export class OrgDetailPage { this.unitNameInput = page.getByTestId("unit-name-input"); this.unitDescriptionInput = page.getByTestId("unit-description-input"); this.unitSubmitButton = page.getByTestId("unit-submit-button"); + // Term management + this.addTermButton = page.getByTestId("add-term-button"); + this.termForm = page.getByTestId("term-form"); + this.termNameInput = page.getByTestId("term-name-input"); + this.termStartDateInput = page.getByTestId("term-start-date-input"); + this.termEndDateInput = page.getByTestId("term-end-date-input"); + this.termSkNumberInput = page.getByTestId("term-sk-number-input"); + this.termSkDateInput = page.getByTestId("term-sk-date-input"); + this.termDescriptionInput = page.getByTestId("term-description-input"); + this.termSubmitButton = page.getByTestId("term-submit-button"); + this.termList = page.getByTestId("term-list"); } /** @@ -207,7 +229,211 @@ export class OrgDetailPage { async getUnitNames(): Promise { const unitHeaders = this.page.locator('[data-testid="unit-list"] h4'); // Wait for at least one unit to be visible - await unitHeaders.first().waitFor({ state: "visible" }); + if ((await unitHeaders.count()) > 0) { + await unitHeaders.first().waitFor({ state: "visible" }); + } return await unitHeaders.allTextContents(); } + + /** + * Adds a new organizational term (Masa Jabatan). + * + * @param data - Term details. + */ + async addTerm(data: { + name: string; + startDate: string; + endDate: string; + skNumber?: string; + skDate?: string; + description?: string; + }) { + await this.addTermButton.scrollIntoViewIfNeeded(); + await this.addTermButton.waitFor({ state: "visible", timeout: 10000 }); + await this.addTermButton.click(); + await this.termForm.waitFor({ state: "visible", timeout: 5000 }); + + await this.termNameInput.fill(data.name); + await this.termStartDateInput.fill(data.startDate); + await this.termEndDateInput.fill(data.endDate); + + if (data.skNumber) await this.termSkNumberInput.fill(data.skNumber); + if (data.skDate) await this.termSkDateInput.fill(data.skDate); + if (data.description) + await this.termDescriptionInput.fill(data.description); + + await this.termSubmitButton.click(); + await this.termForm.waitFor({ state: "hidden" }); + } + + /** + * Toggles expansion of a term in the list. + * + * @param index - The 0-based index of the term. + */ + async toggleTermExpandAt(index: number) { + const termItem = this.page + .locator('[data-testid^="term-item-"]') + .nth(index); + await termItem.getByTestId("term-expand-button").click(); + // Wait for animation + await this.page.waitForTimeout(500); + } + + /** + * Ensures a term at the specified index is expanded. + * If already expanded, does nothing. If collapsed, expands it. + * + * @param index - The 0-based index of the term. + */ + async ensureTermExpandedAt(index: number) { + const termItem = this.page + .locator('[data-testid^="term-item-"]') + .nth(index); + await termItem.waitFor({ state: "visible" }); + const state = await termItem + .getByTestId("term-expand-button") + .getAttribute("data-state"); + if (state !== "open") { + await termItem.getByTestId("term-expand-button").click(); + } + // Wait for expanded content to be visible (confirms animation is complete) + await termItem + .getByTestId("term-expanded-content") + .waitFor({ state: "visible" }); + } + + /** + * Checks if a term at the specified index is expanded. + * + * @param index - The 0-based index of the term. + * @returns True if expanded, false otherwise. + */ + async isTermExpandedAt(index: number): Promise { + const termItem = this.page + .locator('[data-testid^="term-item-"]') + .nth(index); + const state = await termItem + .getByTestId("term-expand-button") + .getAttribute("data-state"); + return state === "open"; + } + + /** + * Deletes a term at the specified index. + * + * @param index - The 0-based index of the term. + */ + async deleteTermAt(index: number) { + this.page.once("dialog", (dialog) => dialog.accept()); + const termItem = this.page + .locator('[data-testid^="term-item-"]') + .nth(index); + await termItem.getByTestId("term-delete-button").click(); + } + + /** + * Updates a term at the specified index. + * + * @param index - The 0-based index of the term. + * @param data - The update data. + */ + async updateTermAt( + index: number, + data: { + name?: string; + startDate?: string; + endDate?: string; + skNumber?: string; + skDate?: string; + description?: string; + }, + ) { + const termItem = this.page + .locator('[data-testid^="term-item-"]') + .nth(index); + await termItem.scrollIntoViewIfNeeded(); + await termItem.getByTestId("term-edit-button").click(); + await this.termForm.waitFor({ state: "visible", timeout: 5000 }); + + if (data.name) await this.termNameInput.fill(data.name); + if (data.startDate) await this.termStartDateInput.fill(data.startDate); + if (data.endDate) await this.termEndDateInput.fill(data.endDate); + if (data.skNumber) await this.termSkNumberInput.fill(data.skNumber); + if (data.skDate) await this.termSkDateInput.fill(data.skDate); + if (data.description) + await this.termDescriptionInput.fill(data.description); + + await this.termSubmitButton.click(); + await this.termForm.waitFor({ state: "hidden" }); + } + + /** + * Uploads an attachment to a term. + * + * @param index - The 0-based index of the term. + * @param fileName - The name of the attachment. + * @param filePath - The path to the file. + */ + async uploadTermAttachment( + index: number, + fileName: string, + filePath: string, + ) { + const termItem = this.page + .locator('[data-testid^="term-item-"]') + .nth(index); + + // Expand if not already - check for expansion button state or content visibility + // If not visible, click expand + // Expand if not already + if (!(await this.isTermExpandedAt(index))) { + await this.toggleTermExpandAt(index); + } + + const fileInput = termItem.getByTestId("attachment-file-input"); + const nameInput = termItem.getByTestId("attachment-name-input"); + const uploadBtn = termItem.getByTestId("attachment-submit-button"); + + await fileInput.setInputFiles(filePath); + await nameInput.fill(fileName); + await uploadBtn.click(); + + // Wait for success toast to appear (upload done) + const successToast = this.page + .locator("li[data-sonner-toast]") + .filter({ hasText: "Lampiran berhasil diunggah." }); + await expect(successToast).toBeVisible({ timeout: 15000 }); + + // Wait for router.refresh() to complete: network goes idle and term card is stable + await this.page.waitForLoadState("networkidle", { timeout: 15000 }); + // Wait for the term card to re-appear (confirms React re-render is done) + await this.page + .locator('[data-testid^="term-item-"]') + .nth(index) + .waitFor({ state: "visible" }); + } + + /** + * Gets all term names from the list. + * + * @returns An array of term names. + */ + async getTermNames(): Promise { + const termHeaders = this.termList.locator("h4"); + // Wait for the list to be populated if needed + await this.page.waitForTimeout(500); + return await termHeaders.allTextContents(); + } + + /** + * Gets a specific term item locator by its name. + * + * @param name - The name of the term. + */ + getTermItem(name: string) { + return this.termList.locator('[data-testid^="term-item-"]').filter({ + hasText: name, + }); + } } diff --git a/apps/dash/src/features/attachment/actions/attachment.ts b/apps/dash/src/features/attachment/actions/attachment.ts index d7ecc7e7..fb97d4a9 100644 --- a/apps/dash/src/features/attachment/actions/attachment.ts +++ b/apps/dash/src/features/attachment/actions/attachment.ts @@ -8,6 +8,7 @@ import { } from "@domus/core"; import type { Attachment } from "@domus/core/entity/attachment"; import type { AttachmentReferenceType } from "@domus/core/entity/enums"; +import { revalidatePath } from "next/cache"; import { getAuthSession } from "@/shared/auth/server"; import { attachment as attachmentService } from "@/shared/core"; @@ -51,20 +52,34 @@ export async function uploadAttachmentAction( arrayBuffer: () => file.arrayBuffer(), }; - return attachmentService.upload( + const res = await attachmentService.upload( session.context, fileData, referenceId, referenceType, ); + + const path = formData.get("revalidatePath") as string; + if (res[0] && path) { + revalidatePath(path); + } + + return res; } export async function deleteAttachmentAction( id: string, + revalidatePathStr?: string, ): Promise> { const [session, sessionError] = await getAuthSession(); if (sessionError || !session) return fail(sessionError || new ForbiddenError("Unauthorized")); - return attachmentService.delete(session.context, id); + const res = await attachmentService.delete(session.context, id); + + if (!res[1] && revalidatePathStr) { + revalidatePath(revalidatePathStr); + } + + return res; } diff --git a/apps/dash/src/features/attachment/ui/AttachmentList.tsx b/apps/dash/src/features/attachment/ui/AttachmentList.tsx index dac5165b..84b717ad 100644 --- a/apps/dash/src/features/attachment/ui/AttachmentList.tsx +++ b/apps/dash/src/features/attachment/ui/AttachmentList.tsx @@ -69,7 +69,10 @@ export function AttachmentList({

-

+

{attachment.name}

diff --git a/apps/dash/src/features/attachment/ui/AttachmentUpload.tsx b/apps/dash/src/features/attachment/ui/AttachmentUpload.tsx index de60a525..c1db489e 100644 --- a/apps/dash/src/features/attachment/ui/AttachmentUpload.tsx +++ b/apps/dash/src/features/attachment/ui/AttachmentUpload.tsx @@ -51,6 +51,7 @@ export function AttachmentUpload({ formData.append("referenceType", referenceType); formData.append("name", name); formData.append("file", file); + formData.append("revalidatePath", window.location.pathname); const [attachment, err] = await onUpload(formData); @@ -103,6 +104,7 @@ export function AttachmentUpload({ {file.name} + )} +
+ +
+ {terms.length === 0 ? ( +
+

+ {t("emptyState") || "Belum ada masa jabatan."} +

+ {canManage && ( + + )} +
+ ) : ( + terms.map((term) => ( + + +
+
+ +
+
+

+ {term.name} +

+
+ {formatDate(term.startDate)} + • + {formatDate(term.endDate)} +
+
+
+ {canManage && ( + <> + + + + )} + +
+
+ + {expandedTerms[term.id] && ( +
+
+ {/* Term Info */} +
+
+

+ {t("skInfo") || "Informasi SK"} +

+

+ {term.skNumber || "-"} +

+

+ {term.skDate + ? formatDate(term.skDate) + : t("noSkDate") || "Tanggal SK tidak tersedia"} +

+
+ {term.description && ( +
+

+ {t("description") || "Keterangan"} +

+

+ {term.description} +

+
+ )} +
+ + {/* Attachments Section */} +
+

+ + {t("attachments") || "Lampiran (SK/Dokumen)"} +

+ + { + const [_, err] = await deleteAttachmentAction( + id, + window.location.pathname, + ); + if (err) throw err; + startTransition(() => { + router.refresh(); + }); + }} + /> + + {canManage && ( +
+ { + startTransition(() => { + router.refresh(); + }); + }} + /> +
+ )} +
+
+
+ )} +
+
+ )) + )} +
+ + {/* Create/Edit Dialog */} + + +
+ + {editingTerm + ? t("editDialogTitle") || "Ubah Masa Jabatan" + : t("addDialogTitle") || "Tambah Masa Jabatan"} + + + {editingTerm + ? t("editDialogDesc") || "Sesuaikan detail masa jabatan." + : t("addDialogDesc") || "Masukkan periode kepengurusan baru."} + +
+
+ updateTermAction(editingTerm.id, data) + : createTermAction + } + onSuccess={() => { + setIsDialogOpen(false); + toast.success( + editingTerm + ? t("updateSuccess") || "Berhasil diperbarui" + : t("createSuccess") || "Berhasil ditambahkan", + ); + }} + onCancel={() => setIsDialogOpen(false)} + /> +
+
+
+
+ ); +} diff --git a/apps/dash/src/shared/core/service.ts b/apps/dash/src/shared/core/service.ts index 25ab41bb..163215a7 100644 --- a/apps/dash/src/shared/core/service.ts +++ b/apps/dash/src/shared/core/service.ts @@ -79,12 +79,7 @@ export const unit = new UnitService( privateStorage, logger, ); -export const term = new TermService( - repo.term, - publicStorage, - privateStorage, - logger, -); +export const term = new TermService(repo.term, logger); export const placement = new PlacementService( repo.placement, publicStorage, diff --git a/apps/dash/src/shared/i18n/messages/id.json b/apps/dash/src/shared/i18n/messages/id.json index 7a493123..128e1906 100644 --- a/apps/dash/src/shared/i18n/messages/id.json +++ b/apps/dash/src/shared/i18n/messages/id.json @@ -247,7 +247,10 @@ "confirmDeleteCancel": "Batal", "confirmDeleteAction": "Hapus", "deleteSuccess": "Organisasi berhasil dihapus.", - "deleteError": "Gagal menghapus organisasi." + "deleteError": "Gagal menghapus organisasi.", + "attachmentsTitle": "Dokumen & Lampiran", + "uploadNewAttachment": "Unggah Lampiran Baru", + "attachmentUploaded": "Lampiran berhasil diunggah" }, "OrgPublicPage": { "ctaJoin": "Daftar Sekarang", @@ -912,5 +915,39 @@ "viewDocument": "Lihat Dokumen", "btnUpload": "Unggah Dokumen", "btnSubmitting": "Mengunggah..." + }, + "TermList": { + "title": "Masa Jabatan", + "subtitle": "Kelola periode kepengurusan dan SK organisasi.", + "addTerm": "Tambah Masa Jabatan", + "emptyState": "Belum ada masa jabatan.", + "addFirstTerm": "Tambah masa jabatan pertama", + "confirmDelete": "Apakah Anda yakin ingin menghapus masa jabatan ini?", + "deleteSuccess": "Masa jabatan berhasil dihapus.", + "skInfo": "Informasi SK", + "noSkDate": "Tanggal SK tidak tersedia", + "description": "Keterangan", + "attachments": "Lampiran (SK/Dokumen)", + "editDialogTitle": "Ubah Masa Jabatan", + "addDialogTitle": "Tambah Masa Jabatan", + "editDialogDesc": "Sesuaikan detail masa jabatan.", + "addDialogDesc": "Masukkan periode kepengurusan baru.", + "updateSuccess": "Masa jabatan berhasil diperbarui.", + "createSuccess": "Masa jabatan berhasil ditambahkan." + }, + "TermForm": { + "nameLabel": "Nama Periode / Jabatan", + "namePlaceholder": "Contoh: Pengurus Inti 2024-2027", + "startDateLabel": "Tanggal Mulai", + "endDateLabel": "Tanggal Berakhir", + "skNumberLabel": "Nomor SK", + "skNumberPlaceholder": "Contoh: 001/SK/PAROKI/2024", + "skDateLabel": "Tanggal SK", + "descLabel": "Keterangan", + "descPlaceholder": "Ceritain detail masa jabatannya bray...", + "btnCancel": "Batal", + "btnSubmitting": "Menyimpan...", + "btnSave": "Simpan Perubahan", + "btnAdd": "Tambah Masa Jabatan" } } diff --git a/packages/core/src/entity/term.ts b/packages/core/src/entity/term.ts index 2ce5b173..8af9df35 100644 --- a/packages/core/src/entity/term.ts +++ b/packages/core/src/entity/term.ts @@ -22,3 +22,32 @@ export const TermEntity = z.object({ * Type representing a term entity. */ export type Term = z.infer; + +/** + * Zod schema for creating a term. + */ +export const CreateTermSchema = TermEntity.omit({ + id: true, + createdAt: true, + updatedAt: true, + deletedAt: true, +}).extend({ + startDate: z.coerce.date().nullable(), + endDate: z.coerce.date().nullable(), + skDate: z.coerce.date().nullable(), +}); + +/** + * Zod schema for updating a term. + */ +export const UpdateTermSchema = CreateTermSchema.partial(); + +/** + * Type representing data required to create a new term. + */ +export type CreateTerm = z.infer; + +/** + * Type representing data used to update an existing term. + */ +export type UpdateTerm = z.infer; diff --git a/packages/core/src/service/term.spec.ts b/packages/core/src/service/term.spec.ts index 17323e98..e9b901df 100644 --- a/packages/core/src/service/term.spec.ts +++ b/packages/core/src/service/term.spec.ts @@ -1,46 +1,81 @@ import { v7 } from 'uuid'; -import { describe, expect, it } from 'vitest'; +import { beforeEach, describe, expect, it } from 'vitest'; import { mock } from 'vitest-mock-extended'; import type { ILogger } from '../contract/logger'; -import type { IPrivateStorage } from '../contract/storage-private'; -import type { IPublicStorage } from '../contract/storage-public'; import type { ITermRepository } from '../contract/term'; +import type { AuthContext } from '../entity/auth-context'; +import { AccountStatus, OrgRole, UserRole } from '../entity/enums'; import type { Term } from '../entity/term'; -import { NotFoundError } from '../error'; +import { ForbiddenError, NotFoundError } from '../error'; import { TermService } from './term'; describe('TermService', () => { const repo = mock(); - const publicStorage = mock(); - const privateStorage = mock(); const logger = mock(); - const service = new TermService(repo, publicStorage, privateStorage, logger); + const service = new TermService(repo, logger); const termId = v7(); const organizationId = v7(); + const userId = v7(); - const mockTerm = { + const mockTerm: Term = { id: termId, organizationId, name: '2024-2027', startDate: new Date(), endDate: new Date(), + description: null, + skNumber: null, + skDate: null, createdAt: new Date(), updatedAt: new Date(), deletedAt: null, }; + const adminCtx: AuthContext = { + userId, + accountStatus: AccountStatus.Approved, + roles: [UserRole.ParishAdmin], + orgRoles: {}, + }; + + const orgAdminCtx: AuthContext = { + userId, + accountStatus: AccountStatus.Approved, + roles: [UserRole.Parishioner], + orgRoles: { + [organizationId]: OrgRole.Admin, + }, + }; + + const unauthorizedCtx: AuthContext = { + userId, + accountStatus: AccountStatus.Approved, + roles: [UserRole.Parishioner], + orgRoles: { + 'other-org': OrgRole.Admin, + }, + }; + + beforeEach(() => { + repo.findById.mockReset(); + repo.findByOrganizationId.mockReset(); + repo.create.mockReset(); + repo.update.mockReset(); + repo.delete.mockReset(); + }); + describe('findById', () => { it('should return term if found', async () => { - repo.findById.mockResolvedValue(mockTerm as unknown as Term); - const [result, error] = await service.findById(termId); + repo.findById.mockResolvedValue(mockTerm); + const [result, error] = await service.findById(termId, adminCtx); expect(error).toBeNull(); expect(result).toEqual(mockTerm); }); it('should return NotFoundError if not found', async () => { repo.findById.mockResolvedValue(null); - const [result, error] = await service.findById(termId); + const [result, error] = await service.findById(termId, adminCtx); expect(result).toBeNull(); expect(error).toBeInstanceOf(NotFoundError); }); @@ -48,53 +83,114 @@ describe('TermService', () => { describe('findByOrganizationId', () => { it('should return list of terms for an organization', async () => { - repo.findByOrganizationId.mockResolvedValue([ - mockTerm as unknown as Term, - ]); - const [result, error] = - await service.findByOrganizationId(organizationId); + repo.findByOrganizationId.mockResolvedValue([mockTerm]); + const [result, error] = await service.findByOrganizationId( + organizationId, + adminCtx, + ); expect(error).toBeNull(); expect(result).toHaveLength(1); }); }); describe('create', () => { - it('should create term', async () => { - repo.create.mockResolvedValue(mockTerm as unknown as Term); - const [result, error] = await service.create({ - organizationId, - name: 'New Term', - startDate: new Date(), - endDate: new Date(), - description: null, - skNumber: null, - skDate: null, - }); + it('should create term if authorized (ParishAdmin)', async () => { + repo.create.mockResolvedValue(mockTerm); + const [result, error] = await service.create( + { + organizationId, + name: 'New Term', + startDate: new Date(), + endDate: new Date(), + description: null, + skNumber: null, + skDate: null, + }, + adminCtx, + ); expect(error).toBeNull(); expect(result).toEqual(mockTerm); }); + + it('should create term if authorized (OrgAdmin)', async () => { + repo.create.mockResolvedValue(mockTerm); + const [result, error] = await service.create( + { + organizationId, + name: 'New Term', + startDate: new Date(), + endDate: new Date(), + description: null, + skNumber: null, + skDate: null, + }, + orgAdminCtx, + ); + expect(error).toBeNull(); + expect(result).toEqual(mockTerm); + }); + + it('should return ForbiddenError if unauthorized', async () => { + const [_result, error] = await service.create( + { + organizationId, + name: 'New Term', + startDate: new Date(), + endDate: new Date(), + description: null, + skNumber: null, + skDate: null, + }, + unauthorizedCtx, + ); + expect(error).toBeInstanceOf(ForbiddenError); + }); }); describe('update', () => { - it('should update term', async () => { + it('should update term if authorized', async () => { + repo.findById.mockResolvedValue(mockTerm); repo.update.mockResolvedValue({ ...mockTerm, name: 'Updated', - } as unknown as Term); - const [result, error] = await service.update(termId, { - name: 'Updated', }); + const [result, error] = await service.update( + termId, + { + name: 'Updated', + }, + orgAdminCtx, + ); expect(error).toBeNull(); expect(result?.name).toBe('Updated'); }); + + it('should return ForbiddenError if unauthorized', async () => { + repo.findById.mockResolvedValue(mockTerm); + const [_result, error] = await service.update( + termId, + { + name: 'Updated', + }, + unauthorizedCtx, + ); + expect(error).toBeInstanceOf(ForbiddenError); + }); }); describe('delete', () => { - it('should delete term', async () => { + it('should delete term if authorized', async () => { + repo.findById.mockResolvedValue(mockTerm); repo.delete.mockResolvedValue(undefined); - const [_result, error] = await service.delete(termId); + const [_result, error] = await service.delete(termId, adminCtx); expect(error).toBeNull(); expect(repo.delete).toHaveBeenCalledWith(termId); }); + + it('should return ForbiddenError if unauthorized', async () => { + repo.findById.mockResolvedValue(mockTerm); + const [_result, error] = await service.delete(termId, unauthorizedCtx); + expect(error).toBeInstanceOf(ForbiddenError); + }); }); }); diff --git a/packages/core/src/service/term.ts b/packages/core/src/service/term.ts index 17866cbd..02e142fa 100644 --- a/packages/core/src/service/term.ts +++ b/packages/core/src/service/term.ts @@ -1,94 +1,207 @@ import type { ILogger } from '../contract/logger'; -import type { IPrivateStorage } from '../contract/storage-private'; -import type { IPublicStorage } from '../contract/storage-public'; import type { ITermRepository } from '../contract/term'; +import type { AuthContext } from '../entity/auth-context'; +import { OrgRole, UserRole } from '../entity/enums'; import type { Term } from '../entity/term'; -import { InternalError, NotFoundError } from '../error'; +import { ForbiddenError, InternalError, NotFoundError } from '../error'; import { fail, ok, type Result } from '../utils/result'; /** - * Service for managing organizational terms. + * Service for managing organization term records (masa jabatan). */ export class TermService { constructor( private readonly repo: ITermRepository, - readonly _publicStorage: IPublicStorage, - readonly _privateStorage: IPrivateStorage, private readonly logger: ILogger, ) {} - async findById(id: string): Promise> { + /** + * Authorizes write operations on a term. + * Access is granted to Organization Admins/Owners, Parish Admins, and Super Admins. + * + * @param organizationId - The organization ID. + * @param ctx - The authentication context. + * @returns `ok(undefined)` if authorized, `fail(ForbiddenError)` if not. + */ + private authorizeWrite( + organizationId: string, + ctx: AuthContext, + ): Result { + const isGlobalAdmin = + ctx.roles.includes(UserRole.ParishAdmin) || + ctx.roles.includes(UserRole.SuperAdmin); + + const isOrgAdmin = + ctx.orgRoles?.[organizationId] === OrgRole.Admin || + ctx.orgRoles?.[organizationId] === OrgRole.Owner; + + if (!isGlobalAdmin && !isOrgAdmin) { + this.logger.warn('Unauthorized term write attempt', { + organizationId, + userId: ctx.userId, + }); + return fail(new ForbiddenError()); + } + + return ok(undefined); + } + + /** + * Retrieves a term by its ID. + * + * @param id - The term ID. + * @param ctx - The auth context for logging. + * @returns `ok(term)` if found, `fail(NotFoundError)` if not. + */ + async findById(id: string, ctx: AuthContext): Promise> { try { const term = await this.repo.findById(id); if (!term) { - this.logger.info('Term not found', { id }); return fail(new NotFoundError('Term')); } return ok(term); } catch (error) { - this.logger.error('Failed to find term by id', { id, error }); + this.logger.error('Failed to find term', { + id, + userId: ctx.userId, + error, + }); return fail(new InternalError(error)); } } - async findByOrganizationId(organizationId: string): Promise> { + /** + * Retrieves all terms for a specific organization. + * + * @param organizationId - The organization ID. + * @param ctx - The auth context for logging. + * @returns `ok(terms)` on success. + */ + async findByOrganizationId( + organizationId: string, + ctx: AuthContext, + ): Promise> { try { const terms = await this.repo.findByOrganizationId(organizationId); return ok(terms); } catch (error) { - this.logger.error('Failed to find terms by organization', { + this.logger.error('Failed to find terms by organizationId', { organizationId, + userId: ctx.userId, error, }); return fail(new InternalError(error)); } } + /** + * Creates a new organization term. + * Requires Admin/Owner role for the organization or Global Admin role. + * + * @param data - The term data. + * @param ctx - The auth context. + * @returns `ok(term)` on success, `fail(ForbiddenError)` if not authorized. + */ async create( - term: Omit, + data: Omit, + ctx: AuthContext, ): Promise> { try { - const result = await this.repo.create(term); + const authResult = this.authorizeWrite(data.organizationId, ctx); + if (authResult[1]) return fail(authResult[1]); + + const term = await this.repo.create(data); this.logger.info('Term created', { - termId: result.id, - organizationId: result.organizationId, + termId: term.id, + orgId: data.organizationId, + userId: ctx.userId, }); - return ok(result); + return ok(term); } catch (error) { this.logger.error('Failed to create term', { - organizationId: term.organizationId, + orgId: data.organizationId, + userId: ctx.userId, error, }); return fail(new InternalError(error)); } } + /** + * Updates an existing term. + * Requires Admin/Owner role for the organization or Global Admin role. + * + * @param id - The term ID. + * @param data - The update data. + * @param ctx - The auth context. + * @returns `ok(term)` on success, `fail(ForbiddenError)` if not authorized. + */ async update( id: string, - term: Partial< - Omit< - Term, - 'id' | 'organizationId' | 'createdAt' | 'updatedAt' | 'deletedAt' - > - >, + data: Partial>, + ctx: AuthContext, ): Promise> { try { - const result = await this.repo.update(id, term); - this.logger.info('Term updated', { termId: id }); - return ok(result); + const existing = await this.repo.findById(id); + if (!existing) { + return fail(new NotFoundError('Term')); + } + + const authResult = this.authorizeWrite(existing.organizationId, ctx); + if (authResult[1]) return fail(authResult[1]); + + const updated = await this.repo.update(id, data); + if (!updated) { + return fail(new NotFoundError('Term')); + } + + this.logger.info('Term updated', { + termId: id, + orgId: existing.organizationId, + userId: ctx.userId, + }); + return ok(updated); } catch (error) { - this.logger.error('Failed to update term', { termId: id, error }); + this.logger.error('Failed to update term', { + id, + userId: ctx.userId, + error, + }); return fail(new InternalError(error)); } } - async delete(id: string): Promise> { + /** + * Soft deletes a term. + * Requires Admin/Owner role for the organization or Global Admin role. + * + * @param id - The term ID to delete. + * @param ctx - The auth context. + * @returns `ok(undefined)` on success. + */ + async delete(id: string, ctx: AuthContext): Promise> { try { + const existing = await this.repo.findById(id); + if (!existing) { + return fail(new NotFoundError('Term')); + } + + const authResult = this.authorizeWrite(existing.organizationId, ctx); + if (authResult[1]) return fail(authResult[1]); + await this.repo.delete(id); - this.logger.info('Term deleted', { termId: id }); + this.logger.info('Term deleted', { + termId: id, + orgId: existing.organizationId, + userId: ctx.userId, + }); return ok(undefined); } catch (error) { - this.logger.error('Failed to delete term', { termId: id, error }); + this.logger.error('Failed to delete term', { + id, + userId: ctx.userId, + error, + }); return fail(new InternalError(error)); } } From 87ee8823c6b51d6429c3872666e62c323119f3ad Mon Sep 17 00:00:00 2001 From: Anthonius Munthi Date: Sun, 19 Apr 2026 00:25:10 +0800 Subject: [PATCH 08/10] fix(db): reset db to initial migration --- ...00_initial.sql => 0000_sour_shockwave.sql} | 6 +- .../0001_reflective_gamma_corps.sql | 1 - .../db/migrations/0002_greedy_triathlon.sql | 1 - .../0003_motionless_jack_murdock.sql | 1 - packages/db/migrations/0004_daffy_wong.sql | 2 - .../db/migrations/meta/0000_snapshot.json | 18 +- .../db/migrations/meta/0001_snapshot.json | 2779 ---------------- .../db/migrations/meta/0002_snapshot.json | 2785 ----------------- .../db/migrations/meta/0003_snapshot.json | 2779 ---------------- .../db/migrations/meta/0004_snapshot.json | 2785 ----------------- packages/db/migrations/meta/_journal.json | 32 +- 11 files changed, 14 insertions(+), 11175 deletions(-) rename packages/db/migrations/{0000_initial.sql => 0000_sour_shockwave.sql} (99%) delete mode 100644 packages/db/migrations/0001_reflective_gamma_corps.sql delete mode 100644 packages/db/migrations/0002_greedy_triathlon.sql delete mode 100644 packages/db/migrations/0003_motionless_jack_murdock.sql delete mode 100644 packages/db/migrations/0004_daffy_wong.sql delete mode 100644 packages/db/migrations/meta/0001_snapshot.json delete mode 100644 packages/db/migrations/meta/0002_snapshot.json delete mode 100644 packages/db/migrations/meta/0003_snapshot.json delete mode 100644 packages/db/migrations/meta/0004_snapshot.json diff --git a/packages/db/migrations/0000_initial.sql b/packages/db/migrations/0000_sour_shockwave.sql similarity index 99% rename from packages/db/migrations/0000_initial.sql rename to packages/db/migrations/0000_sour_shockwave.sql index e4fd48c2..9364949f 100644 --- a/packages/db/migrations/0000_initial.sql +++ b/packages/db/migrations/0000_sour_shockwave.sql @@ -1,4 +1,4 @@ -CREATE TYPE "public"."attachment_reference_type" AS ENUM('Event', 'Organization', 'Term');--> statement-breakpoint +CREATE TYPE "public"."attachment_reference_type" AS ENUM('Event', 'Organization', 'Term', 'Transaction');--> statement-breakpoint CREATE TYPE "public"."attendance_method" AS ENUM('qr-code', 'gps', 'manual');--> statement-breakpoint CREATE TYPE "public"."attendance_status" AS ENUM('present', 'pending', 'absent');--> statement-breakpoint CREATE TYPE "public"."event_status" AS ENUM('published', 'completed');--> statement-breakpoint @@ -159,7 +159,6 @@ CREATE TABLE "events" ( "radius_meters" integer DEFAULT 100 NOT NULL, "start_date_time" timestamp NOT NULL, "end_date_time" timestamp, - "event_photo" text, "qr_code" text NOT NULL, "visibility" "event_visibility" NOT NULL, "is_rsvp_enabled" boolean DEFAULT false NOT NULL, @@ -356,7 +355,8 @@ CREATE TABLE "transaction_categories" ( "type" "transaction_type" NOT NULL, "created_at" timestamp DEFAULT now() NOT NULL, "updated_at" timestamp DEFAULT now() NOT NULL, - "deleted_at" timestamp + "deleted_at" timestamp, + CONSTRAINT "transaction_categories_name_type_unique" UNIQUE("name","type") ); --> statement-breakpoint CREATE TABLE "transactions" ( diff --git a/packages/db/migrations/0001_reflective_gamma_corps.sql b/packages/db/migrations/0001_reflective_gamma_corps.sql deleted file mode 100644 index 53368c51..00000000 --- a/packages/db/migrations/0001_reflective_gamma_corps.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE "events" DROP COLUMN "event_photo"; \ No newline at end of file diff --git a/packages/db/migrations/0002_greedy_triathlon.sql b/packages/db/migrations/0002_greedy_triathlon.sql deleted file mode 100644 index f1004e1a..00000000 --- a/packages/db/migrations/0002_greedy_triathlon.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE "org_terms" ADD COLUMN "sk_document" text; \ No newline at end of file diff --git a/packages/db/migrations/0003_motionless_jack_murdock.sql b/packages/db/migrations/0003_motionless_jack_murdock.sql deleted file mode 100644 index 7ef41f51..00000000 --- a/packages/db/migrations/0003_motionless_jack_murdock.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE "org_terms" DROP COLUMN "sk_document"; \ No newline at end of file diff --git a/packages/db/migrations/0004_daffy_wong.sql b/packages/db/migrations/0004_daffy_wong.sql deleted file mode 100644 index 4ac3141d..00000000 --- a/packages/db/migrations/0004_daffy_wong.sql +++ /dev/null @@ -1,2 +0,0 @@ -ALTER TYPE "public"."attachment_reference_type" ADD VALUE 'Transaction';--> statement-breakpoint -ALTER TABLE "transaction_categories" ADD CONSTRAINT "transaction_categories_name_type_unique" UNIQUE("name","type"); \ No newline at end of file diff --git a/packages/db/migrations/meta/0000_snapshot.json b/packages/db/migrations/meta/0000_snapshot.json index 792a29c5..95937f4b 100644 --- a/packages/db/migrations/meta/0000_snapshot.json +++ b/packages/db/migrations/meta/0000_snapshot.json @@ -1,5 +1,5 @@ { - "id": "cf56cb7f-9ef9-4086-a05d-36373913c55e", + "id": "721b3a99-f0b0-4c1d-8d52-6c35a677e8e9", "prevId": "00000000-0000-0000-0000-000000000000", "version": "7", "dialect": "postgresql", @@ -1093,12 +1093,6 @@ "primaryKey": false, "notNull": false }, - "event_photo": { - "name": "event_photo", - "type": "text", - "primaryKey": false, - "notNull": false - }, "qr_code": { "name": "qr_code", "type": "text", @@ -2462,7 +2456,13 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {}, + "uniqueConstraints": { + "transaction_categories_name_type_unique": { + "name": "transaction_categories_name_type_unique", + "nullsNotDistinct": false, + "columns": ["name", "type"] + } + }, "policies": {}, "checkConstraints": {}, "isRLSEnabled": false @@ -2694,7 +2694,7 @@ "public.attachment_reference_type": { "name": "attachment_reference_type", "schema": "public", - "values": ["Event", "Organization", "Term"] + "values": ["Event", "Organization", "Term", "Transaction"] }, "public.attendance_method": { "name": "attendance_method", diff --git a/packages/db/migrations/meta/0001_snapshot.json b/packages/db/migrations/meta/0001_snapshot.json deleted file mode 100644 index 590709bf..00000000 --- a/packages/db/migrations/meta/0001_snapshot.json +++ /dev/null @@ -1,2779 +0,0 @@ -{ - "id": "4037bbe0-0fd5-4ff4-9e2c-bc2c5cf3a95d", - "prevId": "cf56cb7f-9ef9-4086-a05d-36373913c55e", - "version": "7", - "dialect": "postgresql", - "tables": { - "public.account": { - "name": "account", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "account_id": { - "name": "account_id", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "provider_id": { - "name": "provider_id", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "access_token": { - "name": "access_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "refresh_token": { - "name": "refresh_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "id_token": { - "name": "id_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "access_token_expires_at": { - "name": "access_token_expires_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "refresh_token_expires_at": { - "name": "refresh_token_expires_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "scope": { - "name": "scope", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "account_userId_idx": { - "name": "account_userId_idx", - "columns": [ - { - "expression": "user_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "account_user_id_user_id_fk": { - "name": "account_user_id_user_id_fk", - "tableFrom": "account", - "tableTo": "user", - "columnsFrom": ["user_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.invitation": { - "name": "invitation", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "organization_id": { - "name": "organization_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "email": { - "name": "email", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "role": { - "name": "role", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "status": { - "name": "status", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'pending'" - }, - "expires_at": { - "name": "expires_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "inviter_id": { - "name": "inviter_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "invitation_organizationId_idx": { - "name": "invitation_organizationId_idx", - "columns": [ - { - "expression": "organization_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "invitation_email_idx": { - "name": "invitation_email_idx", - "columns": [ - { - "expression": "email", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "invitation_organization_id_organization_id_fk": { - "name": "invitation_organization_id_organization_id_fk", - "tableFrom": "invitation", - "tableTo": "organization", - "columnsFrom": ["organization_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "invitation_inviter_id_user_id_fk": { - "name": "invitation_inviter_id_user_id_fk", - "tableFrom": "invitation", - "tableTo": "user", - "columnsFrom": ["inviter_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.member": { - "name": "member", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "organization_id": { - "name": "organization_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "role": { - "name": "role", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'member'" - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "member_organizationId_idx": { - "name": "member_organizationId_idx", - "columns": [ - { - "expression": "organization_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "member_userId_idx": { - "name": "member_userId_idx", - "columns": [ - { - "expression": "user_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "member_organization_id_organization_id_fk": { - "name": "member_organization_id_organization_id_fk", - "tableFrom": "member", - "tableTo": "organization", - "columnsFrom": ["organization_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "member_user_id_user_id_fk": { - "name": "member_user_id_user_id_fk", - "tableFrom": "member", - "tableTo": "user", - "columnsFrom": ["user_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.organization": { - "name": "organization", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "parish_id": { - "name": "parish_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "slug": { - "name": "slug", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "logo": { - "name": "logo", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "metadata": { - "name": "metadata", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "type": { - "name": "type", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "parent_id": { - "name": "parent_id", - "type": "uuid", - "primaryKey": false, - "notNull": false - }, - "cover": { - "name": "cover", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "join_id": { - "name": "join_id", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "short_name": { - "name": "short_name", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "organization_slug_uidx": { - "name": "organization_slug_uidx", - "columns": [ - { - "expression": "slug", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "organization_parish_id_parishes_id_fk": { - "name": "organization_parish_id_parishes_id_fk", - "tableFrom": "organization", - "tableTo": "parishes", - "columnsFrom": ["parish_id"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "organization_slug_unique": { - "name": "organization_slug_unique", - "nullsNotDistinct": false, - "columns": ["slug"] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.session": { - "name": "session", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "expires_at": { - "name": "expires_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "token": { - "name": "token", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "ip_address": { - "name": "ip_address", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "user_agent": { - "name": "user_agent", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "user_id": { - "name": "user_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "impersonated_by": { - "name": "impersonated_by", - "type": "uuid", - "primaryKey": false, - "notNull": false - }, - "active_organization_id": { - "name": "active_organization_id", - "type": "uuid", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "session_userId_idx": { - "name": "session_userId_idx", - "columns": [ - { - "expression": "user_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "session_user_id_user_id_fk": { - "name": "session_user_id_user_id_fk", - "tableFrom": "session", - "tableTo": "user", - "columnsFrom": ["user_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "session_token_unique": { - "name": "session_token_unique", - "nullsNotDistinct": false, - "columns": ["token"] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.user": { - "name": "user", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "email": { - "name": "email", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "email_verified": { - "name": "email_verified", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "image": { - "name": "image", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "role": { - "name": "role", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "banned": { - "name": "banned", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "default": false - }, - "ban_reason": { - "name": "ban_reason", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "ban_expires": { - "name": "ban_expires", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "account_status": { - "name": "account_status", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'pending'" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "parishioner_id": { - "name": "parishioner_id", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "user_email_unique": { - "name": "user_email_unique", - "nullsNotDistinct": false, - "columns": ["email"] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.verification": { - "name": "verification", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "identifier": { - "name": "identifier", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "value": { - "name": "value", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "expires_at": { - "name": "expires_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - } - }, - "indexes": { - "verification_identifier_idx": { - "name": "verification_identifier_idx", - "columns": [ - { - "expression": "identifier", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.attachments": { - "name": "attachments", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "reference_id": { - "name": "reference_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "reference_type": { - "name": "reference_type", - "type": "attachment_reference_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "file_id": { - "name": "file_id", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "viewer_url": { - "name": "viewer_url", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "mime_type": { - "name": "mime_type", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "size": { - "name": "size", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "uploaded_by": { - "name": "uploaded_by", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "attachments_uploaded_by_user_id_fk": { - "name": "attachments_uploaded_by_user_id_fk", - "tableFrom": "attachments", - "tableTo": "user", - "columnsFrom": ["uploaded_by"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.attendances": { - "name": "attendances", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "event_id": { - "name": "event_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "parishioner_id": { - "name": "parishioner_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "method": { - "name": "method", - "type": "attendance_method", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "status": { - "name": "status", - "type": "attendance_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "verified_by": { - "name": "verified_by", - "type": "uuid", - "primaryKey": false, - "notNull": false - }, - "verified_at": { - "name": "verified_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "attendances_event_id_events_id_fk": { - "name": "attendances_event_id_events_id_fk", - "tableFrom": "attendances", - "tableTo": "events", - "columnsFrom": ["event_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "attendances_parishioner_id_parishioners_id_fk": { - "name": "attendances_parishioner_id_parishioners_id_fk", - "tableFrom": "attendances", - "tableTo": "parishioners", - "columnsFrom": ["parishioner_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "attendances_verified_by_user_id_fk": { - "name": "attendances_verified_by_user_id_fk", - "tableFrom": "attendances", - "tableTo": "user", - "columnsFrom": ["verified_by"], - "columnsTo": ["id"], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "attendances_event_id_parishioner_id_unique": { - "name": "attendances_event_id_parishioner_id_unique", - "nullsNotDistinct": false, - "columns": ["event_id", "parishioner_id"] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.dioceses": { - "name": "dioceses", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "address": { - "name": "address", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "phone": { - "name": "phone", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "email": { - "name": "email", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "logo": { - "name": "logo", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "website": { - "name": "website", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.events": { - "name": "events", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "organization_id": { - "name": "organization_id", - "type": "uuid", - "primaryKey": false, - "notNull": false - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "location": { - "name": "location", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "latitude": { - "name": "latitude", - "type": "double precision", - "primaryKey": false, - "notNull": false - }, - "longitude": { - "name": "longitude", - "type": "double precision", - "primaryKey": false, - "notNull": false - }, - "radius_meters": { - "name": "radius_meters", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 100 - }, - "start_date_time": { - "name": "start_date_time", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "end_date_time": { - "name": "end_date_time", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "qr_code": { - "name": "qr_code", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "visibility": { - "name": "visibility", - "type": "event_visibility", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "is_rsvp_enabled": { - "name": "is_rsvp_enabled", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "status": { - "name": "status", - "type": "event_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "created_by": { - "name": "created_by", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "events_organization_id_organization_id_fk": { - "name": "events_organization_id_organization_id_fk", - "tableFrom": "events", - "tableTo": "organization", - "columnsFrom": ["organization_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "events_created_by_user_id_fk": { - "name": "events_created_by_user_id_fk", - "tableFrom": "events", - "tableTo": "user", - "columnsFrom": ["created_by"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.financial_periods": { - "name": "financial_periods", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "month": { - "name": "month", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "year": { - "name": "year", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "status": { - "name": "status", - "type": "period_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "locked_by": { - "name": "locked_by", - "type": "uuid", - "primaryKey": false, - "notNull": false - }, - "locked_at": { - "name": "locked_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "financial_periods_locked_by_user_id_fk": { - "name": "financial_periods_locked_by_user_id_fk", - "tableFrom": "financial_periods", - "tableTo": "user", - "columnsFrom": ["locked_by"], - "columnsTo": ["id"], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.notifications": { - "name": "notifications", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "title": { - "name": "title", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "body": { - "name": "body", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "type": { - "name": "type", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "channel": { - "name": "channel", - "type": "notification_channel", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "is_read": { - "name": "is_read", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "status": { - "name": "status", - "type": "notification_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "reference_id": { - "name": "reference_id", - "type": "uuid", - "primaryKey": false, - "notNull": false - }, - "reference_type": { - "name": "reference_type", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "sent_at": { - "name": "sent_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "notifications_user_id_user_id_fk": { - "name": "notifications_user_id_user_id_fk", - "tableFrom": "notifications", - "tableTo": "user", - "columnsFrom": ["user_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.org_enrollments": { - "name": "org_enrollments", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "parishioner_id": { - "name": "parishioner_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "organization_id": { - "name": "organization_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "unit_id": { - "name": "unit_id", - "type": "uuid", - "primaryKey": false, - "notNull": false - }, - "status": { - "name": "status", - "type": "enrollment_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "joined_at": { - "name": "joined_at", - "type": "date", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "org_enrollments_parishioner_id_parishioners_id_fk": { - "name": "org_enrollments_parishioner_id_parishioners_id_fk", - "tableFrom": "org_enrollments", - "tableTo": "parishioners", - "columnsFrom": ["parishioner_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "org_enrollments_organization_id_organization_id_fk": { - "name": "org_enrollments_organization_id_organization_id_fk", - "tableFrom": "org_enrollments", - "tableTo": "organization", - "columnsFrom": ["organization_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "org_enrollments_unit_id_org_units_id_fk": { - "name": "org_enrollments_unit_id_org_units_id_fk", - "tableFrom": "org_enrollments", - "tableTo": "org_units", - "columnsFrom": ["unit_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "org_enrollments_parishioner_id_organization_id_unique": { - "name": "org_enrollments_parishioner_id_organization_id_unique", - "nullsNotDistinct": false, - "columns": ["parishioner_id", "organization_id"] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.org_placements": { - "name": "org_placements", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "enrollment_id": { - "name": "enrollment_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "term_id": { - "name": "term_id", - "type": "uuid", - "primaryKey": false, - "notNull": false - }, - "unit_id": { - "name": "unit_id", - "type": "uuid", - "primaryKey": false, - "notNull": false - }, - "position": { - "name": "position", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'anggota'" - }, - "order": { - "name": "order", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 0 - }, - "start_date": { - "name": "start_date", - "type": "date", - "primaryKey": false, - "notNull": false - }, - "end_date": { - "name": "end_date", - "type": "date", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "org_placements_enrollment_id_org_enrollments_id_fk": { - "name": "org_placements_enrollment_id_org_enrollments_id_fk", - "tableFrom": "org_placements", - "tableTo": "org_enrollments", - "columnsFrom": ["enrollment_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "org_placements_term_id_org_terms_id_fk": { - "name": "org_placements_term_id_org_terms_id_fk", - "tableFrom": "org_placements", - "tableTo": "org_terms", - "columnsFrom": ["term_id"], - "columnsTo": ["id"], - "onDelete": "set null", - "onUpdate": "no action" - }, - "org_placements_unit_id_org_units_id_fk": { - "name": "org_placements_unit_id_org_units_id_fk", - "tableFrom": "org_placements", - "tableTo": "org_units", - "columnsFrom": ["unit_id"], - "columnsTo": ["id"], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.org_terms": { - "name": "org_terms", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "organization_id": { - "name": "organization_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "start_date": { - "name": "start_date", - "type": "date", - "primaryKey": false, - "notNull": false - }, - "end_date": { - "name": "end_date", - "type": "date", - "primaryKey": false, - "notNull": false - }, - "sk_number": { - "name": "sk_number", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "sk_date": { - "name": "sk_date", - "type": "date", - "primaryKey": false, - "notNull": false - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "org_terms_organization_id_organization_id_fk": { - "name": "org_terms_organization_id_organization_id_fk", - "tableFrom": "org_terms", - "tableTo": "organization", - "columnsFrom": ["organization_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.org_units": { - "name": "org_units", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "organization_id": { - "name": "organization_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "position": { - "name": "position", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 0 - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "org_units_organization_id_organization_id_fk": { - "name": "org_units_organization_id_organization_id_fk", - "tableFrom": "org_units", - "tableTo": "organization", - "columnsFrom": ["organization_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.parishes": { - "name": "parishes", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "vicariate_id": { - "name": "vicariate_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "sync_id": { - "name": "sync_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "address": { - "name": "address", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "phone": { - "name": "phone", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "email": { - "name": "email", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "logo": { - "name": "logo", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "website": { - "name": "website", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "regency_id": { - "name": "regency_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "district_id": { - "name": "district_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "parishes_vicariate_id_vicariates_id_fk": { - "name": "parishes_vicariate_id_vicariates_id_fk", - "tableFrom": "parishes", - "tableTo": "vicariates", - "columnsFrom": ["vicariate_id"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "parishes_sync_id_unique": { - "name": "parishes_sync_id_unique", - "nullsNotDistinct": false, - "columns": ["sync_id"] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.parishioners": { - "name": "parishioners", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "uuid", - "primaryKey": false, - "notNull": false - }, - "email": { - "name": "email", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "avatar_url": { - "name": "avatar_url", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "full_name": { - "name": "full_name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "honorific": { - "name": "honorific", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "suffix": { - "name": "suffix", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "birth_place": { - "name": "birth_place", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "birth_date": { - "name": "birth_date", - "type": "date", - "primaryKey": false, - "notNull": false - }, - "gender": { - "name": "gender", - "type": "gender", - "typeSchema": "public", - "primaryKey": false, - "notNull": false - }, - "education_level": { - "name": "education_level", - "type": "education_level", - "typeSchema": "public", - "primaryKey": false, - "notNull": false - }, - "id_card_number": { - "name": "id_card_number", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "id_card_photo": { - "name": "id_card_photo", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "regency_id": { - "name": "regency_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "district_id": { - "name": "district_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "village_id": { - "name": "village_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "sync_id": { - "name": "sync_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "synced_at": { - "name": "synced_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "baptism_name": { - "name": "baptism_name", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "family_card_number": { - "name": "family_card_number", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "blood_type": { - "name": "blood_type", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "ethnicity": { - "name": "ethnicity", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "religion": { - "name": "religion", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "citizenship": { - "name": "citizenship", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "family_relation": { - "name": "family_relation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "marital_status": { - "name": "marital_status", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "marriage_date": { - "name": "marriage_date", - "type": "date", - "primaryKey": false, - "notNull": false - }, - "address": { - "name": "address", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "house_status": { - "name": "house_status", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "phone": { - "name": "phone", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "education_major": { - "name": "education_major", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "occupation": { - "name": "occupation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "profession": { - "name": "profession", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "skills": { - "name": "skills", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "physical_condition": { - "name": "physical_condition", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "economic_status": { - "name": "economic_status", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "social_activity": { - "name": "social_activity", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "parishioners_user_id_user_id_fk": { - "name": "parishioners_user_id_user_id_fk", - "tableFrom": "parishioners", - "tableTo": "user", - "columnsFrom": ["user_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "parishioners_regency_id_regencies_id_fk": { - "name": "parishioners_regency_id_regencies_id_fk", - "tableFrom": "parishioners", - "tableTo": "regencies", - "columnsFrom": ["regency_id"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - }, - "parishioners_district_id_districts_id_fk": { - "name": "parishioners_district_id_districts_id_fk", - "tableFrom": "parishioners", - "tableTo": "districts", - "columnsFrom": ["district_id"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - }, - "parishioners_village_id_villages_id_fk": { - "name": "parishioners_village_id_villages_id_fk", - "tableFrom": "parishioners", - "tableTo": "villages", - "columnsFrom": ["village_id"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "parishioners_sync_id_unique": { - "name": "parishioners_sync_id_unique", - "nullsNotDistinct": false, - "columns": ["sync_id"] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.districts": { - "name": "districts", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "integer", - "primaryKey": true, - "notNull": true - }, - "regency_id": { - "name": "regency_id", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "sync_id": { - "name": "sync_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "districts_regency_id_regencies_id_fk": { - "name": "districts_regency_id_regencies_id_fk", - "tableFrom": "districts", - "tableTo": "regencies", - "columnsFrom": ["regency_id"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.provinces": { - "name": "provinces", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "integer", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.regencies": { - "name": "regencies", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "integer", - "primaryKey": true, - "notNull": true - }, - "province_id": { - "name": "province_id", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "sync_id": { - "name": "sync_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "regencies_province_id_provinces_id_fk": { - "name": "regencies_province_id_provinces_id_fk", - "tableFrom": "regencies", - "tableTo": "provinces", - "columnsFrom": ["province_id"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.villages": { - "name": "villages", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "bigint", - "primaryKey": true, - "notNull": true - }, - "district_id": { - "name": "district_id", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "sync_id": { - "name": "sync_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "villages_district_id_districts_id_fk": { - "name": "villages_district_id_districts_id_fk", - "tableFrom": "villages", - "tableTo": "districts", - "columnsFrom": ["district_id"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.rsvp": { - "name": "rsvp", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "event_id": { - "name": "event_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "parishioner_id": { - "name": "parishioner_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "status": { - "name": "status", - "type": "rsvp_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "rsvp_event_id_events_id_fk": { - "name": "rsvp_event_id_events_id_fk", - "tableFrom": "rsvp", - "tableTo": "events", - "columnsFrom": ["event_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "rsvp_parishioner_id_parishioners_id_fk": { - "name": "rsvp_parishioner_id_parishioners_id_fk", - "tableFrom": "rsvp", - "tableTo": "parishioners", - "columnsFrom": ["parishioner_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "rsvp_event_id_parishioner_id_unique": { - "name": "rsvp_event_id_parishioner_id_unique", - "nullsNotDistinct": false, - "columns": ["event_id", "parishioner_id"] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.transaction_categories": { - "name": "transaction_categories", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "type": { - "name": "type", - "type": "transaction_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.transactions": { - "name": "transactions", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "period_id": { - "name": "period_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "category_id": { - "name": "category_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "type": { - "name": "type", - "type": "transaction_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "amount": { - "name": "amount", - "type": "double precision", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "date": { - "name": "date", - "type": "date", - "primaryKey": false, - "notNull": true - }, - "receipt_photo": { - "name": "receipt_photo", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "created_by": { - "name": "created_by", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "updated_by": { - "name": "updated_by", - "type": "uuid", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "transactions_period_id_financial_periods_id_fk": { - "name": "transactions_period_id_financial_periods_id_fk", - "tableFrom": "transactions", - "tableTo": "financial_periods", - "columnsFrom": ["period_id"], - "columnsTo": ["id"], - "onDelete": "restrict", - "onUpdate": "no action" - }, - "transactions_category_id_transaction_categories_id_fk": { - "name": "transactions_category_id_transaction_categories_id_fk", - "tableFrom": "transactions", - "tableTo": "transaction_categories", - "columnsFrom": ["category_id"], - "columnsTo": ["id"], - "onDelete": "restrict", - "onUpdate": "no action" - }, - "transactions_created_by_user_id_fk": { - "name": "transactions_created_by_user_id_fk", - "tableFrom": "transactions", - "tableTo": "user", - "columnsFrom": ["created_by"], - "columnsTo": ["id"], - "onDelete": "restrict", - "onUpdate": "no action" - }, - "transactions_updated_by_user_id_fk": { - "name": "transactions_updated_by_user_id_fk", - "tableFrom": "transactions", - "tableTo": "user", - "columnsFrom": ["updated_by"], - "columnsTo": ["id"], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.vicariates": { - "name": "vicariates", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "diocese_id": { - "name": "diocese_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "sync_id": { - "name": "sync_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "address": { - "name": "address", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "phone": { - "name": "phone", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "email": { - "name": "email", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "vicariates_diocese_id_dioceses_id_fk": { - "name": "vicariates_diocese_id_dioceses_id_fk", - "tableFrom": "vicariates", - "tableTo": "dioceses", - "columnsFrom": ["diocese_id"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "vicariates_sync_id_unique": { - "name": "vicariates_sync_id_unique", - "nullsNotDistinct": false, - "columns": ["sync_id"] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - } - }, - "enums": { - "public.attachment_reference_type": { - "name": "attachment_reference_type", - "schema": "public", - "values": ["Event", "Organization", "Term"] - }, - "public.attendance_method": { - "name": "attendance_method", - "schema": "public", - "values": ["qr-code", "gps", "manual"] - }, - "public.attendance_status": { - "name": "attendance_status", - "schema": "public", - "values": ["present", "pending", "absent"] - }, - "public.event_status": { - "name": "event_status", - "schema": "public", - "values": ["published", "completed"] - }, - "public.event_visibility": { - "name": "event_visibility", - "schema": "public", - "values": ["public", "private"] - }, - "public.period_status": { - "name": "period_status", - "schema": "public", - "values": ["open", "locked"] - }, - "public.notification_channel": { - "name": "notification_channel", - "schema": "public", - "values": ["in-app", "email", "push"] - }, - "public.notification_status": { - "name": "notification_status", - "schema": "public", - "values": ["pending", "sent", "failed"] - }, - "public.enrollment_status": { - "name": "enrollment_status", - "schema": "public", - "values": ["pending", "active", "inactive"] - }, - "public.education_level": { - "name": "education_level", - "schema": "public", - "values": [ - "kindergarten", - "primary", - "junior-high", - "senior-high", - "diploma-1", - "diploma-2", - "diploma-3", - "diploma-4", - "bachelor", - "master", - "doctorate", - "special-needs", - "non-formal", - "other" - ] - }, - "public.gender": { - "name": "gender", - "schema": "public", - "values": ["male", "female"] - }, - "public.rsvp_status": { - "name": "rsvp_status", - "schema": "public", - "values": ["attending", "not-attending", "maybe"] - }, - "public.transaction_type": { - "name": "transaction_type", - "schema": "public", - "values": ["income", "expense"] - } - }, - "schemas": {}, - "sequences": {}, - "roles": {}, - "policies": {}, - "views": {}, - "_meta": { - "columns": {}, - "schemas": {}, - "tables": {} - } -} diff --git a/packages/db/migrations/meta/0002_snapshot.json b/packages/db/migrations/meta/0002_snapshot.json deleted file mode 100644 index 8c176bdf..00000000 --- a/packages/db/migrations/meta/0002_snapshot.json +++ /dev/null @@ -1,2785 +0,0 @@ -{ - "id": "0f199749-07bf-4432-844f-49665c04a7ca", - "prevId": "4037bbe0-0fd5-4ff4-9e2c-bc2c5cf3a95d", - "version": "7", - "dialect": "postgresql", - "tables": { - "public.account": { - "name": "account", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "account_id": { - "name": "account_id", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "provider_id": { - "name": "provider_id", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "access_token": { - "name": "access_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "refresh_token": { - "name": "refresh_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "id_token": { - "name": "id_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "access_token_expires_at": { - "name": "access_token_expires_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "refresh_token_expires_at": { - "name": "refresh_token_expires_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "scope": { - "name": "scope", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "account_userId_idx": { - "name": "account_userId_idx", - "columns": [ - { - "expression": "user_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "account_user_id_user_id_fk": { - "name": "account_user_id_user_id_fk", - "tableFrom": "account", - "tableTo": "user", - "columnsFrom": ["user_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.invitation": { - "name": "invitation", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "organization_id": { - "name": "organization_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "email": { - "name": "email", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "role": { - "name": "role", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "status": { - "name": "status", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'pending'" - }, - "expires_at": { - "name": "expires_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "inviter_id": { - "name": "inviter_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "invitation_organizationId_idx": { - "name": "invitation_organizationId_idx", - "columns": [ - { - "expression": "organization_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "invitation_email_idx": { - "name": "invitation_email_idx", - "columns": [ - { - "expression": "email", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "invitation_organization_id_organization_id_fk": { - "name": "invitation_organization_id_organization_id_fk", - "tableFrom": "invitation", - "tableTo": "organization", - "columnsFrom": ["organization_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "invitation_inviter_id_user_id_fk": { - "name": "invitation_inviter_id_user_id_fk", - "tableFrom": "invitation", - "tableTo": "user", - "columnsFrom": ["inviter_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.member": { - "name": "member", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "organization_id": { - "name": "organization_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "role": { - "name": "role", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'member'" - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "member_organizationId_idx": { - "name": "member_organizationId_idx", - "columns": [ - { - "expression": "organization_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "member_userId_idx": { - "name": "member_userId_idx", - "columns": [ - { - "expression": "user_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "member_organization_id_organization_id_fk": { - "name": "member_organization_id_organization_id_fk", - "tableFrom": "member", - "tableTo": "organization", - "columnsFrom": ["organization_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "member_user_id_user_id_fk": { - "name": "member_user_id_user_id_fk", - "tableFrom": "member", - "tableTo": "user", - "columnsFrom": ["user_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.organization": { - "name": "organization", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "parish_id": { - "name": "parish_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "slug": { - "name": "slug", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "logo": { - "name": "logo", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "metadata": { - "name": "metadata", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "type": { - "name": "type", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "parent_id": { - "name": "parent_id", - "type": "uuid", - "primaryKey": false, - "notNull": false - }, - "cover": { - "name": "cover", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "join_id": { - "name": "join_id", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "short_name": { - "name": "short_name", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "organization_slug_uidx": { - "name": "organization_slug_uidx", - "columns": [ - { - "expression": "slug", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "organization_parish_id_parishes_id_fk": { - "name": "organization_parish_id_parishes_id_fk", - "tableFrom": "organization", - "tableTo": "parishes", - "columnsFrom": ["parish_id"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "organization_slug_unique": { - "name": "organization_slug_unique", - "nullsNotDistinct": false, - "columns": ["slug"] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.session": { - "name": "session", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "expires_at": { - "name": "expires_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "token": { - "name": "token", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "ip_address": { - "name": "ip_address", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "user_agent": { - "name": "user_agent", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "user_id": { - "name": "user_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "impersonated_by": { - "name": "impersonated_by", - "type": "uuid", - "primaryKey": false, - "notNull": false - }, - "active_organization_id": { - "name": "active_organization_id", - "type": "uuid", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "session_userId_idx": { - "name": "session_userId_idx", - "columns": [ - { - "expression": "user_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "session_user_id_user_id_fk": { - "name": "session_user_id_user_id_fk", - "tableFrom": "session", - "tableTo": "user", - "columnsFrom": ["user_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "session_token_unique": { - "name": "session_token_unique", - "nullsNotDistinct": false, - "columns": ["token"] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.user": { - "name": "user", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "email": { - "name": "email", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "email_verified": { - "name": "email_verified", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "image": { - "name": "image", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "role": { - "name": "role", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "banned": { - "name": "banned", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "default": false - }, - "ban_reason": { - "name": "ban_reason", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "ban_expires": { - "name": "ban_expires", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "account_status": { - "name": "account_status", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'pending'" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "parishioner_id": { - "name": "parishioner_id", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "user_email_unique": { - "name": "user_email_unique", - "nullsNotDistinct": false, - "columns": ["email"] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.verification": { - "name": "verification", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "identifier": { - "name": "identifier", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "value": { - "name": "value", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "expires_at": { - "name": "expires_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - } - }, - "indexes": { - "verification_identifier_idx": { - "name": "verification_identifier_idx", - "columns": [ - { - "expression": "identifier", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.attachments": { - "name": "attachments", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "reference_id": { - "name": "reference_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "reference_type": { - "name": "reference_type", - "type": "attachment_reference_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "file_id": { - "name": "file_id", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "viewer_url": { - "name": "viewer_url", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "mime_type": { - "name": "mime_type", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "size": { - "name": "size", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "uploaded_by": { - "name": "uploaded_by", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "attachments_uploaded_by_user_id_fk": { - "name": "attachments_uploaded_by_user_id_fk", - "tableFrom": "attachments", - "tableTo": "user", - "columnsFrom": ["uploaded_by"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.attendances": { - "name": "attendances", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "event_id": { - "name": "event_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "parishioner_id": { - "name": "parishioner_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "method": { - "name": "method", - "type": "attendance_method", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "status": { - "name": "status", - "type": "attendance_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "verified_by": { - "name": "verified_by", - "type": "uuid", - "primaryKey": false, - "notNull": false - }, - "verified_at": { - "name": "verified_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "attendances_event_id_events_id_fk": { - "name": "attendances_event_id_events_id_fk", - "tableFrom": "attendances", - "tableTo": "events", - "columnsFrom": ["event_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "attendances_parishioner_id_parishioners_id_fk": { - "name": "attendances_parishioner_id_parishioners_id_fk", - "tableFrom": "attendances", - "tableTo": "parishioners", - "columnsFrom": ["parishioner_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "attendances_verified_by_user_id_fk": { - "name": "attendances_verified_by_user_id_fk", - "tableFrom": "attendances", - "tableTo": "user", - "columnsFrom": ["verified_by"], - "columnsTo": ["id"], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "attendances_event_id_parishioner_id_unique": { - "name": "attendances_event_id_parishioner_id_unique", - "nullsNotDistinct": false, - "columns": ["event_id", "parishioner_id"] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.dioceses": { - "name": "dioceses", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "address": { - "name": "address", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "phone": { - "name": "phone", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "email": { - "name": "email", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "logo": { - "name": "logo", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "website": { - "name": "website", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.events": { - "name": "events", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "organization_id": { - "name": "organization_id", - "type": "uuid", - "primaryKey": false, - "notNull": false - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "location": { - "name": "location", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "latitude": { - "name": "latitude", - "type": "double precision", - "primaryKey": false, - "notNull": false - }, - "longitude": { - "name": "longitude", - "type": "double precision", - "primaryKey": false, - "notNull": false - }, - "radius_meters": { - "name": "radius_meters", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 100 - }, - "start_date_time": { - "name": "start_date_time", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "end_date_time": { - "name": "end_date_time", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "qr_code": { - "name": "qr_code", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "visibility": { - "name": "visibility", - "type": "event_visibility", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "is_rsvp_enabled": { - "name": "is_rsvp_enabled", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "status": { - "name": "status", - "type": "event_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "created_by": { - "name": "created_by", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "events_organization_id_organization_id_fk": { - "name": "events_organization_id_organization_id_fk", - "tableFrom": "events", - "tableTo": "organization", - "columnsFrom": ["organization_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "events_created_by_user_id_fk": { - "name": "events_created_by_user_id_fk", - "tableFrom": "events", - "tableTo": "user", - "columnsFrom": ["created_by"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.financial_periods": { - "name": "financial_periods", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "month": { - "name": "month", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "year": { - "name": "year", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "status": { - "name": "status", - "type": "period_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "locked_by": { - "name": "locked_by", - "type": "uuid", - "primaryKey": false, - "notNull": false - }, - "locked_at": { - "name": "locked_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "financial_periods_locked_by_user_id_fk": { - "name": "financial_periods_locked_by_user_id_fk", - "tableFrom": "financial_periods", - "tableTo": "user", - "columnsFrom": ["locked_by"], - "columnsTo": ["id"], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.notifications": { - "name": "notifications", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "title": { - "name": "title", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "body": { - "name": "body", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "type": { - "name": "type", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "channel": { - "name": "channel", - "type": "notification_channel", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "is_read": { - "name": "is_read", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "status": { - "name": "status", - "type": "notification_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "reference_id": { - "name": "reference_id", - "type": "uuid", - "primaryKey": false, - "notNull": false - }, - "reference_type": { - "name": "reference_type", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "sent_at": { - "name": "sent_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "notifications_user_id_user_id_fk": { - "name": "notifications_user_id_user_id_fk", - "tableFrom": "notifications", - "tableTo": "user", - "columnsFrom": ["user_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.org_enrollments": { - "name": "org_enrollments", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "parishioner_id": { - "name": "parishioner_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "organization_id": { - "name": "organization_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "unit_id": { - "name": "unit_id", - "type": "uuid", - "primaryKey": false, - "notNull": false - }, - "status": { - "name": "status", - "type": "enrollment_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "joined_at": { - "name": "joined_at", - "type": "date", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "org_enrollments_parishioner_id_parishioners_id_fk": { - "name": "org_enrollments_parishioner_id_parishioners_id_fk", - "tableFrom": "org_enrollments", - "tableTo": "parishioners", - "columnsFrom": ["parishioner_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "org_enrollments_organization_id_organization_id_fk": { - "name": "org_enrollments_organization_id_organization_id_fk", - "tableFrom": "org_enrollments", - "tableTo": "organization", - "columnsFrom": ["organization_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "org_enrollments_unit_id_org_units_id_fk": { - "name": "org_enrollments_unit_id_org_units_id_fk", - "tableFrom": "org_enrollments", - "tableTo": "org_units", - "columnsFrom": ["unit_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "org_enrollments_parishioner_id_organization_id_unique": { - "name": "org_enrollments_parishioner_id_organization_id_unique", - "nullsNotDistinct": false, - "columns": ["parishioner_id", "organization_id"] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.org_placements": { - "name": "org_placements", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "enrollment_id": { - "name": "enrollment_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "term_id": { - "name": "term_id", - "type": "uuid", - "primaryKey": false, - "notNull": false - }, - "unit_id": { - "name": "unit_id", - "type": "uuid", - "primaryKey": false, - "notNull": false - }, - "position": { - "name": "position", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'anggota'" - }, - "order": { - "name": "order", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 0 - }, - "start_date": { - "name": "start_date", - "type": "date", - "primaryKey": false, - "notNull": false - }, - "end_date": { - "name": "end_date", - "type": "date", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "org_placements_enrollment_id_org_enrollments_id_fk": { - "name": "org_placements_enrollment_id_org_enrollments_id_fk", - "tableFrom": "org_placements", - "tableTo": "org_enrollments", - "columnsFrom": ["enrollment_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "org_placements_term_id_org_terms_id_fk": { - "name": "org_placements_term_id_org_terms_id_fk", - "tableFrom": "org_placements", - "tableTo": "org_terms", - "columnsFrom": ["term_id"], - "columnsTo": ["id"], - "onDelete": "set null", - "onUpdate": "no action" - }, - "org_placements_unit_id_org_units_id_fk": { - "name": "org_placements_unit_id_org_units_id_fk", - "tableFrom": "org_placements", - "tableTo": "org_units", - "columnsFrom": ["unit_id"], - "columnsTo": ["id"], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.org_terms": { - "name": "org_terms", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "organization_id": { - "name": "organization_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "start_date": { - "name": "start_date", - "type": "date", - "primaryKey": false, - "notNull": false - }, - "end_date": { - "name": "end_date", - "type": "date", - "primaryKey": false, - "notNull": false - }, - "sk_number": { - "name": "sk_number", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "sk_date": { - "name": "sk_date", - "type": "date", - "primaryKey": false, - "notNull": false - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "sk_document": { - "name": "sk_document", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "org_terms_organization_id_organization_id_fk": { - "name": "org_terms_organization_id_organization_id_fk", - "tableFrom": "org_terms", - "tableTo": "organization", - "columnsFrom": ["organization_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.org_units": { - "name": "org_units", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "organization_id": { - "name": "organization_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "position": { - "name": "position", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 0 - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "org_units_organization_id_organization_id_fk": { - "name": "org_units_organization_id_organization_id_fk", - "tableFrom": "org_units", - "tableTo": "organization", - "columnsFrom": ["organization_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.parishes": { - "name": "parishes", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "vicariate_id": { - "name": "vicariate_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "sync_id": { - "name": "sync_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "address": { - "name": "address", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "phone": { - "name": "phone", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "email": { - "name": "email", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "logo": { - "name": "logo", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "website": { - "name": "website", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "regency_id": { - "name": "regency_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "district_id": { - "name": "district_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "parishes_vicariate_id_vicariates_id_fk": { - "name": "parishes_vicariate_id_vicariates_id_fk", - "tableFrom": "parishes", - "tableTo": "vicariates", - "columnsFrom": ["vicariate_id"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "parishes_sync_id_unique": { - "name": "parishes_sync_id_unique", - "nullsNotDistinct": false, - "columns": ["sync_id"] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.parishioners": { - "name": "parishioners", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "uuid", - "primaryKey": false, - "notNull": false - }, - "email": { - "name": "email", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "avatar_url": { - "name": "avatar_url", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "full_name": { - "name": "full_name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "honorific": { - "name": "honorific", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "suffix": { - "name": "suffix", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "birth_place": { - "name": "birth_place", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "birth_date": { - "name": "birth_date", - "type": "date", - "primaryKey": false, - "notNull": false - }, - "gender": { - "name": "gender", - "type": "gender", - "typeSchema": "public", - "primaryKey": false, - "notNull": false - }, - "education_level": { - "name": "education_level", - "type": "education_level", - "typeSchema": "public", - "primaryKey": false, - "notNull": false - }, - "id_card_number": { - "name": "id_card_number", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "id_card_photo": { - "name": "id_card_photo", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "regency_id": { - "name": "regency_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "district_id": { - "name": "district_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "village_id": { - "name": "village_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "sync_id": { - "name": "sync_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "synced_at": { - "name": "synced_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "baptism_name": { - "name": "baptism_name", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "family_card_number": { - "name": "family_card_number", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "blood_type": { - "name": "blood_type", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "ethnicity": { - "name": "ethnicity", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "religion": { - "name": "religion", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "citizenship": { - "name": "citizenship", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "family_relation": { - "name": "family_relation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "marital_status": { - "name": "marital_status", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "marriage_date": { - "name": "marriage_date", - "type": "date", - "primaryKey": false, - "notNull": false - }, - "address": { - "name": "address", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "house_status": { - "name": "house_status", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "phone": { - "name": "phone", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "education_major": { - "name": "education_major", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "occupation": { - "name": "occupation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "profession": { - "name": "profession", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "skills": { - "name": "skills", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "physical_condition": { - "name": "physical_condition", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "economic_status": { - "name": "economic_status", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "social_activity": { - "name": "social_activity", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "parishioners_user_id_user_id_fk": { - "name": "parishioners_user_id_user_id_fk", - "tableFrom": "parishioners", - "tableTo": "user", - "columnsFrom": ["user_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "parishioners_regency_id_regencies_id_fk": { - "name": "parishioners_regency_id_regencies_id_fk", - "tableFrom": "parishioners", - "tableTo": "regencies", - "columnsFrom": ["regency_id"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - }, - "parishioners_district_id_districts_id_fk": { - "name": "parishioners_district_id_districts_id_fk", - "tableFrom": "parishioners", - "tableTo": "districts", - "columnsFrom": ["district_id"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - }, - "parishioners_village_id_villages_id_fk": { - "name": "parishioners_village_id_villages_id_fk", - "tableFrom": "parishioners", - "tableTo": "villages", - "columnsFrom": ["village_id"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "parishioners_sync_id_unique": { - "name": "parishioners_sync_id_unique", - "nullsNotDistinct": false, - "columns": ["sync_id"] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.districts": { - "name": "districts", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "integer", - "primaryKey": true, - "notNull": true - }, - "regency_id": { - "name": "regency_id", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "sync_id": { - "name": "sync_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "districts_regency_id_regencies_id_fk": { - "name": "districts_regency_id_regencies_id_fk", - "tableFrom": "districts", - "tableTo": "regencies", - "columnsFrom": ["regency_id"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.provinces": { - "name": "provinces", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "integer", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.regencies": { - "name": "regencies", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "integer", - "primaryKey": true, - "notNull": true - }, - "province_id": { - "name": "province_id", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "sync_id": { - "name": "sync_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "regencies_province_id_provinces_id_fk": { - "name": "regencies_province_id_provinces_id_fk", - "tableFrom": "regencies", - "tableTo": "provinces", - "columnsFrom": ["province_id"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.villages": { - "name": "villages", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "bigint", - "primaryKey": true, - "notNull": true - }, - "district_id": { - "name": "district_id", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "sync_id": { - "name": "sync_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "villages_district_id_districts_id_fk": { - "name": "villages_district_id_districts_id_fk", - "tableFrom": "villages", - "tableTo": "districts", - "columnsFrom": ["district_id"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.rsvp": { - "name": "rsvp", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "event_id": { - "name": "event_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "parishioner_id": { - "name": "parishioner_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "status": { - "name": "status", - "type": "rsvp_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "rsvp_event_id_events_id_fk": { - "name": "rsvp_event_id_events_id_fk", - "tableFrom": "rsvp", - "tableTo": "events", - "columnsFrom": ["event_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "rsvp_parishioner_id_parishioners_id_fk": { - "name": "rsvp_parishioner_id_parishioners_id_fk", - "tableFrom": "rsvp", - "tableTo": "parishioners", - "columnsFrom": ["parishioner_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "rsvp_event_id_parishioner_id_unique": { - "name": "rsvp_event_id_parishioner_id_unique", - "nullsNotDistinct": false, - "columns": ["event_id", "parishioner_id"] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.transaction_categories": { - "name": "transaction_categories", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "type": { - "name": "type", - "type": "transaction_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.transactions": { - "name": "transactions", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "period_id": { - "name": "period_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "category_id": { - "name": "category_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "type": { - "name": "type", - "type": "transaction_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "amount": { - "name": "amount", - "type": "double precision", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "date": { - "name": "date", - "type": "date", - "primaryKey": false, - "notNull": true - }, - "receipt_photo": { - "name": "receipt_photo", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "created_by": { - "name": "created_by", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "updated_by": { - "name": "updated_by", - "type": "uuid", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "transactions_period_id_financial_periods_id_fk": { - "name": "transactions_period_id_financial_periods_id_fk", - "tableFrom": "transactions", - "tableTo": "financial_periods", - "columnsFrom": ["period_id"], - "columnsTo": ["id"], - "onDelete": "restrict", - "onUpdate": "no action" - }, - "transactions_category_id_transaction_categories_id_fk": { - "name": "transactions_category_id_transaction_categories_id_fk", - "tableFrom": "transactions", - "tableTo": "transaction_categories", - "columnsFrom": ["category_id"], - "columnsTo": ["id"], - "onDelete": "restrict", - "onUpdate": "no action" - }, - "transactions_created_by_user_id_fk": { - "name": "transactions_created_by_user_id_fk", - "tableFrom": "transactions", - "tableTo": "user", - "columnsFrom": ["created_by"], - "columnsTo": ["id"], - "onDelete": "restrict", - "onUpdate": "no action" - }, - "transactions_updated_by_user_id_fk": { - "name": "transactions_updated_by_user_id_fk", - "tableFrom": "transactions", - "tableTo": "user", - "columnsFrom": ["updated_by"], - "columnsTo": ["id"], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.vicariates": { - "name": "vicariates", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "diocese_id": { - "name": "diocese_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "sync_id": { - "name": "sync_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "address": { - "name": "address", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "phone": { - "name": "phone", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "email": { - "name": "email", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "vicariates_diocese_id_dioceses_id_fk": { - "name": "vicariates_diocese_id_dioceses_id_fk", - "tableFrom": "vicariates", - "tableTo": "dioceses", - "columnsFrom": ["diocese_id"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "vicariates_sync_id_unique": { - "name": "vicariates_sync_id_unique", - "nullsNotDistinct": false, - "columns": ["sync_id"] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - } - }, - "enums": { - "public.attachment_reference_type": { - "name": "attachment_reference_type", - "schema": "public", - "values": ["Event", "Organization", "Term"] - }, - "public.attendance_method": { - "name": "attendance_method", - "schema": "public", - "values": ["qr-code", "gps", "manual"] - }, - "public.attendance_status": { - "name": "attendance_status", - "schema": "public", - "values": ["present", "pending", "absent"] - }, - "public.event_status": { - "name": "event_status", - "schema": "public", - "values": ["published", "completed"] - }, - "public.event_visibility": { - "name": "event_visibility", - "schema": "public", - "values": ["public", "private"] - }, - "public.period_status": { - "name": "period_status", - "schema": "public", - "values": ["open", "locked"] - }, - "public.notification_channel": { - "name": "notification_channel", - "schema": "public", - "values": ["in-app", "email", "push"] - }, - "public.notification_status": { - "name": "notification_status", - "schema": "public", - "values": ["pending", "sent", "failed"] - }, - "public.enrollment_status": { - "name": "enrollment_status", - "schema": "public", - "values": ["pending", "active", "inactive"] - }, - "public.education_level": { - "name": "education_level", - "schema": "public", - "values": [ - "kindergarten", - "primary", - "junior-high", - "senior-high", - "diploma-1", - "diploma-2", - "diploma-3", - "diploma-4", - "bachelor", - "master", - "doctorate", - "special-needs", - "non-formal", - "other" - ] - }, - "public.gender": { - "name": "gender", - "schema": "public", - "values": ["male", "female"] - }, - "public.rsvp_status": { - "name": "rsvp_status", - "schema": "public", - "values": ["attending", "not-attending", "maybe"] - }, - "public.transaction_type": { - "name": "transaction_type", - "schema": "public", - "values": ["income", "expense"] - } - }, - "schemas": {}, - "sequences": {}, - "roles": {}, - "policies": {}, - "views": {}, - "_meta": { - "columns": {}, - "schemas": {}, - "tables": {} - } -} diff --git a/packages/db/migrations/meta/0003_snapshot.json b/packages/db/migrations/meta/0003_snapshot.json deleted file mode 100644 index 611546e5..00000000 --- a/packages/db/migrations/meta/0003_snapshot.json +++ /dev/null @@ -1,2779 +0,0 @@ -{ - "id": "fe0f105c-f0fc-4435-b7c4-b9157a29d849", - "prevId": "0f199749-07bf-4432-844f-49665c04a7ca", - "version": "7", - "dialect": "postgresql", - "tables": { - "public.account": { - "name": "account", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "account_id": { - "name": "account_id", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "provider_id": { - "name": "provider_id", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "access_token": { - "name": "access_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "refresh_token": { - "name": "refresh_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "id_token": { - "name": "id_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "access_token_expires_at": { - "name": "access_token_expires_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "refresh_token_expires_at": { - "name": "refresh_token_expires_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "scope": { - "name": "scope", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "account_userId_idx": { - "name": "account_userId_idx", - "columns": [ - { - "expression": "user_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "account_user_id_user_id_fk": { - "name": "account_user_id_user_id_fk", - "tableFrom": "account", - "tableTo": "user", - "columnsFrom": ["user_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.invitation": { - "name": "invitation", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "organization_id": { - "name": "organization_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "email": { - "name": "email", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "role": { - "name": "role", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "status": { - "name": "status", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'pending'" - }, - "expires_at": { - "name": "expires_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "inviter_id": { - "name": "inviter_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "invitation_organizationId_idx": { - "name": "invitation_organizationId_idx", - "columns": [ - { - "expression": "organization_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "invitation_email_idx": { - "name": "invitation_email_idx", - "columns": [ - { - "expression": "email", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "invitation_organization_id_organization_id_fk": { - "name": "invitation_organization_id_organization_id_fk", - "tableFrom": "invitation", - "tableTo": "organization", - "columnsFrom": ["organization_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "invitation_inviter_id_user_id_fk": { - "name": "invitation_inviter_id_user_id_fk", - "tableFrom": "invitation", - "tableTo": "user", - "columnsFrom": ["inviter_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.member": { - "name": "member", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "organization_id": { - "name": "organization_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "role": { - "name": "role", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'member'" - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "member_organizationId_idx": { - "name": "member_organizationId_idx", - "columns": [ - { - "expression": "organization_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "member_userId_idx": { - "name": "member_userId_idx", - "columns": [ - { - "expression": "user_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "member_organization_id_organization_id_fk": { - "name": "member_organization_id_organization_id_fk", - "tableFrom": "member", - "tableTo": "organization", - "columnsFrom": ["organization_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "member_user_id_user_id_fk": { - "name": "member_user_id_user_id_fk", - "tableFrom": "member", - "tableTo": "user", - "columnsFrom": ["user_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.organization": { - "name": "organization", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "parish_id": { - "name": "parish_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "slug": { - "name": "slug", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "logo": { - "name": "logo", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "metadata": { - "name": "metadata", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "type": { - "name": "type", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "parent_id": { - "name": "parent_id", - "type": "uuid", - "primaryKey": false, - "notNull": false - }, - "cover": { - "name": "cover", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "join_id": { - "name": "join_id", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "short_name": { - "name": "short_name", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "organization_slug_uidx": { - "name": "organization_slug_uidx", - "columns": [ - { - "expression": "slug", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "organization_parish_id_parishes_id_fk": { - "name": "organization_parish_id_parishes_id_fk", - "tableFrom": "organization", - "tableTo": "parishes", - "columnsFrom": ["parish_id"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "organization_slug_unique": { - "name": "organization_slug_unique", - "nullsNotDistinct": false, - "columns": ["slug"] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.session": { - "name": "session", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "expires_at": { - "name": "expires_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "token": { - "name": "token", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "ip_address": { - "name": "ip_address", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "user_agent": { - "name": "user_agent", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "user_id": { - "name": "user_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "impersonated_by": { - "name": "impersonated_by", - "type": "uuid", - "primaryKey": false, - "notNull": false - }, - "active_organization_id": { - "name": "active_organization_id", - "type": "uuid", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "session_userId_idx": { - "name": "session_userId_idx", - "columns": [ - { - "expression": "user_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "session_user_id_user_id_fk": { - "name": "session_user_id_user_id_fk", - "tableFrom": "session", - "tableTo": "user", - "columnsFrom": ["user_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "session_token_unique": { - "name": "session_token_unique", - "nullsNotDistinct": false, - "columns": ["token"] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.user": { - "name": "user", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "email": { - "name": "email", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "email_verified": { - "name": "email_verified", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "image": { - "name": "image", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "role": { - "name": "role", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "banned": { - "name": "banned", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "default": false - }, - "ban_reason": { - "name": "ban_reason", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "ban_expires": { - "name": "ban_expires", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "account_status": { - "name": "account_status", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'pending'" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "parishioner_id": { - "name": "parishioner_id", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "user_email_unique": { - "name": "user_email_unique", - "nullsNotDistinct": false, - "columns": ["email"] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.verification": { - "name": "verification", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "identifier": { - "name": "identifier", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "value": { - "name": "value", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "expires_at": { - "name": "expires_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - } - }, - "indexes": { - "verification_identifier_idx": { - "name": "verification_identifier_idx", - "columns": [ - { - "expression": "identifier", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.attachments": { - "name": "attachments", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "reference_id": { - "name": "reference_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "reference_type": { - "name": "reference_type", - "type": "attachment_reference_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "file_id": { - "name": "file_id", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "viewer_url": { - "name": "viewer_url", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "mime_type": { - "name": "mime_type", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "size": { - "name": "size", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "uploaded_by": { - "name": "uploaded_by", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "attachments_uploaded_by_user_id_fk": { - "name": "attachments_uploaded_by_user_id_fk", - "tableFrom": "attachments", - "tableTo": "user", - "columnsFrom": ["uploaded_by"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.attendances": { - "name": "attendances", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "event_id": { - "name": "event_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "parishioner_id": { - "name": "parishioner_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "method": { - "name": "method", - "type": "attendance_method", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "status": { - "name": "status", - "type": "attendance_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "verified_by": { - "name": "verified_by", - "type": "uuid", - "primaryKey": false, - "notNull": false - }, - "verified_at": { - "name": "verified_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "attendances_event_id_events_id_fk": { - "name": "attendances_event_id_events_id_fk", - "tableFrom": "attendances", - "tableTo": "events", - "columnsFrom": ["event_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "attendances_parishioner_id_parishioners_id_fk": { - "name": "attendances_parishioner_id_parishioners_id_fk", - "tableFrom": "attendances", - "tableTo": "parishioners", - "columnsFrom": ["parishioner_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "attendances_verified_by_user_id_fk": { - "name": "attendances_verified_by_user_id_fk", - "tableFrom": "attendances", - "tableTo": "user", - "columnsFrom": ["verified_by"], - "columnsTo": ["id"], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "attendances_event_id_parishioner_id_unique": { - "name": "attendances_event_id_parishioner_id_unique", - "nullsNotDistinct": false, - "columns": ["event_id", "parishioner_id"] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.dioceses": { - "name": "dioceses", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "address": { - "name": "address", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "phone": { - "name": "phone", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "email": { - "name": "email", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "logo": { - "name": "logo", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "website": { - "name": "website", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.events": { - "name": "events", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "organization_id": { - "name": "organization_id", - "type": "uuid", - "primaryKey": false, - "notNull": false - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "location": { - "name": "location", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "latitude": { - "name": "latitude", - "type": "double precision", - "primaryKey": false, - "notNull": false - }, - "longitude": { - "name": "longitude", - "type": "double precision", - "primaryKey": false, - "notNull": false - }, - "radius_meters": { - "name": "radius_meters", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 100 - }, - "start_date_time": { - "name": "start_date_time", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "end_date_time": { - "name": "end_date_time", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "qr_code": { - "name": "qr_code", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "visibility": { - "name": "visibility", - "type": "event_visibility", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "is_rsvp_enabled": { - "name": "is_rsvp_enabled", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "status": { - "name": "status", - "type": "event_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "created_by": { - "name": "created_by", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "events_organization_id_organization_id_fk": { - "name": "events_organization_id_organization_id_fk", - "tableFrom": "events", - "tableTo": "organization", - "columnsFrom": ["organization_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "events_created_by_user_id_fk": { - "name": "events_created_by_user_id_fk", - "tableFrom": "events", - "tableTo": "user", - "columnsFrom": ["created_by"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.financial_periods": { - "name": "financial_periods", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "month": { - "name": "month", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "year": { - "name": "year", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "status": { - "name": "status", - "type": "period_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "locked_by": { - "name": "locked_by", - "type": "uuid", - "primaryKey": false, - "notNull": false - }, - "locked_at": { - "name": "locked_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "financial_periods_locked_by_user_id_fk": { - "name": "financial_periods_locked_by_user_id_fk", - "tableFrom": "financial_periods", - "tableTo": "user", - "columnsFrom": ["locked_by"], - "columnsTo": ["id"], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.notifications": { - "name": "notifications", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "title": { - "name": "title", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "body": { - "name": "body", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "type": { - "name": "type", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "channel": { - "name": "channel", - "type": "notification_channel", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "is_read": { - "name": "is_read", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "status": { - "name": "status", - "type": "notification_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "reference_id": { - "name": "reference_id", - "type": "uuid", - "primaryKey": false, - "notNull": false - }, - "reference_type": { - "name": "reference_type", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "sent_at": { - "name": "sent_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "notifications_user_id_user_id_fk": { - "name": "notifications_user_id_user_id_fk", - "tableFrom": "notifications", - "tableTo": "user", - "columnsFrom": ["user_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.org_enrollments": { - "name": "org_enrollments", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "parishioner_id": { - "name": "parishioner_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "organization_id": { - "name": "organization_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "unit_id": { - "name": "unit_id", - "type": "uuid", - "primaryKey": false, - "notNull": false - }, - "status": { - "name": "status", - "type": "enrollment_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "joined_at": { - "name": "joined_at", - "type": "date", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "org_enrollments_parishioner_id_parishioners_id_fk": { - "name": "org_enrollments_parishioner_id_parishioners_id_fk", - "tableFrom": "org_enrollments", - "tableTo": "parishioners", - "columnsFrom": ["parishioner_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "org_enrollments_organization_id_organization_id_fk": { - "name": "org_enrollments_organization_id_organization_id_fk", - "tableFrom": "org_enrollments", - "tableTo": "organization", - "columnsFrom": ["organization_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "org_enrollments_unit_id_org_units_id_fk": { - "name": "org_enrollments_unit_id_org_units_id_fk", - "tableFrom": "org_enrollments", - "tableTo": "org_units", - "columnsFrom": ["unit_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "org_enrollments_parishioner_id_organization_id_unique": { - "name": "org_enrollments_parishioner_id_organization_id_unique", - "nullsNotDistinct": false, - "columns": ["parishioner_id", "organization_id"] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.org_placements": { - "name": "org_placements", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "enrollment_id": { - "name": "enrollment_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "term_id": { - "name": "term_id", - "type": "uuid", - "primaryKey": false, - "notNull": false - }, - "unit_id": { - "name": "unit_id", - "type": "uuid", - "primaryKey": false, - "notNull": false - }, - "position": { - "name": "position", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'anggota'" - }, - "order": { - "name": "order", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 0 - }, - "start_date": { - "name": "start_date", - "type": "date", - "primaryKey": false, - "notNull": false - }, - "end_date": { - "name": "end_date", - "type": "date", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "org_placements_enrollment_id_org_enrollments_id_fk": { - "name": "org_placements_enrollment_id_org_enrollments_id_fk", - "tableFrom": "org_placements", - "tableTo": "org_enrollments", - "columnsFrom": ["enrollment_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "org_placements_term_id_org_terms_id_fk": { - "name": "org_placements_term_id_org_terms_id_fk", - "tableFrom": "org_placements", - "tableTo": "org_terms", - "columnsFrom": ["term_id"], - "columnsTo": ["id"], - "onDelete": "set null", - "onUpdate": "no action" - }, - "org_placements_unit_id_org_units_id_fk": { - "name": "org_placements_unit_id_org_units_id_fk", - "tableFrom": "org_placements", - "tableTo": "org_units", - "columnsFrom": ["unit_id"], - "columnsTo": ["id"], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.org_terms": { - "name": "org_terms", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "organization_id": { - "name": "organization_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "start_date": { - "name": "start_date", - "type": "date", - "primaryKey": false, - "notNull": false - }, - "end_date": { - "name": "end_date", - "type": "date", - "primaryKey": false, - "notNull": false - }, - "sk_number": { - "name": "sk_number", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "sk_date": { - "name": "sk_date", - "type": "date", - "primaryKey": false, - "notNull": false - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "org_terms_organization_id_organization_id_fk": { - "name": "org_terms_organization_id_organization_id_fk", - "tableFrom": "org_terms", - "tableTo": "organization", - "columnsFrom": ["organization_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.org_units": { - "name": "org_units", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "organization_id": { - "name": "organization_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "position": { - "name": "position", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 0 - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "org_units_organization_id_organization_id_fk": { - "name": "org_units_organization_id_organization_id_fk", - "tableFrom": "org_units", - "tableTo": "organization", - "columnsFrom": ["organization_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.parishes": { - "name": "parishes", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "vicariate_id": { - "name": "vicariate_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "sync_id": { - "name": "sync_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "address": { - "name": "address", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "phone": { - "name": "phone", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "email": { - "name": "email", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "logo": { - "name": "logo", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "website": { - "name": "website", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "regency_id": { - "name": "regency_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "district_id": { - "name": "district_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "parishes_vicariate_id_vicariates_id_fk": { - "name": "parishes_vicariate_id_vicariates_id_fk", - "tableFrom": "parishes", - "tableTo": "vicariates", - "columnsFrom": ["vicariate_id"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "parishes_sync_id_unique": { - "name": "parishes_sync_id_unique", - "nullsNotDistinct": false, - "columns": ["sync_id"] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.parishioners": { - "name": "parishioners", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "uuid", - "primaryKey": false, - "notNull": false - }, - "email": { - "name": "email", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "avatar_url": { - "name": "avatar_url", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "full_name": { - "name": "full_name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "honorific": { - "name": "honorific", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "suffix": { - "name": "suffix", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "birth_place": { - "name": "birth_place", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "birth_date": { - "name": "birth_date", - "type": "date", - "primaryKey": false, - "notNull": false - }, - "gender": { - "name": "gender", - "type": "gender", - "typeSchema": "public", - "primaryKey": false, - "notNull": false - }, - "education_level": { - "name": "education_level", - "type": "education_level", - "typeSchema": "public", - "primaryKey": false, - "notNull": false - }, - "id_card_number": { - "name": "id_card_number", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "id_card_photo": { - "name": "id_card_photo", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "regency_id": { - "name": "regency_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "district_id": { - "name": "district_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "village_id": { - "name": "village_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "sync_id": { - "name": "sync_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "synced_at": { - "name": "synced_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "baptism_name": { - "name": "baptism_name", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "family_card_number": { - "name": "family_card_number", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "blood_type": { - "name": "blood_type", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "ethnicity": { - "name": "ethnicity", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "religion": { - "name": "religion", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "citizenship": { - "name": "citizenship", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "family_relation": { - "name": "family_relation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "marital_status": { - "name": "marital_status", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "marriage_date": { - "name": "marriage_date", - "type": "date", - "primaryKey": false, - "notNull": false - }, - "address": { - "name": "address", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "house_status": { - "name": "house_status", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "phone": { - "name": "phone", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "education_major": { - "name": "education_major", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "occupation": { - "name": "occupation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "profession": { - "name": "profession", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "skills": { - "name": "skills", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "physical_condition": { - "name": "physical_condition", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "economic_status": { - "name": "economic_status", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "social_activity": { - "name": "social_activity", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "parishioners_user_id_user_id_fk": { - "name": "parishioners_user_id_user_id_fk", - "tableFrom": "parishioners", - "tableTo": "user", - "columnsFrom": ["user_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "parishioners_regency_id_regencies_id_fk": { - "name": "parishioners_regency_id_regencies_id_fk", - "tableFrom": "parishioners", - "tableTo": "regencies", - "columnsFrom": ["regency_id"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - }, - "parishioners_district_id_districts_id_fk": { - "name": "parishioners_district_id_districts_id_fk", - "tableFrom": "parishioners", - "tableTo": "districts", - "columnsFrom": ["district_id"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - }, - "parishioners_village_id_villages_id_fk": { - "name": "parishioners_village_id_villages_id_fk", - "tableFrom": "parishioners", - "tableTo": "villages", - "columnsFrom": ["village_id"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "parishioners_sync_id_unique": { - "name": "parishioners_sync_id_unique", - "nullsNotDistinct": false, - "columns": ["sync_id"] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.districts": { - "name": "districts", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "integer", - "primaryKey": true, - "notNull": true - }, - "regency_id": { - "name": "regency_id", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "sync_id": { - "name": "sync_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "districts_regency_id_regencies_id_fk": { - "name": "districts_regency_id_regencies_id_fk", - "tableFrom": "districts", - "tableTo": "regencies", - "columnsFrom": ["regency_id"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.provinces": { - "name": "provinces", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "integer", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.regencies": { - "name": "regencies", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "integer", - "primaryKey": true, - "notNull": true - }, - "province_id": { - "name": "province_id", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "sync_id": { - "name": "sync_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "regencies_province_id_provinces_id_fk": { - "name": "regencies_province_id_provinces_id_fk", - "tableFrom": "regencies", - "tableTo": "provinces", - "columnsFrom": ["province_id"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.villages": { - "name": "villages", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "bigint", - "primaryKey": true, - "notNull": true - }, - "district_id": { - "name": "district_id", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "sync_id": { - "name": "sync_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "villages_district_id_districts_id_fk": { - "name": "villages_district_id_districts_id_fk", - "tableFrom": "villages", - "tableTo": "districts", - "columnsFrom": ["district_id"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.rsvp": { - "name": "rsvp", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "event_id": { - "name": "event_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "parishioner_id": { - "name": "parishioner_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "status": { - "name": "status", - "type": "rsvp_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "rsvp_event_id_events_id_fk": { - "name": "rsvp_event_id_events_id_fk", - "tableFrom": "rsvp", - "tableTo": "events", - "columnsFrom": ["event_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "rsvp_parishioner_id_parishioners_id_fk": { - "name": "rsvp_parishioner_id_parishioners_id_fk", - "tableFrom": "rsvp", - "tableTo": "parishioners", - "columnsFrom": ["parishioner_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "rsvp_event_id_parishioner_id_unique": { - "name": "rsvp_event_id_parishioner_id_unique", - "nullsNotDistinct": false, - "columns": ["event_id", "parishioner_id"] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.transaction_categories": { - "name": "transaction_categories", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "type": { - "name": "type", - "type": "transaction_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.transactions": { - "name": "transactions", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "period_id": { - "name": "period_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "category_id": { - "name": "category_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "type": { - "name": "type", - "type": "transaction_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "amount": { - "name": "amount", - "type": "double precision", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "date": { - "name": "date", - "type": "date", - "primaryKey": false, - "notNull": true - }, - "receipt_photo": { - "name": "receipt_photo", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "created_by": { - "name": "created_by", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "updated_by": { - "name": "updated_by", - "type": "uuid", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "transactions_period_id_financial_periods_id_fk": { - "name": "transactions_period_id_financial_periods_id_fk", - "tableFrom": "transactions", - "tableTo": "financial_periods", - "columnsFrom": ["period_id"], - "columnsTo": ["id"], - "onDelete": "restrict", - "onUpdate": "no action" - }, - "transactions_category_id_transaction_categories_id_fk": { - "name": "transactions_category_id_transaction_categories_id_fk", - "tableFrom": "transactions", - "tableTo": "transaction_categories", - "columnsFrom": ["category_id"], - "columnsTo": ["id"], - "onDelete": "restrict", - "onUpdate": "no action" - }, - "transactions_created_by_user_id_fk": { - "name": "transactions_created_by_user_id_fk", - "tableFrom": "transactions", - "tableTo": "user", - "columnsFrom": ["created_by"], - "columnsTo": ["id"], - "onDelete": "restrict", - "onUpdate": "no action" - }, - "transactions_updated_by_user_id_fk": { - "name": "transactions_updated_by_user_id_fk", - "tableFrom": "transactions", - "tableTo": "user", - "columnsFrom": ["updated_by"], - "columnsTo": ["id"], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.vicariates": { - "name": "vicariates", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "diocese_id": { - "name": "diocese_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "sync_id": { - "name": "sync_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "address": { - "name": "address", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "phone": { - "name": "phone", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "email": { - "name": "email", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "vicariates_diocese_id_dioceses_id_fk": { - "name": "vicariates_diocese_id_dioceses_id_fk", - "tableFrom": "vicariates", - "tableTo": "dioceses", - "columnsFrom": ["diocese_id"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "vicariates_sync_id_unique": { - "name": "vicariates_sync_id_unique", - "nullsNotDistinct": false, - "columns": ["sync_id"] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - } - }, - "enums": { - "public.attachment_reference_type": { - "name": "attachment_reference_type", - "schema": "public", - "values": ["Event", "Organization", "Term"] - }, - "public.attendance_method": { - "name": "attendance_method", - "schema": "public", - "values": ["qr-code", "gps", "manual"] - }, - "public.attendance_status": { - "name": "attendance_status", - "schema": "public", - "values": ["present", "pending", "absent"] - }, - "public.event_status": { - "name": "event_status", - "schema": "public", - "values": ["published", "completed"] - }, - "public.event_visibility": { - "name": "event_visibility", - "schema": "public", - "values": ["public", "private"] - }, - "public.period_status": { - "name": "period_status", - "schema": "public", - "values": ["open", "locked"] - }, - "public.notification_channel": { - "name": "notification_channel", - "schema": "public", - "values": ["in-app", "email", "push"] - }, - "public.notification_status": { - "name": "notification_status", - "schema": "public", - "values": ["pending", "sent", "failed"] - }, - "public.enrollment_status": { - "name": "enrollment_status", - "schema": "public", - "values": ["pending", "active", "inactive"] - }, - "public.education_level": { - "name": "education_level", - "schema": "public", - "values": [ - "kindergarten", - "primary", - "junior-high", - "senior-high", - "diploma-1", - "diploma-2", - "diploma-3", - "diploma-4", - "bachelor", - "master", - "doctorate", - "special-needs", - "non-formal", - "other" - ] - }, - "public.gender": { - "name": "gender", - "schema": "public", - "values": ["male", "female"] - }, - "public.rsvp_status": { - "name": "rsvp_status", - "schema": "public", - "values": ["attending", "not-attending", "maybe"] - }, - "public.transaction_type": { - "name": "transaction_type", - "schema": "public", - "values": ["income", "expense"] - } - }, - "schemas": {}, - "sequences": {}, - "roles": {}, - "policies": {}, - "views": {}, - "_meta": { - "columns": {}, - "schemas": {}, - "tables": {} - } -} diff --git a/packages/db/migrations/meta/0004_snapshot.json b/packages/db/migrations/meta/0004_snapshot.json deleted file mode 100644 index 0d426969..00000000 --- a/packages/db/migrations/meta/0004_snapshot.json +++ /dev/null @@ -1,2785 +0,0 @@ -{ - "id": "a08de57c-6dac-448c-ac62-82f8f1832e89", - "prevId": "fe0f105c-f0fc-4435-b7c4-b9157a29d849", - "version": "7", - "dialect": "postgresql", - "tables": { - "public.account": { - "name": "account", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "account_id": { - "name": "account_id", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "provider_id": { - "name": "provider_id", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "access_token": { - "name": "access_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "refresh_token": { - "name": "refresh_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "id_token": { - "name": "id_token", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "access_token_expires_at": { - "name": "access_token_expires_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "refresh_token_expires_at": { - "name": "refresh_token_expires_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "scope": { - "name": "scope", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "account_userId_idx": { - "name": "account_userId_idx", - "columns": [ - { - "expression": "user_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "account_user_id_user_id_fk": { - "name": "account_user_id_user_id_fk", - "tableFrom": "account", - "tableTo": "user", - "columnsFrom": ["user_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.invitation": { - "name": "invitation", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "organization_id": { - "name": "organization_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "email": { - "name": "email", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "role": { - "name": "role", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "status": { - "name": "status", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'pending'" - }, - "expires_at": { - "name": "expires_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "inviter_id": { - "name": "inviter_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "invitation_organizationId_idx": { - "name": "invitation_organizationId_idx", - "columns": [ - { - "expression": "organization_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "invitation_email_idx": { - "name": "invitation_email_idx", - "columns": [ - { - "expression": "email", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "invitation_organization_id_organization_id_fk": { - "name": "invitation_organization_id_organization_id_fk", - "tableFrom": "invitation", - "tableTo": "organization", - "columnsFrom": ["organization_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "invitation_inviter_id_user_id_fk": { - "name": "invitation_inviter_id_user_id_fk", - "tableFrom": "invitation", - "tableTo": "user", - "columnsFrom": ["inviter_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.member": { - "name": "member", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "organization_id": { - "name": "organization_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "role": { - "name": "role", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'member'" - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - } - }, - "indexes": { - "member_organizationId_idx": { - "name": "member_organizationId_idx", - "columns": [ - { - "expression": "organization_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - }, - "member_userId_idx": { - "name": "member_userId_idx", - "columns": [ - { - "expression": "user_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "member_organization_id_organization_id_fk": { - "name": "member_organization_id_organization_id_fk", - "tableFrom": "member", - "tableTo": "organization", - "columnsFrom": ["organization_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "member_user_id_user_id_fk": { - "name": "member_user_id_user_id_fk", - "tableFrom": "member", - "tableTo": "user", - "columnsFrom": ["user_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.organization": { - "name": "organization", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "parish_id": { - "name": "parish_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "slug": { - "name": "slug", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "logo": { - "name": "logo", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "metadata": { - "name": "metadata", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "type": { - "name": "type", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "parent_id": { - "name": "parent_id", - "type": "uuid", - "primaryKey": false, - "notNull": false - }, - "cover": { - "name": "cover", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "join_id": { - "name": "join_id", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "short_name": { - "name": "short_name", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "organization_slug_uidx": { - "name": "organization_slug_uidx", - "columns": [ - { - "expression": "slug", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": true, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "organization_parish_id_parishes_id_fk": { - "name": "organization_parish_id_parishes_id_fk", - "tableFrom": "organization", - "tableTo": "parishes", - "columnsFrom": ["parish_id"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "organization_slug_unique": { - "name": "organization_slug_unique", - "nullsNotDistinct": false, - "columns": ["slug"] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.session": { - "name": "session", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "expires_at": { - "name": "expires_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "token": { - "name": "token", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "ip_address": { - "name": "ip_address", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "user_agent": { - "name": "user_agent", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "user_id": { - "name": "user_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "impersonated_by": { - "name": "impersonated_by", - "type": "uuid", - "primaryKey": false, - "notNull": false - }, - "active_organization_id": { - "name": "active_organization_id", - "type": "uuid", - "primaryKey": false, - "notNull": false - } - }, - "indexes": { - "session_userId_idx": { - "name": "session_userId_idx", - "columns": [ - { - "expression": "user_id", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": { - "session_user_id_user_id_fk": { - "name": "session_user_id_user_id_fk", - "tableFrom": "session", - "tableTo": "user", - "columnsFrom": ["user_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "session_token_unique": { - "name": "session_token_unique", - "nullsNotDistinct": false, - "columns": ["token"] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.user": { - "name": "user", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "email": { - "name": "email", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "email_verified": { - "name": "email_verified", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "image": { - "name": "image", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "role": { - "name": "role", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "banned": { - "name": "banned", - "type": "boolean", - "primaryKey": false, - "notNull": false, - "default": false - }, - "ban_reason": { - "name": "ban_reason", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "ban_expires": { - "name": "ban_expires", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "account_status": { - "name": "account_status", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'pending'" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "parishioner_id": { - "name": "parishioner_id", - "type": "text", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "user_email_unique": { - "name": "user_email_unique", - "nullsNotDistinct": false, - "columns": ["email"] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.verification": { - "name": "verification", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "identifier": { - "name": "identifier", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "value": { - "name": "value", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "expires_at": { - "name": "expires_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - } - }, - "indexes": { - "verification_identifier_idx": { - "name": "verification_identifier_idx", - "columns": [ - { - "expression": "identifier", - "isExpression": false, - "asc": true, - "nulls": "last" - } - ], - "isUnique": false, - "concurrently": false, - "method": "btree", - "with": {} - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.attachments": { - "name": "attachments", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "reference_id": { - "name": "reference_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "reference_type": { - "name": "reference_type", - "type": "attachment_reference_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "file_id": { - "name": "file_id", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "viewer_url": { - "name": "viewer_url", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "mime_type": { - "name": "mime_type", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "size": { - "name": "size", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "uploaded_by": { - "name": "uploaded_by", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "attachments_uploaded_by_user_id_fk": { - "name": "attachments_uploaded_by_user_id_fk", - "tableFrom": "attachments", - "tableTo": "user", - "columnsFrom": ["uploaded_by"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.attendances": { - "name": "attendances", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "event_id": { - "name": "event_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "parishioner_id": { - "name": "parishioner_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "method": { - "name": "method", - "type": "attendance_method", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "status": { - "name": "status", - "type": "attendance_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "verified_by": { - "name": "verified_by", - "type": "uuid", - "primaryKey": false, - "notNull": false - }, - "verified_at": { - "name": "verified_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "attendances_event_id_events_id_fk": { - "name": "attendances_event_id_events_id_fk", - "tableFrom": "attendances", - "tableTo": "events", - "columnsFrom": ["event_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "attendances_parishioner_id_parishioners_id_fk": { - "name": "attendances_parishioner_id_parishioners_id_fk", - "tableFrom": "attendances", - "tableTo": "parishioners", - "columnsFrom": ["parishioner_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "attendances_verified_by_user_id_fk": { - "name": "attendances_verified_by_user_id_fk", - "tableFrom": "attendances", - "tableTo": "user", - "columnsFrom": ["verified_by"], - "columnsTo": ["id"], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "attendances_event_id_parishioner_id_unique": { - "name": "attendances_event_id_parishioner_id_unique", - "nullsNotDistinct": false, - "columns": ["event_id", "parishioner_id"] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.dioceses": { - "name": "dioceses", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "address": { - "name": "address", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "phone": { - "name": "phone", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "email": { - "name": "email", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "logo": { - "name": "logo", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "website": { - "name": "website", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.events": { - "name": "events", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "organization_id": { - "name": "organization_id", - "type": "uuid", - "primaryKey": false, - "notNull": false - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "location": { - "name": "location", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "latitude": { - "name": "latitude", - "type": "double precision", - "primaryKey": false, - "notNull": false - }, - "longitude": { - "name": "longitude", - "type": "double precision", - "primaryKey": false, - "notNull": false - }, - "radius_meters": { - "name": "radius_meters", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 100 - }, - "start_date_time": { - "name": "start_date_time", - "type": "timestamp", - "primaryKey": false, - "notNull": true - }, - "end_date_time": { - "name": "end_date_time", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "qr_code": { - "name": "qr_code", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "visibility": { - "name": "visibility", - "type": "event_visibility", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "is_rsvp_enabled": { - "name": "is_rsvp_enabled", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "status": { - "name": "status", - "type": "event_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "created_by": { - "name": "created_by", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "events_organization_id_organization_id_fk": { - "name": "events_organization_id_organization_id_fk", - "tableFrom": "events", - "tableTo": "organization", - "columnsFrom": ["organization_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "events_created_by_user_id_fk": { - "name": "events_created_by_user_id_fk", - "tableFrom": "events", - "tableTo": "user", - "columnsFrom": ["created_by"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.financial_periods": { - "name": "financial_periods", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "month": { - "name": "month", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "year": { - "name": "year", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "status": { - "name": "status", - "type": "period_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "locked_by": { - "name": "locked_by", - "type": "uuid", - "primaryKey": false, - "notNull": false - }, - "locked_at": { - "name": "locked_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "financial_periods_locked_by_user_id_fk": { - "name": "financial_periods_locked_by_user_id_fk", - "tableFrom": "financial_periods", - "tableTo": "user", - "columnsFrom": ["locked_by"], - "columnsTo": ["id"], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.notifications": { - "name": "notifications", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "title": { - "name": "title", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "body": { - "name": "body", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "type": { - "name": "type", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "channel": { - "name": "channel", - "type": "notification_channel", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "is_read": { - "name": "is_read", - "type": "boolean", - "primaryKey": false, - "notNull": true, - "default": false - }, - "status": { - "name": "status", - "type": "notification_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "reference_id": { - "name": "reference_id", - "type": "uuid", - "primaryKey": false, - "notNull": false - }, - "reference_type": { - "name": "reference_type", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "sent_at": { - "name": "sent_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "notifications_user_id_user_id_fk": { - "name": "notifications_user_id_user_id_fk", - "tableFrom": "notifications", - "tableTo": "user", - "columnsFrom": ["user_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.org_enrollments": { - "name": "org_enrollments", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "parishioner_id": { - "name": "parishioner_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "organization_id": { - "name": "organization_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "unit_id": { - "name": "unit_id", - "type": "uuid", - "primaryKey": false, - "notNull": false - }, - "status": { - "name": "status", - "type": "enrollment_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "joined_at": { - "name": "joined_at", - "type": "date", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "org_enrollments_parishioner_id_parishioners_id_fk": { - "name": "org_enrollments_parishioner_id_parishioners_id_fk", - "tableFrom": "org_enrollments", - "tableTo": "parishioners", - "columnsFrom": ["parishioner_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "org_enrollments_organization_id_organization_id_fk": { - "name": "org_enrollments_organization_id_organization_id_fk", - "tableFrom": "org_enrollments", - "tableTo": "organization", - "columnsFrom": ["organization_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "org_enrollments_unit_id_org_units_id_fk": { - "name": "org_enrollments_unit_id_org_units_id_fk", - "tableFrom": "org_enrollments", - "tableTo": "org_units", - "columnsFrom": ["unit_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "org_enrollments_parishioner_id_organization_id_unique": { - "name": "org_enrollments_parishioner_id_organization_id_unique", - "nullsNotDistinct": false, - "columns": ["parishioner_id", "organization_id"] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.org_placements": { - "name": "org_placements", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "enrollment_id": { - "name": "enrollment_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "term_id": { - "name": "term_id", - "type": "uuid", - "primaryKey": false, - "notNull": false - }, - "unit_id": { - "name": "unit_id", - "type": "uuid", - "primaryKey": false, - "notNull": false - }, - "position": { - "name": "position", - "type": "text", - "primaryKey": false, - "notNull": true, - "default": "'anggota'" - }, - "order": { - "name": "order", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 0 - }, - "start_date": { - "name": "start_date", - "type": "date", - "primaryKey": false, - "notNull": false - }, - "end_date": { - "name": "end_date", - "type": "date", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "org_placements_enrollment_id_org_enrollments_id_fk": { - "name": "org_placements_enrollment_id_org_enrollments_id_fk", - "tableFrom": "org_placements", - "tableTo": "org_enrollments", - "columnsFrom": ["enrollment_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "org_placements_term_id_org_terms_id_fk": { - "name": "org_placements_term_id_org_terms_id_fk", - "tableFrom": "org_placements", - "tableTo": "org_terms", - "columnsFrom": ["term_id"], - "columnsTo": ["id"], - "onDelete": "set null", - "onUpdate": "no action" - }, - "org_placements_unit_id_org_units_id_fk": { - "name": "org_placements_unit_id_org_units_id_fk", - "tableFrom": "org_placements", - "tableTo": "org_units", - "columnsFrom": ["unit_id"], - "columnsTo": ["id"], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.org_terms": { - "name": "org_terms", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "organization_id": { - "name": "organization_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "start_date": { - "name": "start_date", - "type": "date", - "primaryKey": false, - "notNull": false - }, - "end_date": { - "name": "end_date", - "type": "date", - "primaryKey": false, - "notNull": false - }, - "sk_number": { - "name": "sk_number", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "sk_date": { - "name": "sk_date", - "type": "date", - "primaryKey": false, - "notNull": false - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "org_terms_organization_id_organization_id_fk": { - "name": "org_terms_organization_id_organization_id_fk", - "tableFrom": "org_terms", - "tableTo": "organization", - "columnsFrom": ["organization_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.org_units": { - "name": "org_units", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "organization_id": { - "name": "organization_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "position": { - "name": "position", - "type": "integer", - "primaryKey": false, - "notNull": true, - "default": 0 - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "org_units_organization_id_organization_id_fk": { - "name": "org_units_organization_id_organization_id_fk", - "tableFrom": "org_units", - "tableTo": "organization", - "columnsFrom": ["organization_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.parishes": { - "name": "parishes", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "vicariate_id": { - "name": "vicariate_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "sync_id": { - "name": "sync_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "address": { - "name": "address", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "phone": { - "name": "phone", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "email": { - "name": "email", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "logo": { - "name": "logo", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "website": { - "name": "website", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "regency_id": { - "name": "regency_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "district_id": { - "name": "district_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "parishes_vicariate_id_vicariates_id_fk": { - "name": "parishes_vicariate_id_vicariates_id_fk", - "tableFrom": "parishes", - "tableTo": "vicariates", - "columnsFrom": ["vicariate_id"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "parishes_sync_id_unique": { - "name": "parishes_sync_id_unique", - "nullsNotDistinct": false, - "columns": ["sync_id"] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.parishioners": { - "name": "parishioners", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "uuid", - "primaryKey": false, - "notNull": false - }, - "email": { - "name": "email", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "avatar_url": { - "name": "avatar_url", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "full_name": { - "name": "full_name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "honorific": { - "name": "honorific", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "suffix": { - "name": "suffix", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "birth_place": { - "name": "birth_place", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "birth_date": { - "name": "birth_date", - "type": "date", - "primaryKey": false, - "notNull": false - }, - "gender": { - "name": "gender", - "type": "gender", - "typeSchema": "public", - "primaryKey": false, - "notNull": false - }, - "education_level": { - "name": "education_level", - "type": "education_level", - "typeSchema": "public", - "primaryKey": false, - "notNull": false - }, - "id_card_number": { - "name": "id_card_number", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "id_card_photo": { - "name": "id_card_photo", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "regency_id": { - "name": "regency_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "district_id": { - "name": "district_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "village_id": { - "name": "village_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "sync_id": { - "name": "sync_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "synced_at": { - "name": "synced_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - }, - "baptism_name": { - "name": "baptism_name", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "family_card_number": { - "name": "family_card_number", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "blood_type": { - "name": "blood_type", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "ethnicity": { - "name": "ethnicity", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "religion": { - "name": "religion", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "citizenship": { - "name": "citizenship", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "family_relation": { - "name": "family_relation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "marital_status": { - "name": "marital_status", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "marriage_date": { - "name": "marriage_date", - "type": "date", - "primaryKey": false, - "notNull": false - }, - "address": { - "name": "address", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "house_status": { - "name": "house_status", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "phone": { - "name": "phone", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "education_major": { - "name": "education_major", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "occupation": { - "name": "occupation", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "profession": { - "name": "profession", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "skills": { - "name": "skills", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "physical_condition": { - "name": "physical_condition", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "economic_status": { - "name": "economic_status", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "social_activity": { - "name": "social_activity", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "parishioners_user_id_user_id_fk": { - "name": "parishioners_user_id_user_id_fk", - "tableFrom": "parishioners", - "tableTo": "user", - "columnsFrom": ["user_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "parishioners_regency_id_regencies_id_fk": { - "name": "parishioners_regency_id_regencies_id_fk", - "tableFrom": "parishioners", - "tableTo": "regencies", - "columnsFrom": ["regency_id"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - }, - "parishioners_district_id_districts_id_fk": { - "name": "parishioners_district_id_districts_id_fk", - "tableFrom": "parishioners", - "tableTo": "districts", - "columnsFrom": ["district_id"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - }, - "parishioners_village_id_villages_id_fk": { - "name": "parishioners_village_id_villages_id_fk", - "tableFrom": "parishioners", - "tableTo": "villages", - "columnsFrom": ["village_id"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "parishioners_sync_id_unique": { - "name": "parishioners_sync_id_unique", - "nullsNotDistinct": false, - "columns": ["sync_id"] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.districts": { - "name": "districts", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "integer", - "primaryKey": true, - "notNull": true - }, - "regency_id": { - "name": "regency_id", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "sync_id": { - "name": "sync_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "districts_regency_id_regencies_id_fk": { - "name": "districts_regency_id_regencies_id_fk", - "tableFrom": "districts", - "tableTo": "regencies", - "columnsFrom": ["regency_id"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.provinces": { - "name": "provinces", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "integer", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.regencies": { - "name": "regencies", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "integer", - "primaryKey": true, - "notNull": true - }, - "province_id": { - "name": "province_id", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "sync_id": { - "name": "sync_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "regencies_province_id_provinces_id_fk": { - "name": "regencies_province_id_provinces_id_fk", - "tableFrom": "regencies", - "tableTo": "provinces", - "columnsFrom": ["province_id"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.villages": { - "name": "villages", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "bigint", - "primaryKey": true, - "notNull": true - }, - "district_id": { - "name": "district_id", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "sync_id": { - "name": "sync_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "villages_district_id_districts_id_fk": { - "name": "villages_district_id_districts_id_fk", - "tableFrom": "villages", - "tableTo": "districts", - "columnsFrom": ["district_id"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.rsvp": { - "name": "rsvp", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "event_id": { - "name": "event_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "parishioner_id": { - "name": "parishioner_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "status": { - "name": "status", - "type": "rsvp_status", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "rsvp_event_id_events_id_fk": { - "name": "rsvp_event_id_events_id_fk", - "tableFrom": "rsvp", - "tableTo": "events", - "columnsFrom": ["event_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "rsvp_parishioner_id_parishioners_id_fk": { - "name": "rsvp_parishioner_id_parishioners_id_fk", - "tableFrom": "rsvp", - "tableTo": "parishioners", - "columnsFrom": ["parishioner_id"], - "columnsTo": ["id"], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "rsvp_event_id_parishioner_id_unique": { - "name": "rsvp_event_id_parishioner_id_unique", - "nullsNotDistinct": false, - "columns": ["event_id", "parishioner_id"] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.transaction_categories": { - "name": "transaction_categories", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "type": { - "name": "type", - "type": "transaction_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "transaction_categories_name_type_unique": { - "name": "transaction_categories_name_type_unique", - "nullsNotDistinct": false, - "columns": ["name", "type"] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.transactions": { - "name": "transactions", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "period_id": { - "name": "period_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "category_id": { - "name": "category_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "type": { - "name": "type", - "type": "transaction_type", - "typeSchema": "public", - "primaryKey": false, - "notNull": true - }, - "amount": { - "name": "amount", - "type": "double precision", - "primaryKey": false, - "notNull": true - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "date": { - "name": "date", - "type": "date", - "primaryKey": false, - "notNull": true - }, - "receipt_photo": { - "name": "receipt_photo", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "created_by": { - "name": "created_by", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "updated_by": { - "name": "updated_by", - "type": "uuid", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "transactions_period_id_financial_periods_id_fk": { - "name": "transactions_period_id_financial_periods_id_fk", - "tableFrom": "transactions", - "tableTo": "financial_periods", - "columnsFrom": ["period_id"], - "columnsTo": ["id"], - "onDelete": "restrict", - "onUpdate": "no action" - }, - "transactions_category_id_transaction_categories_id_fk": { - "name": "transactions_category_id_transaction_categories_id_fk", - "tableFrom": "transactions", - "tableTo": "transaction_categories", - "columnsFrom": ["category_id"], - "columnsTo": ["id"], - "onDelete": "restrict", - "onUpdate": "no action" - }, - "transactions_created_by_user_id_fk": { - "name": "transactions_created_by_user_id_fk", - "tableFrom": "transactions", - "tableTo": "user", - "columnsFrom": ["created_by"], - "columnsTo": ["id"], - "onDelete": "restrict", - "onUpdate": "no action" - }, - "transactions_updated_by_user_id_fk": { - "name": "transactions_updated_by_user_id_fk", - "tableFrom": "transactions", - "tableTo": "user", - "columnsFrom": ["updated_by"], - "columnsTo": ["id"], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - }, - "public.vicariates": { - "name": "vicariates", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "uuid", - "primaryKey": true, - "notNull": true - }, - "diocese_id": { - "name": "diocese_id", - "type": "uuid", - "primaryKey": false, - "notNull": true - }, - "sync_id": { - "name": "sync_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "address": { - "name": "address", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "phone": { - "name": "phone", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "email": { - "name": "email", - "type": "text", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "deleted_at": { - "name": "deleted_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "vicariates_diocese_id_dioceses_id_fk": { - "name": "vicariates_diocese_id_dioceses_id_fk", - "tableFrom": "vicariates", - "tableTo": "dioceses", - "columnsFrom": ["diocese_id"], - "columnsTo": ["id"], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "vicariates_sync_id_unique": { - "name": "vicariates_sync_id_unique", - "nullsNotDistinct": false, - "columns": ["sync_id"] - } - }, - "policies": {}, - "checkConstraints": {}, - "isRLSEnabled": false - } - }, - "enums": { - "public.attachment_reference_type": { - "name": "attachment_reference_type", - "schema": "public", - "values": ["Event", "Organization", "Term", "Transaction"] - }, - "public.attendance_method": { - "name": "attendance_method", - "schema": "public", - "values": ["qr-code", "gps", "manual"] - }, - "public.attendance_status": { - "name": "attendance_status", - "schema": "public", - "values": ["present", "pending", "absent"] - }, - "public.event_status": { - "name": "event_status", - "schema": "public", - "values": ["published", "completed"] - }, - "public.event_visibility": { - "name": "event_visibility", - "schema": "public", - "values": ["public", "private"] - }, - "public.period_status": { - "name": "period_status", - "schema": "public", - "values": ["open", "locked"] - }, - "public.notification_channel": { - "name": "notification_channel", - "schema": "public", - "values": ["in-app", "email", "push"] - }, - "public.notification_status": { - "name": "notification_status", - "schema": "public", - "values": ["pending", "sent", "failed"] - }, - "public.enrollment_status": { - "name": "enrollment_status", - "schema": "public", - "values": ["pending", "active", "inactive"] - }, - "public.education_level": { - "name": "education_level", - "schema": "public", - "values": [ - "kindergarten", - "primary", - "junior-high", - "senior-high", - "diploma-1", - "diploma-2", - "diploma-3", - "diploma-4", - "bachelor", - "master", - "doctorate", - "special-needs", - "non-formal", - "other" - ] - }, - "public.gender": { - "name": "gender", - "schema": "public", - "values": ["male", "female"] - }, - "public.rsvp_status": { - "name": "rsvp_status", - "schema": "public", - "values": ["attending", "not-attending", "maybe"] - }, - "public.transaction_type": { - "name": "transaction_type", - "schema": "public", - "values": ["income", "expense"] - } - }, - "schemas": {}, - "sequences": {}, - "roles": {}, - "policies": {}, - "views": {}, - "_meta": { - "columns": {}, - "schemas": {}, - "tables": {} - } -} diff --git a/packages/db/migrations/meta/_journal.json b/packages/db/migrations/meta/_journal.json index d047bc5a..7a799733 100644 --- a/packages/db/migrations/meta/_journal.json +++ b/packages/db/migrations/meta/_journal.json @@ -5,36 +5,8 @@ { "idx": 0, "version": "7", - "when": 1776321809820, - "tag": "0000_initial", - "breakpoints": true - }, - { - "idx": 1, - "version": "7", - "when": 1776322746094, - "tag": "0001_reflective_gamma_corps", - "breakpoints": true - }, - { - "idx": 2, - "version": "7", - "when": 1776324697266, - "tag": "0002_greedy_triathlon", - "breakpoints": true - }, - { - "idx": 3, - "version": "7", - "when": 1776324714458, - "tag": "0003_motionless_jack_murdock", - "breakpoints": true - }, - { - "idx": 4, - "version": "7", - "when": 1776499964034, - "tag": "0004_daffy_wong", + "when": 1776529327967, + "tag": "0000_sour_shockwave", "breakpoints": true } ] From ad6bfbfd0b0ec90c2126ea5f443251a214a24d5d Mon Sep 17 00:00:00 2001 From: Anthonius Munthi Date: Mon, 20 Apr 2026 19:54:29 +0800 Subject: [PATCH 09/10] feat(notification): refine in-app notifications and optimize backend - Implement server-side pagination and unread counts for scalability - Introduce PremiumNotificationItem with staggered animations and icons - Refactor NotificationDropdown with glassmorphism and enhanced empty states - Standardize server actions to result pattern and pass tests Closes #115 --- .../features/notifications/dropdown.spec.ts | 128 +++++++++ apps/dash/e2e/helper/index.ts | 1 + apps/dash/e2e/helper/notification.ts | 44 +++ apps/dash/e2e/pages/NotificationPage.ts | 97 +++++++ .../actions/notification-actions.ts | 103 +++++++ apps/dash/src/shared/i18n/messages/en.json | 14 + apps/dash/src/shared/i18n/messages/id.json | 14 + .../ui/components/PremiumNotificationItem.tsx | 109 ++++++++ apps/dash/src/shared/ui/components/index.ts | 1 + .../ui/components/NotificationDropdown.tsx | 258 ++++++++++++++++++ .../layout/ui/components/TopNavbar.tsx | 14 +- packages/core/src/contract/notification.ts | 12 +- .../core/src/service/notification.spec.ts | 28 ++ packages/core/src/service/notification.ts | 45 ++- .../db/src/repository/notification.spec.ts | 4 +- packages/db/src/repository/notification.ts | 48 +++- 16 files changed, 898 insertions(+), 22 deletions(-) create mode 100644 apps/dash/e2e/features/notifications/dropdown.spec.ts create mode 100644 apps/dash/e2e/helper/notification.ts create mode 100644 apps/dash/e2e/pages/NotificationPage.ts create mode 100644 apps/dash/src/pages/notifications/actions/notification-actions.ts create mode 100644 apps/dash/src/shared/ui/components/PremiumNotificationItem.tsx create mode 100644 apps/dash/src/widgets/layout/ui/components/NotificationDropdown.tsx diff --git a/apps/dash/e2e/features/notifications/dropdown.spec.ts b/apps/dash/e2e/features/notifications/dropdown.spec.ts new file mode 100644 index 00000000..43f2c962 --- /dev/null +++ b/apps/dash/e2e/features/notifications/dropdown.spec.ts @@ -0,0 +1,128 @@ +import { expect, test } from "@playwright/test"; +import { v7 as uuidv7 } from "uuid"; +import { + deleteNotificationsForUser, + iHaveLoggedInAsSuperAdmin, + iHaveNotification, +} from "../../helper"; +import { NotificationPage } from "../../pages/NotificationPage"; + +// We run in serial mode to prevent database conflicts between tests using the same user. +test.describe.configure({ mode: "serial" }); + +test.describe("In-App Notification System", () => { + let notificationPage: NotificationPage; + let user: { id: string; name: string; email: string }; + + test.beforeEach(async ({ page, context }) => { + notificationPage = new NotificationPage(page); + user = await iHaveLoggedInAsSuperAdmin(context); + await deleteNotificationsForUser(user.id); + + await page.goto("/"); + await expect(page).toHaveURL("/", { timeout: 15000 }); + await page.waitForLoadState("networkidle"); + }); + + test("should show empty state when no notifications exist", async () => { + await notificationPage.openDropdown(); + await expect(notificationPage.emptyState).toBeVisible(); + await expect(notificationPage.notificationItems).toHaveCount(0); + }); + + test("should show unread badge when a new notification arrives", async ({ + page, + }) => { + const title = `New Notification ${Date.now()}`; + await iHaveNotification({ + userId: user.id, + title: title, + referenceType: "Event", + referenceId: uuidv7(), + }); + + await page.goto("/"); + await page.waitForLoadState("networkidle"); + + // Poll for the badge count to match DB state + await expect(async () => { + const count = await notificationPage.getUnreadCount(); + expect(count).toBeGreaterThan(0); + }).toPass({ timeout: 15000 }); + + await expect(notificationPage.unreadBadge).toBeVisible(); + }); + + test("should open dropdown and show notification items", async ({ page }) => { + const title = `Dashboard Update ${Date.now()}`; + await iHaveNotification({ + userId: user.id, + title: title, + }); + + await page.goto("/"); + await page.waitForLoadState("networkidle"); + await notificationPage.openDropdown(); + + await expect(page.getByText(title)).toBeVisible(); + }); + + test("should mark notification as read when clicked", async ({ page }) => { + const title = `Click Me ${Date.now()}`; + await iHaveNotification({ + userId: user.id, + title: title, + referenceType: "Event", + referenceId: uuidv7(), + }); + + await page.goto("/"); + await page.waitForLoadState("networkidle"); + await notificationPage.openDropdown(); + + // Verify unread indicator exists initially + const item = notificationPage.notificationItems.filter({ hasText: title }); + const indicator = item.locator('[data-slot="notif-unread-indicator"]'); + await expect(indicator).toBeVisible(); + + // Click item + await notificationPage.clickNotification(title); + + // Wait for navigation + await page.waitForURL("**/event/**", { timeout: 10000 }); + await page.waitForLoadState("networkidle"); + + // Go back and check read state + await page.goto("/"); + await page.waitForLoadState("networkidle"); + await notificationPage.openDropdown(); + + const refreshedItem = notificationPage.notificationItems.filter({ + hasText: title, + }); + const refreshedIndicator = refreshedItem.locator( + '[data-slot="notif-unread-indicator"]', + ); + + // Indicator should be gone if read + await expect(refreshedIndicator).toBeHidden(); + }); + + test("should mark all as read", async ({ page }) => { + await iHaveNotification({ userId: user.id, title: "Notif 1" }); + await iHaveNotification({ userId: user.id, title: "Notif 2" }); + + await page.goto("/"); + await page.waitForLoadState("networkidle"); + await notificationPage.openDropdown(); + + await notificationPage.markAllAsRead(); + + // The badge should disappear from the main trigger + await expect(notificationPage.unreadBadge).toBeHidden(); + + // Indicators inside the items should also be gone + const indicators = page.locator('[data-slot="notif-unread-indicator"]'); + await expect(indicators).toHaveCount(0); + }); +}); diff --git a/apps/dash/e2e/helper/index.ts b/apps/dash/e2e/helper/index.ts index 1a6191bf..f7fe5c9a 100644 --- a/apps/dash/e2e/helper/index.ts +++ b/apps/dash/e2e/helper/index.ts @@ -1,5 +1,6 @@ export * from "./auth"; export * from "./diocese"; +export * from "./notification"; export * from "./org"; export * from "./parish"; export * from "./user"; diff --git a/apps/dash/e2e/helper/notification.ts b/apps/dash/e2e/helper/notification.ts new file mode 100644 index 00000000..d5183e2a --- /dev/null +++ b/apps/dash/e2e/helper/notification.ts @@ -0,0 +1,44 @@ +import { NotificationChannel, NotificationStatus } from "@domus/core"; +import { db, notifications } from "@domus/db"; +import { eq } from "drizzle-orm"; +import { v7 as uuidv7 } from "uuid"; + +interface CreateNotificationPayload { + userId: string; + title: string; + message?: string; + referenceType?: string; + referenceId?: string; +} + +/** + * Programmatically creates a notification in the database for E2E testing. + */ +export async function iHaveNotification(payload: CreateNotificationPayload) { + const [newNotification] = await db + .insert(notifications) + .values({ + id: uuidv7(), + userId: payload.userId, + title: payload.title, + body: payload.message || "Test Notification Message", + type: "test", + channel: NotificationChannel.InApp, + status: NotificationStatus.Sent, + isRead: false, + referenceType: payload.referenceType, + referenceId: payload.referenceId || null, + createdAt: new Date(), + }) + .returning(); + + return newNotification; +} + +/** + * Deletes all notifications for a specific user. + * Useful for ensuring a clean state in E2E tests. + */ +export async function deleteNotificationsForUser(userId: string) { + await db.delete(notifications).where(eq(notifications.userId, userId)); +} diff --git a/apps/dash/e2e/pages/NotificationPage.ts b/apps/dash/e2e/pages/NotificationPage.ts new file mode 100644 index 00000000..b7f6f626 --- /dev/null +++ b/apps/dash/e2e/pages/NotificationPage.ts @@ -0,0 +1,97 @@ +import { expect, type Locator, type Page } from "@playwright/test"; + +/** + * Page Object Model for the Notification components. + * Encapsulates selectors and actions for the notification dropdown and list. + */ +export class NotificationPage { + readonly page: Page; + readonly trigger: Locator; + readonly dropdown: Locator; + readonly unreadBadge: Locator; + readonly markAllReadButton: Locator; + readonly viewAllButton: Locator; + readonly notificationItems: Locator; + readonly emptyState: Locator; + readonly loadingState: Locator; + + constructor(page: Page) { + this.page = page; + this.trigger = page.locator('[data-slot="notification-trigger"]'); + this.dropdown = page.locator('[data-slot="popover-content"]'); + this.unreadBadge = this.trigger.locator("span"); + this.markAllReadButton = page.locator( + '[data-slot="notif-mark-all-as-read"]', + ); + this.viewAllButton = page.getByRole("link", { + name: /Lihat semua|View all/i, + }); + this.notificationItems = page.locator('[data-slot="notification-item"]'); + this.emptyState = page.locator('[data-slot="notif-empty-state"]'); + this.loadingState = page.getByText( + /Memuat notifikasi|Loading notifications/i, + ); + } + + /** + * Opens the notification dropdown and waits for loading to finish. + */ + async openDropdown() { + // Ensure trigger is attached and visible before clicking + await this.trigger.waitFor({ state: "visible" }); + + // Sometimes the first click is swallowed if the page is still hydrating + // We retry up to 3 times if the dropdown doesn't show up + await expect(async () => { + await this.trigger.click(); + await expect(this.dropdown).toBeVisible({ timeout: 2000 }); + }).toPass({ + intervals: [1000, 2000], + timeout: 10000, + }); + + // Wait for either notification items or empty state to be visible + // Match the data-slot used in NotificationDropdown.tsx + const content = this.page.locator( + '[data-slot="notification-item"], [data-slot="notif-empty-state"]', + ); + await content.first().waitFor({ state: "visible" }); + } + + /** + * Closes the notification dropdown by clicking outside or pressing Escape. + */ + async closeDropdown() { + await this.page.keyboard.press("Escape"); + await this.dropdown.waitFor({ state: "hidden" }); + } + + /** + * Marks all notifications as read. + */ + async markAllAsRead() { + await this.markAllReadButton.click(); + } + + /** + * Gets the unread count from the badge. + */ + async getUnreadCount() { + if (!(await this.unreadBadge.isVisible())) { + return 0; + } + const text = await this.unreadBadge.innerText(); + return text === "99+" ? 100 : Number.parseInt(text || "0", 10); + } + + /** + * Clicks on a specific notification item by partial text. + * + * @param text - Text content to match. + */ + async clickNotification(text: string | RegExp) { + const item = this.notificationItems.filter({ hasText: text }); + await item.waitFor({ state: "visible" }); + await item.click(); + } +} diff --git a/apps/dash/src/pages/notifications/actions/notification-actions.ts b/apps/dash/src/pages/notifications/actions/notification-actions.ts new file mode 100644 index 00000000..dd0919df --- /dev/null +++ b/apps/dash/src/pages/notifications/actions/notification-actions.ts @@ -0,0 +1,103 @@ +"use server"; + +import type { Notification } from "@domus/core"; +import { fail, ok, type Result } from "@domus/core"; +import { revalidatePath } from "next/cache"; +import { getAuthContext } from "@/shared/auth/server"; +import { notification } from "@/shared/core/service"; +import { ActionError } from "@/shared/error/ActionError"; + +/** + * Retrieves recent notifications for the current user. + * + * @param limit - The maximum number of notifications to retrieve. + * @returns Result with notifications array. + */ +export async function getNotificationsAction( + limit = 10, +): Promise> { + const [ctx, authError] = await getAuthContext(); + if (authError) return fail(authError); + + try { + const [data, fetchError] = await notification.findByUserId( + ctx.userId, + ctx, + { + limit, + }, + ); + if (fetchError) return fail(fetchError); + + return ok(data); + } catch (e) { + return fail(ActionError.from(e)); + } +} + +/** + * Retrieves the count of unread notifications for the current user. + * + * @returns Result with the unread count. + */ +export async function getUnreadCountAction(): Promise> { + const [ctx, authError] = await getAuthContext(); + if (authError) return fail(authError); + + try { + const [unreadCount, fetchError] = await notification.countUnreadByUserId( + ctx.userId, + ctx, + ); + if (fetchError) return fail(fetchError); + + return ok(unreadCount); + } catch (e) { + return fail(ActionError.from(e)); + } +} + +/** + * Marks a specific notification as read. + * + * @param id - The ID of the notification to mark as read. + * @returns Result with void. + */ +export async function markNotificationAsReadAction( + id: string, +): Promise> { + const [ctx, authError] = await getAuthContext(); + if (authError) return fail(authError); + + try { + const [, markError] = await notification.markAsRead(id, ctx); + if (markError) return fail(markError); + + revalidatePath("/", "layout"); + return ok(undefined); + } catch (e) { + return fail(ActionError.from(e)); + } +} + +/** + * Marks all unread notifications for the current user as read. + * + * @returns Result with void. + */ +export async function markAllNotificationsAsReadAction(): Promise< + Result +> { + const [ctx, authError] = await getAuthContext(); + if (authError) return fail(authError); + + try { + const [, markError] = await notification.markAllAsRead(ctx.userId, ctx); + if (markError) return fail(markError); + + revalidatePath("/", "layout"); + return ok(undefined); + } catch (e) { + return fail(ActionError.from(e)); + } +} diff --git a/apps/dash/src/shared/i18n/messages/en.json b/apps/dash/src/shared/i18n/messages/en.json index f18ce25c..a79e83b9 100644 --- a/apps/dash/src/shared/i18n/messages/en.json +++ b/apps/dash/src/shared/i18n/messages/en.json @@ -62,6 +62,20 @@ "privacyPolicy": "Privacy Policy", "termsConditions": "Terms & Conditions" }, + "NotificationDropdown": { + "title": "Notifications", + "unreadCount": "{count} unread", + "markAllAsRead": "Mark All as Read", + "emptyTitle": "No notifications yet", + "emptyDesc": "All the latest updates about your activities will appear here.", + "viewAll": "View All", + "type": { + "Event": "Event", + "Organization": "Organization", + "Transaction": "Finance", + "Enrollment": "Enrollment" + } + }, "ProfilePage": { "title": "User Profile Under Development", "description": "The page for managing your profile and service history will be available soon." diff --git a/apps/dash/src/shared/i18n/messages/id.json b/apps/dash/src/shared/i18n/messages/id.json index 128e1906..c49c8002 100644 --- a/apps/dash/src/shared/i18n/messages/id.json +++ b/apps/dash/src/shared/i18n/messages/id.json @@ -62,6 +62,20 @@ "privacyPolicy": "Kebijakan Privasi", "termsConditions": "Syarat & Ketentuan" }, + "NotificationDropdown": { + "title": "Notifikasi", + "unreadCount": "{count} belum dibaca", + "markAllAsRead": "Tandai Semua Dibaca", + "emptyTitle": "Belum ada notifikasi", + "emptyDesc": "Semua kabar terbaru tentang aktivitas Anda akan muncul di sini.", + "viewAll": "Lihat Semua", + "type": { + "Event": "Kegiatan", + "Organization": "Organisasi", + "Transaction": "Keuangan", + "Enrollment": "Pendaftaran" + } + }, "ProfilePage": { "title": "Profil Pengguna Sedang Dikembangkan", "description": "Halaman untuk mengelola data diri dan riwayat pelayanan Anda akan segera tersedia." diff --git a/apps/dash/src/shared/ui/components/PremiumNotificationItem.tsx b/apps/dash/src/shared/ui/components/PremiumNotificationItem.tsx new file mode 100644 index 00000000..fe0ae762 --- /dev/null +++ b/apps/dash/src/shared/ui/components/PremiumNotificationItem.tsx @@ -0,0 +1,109 @@ +"use client"; + +import type { Notification } from "@domus/core"; +import { formatDistanceToNow } from "date-fns"; +import { id } from "date-fns/locale"; +import { + Calendar, + CheckCircle2, + CreditCard, + Info, + Landmark, + Users, +} from "lucide-react"; +import { motion } from "motion/react"; +import { cn } from "@/shared/ui/common/utils"; + +interface PremiumNotificationItemProps { + notification: Notification; + onClick?: (id: string) => void; + index?: number; +} + +/** + * PremiumNotificationItem is a high-fidelity list item for notifications. + * Features staggered entry animations, glassmorphism-ready styles, and intuitive icons. + */ +export function PremiumNotificationItem({ + notification, + onClick, + index = 0, +}: PremiumNotificationItemProps) { + const getIcon = (type?: string) => { + switch (type) { + case "Event": + return ; + case "Organization": + return ; + case "Transaction": + return ; + case "Enrollment": + return ; + case "Term": + return ; + default: + return ; + } + }; + + return ( + onClick?.(notification.id)} + data-slot="notification-item" + > +
+
+ {getIcon(notification.referenceType ?? undefined)} +
+
+ +
+
+ + {notification.title} + + + {formatDistanceToNow(new Date(notification.createdAt), { + addSuffix: true, + locale: id, + })} + +
+

+ {notification.body} +

+
+ + {!notification.isRead && ( + + )} +
+ ); +} diff --git a/apps/dash/src/shared/ui/components/index.ts b/apps/dash/src/shared/ui/components/index.ts index 4ee7e14b..6e96ddfa 100644 --- a/apps/dash/src/shared/ui/components/index.ts +++ b/apps/dash/src/shared/ui/components/index.ts @@ -3,6 +3,7 @@ export * from "./LegalDialog"; export * from "./PremiumAction"; export * from "./PremiumFooter"; export * from "./PremiumHero"; +export * from "./PremiumNotificationItem"; export * from "./PremiumSearch"; export * from "./PrivacyView"; export * from "./Providers"; diff --git a/apps/dash/src/widgets/layout/ui/components/NotificationDropdown.tsx b/apps/dash/src/widgets/layout/ui/components/NotificationDropdown.tsx new file mode 100644 index 00000000..d9ef58c7 --- /dev/null +++ b/apps/dash/src/widgets/layout/ui/components/NotificationDropdown.tsx @@ -0,0 +1,258 @@ +"use client"; + +import type { Notification } from "@domus/core"; +import { + Bell, + Check, + CreditCard, + Inbox, + Info, + Landmark, + Users, +} from "lucide-react"; +import { AnimatePresence, motion } from "motion/react"; +import { useRouter } from "next/navigation"; +import { useLocale, useTranslations } from "next-intl"; +import { useCallback, useEffect, useState, useTransition } from "react"; +import { toast } from "sonner"; +import { + getNotificationsAction, + getUnreadCountAction, + markAllNotificationsAsReadAction, + markNotificationAsReadAction, +} from "@/pages/notifications/actions/notification-actions"; +import { cn } from "@/shared/ui/common/utils"; +import { PremiumAction, PremiumNotificationItem } from "@/shared/ui/components"; +import { + Popover, + PopoverContent, + PopoverHeader, + PopoverTitle, + PopoverTrigger, +} from "@/shared/ui/shadcn/popover"; + +/** + * Premium notification dropdown component for the top navigation bar. + * Features glassmorphism, staggered animations, and asymmetric indicators. + */ +export function NotificationDropdown() { + const t = useTranslations("NotificationDropdown"); + const _locale = useLocale(); + const router = useRouter(); + const [isPending, startTransition] = useTransition(); + + const [notifications, setNotifications] = useState([]); + const [unreadCount, setUnreadCount] = useState(0); + const [isOpen, setIsOpen] = useState(false); + const [isLoading, setIsLoading] = useState(false); + + const fetchStatus = useCallback(async () => { + const [count] = await getUnreadCountAction(); + if (count !== null) setUnreadCount(count); + }, []); + + const fetchAll = useCallback(async () => { + setIsLoading(true); + const [data] = await getNotificationsAction(15); + if (data !== null) setNotifications(data); + await fetchStatus(); + setIsLoading(false); + }, [fetchStatus]); + + // Poll for unread count every 30 seconds + useEffect(() => { + fetchStatus(); + const interval = setInterval(fetchStatus, 30000); + return () => clearInterval(interval); + }, [fetchStatus]); + + const handleOpenChange = (open: boolean) => { + setIsOpen(open); + if (open) { + fetchAll(); + } + }; + + const handleMarkAllRead = () => { + startTransition(async () => { + const [_, error] = await markAllNotificationsAsReadAction(); + if (error) { + toast.error(error.message); + return; + } + setNotifications((prev) => prev.map((n) => ({ ...n, isRead: true }))); + setUnreadCount(0); + }); + }; + + const handleNotificationClick = (n: Notification) => { + if (!n.isRead) { + startTransition(async () => { + await markNotificationAsReadAction(n.id); + fetchStatus(); + }); + } + + if (n.referenceId && n.referenceType) { + let route = ""; + switch (n.referenceType) { + case "Event": + route = `/event/${n.referenceId}`; + break; + case "Organization": + route = `/org/${n.referenceId}`; + break; + case "Transaction": + route = "/finance"; + break; + case "Enrollment": + route = `/enrollment/${n.referenceId}`; + break; + case "Term": + route = `/term/${n.referenceId}`; + break; + default: + route = "#"; + } + + if (route !== "#") { + router.push(route); + setIsOpen(false); + } + } + }; + + const _getIcon = (type: string) => { + switch (type) { + case "Event": + return ; + case "Organization": + return ; + case "Transaction": + return ; + default: + return ; + } + }; + + return ( + + + + + {unreadCount > 0 && ( + + {unreadCount > 9 ? "9+" : unreadCount} + + )} + + + + + +
+ + {t("title")} + + {unreadCount > 0 && ( + + {t("unreadCount", { count: unreadCount })} + + )} +
+
+ +
+ {isLoading ? ( +
+ {[1, 2, 3].map((i) => ( +
+ ))} +
+ ) : notifications.length > 0 ? ( +
+ + {notifications.map((n, i) => ( + handleNotificationClick(n)} + /> + ))} + +
+ ) : ( +
+ + + +

+ {t("emptyTitle")} +

+

+ {t("emptyDesc")} +

+
+ )} +
+ + {notifications.length > 0 && ( +
+ } + onClick={handleMarkAllRead} + disabled={isPending || unreadCount === 0} + > + {t("markAllAsRead")} + + { + router.push("/notifications"); + setIsOpen(false); + }} + > + {t("viewAll")} + +
+ )} + + + ); +} diff --git a/apps/dash/src/widgets/layout/ui/components/TopNavbar.tsx b/apps/dash/src/widgets/layout/ui/components/TopNavbar.tsx index 4928cb51..0eb86f02 100644 --- a/apps/dash/src/widgets/layout/ui/components/TopNavbar.tsx +++ b/apps/dash/src/widgets/layout/ui/components/TopNavbar.tsx @@ -1,12 +1,13 @@ "use client"; -import { Bell, ChevronDown, LogOut, Moon, Sun, User } from "lucide-react"; +import { ChevronDown, LogOut, Moon, Sun, User } from "lucide-react"; import { useRouter } from "next/navigation"; import { useTranslations } from "next-intl"; import { useTheme } from "next-themes"; import { useEffect, useState } from "react"; import { authClient } from "@/shared/auth/client"; import { Brand } from "./Brand"; +import { NotificationDropdown } from "./NotificationDropdown"; /** * Fixed top navigation bar with glassmorphism, theme toggle, notification bell, and user menu. @@ -60,16 +61,7 @@ export function TopNavbar() { {/* Notification bell */} - + {/* User menu */}
diff --git a/packages/core/src/contract/notification.ts b/packages/core/src/contract/notification.ts index 76779458..dffc604f 100644 --- a/packages/core/src/contract/notification.ts +++ b/packages/core/src/contract/notification.ts @@ -10,9 +10,17 @@ export interface INotificationRepository { findById(id: string): Promise; /** - * Finds all notifications for a specific user. + * Finds notifications for a specific user with pagination. */ - findByUserId(userId: string): Promise; + findByUserId( + userId: string, + options?: { limit?: number; offset?: number }, + ): Promise; + + /** + * Counts unread notifications for a specific user. + */ + countUnreadByUserId(userId: string): Promise; /** * Creates a new notification record. diff --git a/packages/core/src/service/notification.spec.ts b/packages/core/src/service/notification.spec.ts index d2cc486a..0f39ba3f 100644 --- a/packages/core/src/service/notification.spec.ts +++ b/packages/core/src/service/notification.spec.ts @@ -73,6 +73,34 @@ describe('NotificationService', () => { const [_result, error] = await service.findByUserId(userId, otherUserCtx); expect(error).toBeInstanceOf(ForbiddenError); }); + + it('should pass pagination options to repository', async () => { + repo.findByUserId.mockResolvedValue([]); + const options = { limit: 5, offset: 10 }; + await service.findByUserId(userId, userCtx, options); + expect(repo.findByUserId).toHaveBeenCalledWith(userId, options); + }); + }); + + describe('countUnreadByUserId', () => { + it('should allow user to count their own unread notifications', async () => { + repo.countUnreadByUserId.mockResolvedValue(5); + const [result, error] = await service.countUnreadByUserId( + userId, + userCtx, + ); + expect(error).toBeNull(); + expect(result).toBe(5); + expect(repo.countUnreadByUserId).toHaveBeenCalledWith(userId); + }); + + it('should forbid user from counting others unread notifications', async () => { + const [_result, error] = await service.countUnreadByUserId( + userId, + otherUserCtx, + ); + expect(error).toBeInstanceOf(ForbiddenError); + }); }); describe('markAsRead', () => { diff --git a/packages/core/src/service/notification.ts b/packages/core/src/service/notification.ts index 26c34efd..59cbc675 100644 --- a/packages/core/src/service/notification.ts +++ b/packages/core/src/service/notification.ts @@ -37,11 +37,17 @@ export class NotificationService { } /** - * Retrieves all notifications for a specific user. + * Retrieves notifications for a specific user with pagination. + * + * @param userId - The ID of the user whose notifications to retrieve. + * @param ctx - The authentication context of the requester. + * @param options - Pagination options (limit and offset). + * @returns `ok(notifications)` if authorized, `fail(ForbiddenError)` if not, or `fail(InternalError)`. */ async findByUserId( userId: string, ctx: AuthContext, + options?: { limit?: number; offset?: number }, ): Promise> { try { // Permission check: User can only see their own notifications, or adminParoki/superAdmin @@ -57,7 +63,7 @@ export class NotificationService { return fail(new ForbiddenError()); } - const data = await this.repo.findByUserId(userId); + const data = await this.repo.findByUserId(userId, options); return ok(data); } catch (error) { this.logger.error('Failed to find notifications by user', { @@ -68,6 +74,41 @@ export class NotificationService { } } + /** + * Counts unread notifications for a specific user. + * + * @param userId - The ID of the user to count unread notifications for. + * @param ctx - The authentication context of the requester. + * @returns `ok(count)` if authorized, `fail(ForbiddenError)` if not, or `fail(InternalError)`. + */ + async countUnreadByUserId( + userId: string, + ctx: AuthContext, + ): Promise> { + try { + if ( + ctx.userId !== userId && + !ctx.roles.includes(UserRole.ParishAdmin) && + !ctx.roles.includes(UserRole.SuperAdmin) + ) { + this.logger.info('Unauthorized unread count retrieval attempt', { + targetUserId: userId, + userId: ctx.userId, + }); + return fail(new ForbiddenError()); + } + + const count = await this.repo.countUnreadByUserId(userId); + return ok(count); + } catch (error) { + this.logger.error('Failed to count unread notifications', { + userId, + error, + }); + return fail(new InternalError(error)); + } + } + /** * Creates a new notification. */ diff --git a/packages/db/src/repository/notification.spec.ts b/packages/db/src/repository/notification.spec.ts index 75e75fe8..f475a476 100644 --- a/packages/db/src/repository/notification.spec.ts +++ b/packages/db/src/repository/notification.spec.ts @@ -60,7 +60,9 @@ describe('NotificationRepository', () => { // @ts-expect-error dbMock.select.mockReturnValue({ from: vi.fn().mockReturnValue({ - where: vi.fn().mockResolvedValue([mockNotifRow]), + where: vi.fn().mockReturnValue({ + orderBy: vi.fn().mockResolvedValue([mockNotifRow]), + }), }), }); diff --git a/packages/db/src/repository/notification.ts b/packages/db/src/repository/notification.ts index d28b8589..9307f7a5 100644 --- a/packages/db/src/repository/notification.ts +++ b/packages/db/src/repository/notification.ts @@ -5,7 +5,7 @@ import { NotificationEntity, type NotificationRecord, } from '@domus/core'; -import { and, eq, isNull } from 'drizzle-orm'; +import { and, count, desc, eq, isNull } from 'drizzle-orm'; import type { DrizzleClient } from '../index'; import { notifications } from '../schema/notifications'; @@ -37,20 +37,56 @@ export class NotificationRepository implements INotificationRepository { } /** - * Finds all notifications for a specific user. + * Finds notifications for a specific user with pagination. */ - async findByUserId(userId: string): Promise { - this.logger.info('NotificationRepository.findByUserId', { userId }); - const rows = await this.db + async findByUserId( + userId: string, + options?: { limit?: number; offset?: number }, + ): Promise { + this.logger.info('NotificationRepository.findByUserId', { + userId, + ...options, + }); + const query = this.db .select() .from(notifications) .where( and(eq(notifications.userId, userId), isNull(notifications.deletedAt)), - ); + ) + .orderBy(desc(notifications.createdAt)); + + if (options?.limit !== undefined) { + query.limit(options.limit); + } + + if (options?.offset !== undefined) { + query.offset(options.offset); + } + + const rows = await query; return rows.map((row) => NotificationEntity.parse(row)); } + /** + * Counts unread notifications for a specific user. + */ + async countUnreadByUserId(userId: string): Promise { + this.logger.info('NotificationRepository.countUnreadByUserId', { userId }); + const [row] = await this.db + .select({ value: count() }) + .from(notifications) + .where( + and( + eq(notifications.userId, userId), + eq(notifications.isRead, false), + isNull(notifications.deletedAt), + ), + ); + + return row?.value ?? 0; + } + /** * Creates a new notification record. */ From 14b68bbd5fc9c49cf34299b5e7373bb6a57589d2 Mon Sep 17 00:00:00 2001 From: Anthonius Munthi Date: Mon, 20 Apr 2026 20:20:56 +0800 Subject: [PATCH 10/10] feat(mailer): implement automated email notifications for enrollment - create @domus/mailer package with Nodemailer integration - implement IMailer contract and NodemailerMailer provider - add SMTP configuration to @domus/config - update NotificationService with send() logic and IUserRepository injection - integrate email dispatch in EnrollmentApproved and EnrollmentRejected listeners Closes #116 --- apps/dash/package.json | 1 + apps/dash/src/shared/core/listeners.ts | 12 +- apps/dash/src/shared/core/service.ts | 8 +- packages/config/src/index.ts | 19 + packages/core/src/contract/index.ts | 1 + packages/core/src/contract/mailer.ts | 36 ++ .../core/src/service/notification.spec.ts | 57 ++ packages/core/src/service/notification.ts | 80 ++- packages/mailer/package.json | 22 + packages/mailer/src/index.ts | 1 + packages/mailer/src/nodemailer-mailer.ts | 77 +++ packages/mailer/tsconfig.json | 8 + pnpm-lock.yaml | 603 +++++++++++++++++- 13 files changed, 916 insertions(+), 9 deletions(-) create mode 100644 packages/core/src/contract/mailer.ts create mode 100644 packages/mailer/package.json create mode 100644 packages/mailer/src/index.ts create mode 100644 packages/mailer/src/nodemailer-mailer.ts create mode 100644 packages/mailer/tsconfig.json diff --git a/apps/dash/package.json b/apps/dash/package.json index df9c7755..75461b4c 100644 --- a/apps/dash/package.json +++ b/apps/dash/package.json @@ -28,6 +28,7 @@ "@domus/config": "workspace:*", "@domus/core": "workspace:*", "@domus/db": "workspace:*", + "@domus/mailer": "workspace:*", "@domus/storage": "workspace:*", "@fontsource/inter": "^5.2.8", "@fontsource/plus-jakarta-sans": "^5.2.8", diff --git a/apps/dash/src/shared/core/listeners.ts b/apps/dash/src/shared/core/listeners.ts index e6266c40..c9953a9d 100644 --- a/apps/dash/src/shared/core/listeners.ts +++ b/apps/dash/src/shared/core/listeners.ts @@ -91,10 +91,14 @@ export function registerListeners(): void { }); // Send email notification - await notification.create({ + const [notifEmail, _errorEmail] = await notification.create({ ...payload, channel: NotificationChannel.Email, }); + + if (notifEmail) { + await notification.send(notifEmail.id); + } }); emitter.on(EnrollmentRejected, async (event) => { @@ -104,7 +108,7 @@ export function registerListeners(): void { }); // Send email notification only for rejection - await notification.create({ + const [notifEmail, _errorEmail] = await notification.create({ userId: event.userId, title: "Pendaftaran Ditolak", body: `Halo ${event.parishionerName}, mohon maaf pendaftaran Anda belum dapat disetujui.`, @@ -113,6 +117,10 @@ export function registerListeners(): void { referenceType: "Enrollment", channel: NotificationChannel.Email, }); + + if (notifEmail) { + await notification.send(notifEmail.id); + } }); // --------------------------------------------------------------------------- diff --git a/apps/dash/src/shared/core/service.ts b/apps/dash/src/shared/core/service.ts index 163215a7..2b16c9d8 100644 --- a/apps/dash/src/shared/core/service.ts +++ b/apps/dash/src/shared/core/service.ts @@ -1,5 +1,6 @@ export const runtime = "nodejs"; +import config from "@domus/config"; import { AttachmentReferenceType, AttachmentService, @@ -23,13 +24,16 @@ import { VicariateService, } from "@domus/core"; import { createRepositories, db } from "@domus/db"; +import { NodemailerMailer } from "@domus/mailer"; import { emitter } from "./emitter"; import { logger } from "./logger"; import { privateStorage, publicStorage } from "./storage"; -// Repositories (Batched via factory) const repo = createRepositories(db, logger); +// Mailer +const mailer = new NodemailerMailer(config.email); + // Services export const attendance = new AttendanceService( repo.attendance, @@ -58,8 +62,10 @@ export const member = new MemberService( ); export const notification = new NotificationService( repo.notification, + repo.user, publicStorage, privateStorage, + mailer, logger, ); export const enrollment = new EnrollmentService( diff --git a/packages/config/src/index.ts b/packages/config/src/index.ts index e626c530..0bae0a47 100644 --- a/packages/config/src/index.ts +++ b/packages/config/src/index.ts @@ -32,6 +32,11 @@ const envSchema = z.object({ SYNC_USERNAME: z.string().min(1), SYNC_PASSWORD: z.string().min(1), SYNC_COOKIE_TTL: z.coerce.number().default(15), + SMTP_HOST: z.string().min(1).optional(), + SMTP_PORT: z.coerce.number().default(587), + SMTP_USER: z.string().min(1).optional(), + SMTP_PASS: z.string().min(1).optional(), + SMTP_FROM: z.string().min(1).default('Domus '), }); function getEnv() { @@ -86,6 +91,13 @@ const configSchema = z.object({ password: z.string(), cookieTtl: z.number(), }), + email: z.object({ + host: z.string().optional(), + port: z.number(), + user: z.string().optional(), + pass: z.string().optional(), + from: z.string(), + }), }); /** * The unified configuration object for the Domus application. @@ -137,6 +149,13 @@ function getConfig() { password: env.SYNC_PASSWORD, cookieTtl: env.SYNC_COOKIE_TTL, }, + email: { + host: env.SMTP_HOST, + port: env.SMTP_PORT, + user: env.SMTP_USER, + pass: env.SMTP_PASS, + from: env.SMTP_FROM, + }, }; return configSchema.parse(config); } diff --git a/packages/core/src/contract/index.ts b/packages/core/src/contract/index.ts index 3106b164..007bd72b 100644 --- a/packages/core/src/contract/index.ts +++ b/packages/core/src/contract/index.ts @@ -6,6 +6,7 @@ export * from './enrollment'; export * from './event'; export * from './financial-period'; export * from './logger'; +export * from './mailer'; export * from './member'; export * from './notification'; export * from './organization'; diff --git a/packages/core/src/contract/mailer.ts b/packages/core/src/contract/mailer.ts new file mode 100644 index 00000000..664cd129 --- /dev/null +++ b/packages/core/src/contract/mailer.ts @@ -0,0 +1,36 @@ +import type { Result } from '../utils/result'; + +/** + * Payload for sending an email. + */ +export interface SendEmailPayload { + /** + * Recipient email address. + */ + to: string; + /** + * Email subject line. + */ + subject: string; + /** + * Plain text version of the email body. + */ + text: string; + /** + * HTML version of the email body. + */ + html?: string; +} + +/** + * Contract for email dispatch service. + */ +export interface IMailer { + /** + * Sends an email with the provided payload. + * + * @param payload - The email content and recipient details. + * @returns `ok(undefined)` on success, `fail(Error)` on failure. + */ + send(payload: SendEmailPayload): Promise>; +} diff --git a/packages/core/src/service/notification.spec.ts b/packages/core/src/service/notification.spec.ts index 0f39ba3f..e61593d8 100644 --- a/packages/core/src/service/notification.spec.ts +++ b/packages/core/src/service/notification.spec.ts @@ -2,9 +2,11 @@ import { v7 } from 'uuid'; import { describe, expect, it } from 'vitest'; import { mock } from 'vitest-mock-extended'; import type { ILogger } from '../contract/logger'; +import type { IMailer } from '../contract/mailer'; import type { INotificationRepository } from '../contract/notification'; import type { IPrivateStorage } from '../contract/storage-private'; import type { IPublicStorage } from '../contract/storage-public'; +import type { IUserRepository } from '../contract/user'; import type { AuthContext } from '../entity/auth-context'; import { AccountStatus, @@ -13,18 +15,24 @@ import { UserRole, } from '../entity/enums'; import type { Notification } from '../entity/notification'; +import type { User } from '../entity/user'; import { ForbiddenError } from '../error'; +import type { Result } from '../utils'; import { NotificationService } from './notification'; describe('NotificationService', () => { const repo = mock(); + const userRepo = mock(); const publicStorage = mock(); const privateStorage = mock(); + const mailer = mock(); const logger = mock(); const service = new NotificationService( repo, + userRepo, publicStorage, privateStorage, + mailer, logger, ); @@ -170,4 +178,53 @@ describe('NotificationService', () => { expect(error).toBeInstanceOf(ForbiddenError); }); }); + describe('send', () => { + it('should send email and update status to sent', async () => { + const emailNotif = { + ...mockNotification, + channel: NotificationChannel.Email, + status: NotificationStatus.Pending, + }; + repo.findById.mockResolvedValue(emailNotif as unknown as Notification); + userRepo.findById.mockResolvedValue({ + email: 'test@example.com', + } as unknown as User); + mailer.send.mockResolvedValue([undefined, null] as Result); + + const [_result, error] = await service.send(notifId); + + expect(error).toBeNull(); + expect(mailer.send).toHaveBeenCalledWith( + expect.objectContaining({ to: 'test@example.com' }), + ); + expect(repo.update).toHaveBeenCalledWith( + notifId, + expect.objectContaining({ status: NotificationStatus.Sent }), + ); + }); + + it('should update status to failed if mailer fails', async () => { + const emailNotif = { + ...mockNotification, + channel: NotificationChannel.Email, + status: NotificationStatus.Pending, + }; + repo.findById.mockResolvedValue(emailNotif as unknown as Notification); + userRepo.findById.mockResolvedValue({ + email: 'test@example.com', + } as unknown as User); + mailer.send.mockResolvedValue([ + null, + new Error('SMTP Error'), + ] as unknown as Result); + + const [_result, error] = await service.send(notifId); + + expect(error).toBeInstanceOf(Error); + expect(repo.update).toHaveBeenCalledWith( + notifId, + expect.objectContaining({ status: NotificationStatus.Failed }), + ); + }); + }); }); diff --git a/packages/core/src/service/notification.ts b/packages/core/src/service/notification.ts index 59cbc675..2f07df43 100644 --- a/packages/core/src/service/notification.ts +++ b/packages/core/src/service/notification.ts @@ -1,9 +1,15 @@ import type { ILogger } from '../contract/logger'; +import type { IMailer } from '../contract/mailer'; import type { INotificationRepository } from '../contract/notification'; import type { IPrivateStorage } from '../contract/storage-private'; import type { IPublicStorage } from '../contract/storage-public'; +import type { IUserRepository } from '../contract/user'; import type { AuthContext } from '../entity/auth-context'; -import { NotificationStatus, UserRole } from '../entity/enums'; +import { + NotificationChannel, + NotificationStatus, + UserRole, +} from '../entity/enums'; import type { CreateNotification, Notification } from '../entity/notification'; import { ForbiddenError, InternalError, NotFoundError } from '../error'; import { fail, ok, type Result } from '../utils/result'; @@ -14,8 +20,10 @@ import { fail, ok, type Result } from '../utils/result'; export class NotificationService { constructor( private readonly repo: INotificationRepository, + private readonly userRepo: IUserRepository, readonly _publicStorage: IPublicStorage, readonly _privateStorage: IPrivateStorage, + private readonly mailer: IMailer, private readonly logger: ILogger, ) {} @@ -115,11 +123,13 @@ export class NotificationService { async create(data: CreateNotification): Promise> { try { // Usually called by other services, no ctx check here or internal check + const isEmail = data.channel === NotificationChannel.Email; + const notification = await this.repo.create({ ...data, isRead: false, - status: NotificationStatus.Sent, - sentAt: new Date(), + status: isEmail ? NotificationStatus.Pending : NotificationStatus.Sent, + sentAt: isEmail ? null : new Date(), }); this.logger.info('Notification created', { @@ -260,4 +270,68 @@ export class NotificationService { return fail(new InternalError(error)); } } + + /** + * Sends a notification via its designated channel (currently supports Email). + * + * @param id - The ID of the notification to send. + * @returns `ok(void)` on success, `fail(NotFoundError | Error)` on failure. + */ + async send(id: string): Promise> { + try { + const notification = await this.repo.findById(id); + if (!notification) { + return fail(new NotFoundError('Notification')); + } + + if (notification.channel !== NotificationChannel.Email) { + // Only Email channel needs manual sending logic for now + return ok(undefined); + } + + const user = await this.userRepo.findById(notification.userId); + if (!user?.email) { + this.logger.error('Target user or email not found for notification', { + id, + userId: notification.userId, + }); + await this.repo.update(id, { + status: NotificationStatus.Failed, + }); + return fail(new NotFoundError('User email')); + } + + const [_, error] = await this.mailer.send({ + to: user.email, + subject: notification.title, + text: notification.body, + // html: notification.data?.html as string | undefined, // Not in schema yet + }); + + if (error) { + this.logger.error('Failed to send email notification', { + id, + error, + }); + await this.repo.update(id, { + status: NotificationStatus.Failed, + }); + return fail(error); + } + + await this.repo.update(id, { + status: NotificationStatus.Sent, + sentAt: new Date(), + }); + + this.logger.info('Email notification sent successfully', { id }); + return ok(undefined); + } catch (error) { + this.logger.error('Unexpected error during notification dispatch', { + id, + error, + }); + return fail(new InternalError(error)); + } + } } diff --git a/packages/mailer/package.json b/packages/mailer/package.json new file mode 100644 index 00000000..4a5498f2 --- /dev/null +++ b/packages/mailer/package.json @@ -0,0 +1,22 @@ +{ + "name": "@domus/mailer", + "version": "0.0.0", + "private": true, + "type": "module", + "exports": { + ".": "./src/index.ts" + }, + "scripts": { + "typecheck": "tsc --noEmit" + }, + "devDependencies": { + "@domus/tsconfig": "workspace:*", + "@types/node": "~24.12.2", + "@types/nodemailer": "^6.4.17", + "vitest": "^3.0.0" + }, + "dependencies": { + "@domus/core": "workspace:*", + "nodemailer": "^6.10.0" + } +} diff --git a/packages/mailer/src/index.ts b/packages/mailer/src/index.ts new file mode 100644 index 00000000..cbc0552f --- /dev/null +++ b/packages/mailer/src/index.ts @@ -0,0 +1 @@ +export * from './nodemailer-mailer'; diff --git a/packages/mailer/src/nodemailer-mailer.ts b/packages/mailer/src/nodemailer-mailer.ts new file mode 100644 index 00000000..e0124d71 --- /dev/null +++ b/packages/mailer/src/nodemailer-mailer.ts @@ -0,0 +1,77 @@ +import type { IMailer, Result, SendEmailPayload } from '@domus/core'; +import { fail, InternalError, ok } from '@domus/core'; +import nodemailer from 'nodemailer'; + +/** + * Configuration for Nodemailer transport. + */ +export interface NodemailerConfig { + /** + * SMTP server hostname. + */ + host?: string; + /** + * SMTP server port. + */ + port: number; + /** + * SMTP username. + */ + user?: string; + /** + * SMTP password. + */ + pass?: string; + /** + * Default sender address. + */ + from: string; +} + +/** + * Implementation of IMailer using Nodemailer. + */ +export class NodemailerMailer implements IMailer { + private transport: nodemailer.Transporter; + + constructor(private config: NodemailerConfig) { + this.transport = nodemailer.createTransport({ + host: config.host, + port: config.port, + secure: config.port === 465, + auth: + config.user && config.pass + ? { + user: config.user, + pass: config.pass, + } + : undefined, + }); + } + + /** + * Sends an email using Nodemailer. + * + * @param payload - The email content and recipient details. + * @returns `ok(undefined)` on success, `fail(Error)` on failure. + */ + async send(payload: SendEmailPayload): Promise> { + try { + await this.transport.sendMail({ + from: this.config.from, + to: payload.to, + subject: payload.subject, + text: payload.text, + html: payload.html, + }); + + return ok(undefined); + } catch (error) { + return fail( + new InternalError( + error instanceof Error ? error : new Error(String(error)), + ), + ); + } + } +} diff --git a/packages/mailer/tsconfig.json b/packages/mailer/tsconfig.json new file mode 100644 index 00000000..576bf094 --- /dev/null +++ b/packages/mailer/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "@domus/tsconfig/base.json", + "compilerOptions": { + "rootDir": "src" + }, + "include": ["src/**/*"], + "exclude": ["node_modules"] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 16f3a67b..daa59ebb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -109,6 +109,9 @@ importers: '@domus/db': specifier: workspace:* version: link:../../packages/db + '@domus/mailer': + specifier: workspace:* + version: link:../../packages/mailer '@domus/storage': specifier: workspace:* version: link:../../packages/storage @@ -123,7 +126,7 @@ importers: version: 1.29.0(react-dom@19.2.5(react@19.2.5))(react@19.2.5) better-auth: specifier: 1.6.2 - version: 1.6.2(@cloudflare/workers-types@4.20260412.1)(@opentelemetry/api@1.9.1)(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260412.1)(@neondatabase/serverless@1.0.2)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.3(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vitest@4.1.4) + version: 1.6.2(@cloudflare/workers-types@4.20260412.1)(@opentelemetry/api@1.9.1)(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260412.1)(@neondatabase/serverless@1.0.2)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.3(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vitest@4.1.4) browser-image-compression: specifier: ^2.0.2 version: 2.0.2 @@ -259,7 +262,7 @@ importers: version: link:../core better-auth: specifier: ^1.5.6 - version: 1.6.2(@cloudflare/workers-types@4.20260412.1)(@opentelemetry/api@1.9.1)(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260412.1)(@neondatabase/serverless@1.0.2)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.3(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vitest@4.1.4) + version: 1.6.2(@cloudflare/workers-types@4.20260412.1)(@opentelemetry/api@1.9.1)(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260412.1)(@neondatabase/serverless@1.0.2)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.3(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vitest@4.1.4) uuid: specifier: ^13.0.0 version: 13.0.0 @@ -388,6 +391,28 @@ importers: specifier: ^3.1.0 version: 3.1.1(typescript@6.0.2)(vitest@4.1.4) + packages/mailer: + dependencies: + '@domus/core': + specifier: workspace:* + version: link:../core + nodemailer: + specifier: ^6.10.0 + version: 6.10.1 + devDependencies: + '@domus/tsconfig': + specifier: workspace:* + version: link:../tsconfig + '@types/node': + specifier: ~24.12.2 + version: 24.12.2 + '@types/nodemailer': + specifier: ^6.4.17 + version: 6.4.23 + vitest: + specifier: ^3.0.0 + version: 3.2.4(@types/debug@4.1.13)(@types/node@24.12.2)(jiti@2.6.1)(lightningcss@1.32.0)(msw@2.13.2(@types/node@24.12.2)(typescript@6.0.2))(tsx@4.21.0)(yaml@2.8.3) + packages/storage: dependencies: '@aws-sdk/client-s3': @@ -2589,6 +2614,144 @@ packages: '@rolldown/pluginutils@1.0.0-rc.15': resolution: {integrity: sha512-UromN0peaE53IaBRe9W7CjrZgXl90fqGpK+mIZbA3qSTeYqg3pqpROBdIPvOG3F5ereDHNwoHBI2e50n1BDr1g==} + '@rollup/rollup-android-arm-eabi@4.60.2': + resolution: {integrity: sha512-dnlp69efPPg6Uaw2dVqzWRfAWRnYVb1XJ8CyyhIbZeaq4CA5/mLeZ1IEt9QqQxmbdvagjLIm2ZL8BxXv5lH4Yw==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.60.2': + resolution: {integrity: sha512-OqZTwDRDchGRHHm/hwLOL7uVPB9aUvI0am/eQuWMNyFHf5PSEQmyEeYYheA0EPPKUO/l0uigCp+iaTjoLjVoHg==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.60.2': + resolution: {integrity: sha512-UwRE7CGpvSVEQS8gUMBe1uADWjNnVgP3Iusyda1nSRwNDCsRjnGc7w6El6WLQsXmZTbLZx9cecegumcitNfpmA==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.60.2': + resolution: {integrity: sha512-gjEtURKLCC5VXm1I+2i1u9OhxFsKAQJKTVB8WvDAHF+oZlq0GTVFOlTlO1q3AlCTE/DF32c16ESvfgqR7343/g==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.60.2': + resolution: {integrity: sha512-Bcl6CYDeAgE70cqZaMojOi/eK63h5Me97ZqAQoh77VPjMysA/4ORQBRGo3rRy45x4MzVlU9uZxs8Uwy7ZaKnBw==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.60.2': + resolution: {integrity: sha512-LU+TPda3mAE2QB0/Hp5VyeKJivpC6+tlOXd1VMoXV/YFMvk/MNk5iXeBfB4MQGRWyOYVJ01625vjkr0Az98OJQ==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.60.2': + resolution: {integrity: sha512-2QxQrM+KQ7DAW4o22j+XZ6RKdxjLD7BOWTP0Bv0tmjdyhXSsr2Ul1oJDQqh9Zf5qOwTuTc7Ek83mOFaKnodPjg==} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-arm-musleabihf@4.60.2': + resolution: {integrity: sha512-TbziEu2DVsTEOPif2mKWkMeDMLoYjx95oESa9fkQQK7r/Orta0gnkcDpzwufEcAO2BLBsD7mZkXGFqEdMRRwfw==} + cpu: [arm] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-arm64-gnu@4.60.2': + resolution: {integrity: sha512-bO/rVDiDUuM2YfuCUwZ1t1cP+/yqjqz+Xf2VtkdppefuOFS2OSeAfgafaHNkFn0t02hEyXngZkxtGqXcXwO8Rg==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-arm64-musl@4.60.2': + resolution: {integrity: sha512-hr26p7e93Rl0Za+JwW7EAnwAvKkehh12BU1Llm9Ykiibg4uIr2rbpxG9WCf56GuvidlTG9KiiQT/TXT1yAWxTA==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-loong64-gnu@4.60.2': + resolution: {integrity: sha512-pOjB/uSIyDt+ow3k/RcLvUAOGpysT2phDn7TTUB3n75SlIgZzM6NKAqlErPhoFU+npgY3/n+2HYIQVbF70P9/A==} + cpu: [loong64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-loong64-musl@4.60.2': + resolution: {integrity: sha512-2/w+q8jszv9Ww1c+6uJT3OwqhdmGP2/4T17cu8WuwyUuuaCDDJ2ojdyYwZzCxx0GcsZBhzi3HmH+J5pZNXnd+Q==} + cpu: [loong64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-ppc64-gnu@4.60.2': + resolution: {integrity: sha512-11+aL5vKheYgczxtPVVRhdptAM2H7fcDR5Gw4/bTcteuZBlH4oP9f5s9zYO9aGZvoGeBpqXI/9TZZihZ609wKw==} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-ppc64-musl@4.60.2': + resolution: {integrity: sha512-i16fokAGK46IVZuV8LIIwMdtqhin9hfYkCh8pf8iC3QU3LpwL+1FSFGej+O7l3E/AoknL6Dclh2oTdnRMpTzFQ==} + cpu: [ppc64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-riscv64-gnu@4.60.2': + resolution: {integrity: sha512-49FkKS6RGQoriDSK/6E2GkAsAuU5kETFCh7pG4yD/ylj9rKhTmO3elsnmBvRD4PgJPds5W2PkhC82aVwmUcJ7A==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-riscv64-musl@4.60.2': + resolution: {integrity: sha512-mjYNkHPfGpUR00DuM1ZZIgs64Hpf4bWcz9Z41+4Q+pgDx73UwWdAYyf6EG/lRFldmdHHzgrYyge5akFUW0D3mQ==} + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@rollup/rollup-linux-s390x-gnu@4.60.2': + resolution: {integrity: sha512-ALyvJz965BQk8E9Al/JDKKDLH2kfKFLTGMlgkAbbYtZuJt9LU8DW3ZoDMCtQpXAltZxwBHevXz5u+gf0yA0YoA==} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-x64-gnu@4.60.2': + resolution: {integrity: sha512-UQjrkIdWrKI626Du8lCQ6MJp/6V1LAo2bOK9OTu4mSn8GGXIkPXk/Vsp4bLHCd9Z9Iz2OTEaokUE90VweJgIYQ==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@rollup/rollup-linux-x64-musl@4.60.2': + resolution: {integrity: sha512-bTsRGj6VlSdn/XD4CGyzMnzaBs9bsRxy79eTqTCBsA8TMIEky7qg48aPkvJvFe1HyzQ5oMZdg7AnVlWQSKLTnw==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@rollup/rollup-openbsd-x64@4.60.2': + resolution: {integrity: sha512-6d4Z3534xitaA1FcMWP7mQPq5zGwBmGbhphh2DwaA1aNIXUu3KTOfwrWpbwI4/Gr0uANo7NTtaykFyO2hPuFLg==} + cpu: [x64] + os: [openbsd] + + '@rollup/rollup-openharmony-arm64@4.60.2': + resolution: {integrity: sha512-NetAg5iO2uN7eB8zE5qrZ3CSil+7IJt4WDFLcC75Ymywq1VZVD6qJ6EvNLjZ3rEm6gB7XW5JdT60c6MN35Z85Q==} + cpu: [arm64] + os: [openharmony] + + '@rollup/rollup-win32-arm64-msvc@4.60.2': + resolution: {integrity: sha512-NCYhOotpgWZ5kdxCZsv6Iudx0wX8980Q/oW4pNFNihpBKsDbEA1zpkfxJGC0yugsUuyDZ7gL37dbzwhR0VI7pQ==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.60.2': + resolution: {integrity: sha512-RXsaOqXxfoUBQoOgvmmijVxJnW2IGB0eoMO7F8FAjaj0UTywUO/luSqimWBJn04WNgUkeNhh7fs7pESXajWmkg==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-gnu@4.60.2': + resolution: {integrity: sha512-qdAzEULD+/hzObedtmV6iBpdL5TIbKVztGiK7O3/KYSf+HIzU257+MX1EXJcyIiDbMAqmbwaufcYPvyRryeZtA==} + cpu: [x64] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.60.2': + resolution: {integrity: sha512-Nd/SgG27WoA9e+/TdK74KnHz852TLa94ovOYySo/yMPuTmpckK/jIF2jSwS3g7ELSKXK13/cVdmg1Z/DaCWKxA==} + cpu: [x64] + os: [win32] + '@schummar/icu-type-parser@1.21.5': resolution: {integrity: sha512-bXHSaW5jRTmke9Vd0h5P7BtWZG9Znqb8gSDxZnxaGSJnGwPLDPfS+3g0BKzeWqzgZPsIVZkM7m2tbo18cm5HBw==} @@ -3243,6 +3406,9 @@ packages: '@types/node@24.12.2': resolution: {integrity: sha512-A1sre26ke7HDIuY/M23nd9gfB+nrmhtYyMINbjI1zHJxYteKR6qSMX56FsmjMcDb3SMcjJg5BiRRgOCC/yBD0g==} + '@types/nodemailer@6.4.23': + resolution: {integrity: sha512-aFV3/NsYFLSx9mbb5gtirBSXJnAlrusoKNuPbxsASWc7vrKLmIrTQRpdcxNcSFL3VW2A2XpeLEavwb2qMi6nlQ==} + '@types/pg@8.20.0': resolution: {integrity: sha512-bEPFOaMAHTEP1EzpvHTbmwR8UsFyHSKsRisLIHVMXnpNefSbGA1bD6CVy+qKjGSqmZqNqBDV2azOBo8TgkcVow==} @@ -3286,9 +3452,23 @@ packages: '@vitest/browser': optional: true + '@vitest/expect@3.2.4': + resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} + '@vitest/expect@4.1.4': resolution: {integrity: sha512-iPBpra+VDuXmBFI3FMKHSFXp3Gx5HfmSCE8X67Dn+bwephCnQCaB7qWK2ldHa+8ncN8hJU8VTMcxjPpyMkUjww==} + '@vitest/mocker@3.2.4': + resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==} + peerDependencies: + msw: ^2.4.9 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + '@vitest/mocker@4.1.4': resolution: {integrity: sha512-R9HTZBhW6yCSGbGQnDnH3QHfJxokKN4KB+Yvk9Q1le7eQNYwiCyKxmLmurSpFy6BzJanSLuEUDrD+j97Q+ZLPg==} peerDependencies: @@ -3300,18 +3480,33 @@ packages: vite: optional: true + '@vitest/pretty-format@3.2.4': + resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} + '@vitest/pretty-format@4.1.4': resolution: {integrity: sha512-ddmDHU0gjEUyEVLxtZa7xamrpIefdEETu3nZjWtHeZX4QxqJ7tRxSteHVXJOcr8jhiLoGAhkK4WJ3WqBpjx42A==} + '@vitest/runner@3.2.4': + resolution: {integrity: sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==} + '@vitest/runner@4.1.4': resolution: {integrity: sha512-xTp7VZ5aXP5ZJrn15UtJUWlx6qXLnGtF6jNxHepdPHpMfz/aVPx+htHtgcAL2mDXJgKhpoo2e9/hVJsIeFbytQ==} + '@vitest/snapshot@3.2.4': + resolution: {integrity: sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==} + '@vitest/snapshot@4.1.4': resolution: {integrity: sha512-MCjCFgaS8aZz+m5nTcEcgk/xhWv0rEH4Yl53PPlMXOZ1/Ka2VcZU6CJ+MgYCZbcJvzGhQRjVrGQNZqkGPttIKw==} + '@vitest/spy@3.2.4': + resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} + '@vitest/spy@4.1.4': resolution: {integrity: sha512-XxNdAsKW7C+FLydqFJLb5KhJtl3PGCMmYwFRfhvIgxJvLSXhhVI1zM8f1qD3Zg7RCjTSzDVyct6sghs9UEgBEQ==} + '@vitest/utils@3.2.4': + resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} + '@vitest/utils@4.1.4': resolution: {integrity: sha512-13QMT+eysM5uVGa1rG4kegGYNp6cnQcsTc67ELFbhNLQO+vgsygtYJx2khvdt4gVQqSSpC/KT5FZZxUpP3Oatw==} @@ -3538,6 +3733,10 @@ packages: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} + cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + cac@7.0.0: resolution: {integrity: sha512-tixWYgm5ZoOD+3g6UTea91eow5z6AAHaho3g0V9CNSNb45gM8SmflpAc+GRd1InC4AqN/07Unrgp56Y94N9hJQ==} engines: {node: '>=20.19.0'} @@ -3560,6 +3759,10 @@ packages: ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + chai@5.3.3: + resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} + engines: {node: '>=18'} + chai@6.2.2: resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} engines: {node: '>=18'} @@ -3580,6 +3783,10 @@ packages: character-reference-invalid@2.0.1: resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} + check-error@2.1.3: + resolution: {integrity: sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==} + engines: {node: '>= 16'} + cheerio-select@2.1.0: resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} @@ -3757,6 +3964,10 @@ packages: babel-plugin-macros: optional: true + deep-eql@5.0.2: + resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} + engines: {node: '>=6'} + deepmerge@4.3.1: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} @@ -3999,6 +4210,9 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} + es-module-lexer@1.7.0: + resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} + es-module-lexer@2.0.0: resolution: {integrity: sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==} @@ -4538,6 +4752,9 @@ packages: js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + js-tokens@9.0.1: + resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} + js-yaml@4.1.1: resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} hasBin: true @@ -4706,6 +4923,9 @@ packages: longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} + loupe@3.2.1: + resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} + lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} @@ -5066,6 +5286,10 @@ packages: node-releases@2.0.37: resolution: {integrity: sha512-1h5gKZCF+pO/o3Iqt5Jp7wc9rH3eJJ0+nh/CIoiRwjRxde/hAHyLPXYN4V3CqKAbiZPSeJFSWHmJsbkicta0Eg==} + nodemailer@6.10.1: + resolution: {integrity: sha512-Z+iLaBGVaSjbIzQ4pX6XV41HrooLsQ10ZWPUehGmuantvzWoDVBnmsdUcOIDM1t+yPor5pDhVlDESgOMEGxhHA==} + engines: {node: '>=6.0.0'} + npm-run-path@4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} @@ -5177,6 +5401,10 @@ packages: pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + pathval@2.0.1: + resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} + engines: {node: '>= 14.16'} + pg-cloudflare@1.3.0: resolution: {integrity: sha512-6lswVVSztmHiRtD6I8hw4qP/nDm1EJbKMRhf3HCYaqud7frGysPv7FYJ5noZQdhQtN2xJnimfMtvQq21pdbzyQ==} @@ -5441,6 +5669,11 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} hasBin: true + rollup@4.60.2: + resolution: {integrity: sha512-J9qZyW++QK/09NyN/zeO0dG/1GdGfyp9lV8ajHnRVLfo/uFsbji5mHnDgn/qYdUHyCkM2N+8VyspgZclfAh0eQ==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + rou3@0.7.12: resolution: {integrity: sha512-iFE4hLDuloSWcD7mjdCDhx2bKcIsYbtOTpfH5MHHLSKMOUyjqQXTeZVa289uuwEGEKFoE/BAPbhaU4B774nceg==} @@ -5588,6 +5821,9 @@ packages: resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} engines: {node: '>= 0.8'} + std-env@3.10.0: + resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} + std-env@4.0.0: resolution: {integrity: sha512-zUMPtQ/HBY3/50VbpkupYHbRroTRZJPRLvreamgErJVys0ceuzMkD44J/QjqhHjOzK42GQ3QZIeFG1OYfOtKqQ==} @@ -5645,6 +5881,9 @@ packages: resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==} engines: {node: '>=18'} + strip-literal@3.1.0: + resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==} + strnum@2.2.3: resolution: {integrity: sha512-oKx6RUCuHfT3oyVjtnrmn19H1SiCqgJSg+54XqURKp5aCMbrXrhLjRN9TjuwMjiYstZ0MzDrHqkGZ5dFTKd+zg==} @@ -5698,6 +5937,9 @@ packages: tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + tinyexec@0.3.2: + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + tinyexec@1.1.1: resolution: {integrity: sha512-VKS/ZaQhhkKFMANmAOhhXVoIfBXblQxGX1myCQ2faQrfmobMftXeJPcZGp0gS07ocvGJWDLZGyOZDadDBqYIJg==} engines: {node: '>=18'} @@ -5706,10 +5948,22 @@ packages: resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==} engines: {node: '>=12.0.0'} + tinypool@1.1.1: + resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==} + engines: {node: ^18.0.0 || >=20.0.0} + + tinyrainbow@2.0.0: + resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} + engines: {node: '>=14.0.0'} + tinyrainbow@3.1.0: resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==} engines: {node: '>=14.0.0'} + tinyspy@4.0.4: + resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==} + engines: {node: '>=14.0.0'} + tldts-core@7.0.28: resolution: {integrity: sha512-7W5Efjhsc3chVdFhqtaU0KtK32J37Zcr9RKtID54nG+tIpcY79CQK/veYPODxtD/LJ4Lue66jvrQzIX2Z2/pUQ==} @@ -5938,6 +6192,51 @@ packages: vfile@6.0.3: resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} + vite-node@3.2.4: + resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + + vite@7.3.2: + resolution: {integrity: sha512-Bby3NOsna2jsjfLVOHKes8sGwgl4TT0E6vvpYgnAYDIF/tie7MRaFthmKuHx1NSXjiTueXH3do80FMQgvEktRg==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + jiti: '>=1.21.0' + less: ^4.0.0 + lightningcss: ^1.21.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + vite@8.0.8: resolution: {integrity: sha512-dbU7/iLVa8KZALJyLOBOQ88nOXtNG8vxKuOT4I2mD+Ya70KPceF4IAmDsmU0h1Qsn5bPrvsY9HJstCRh3hG6Uw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -5987,6 +6286,34 @@ packages: typescript: 3.x || 4.x || 5.x || 6.x vitest: '>=3.0.0' + vitest@3.2.4: + resolution: {integrity: sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@types/debug': ^4.1.12 + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + '@vitest/browser': 3.2.4 + '@vitest/ui': 3.2.4 + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@types/debug': + optional: true + '@types/node': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + vitest@4.1.4: resolution: {integrity: sha512-tFuJqTxKb8AvfyqMfnavXdzfy3h3sWZRWwfluGbkeR7n0HUev+FmNgZ8SDrRBTVrVCjgH5cA21qGbCffMNtWvg==} engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} @@ -8089,6 +8416,81 @@ snapshots: '@rolldown/pluginutils@1.0.0-rc.15': {} + '@rollup/rollup-android-arm-eabi@4.60.2': + optional: true + + '@rollup/rollup-android-arm64@4.60.2': + optional: true + + '@rollup/rollup-darwin-arm64@4.60.2': + optional: true + + '@rollup/rollup-darwin-x64@4.60.2': + optional: true + + '@rollup/rollup-freebsd-arm64@4.60.2': + optional: true + + '@rollup/rollup-freebsd-x64@4.60.2': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.60.2': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.60.2': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.60.2': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.60.2': + optional: true + + '@rollup/rollup-linux-loong64-gnu@4.60.2': + optional: true + + '@rollup/rollup-linux-loong64-musl@4.60.2': + optional: true + + '@rollup/rollup-linux-ppc64-gnu@4.60.2': + optional: true + + '@rollup/rollup-linux-ppc64-musl@4.60.2': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.60.2': + optional: true + + '@rollup/rollup-linux-riscv64-musl@4.60.2': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.60.2': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.60.2': + optional: true + + '@rollup/rollup-linux-x64-musl@4.60.2': + optional: true + + '@rollup/rollup-openbsd-x64@4.60.2': + optional: true + + '@rollup/rollup-openharmony-arm64@4.60.2': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.60.2': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.60.2': + optional: true + + '@rollup/rollup-win32-x64-gnu@4.60.2': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.60.2': + optional: true + '@schummar/icu-type-parser@1.21.5': {} '@sec-ant/readable-stream@0.4.1': {} @@ -8770,6 +9172,10 @@ snapshots: dependencies: undici-types: 7.16.0 + '@types/nodemailer@6.4.23': + dependencies: + '@types/node': 24.12.2 + '@types/pg@8.20.0': dependencies: '@types/node': 24.12.2 @@ -8826,6 +9232,14 @@ snapshots: tinyrainbow: 3.1.0 vitest: 4.1.4(@opentelemetry/api@1.9.1)(@types/node@24.12.2)(@vitest/coverage-istanbul@4.1.4)(@vitest/coverage-v8@4.1.4)(msw@2.13.2(@types/node@24.12.2)(typescript@6.0.2))(vite@8.0.8(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) + '@vitest/expect@3.2.4': + dependencies: + '@types/chai': 5.2.3 + '@vitest/spy': 3.2.4 + '@vitest/utils': 3.2.4 + chai: 5.3.3 + tinyrainbow: 2.0.0 + '@vitest/expect@4.1.4': dependencies: '@standard-schema/spec': 1.1.0 @@ -8835,6 +9249,15 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.1.0 + '@vitest/mocker@3.2.4(msw@2.13.2(@types/node@24.12.2)(typescript@6.0.2))(vite@7.3.2(@types/node@24.12.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.3))': + dependencies: + '@vitest/spy': 3.2.4 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + msw: 2.13.2(@types/node@24.12.2)(typescript@6.0.2) + vite: 7.3.2(@types/node@24.12.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.3) + '@vitest/mocker@4.1.4(msw@2.13.2(@types/node@24.12.2)(typescript@6.0.2))(vite@8.0.8(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@vitest/spy': 4.1.4 @@ -8844,15 +9267,31 @@ snapshots: msw: 2.13.2(@types/node@24.12.2)(typescript@6.0.2) vite: 8.0.8(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3) + '@vitest/pretty-format@3.2.4': + dependencies: + tinyrainbow: 2.0.0 + '@vitest/pretty-format@4.1.4': dependencies: tinyrainbow: 3.1.0 + '@vitest/runner@3.2.4': + dependencies: + '@vitest/utils': 3.2.4 + pathe: 2.0.3 + strip-literal: 3.1.0 + '@vitest/runner@4.1.4': dependencies: '@vitest/utils': 4.1.4 pathe: 2.0.3 + '@vitest/snapshot@3.2.4': + dependencies: + '@vitest/pretty-format': 3.2.4 + magic-string: 0.30.21 + pathe: 2.0.3 + '@vitest/snapshot@4.1.4': dependencies: '@vitest/pretty-format': 4.1.4 @@ -8860,8 +9299,18 @@ snapshots: magic-string: 0.30.21 pathe: 2.0.3 + '@vitest/spy@3.2.4': + dependencies: + tinyspy: 4.0.4 + '@vitest/spy@4.1.4': {} + '@vitest/utils@3.2.4': + dependencies: + '@vitest/pretty-format': 3.2.4 + loupe: 3.2.1 + tinyrainbow: 2.0.0 + '@vitest/utils@4.1.4': dependencies: '@vitest/pretty-format': 4.1.4 @@ -8942,7 +9391,7 @@ snapshots: baseline-browser-mapping@2.10.18: {} - better-auth@1.6.2(@cloudflare/workers-types@4.20260412.1)(@opentelemetry/api@1.9.1)(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260412.1)(@neondatabase/serverless@1.0.2)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.3(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vitest@4.1.4): + better-auth@1.6.2(@cloudflare/workers-types@4.20260412.1)(@opentelemetry/api@1.9.1)(drizzle-kit@0.31.10)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260412.1)(@neondatabase/serverless@1.0.2)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0))(next@16.2.3(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5))(pg@8.20.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(vitest@4.1.4): dependencies: '@better-auth/core': 1.6.2(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260412.1)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.3.6))(jose@6.2.2)(kysely@0.28.16)(nanostores@1.2.0) '@better-auth/drizzle-adapter': 1.6.2(@better-auth/core@1.6.2(@better-auth/utils@0.4.0)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260412.1)(@opentelemetry/api@1.9.1)(better-call@1.3.5(zod@4.3.6))(jose@6.2.2)(kysely@0.28.16)(nanostores@1.2.0))(@better-auth/utils@0.4.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260412.1)(@neondatabase/serverless@1.0.2)(@opentelemetry/api@1.9.1)(@types/pg@8.20.0)(kysely@0.28.16)(pg@8.20.0)) @@ -9048,6 +9497,8 @@ snapshots: bytes@3.1.2: {} + cac@6.7.14: {} + cac@7.0.0: {} call-bind-apply-helpers@1.0.2: @@ -9066,6 +9517,14 @@ snapshots: ccount@2.0.1: {} + chai@5.3.3: + dependencies: + assertion-error: 2.0.1 + check-error: 2.1.3 + deep-eql: 5.0.2 + loupe: 3.2.1 + pathval: 2.0.1 + chai@6.2.2: {} chalk@5.6.2: {} @@ -9078,6 +9537,8 @@ snapshots: character-reference-invalid@2.0.1: {} + check-error@2.1.3: {} + cheerio-select@2.1.0: dependencies: boolbase: 1.0.0 @@ -9235,6 +9696,8 @@ snapshots: dedent@1.7.2: {} + deep-eql@5.0.2: {} + deepmerge@4.3.1: {} default-browser-id@5.0.1: {} @@ -9365,6 +9828,8 @@ snapshots: es-errors@1.3.0: {} + es-module-lexer@1.7.0: {} + es-module-lexer@2.0.0: {} es-object-atoms@1.1.1: @@ -10076,6 +10541,8 @@ snapshots: js-tokens@4.0.0: {} + js-tokens@9.0.1: {} + js-yaml@4.1.1: dependencies: argparse: 2.0.1 @@ -10217,6 +10684,8 @@ snapshots: longest-streak@3.1.0: {} + loupe@3.2.1: {} + lru-cache@10.4.3: {} lru-cache@5.1.1: @@ -10850,6 +11319,8 @@ snapshots: node-releases@2.0.37: {} + nodemailer@6.10.1: {} + npm-run-path@4.0.1: dependencies: path-key: 3.1.1 @@ -10969,6 +11440,8 @@ snapshots: pathe@2.0.3: {} + pathval@2.0.1: {} + pg-cloudflare@1.3.0: optional: true @@ -11290,6 +11763,37 @@ snapshots: '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.15 '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.15 + rollup@4.60.2: + dependencies: + '@types/estree': 1.0.8 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.60.2 + '@rollup/rollup-android-arm64': 4.60.2 + '@rollup/rollup-darwin-arm64': 4.60.2 + '@rollup/rollup-darwin-x64': 4.60.2 + '@rollup/rollup-freebsd-arm64': 4.60.2 + '@rollup/rollup-freebsd-x64': 4.60.2 + '@rollup/rollup-linux-arm-gnueabihf': 4.60.2 + '@rollup/rollup-linux-arm-musleabihf': 4.60.2 + '@rollup/rollup-linux-arm64-gnu': 4.60.2 + '@rollup/rollup-linux-arm64-musl': 4.60.2 + '@rollup/rollup-linux-loong64-gnu': 4.60.2 + '@rollup/rollup-linux-loong64-musl': 4.60.2 + '@rollup/rollup-linux-ppc64-gnu': 4.60.2 + '@rollup/rollup-linux-ppc64-musl': 4.60.2 + '@rollup/rollup-linux-riscv64-gnu': 4.60.2 + '@rollup/rollup-linux-riscv64-musl': 4.60.2 + '@rollup/rollup-linux-s390x-gnu': 4.60.2 + '@rollup/rollup-linux-x64-gnu': 4.60.2 + '@rollup/rollup-linux-x64-musl': 4.60.2 + '@rollup/rollup-openbsd-x64': 4.60.2 + '@rollup/rollup-openharmony-arm64': 4.60.2 + '@rollup/rollup-win32-arm64-msvc': 4.60.2 + '@rollup/rollup-win32-ia32-msvc': 4.60.2 + '@rollup/rollup-win32-x64-gnu': 4.60.2 + '@rollup/rollup-win32-x64-msvc': 4.60.2 + fsevents: 2.3.3 + rou3@0.7.12: {} router@2.2.0: @@ -11519,6 +12023,8 @@ snapshots: statuses@2.0.2: {} + std-env@3.10.0: {} + std-env@4.0.0: {} stdin-discarder@0.2.2: {} @@ -11575,6 +12081,10 @@ snapshots: strip-final-newline@4.0.0: {} + strip-literal@3.1.0: + dependencies: + js-tokens: 9.0.1 + strnum@2.2.3: {} style-to-js@1.1.21: @@ -11612,6 +12122,8 @@ snapshots: tinybench@2.9.0: {} + tinyexec@0.3.2: {} + tinyexec@1.1.1: {} tinyglobby@0.2.16: @@ -11619,8 +12131,14 @@ snapshots: fdir: 6.5.0(picomatch@4.0.4) picomatch: 4.0.4 + tinypool@1.1.1: {} + + tinyrainbow@2.0.0: {} + tinyrainbow@3.1.0: {} + tinyspy@4.0.4: {} + tldts-core@7.0.28: {} tldts@7.0.28: @@ -11856,6 +12374,43 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 + vite-node@3.2.4(@types/node@24.12.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.3): + dependencies: + cac: 6.7.14 + debug: 4.4.3 + es-module-lexer: 1.7.0 + pathe: 2.0.3 + vite: 7.3.2(@types/node@24.12.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.3) + transitivePeerDependencies: + - '@types/node' + - jiti + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + + vite@7.3.2(@types/node@24.12.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.3): + dependencies: + esbuild: 0.27.7 + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 + postcss: 8.5.10 + rollup: 4.60.2 + tinyglobby: 0.2.16 + optionalDependencies: + '@types/node': 24.12.2 + fsevents: 2.3.3 + jiti: 2.6.1 + lightningcss: 1.32.0 + tsx: 4.21.0 + yaml: 2.8.3 + vite@8.0.8(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3): dependencies: lightningcss: 1.32.0 @@ -11877,6 +12432,48 @@ snapshots: typescript: 6.0.2 vitest: 4.1.4(@opentelemetry/api@1.9.1)(@types/node@24.12.2)(@vitest/coverage-istanbul@4.1.4)(@vitest/coverage-v8@4.1.4)(msw@2.13.2(@types/node@24.12.2)(typescript@6.0.2))(vite@8.0.8(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)) + vitest@3.2.4(@types/debug@4.1.13)(@types/node@24.12.2)(jiti@2.6.1)(lightningcss@1.32.0)(msw@2.13.2(@types/node@24.12.2)(typescript@6.0.2))(tsx@4.21.0)(yaml@2.8.3): + dependencies: + '@types/chai': 5.2.3 + '@vitest/expect': 3.2.4 + '@vitest/mocker': 3.2.4(msw@2.13.2(@types/node@24.12.2)(typescript@6.0.2))(vite@7.3.2(@types/node@24.12.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.3)) + '@vitest/pretty-format': 3.2.4 + '@vitest/runner': 3.2.4 + '@vitest/snapshot': 3.2.4 + '@vitest/spy': 3.2.4 + '@vitest/utils': 3.2.4 + chai: 5.3.3 + debug: 4.4.3 + expect-type: 1.3.0 + magic-string: 0.30.21 + pathe: 2.0.3 + picomatch: 4.0.4 + std-env: 3.10.0 + tinybench: 2.9.0 + tinyexec: 0.3.2 + tinyglobby: 0.2.16 + tinypool: 1.1.1 + tinyrainbow: 2.0.0 + vite: 7.3.2(@types/node@24.12.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.3) + vite-node: 3.2.4(@types/node@24.12.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.21.0)(yaml@2.8.3) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/debug': 4.1.13 + '@types/node': 24.12.2 + transitivePeerDependencies: + - jiti + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + vitest@4.1.4(@opentelemetry/api@1.9.1)(@types/node@24.12.2)(@vitest/coverage-istanbul@4.1.4)(@vitest/coverage-v8@4.1.4)(msw@2.13.2(@types/node@24.12.2)(typescript@6.0.2))(vite@8.0.8(@types/node@24.12.2)(esbuild@0.28.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.3)): dependencies: '@vitest/expect': 4.1.4