From bd978297607249928de83be9fb74547239b2c848 Mon Sep 17 00:00:00 2001 From: "gpt-engineer-app[bot]" <159125892+gpt-engineer-app[bot]@users.noreply.github.com> Date: Sat, 18 Apr 2026 17:49:57 +0000 Subject: [PATCH] Changes Co-authored-by: renee-png <262607627+renee-png@users.noreply.github.com> --- bun.lockb | Bin 356254 -> 364034 bytes package.json | 1 + src/integrations/supabase/types.ts | 104 ++++++++++++++++++ ...3_948297af-7c8b-4cdc-8f0f-cdf66772736d.sql | 49 +++++++++ 4 files changed, 154 insertions(+) create mode 100644 supabase/migrations/20260418174953_948297af-7c8b-4cdc-8f0f-cdf66772736d.sql diff --git a/bun.lockb b/bun.lockb index 050aece84acde1263d7bdeebc4eebe41aeebaa06..52098e0bad56e65cb26f764edb54f25695b164e1 100755 GIT binary patch delta 56680 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 IO;6SPfBqC8C;$Ke delta 51924 zcmeFad7Mu5|Nnok>za$XY#Hm2y+{igWv9V#We;V^5`$qz%rJ}4GAJc&#z`*}5lV`v zWC_``hq6W)r6h%-MCo^boO3Rw_pi_L{d_*(<&Uo0Jg&#<`FK5F`|G^U>pI6d#=TN% z=9eWW)x7z`tfm!zyXTK?7pJZtzwD=c>n2wJ_42We55;#F(s4(aUVp(Gb+)*PlWoS~m#}=HJo}M@=vz}#z z-1v;-#9>M3!xA%-6`#>RaY)j*`fmEQb+6{rKW#`_`XF>KT~cC3lC^~R>&Pd2j_3HI zCp_HHO*r1OhruOr?AXXn(9iR~*NflgRd|)huQj%;qWCYyE(G7x#Ij1kE#U%idQxKl z%o-^f*WYDXg)OVmn7u^E@jQZR_%U`tcm=GUXz1CIghSE>BxWRA)|@(a!~E6ChMK$e z8jzToRAXRj#@S|;Rfc3=H?v3QuaJFP3pckau!=7OtCS%r{e}-?DBz*=v$eUUs|P*5 zMt8flI+c`?a0h4d39W?l=mo0qfe>>Cx4) z_jh!YckATVGb=MaC5de7cebozxV1)Cvi0~W+2ngIs|4IXEj_8m;0&vOV(N%N_(yf| zM&Ukp_|gaUbLLGhc5(dE69=lcR;6xkcOO8fKkd??%KkOo?S`QW*{6EASsa6j8nd~l z%Y!rer7G#Ll+-lwbG@CBAJY%kz&{Sl|5Pv6PQ@;X-452wX##7i-VCei#o*F##;_qN znYAs;hs_YR9rFtrXy#P;55_t&Mh|l|s^CGeGM+)lm4{zQva1xRn|+)~ruuyft9;*J zw<~{6arq>y;y#0wJSD?9Lamh4|L8skAoPn{daYNmqNM;(>WC-q| zchtokI8J_d#yaWjj|;?QSIcy(n4IMf%e}DrCK}eXJUYUSujSdzU=8~(q!TY3>E>Am zU48Zyy2^?j?T*1N?2_2aVfFP~xCH!yt7nfXK|mS(G2Cs;@hHo>9{Wm$o8TLm`i|KS zOJ4|AfctpylVJ5}mKWdJ)7Ou6J0T8R>5IaZ;a}6;!}oKzoRw{jSxZ0}&vgWA%tW{> zcB*H0hgI`NunMZ`*f4=T($Gv?F;%c=;!^R(NO1t+=FR{(?%o?u}Wfx@a#Rw%^?+5Uk;t@`emgK8}@$xJ5qTAGGV6`w4R>>DU|NhBo52g%AwCfd)$^K%BJLgg|Y782Z*3UZlk~{9Z zJ-wfC>#zx1bFyE0V*ez%^!BN)Uly!o;A2>IPD~v&G%>S(@(=l3dlGF_>qo=tO`TJ; zj0{K_sN+7{3Ql(`8IOY|b={XOs|tKQtjgCyzYebK@x^Iww|9NTt=J$~jXsH96ds(B zl%e(S%jew+XCw_Bq4VJ2jI`7`=!23{Ge)KMw`R`NFfk7%5l{<;!y3oLS(+f6m#{T) z9-8g8WK`miAt@P|)`Qs2>hhY~B8p2Kk~kn~1h(cwKezn;P|{Wtw=y(vvb-sMBAb=O*-{t3o-iyYZ)Jkus{v#8Zo_&Ubq#`3^GSlaW4R zq&Ph-%TWyRN`K}J*RT2lH+=ywUGcZ*e~szjj2fd7hYqn4(+4>xlaWNIM^a#QeJ@xo zTk^KcBT_Px24-1S*1$BCXN8E@a+fqRBW=itB&&aN66;i&_4K01d>xR|KLvkm^^8*p zW5Jmz+c`CLB|>}9xGcsyCl$@CP+!D9og73OR)GsYr#z zN5Pe_yL$0=!d0+~z}4Wh z-tAPVB=PN5yA|9EtE=n5(jVeb)aTT9S6(axY4!Wg4M<2Hrdl-DwO?Xvnxl6 zsp+}z`PkkYlj={{ZZ|L1!GB<;`ZHSSniL&rQio)b@um1-D!I- zw))b1?$)ybwhs6#>?&|oY>mPF*yZ5su$50EY|WluVWqzwRy%WH;s=iTDkM$mEi_#W%xR*j(G}J$ECxna8Fnr9a$qgVi&~jO}pjqoJew3f1W*wo>ashdQvsX z#8$?+^rl*xlrbbFHPf=@pL2V*7(=MDK{TxCdd1U+B#lTViS;A4I&uKpSGMfdG;FOj zlVGL0{IhHKIq#&;9@B|{j{GNZ(4yK0t_t4=t70jGQrUM}R^&7_FePLV@O(mHuP}H(3DJT?5}Qo3-VEgid}Ro{9w|k5vu3}?1DN=3>=b}nVB@es)M6y znv~&ermdum;aN%PqpTIbxe1dpSjMSH75tb}WA41 zVI7VO&?~{oN$28nW{`x4|F6 z>ZmnEeNIE?dz=I7=!=}Kp2n}b(!)A=Tu(l#*Neq{&fJgA=Z9I!*uZy~R}z7Kv>Y|4iuVHph0qJZ)Rq;X{`ftlGZvtc~$U zioZAE&KqmkM+UWs8C=J*8c??1$(f_tuH3(#zertsaB?`bt1iE&i453#`o)Lx)w3)F zti&Gip~hHl-0VH^{zvQC6H~&WWmm=AXW~O={*s_7-bxT# zS^cAQ8Nw?qmRh;_tF(?-4V}2*UE@O&vD})dUTd-96?ZM;KarX^?z0y*jV7TJZ|~U^ zA9@0n>*elb*p)bf$nO5SUA-0F3W0;7-dsa|J=Lm!-#(%sw1N8*-yuZ>QOI*F+qEH`}mkF&&uyLro7#( zUcJzJSABAa#fQ#e(K%y^nV9^(roN{3#Po2ePt!0w0^>f9 z_t$S`FUSaoUT$Vttr0`E@BZ8E#Y>C&W1HIzGsB_2RM;70ji`TWb9)=&Nkk2o&(0ke z@2`+x_s9x|#wD;vKn&P%cD%n{3;PtJ&G@qi8sk^(;{BIf*rP{;?T)EY!2zg2TP^sc zrDgS!k25K64f7Mlje90O_zcznduaQF&>2GX@)*lbTpb^}`))eiNi)1_(ftDz=Z1bIN~Rd%Nr- z;n3afBS(RzRyLLz6|{3w;zJ)|(O+~#Vt)#i<+LiH1C>ONay#*j4)(T3!=dW;SXNh5 z2H}}_|6}*qJsx9Z5QjM#YTyTUblV!G*%ZpfQl*?x3nh1Q+v{_RK7yrQ@m;NOs7+_f z8u3?YEfNbf6^vWkH2Pk*RsjuS@O7*V`{S6bTp6FpO7#|M(LQ>T@itcS1-P0X!XF7y-dzQ~;{Rq~j-+I`+dnAM=DMXTxUHOst z&~#cq1j}7r^HED>XKA!T!>}}e+=1Ee#rd3B+q92mJwlvcxdc~XJ*Jf<)UdDH{wU`# zS%9Uk%J1~XjfwX3r^BJSG)cXoI>(3n%zbx8Yl$6!rO^*4TmKjR?3EM4p_XhOG_!(s zMH?cGcoOL2bM<|7i33`LUIiqJif6@T^@H64iAtKcPj@iukP&`{mCfAr~Ta*7R zmJU1D>Wo{9tJX_cZWrYy#QT3AXit1D9O^m9vKT8SCdq^E$A~<*#7bUXNKAZCWnJ(5c}Fk zA4mx5BJoJo-+wsOZZjwx(>TqtC}T{1uOo{)tN0tJwVbSVGB}fF-(s^m40Byszvgms z8D_7v!@-JdF@`#a*0aOyHZO*QwHVbtcKa6-{3EmM!!L$I-)C9Yqi$Xc-PJpJggtml zIP@(CusclWhBS?SD00NFv*TmdVL6AlSF30{w_CkXy^)@3FXN);zN~2 z5p+t4ON$T9!Xlck(R`{p+FoG7p&YtZbJsmF6n@xlI5ix4=3%$HeL69Og2cPin{!8S zEWtE2C3u!le)5 zOz(;ACgNHoLlm5j>J$>H_)O#spyMVB>nSsKqQAIZX>zUL@0d=xR5xeF-9hU)%Nk{u zpVcCYfZJ`>^PY=;()0G{Ibna%N%nfkOtK5i4aaPo%i{cVwX0ajnXng8+c>3j zWc!;>v765ihn|}fImv20I{g>x#+Tgcat?ci-5i!yj)1fDzJ^s7E6O=b9mi^ng69d-9ElB z?9ZKU-?Ati)BR<4Er={b<o9Rx_+9Z_1Uk6R*^ddd;%#v&-*n5lx`J{;oz{joR#d=^uaDdVW*8H=DCe>PQ3o`Jp1?u{B}Zgvt(})a|Ww9 z1$d=%PiD`YdcnBYBh7h>P*~A{XKD;~}+B-keb9?%gwwtb~ z?l1bLJ$OYp*!)dK-EO}v!Jq!7eQ8BFW)DI)%JO-Iy{eoVzF(EVqQ1Elr~_)Js8I8~qaRMphm5ZU-zmI$MtD zC$TzWImf{6_0@y>5n5=5#gu)|vhJ6o*F~?}vzONkW}tR*SNd5SYWerSXYbt*_TT=# zU3OzQ_|p59b+=u9V?yXCAst&$P7S&&b(`o~<(9d-bJrS$m3YZHQTo)f&&B z*BvG7+?Mr1F{|8Z;;!g-W5qkUEtwVXe{z+*a%(u)cQrpa?A2Qn{6|*XZMKE|&DTix z?_Ogc-WCqUf8=g7qwSpZ_|Ocj!Q{YJogX&&*Rms0(%_?4Lq8K5;$+unojq|!ICN~C z_w$KGt*O1D_uaw9>p4N#&+XucE1`yD=k7#r-e6fBu38V}wSt?lT4@jIFTBy-wksUG zZzH{CFYS}yKeo~C@kuy%>n2YKy+TNn#>q8!8mqHX+Q)je3f;AtDWEu0xg|v9L+BK5G-|S<1`krviQy;tMF`w6?&L%&Ui>js9t#ZXJk)pWV;!oRRuiP6BeT3+q z0Au#Vt5knzt3CPCaOi=ptf)@fu|4BM?_#;l&6C#J#v1RqaH8|K+h$+-?0NsRZT7@{ zVY~0nDE*5Oimtpr-rsGzU3UNT!I|6DF*|o9c%=uwLAclcbxt`Z`Ya- zoR8Rz3Op0@C!tPx%44^%u%5r;C-yC$(@USQbtf|59D=v)c7GAN%ji_B{=|9b#h5+Z zv2!l6G9&lQW~H08{rbxosOk?*F5N+(%$wPL5ufoCdhb`+4d&XA@{tu7X z(-HC?WpE_~yAbN=gysv+3ZHHfMZit> z7NIsyx(g?rbPc|Xc#kC{?}Xq^M_YKVMbs(PTT*{Q?dZB^*=?{?;N(}U9faocTWyE zvYgA4I|Oi`Kd@Rk<;F~o54HT+Jwb8FcyD~@VXQE5K707~rqLKWIdGNic)Y*B zdArT8;b6*na&^z|$NJR@&BJV=1Xnj#G2bCIMT+v4Z7!?bU*C7Z-qw#xxfk3Xa7#Oc zbtj%d=jTr0U);ESSF;MWMbf^{y<}=U2ls09zKFZC?<@YRyLz~uZLyTjy}b1-mb%?p zM?>4N)cj~CUAc>HmpK=%0^KiK_V&vyLpG{XxVIwqV7a;JLR9|W+%5_@7ueck)pdT} zJgyLFSa}lTLmRL(6hUWu_a{~ztOCxpzb2R5_1?X}_6(MK+3kccvDA57@!;xn^~-J? zw=CEs_QTR?)ouT~SgK=wTfuh6P+7r!#_!v6?#<1TPa(4cs|bC(38l!z!X#W)J%_ zD%cLoIk^4Hqs+=^aw^5$-8QIxJC{p{eS@Y=h?cyG+8H&^5xUPb zDeP+z9dcXCb%KjcqcGe;f-e*7?vxk&nP3k$*uH?z>gopP5NzcJzrU)69w_MZe&6UO z#bm6Gj*tI%L365zFYGT{$ke`$%8x2UrcT8;)y95 zmo;rX7ptJNt7%unOfSl*XB@FzH6p=WLJgh!C)aZuS;suN@dG-#s9709Pq*c!v$`a| zmk~R5E;@Wx)U+u^y{g3coaH&c%@xT|8kXi}e!DVP20rrQ^sC4;E$*uxEL6;=O*}um zA0w3NgiaHB%04vMi&I=}Nm=~(W8OJOmKuvA~aSFxhb(eyK_mTUjjH70Z?x5IVxbH3;r z9~^<@cKBjKUD5M7zjce2brZVFP7ACSPMr2u6R>oUxxak(W4Q;BE;AM7Ubrgd+_4Sa zkEOEQmF8tERq;A!dAQ# zyct}Me)^l!(lBnByS3C!*KJtp7U#Nh@CsJEep|(K< z>0@UzP=LGfP2EhW<^5RhX;@dfU&V?ij)rq6eSuZee)Ld_s7h4cF5D|2)QV6|9D>&d zW&~0*Nt*G&Wmxsi50%(XoT+3^RpKzYv$D^++mV6~6Kw6qZmjIahN^JDxv>urbYp{W z5Nz+N=Lver8{Obzui|9>a?>Z@YDtK_>odQf!^QM!o(xp8(+ z21?LJtQEKqCpcY1iL#S>g_O@&7YS z|NqZq^k2*;+G~-|)VS4G+Wda2uV}V<;Rw+9e*yH#%Q`gA0?h}0AUXUKtdCfycJ|)R zq0A=M`Q&Bi%u8Y&>QTzXW7+JCvYias^*9b}LY#`QnQ+zsPVWwLo_2IjvsRFVoKzg0 zh1$x8%~Iy@t)5;JR>kVTYFIsw8^9s#=CCT((swW4PQZ1%n+SdWj+Ies;tRm{!bRXj z&tI%yKe2hVhOc6_>Y3ungFSvwK79T&EY~5PzgWSc9;bTxzr$|Frg@HHRVWiyhmD5S z0grm|d0En9o-S6q$9VRCo|)@PIF5u$`#4{!zyvR&{|u|6Cwu;X$7;Y7FJ7!EHO;f9 z^&+6~bWh03l3w<7u@b)O*?-5X_*~-UGLJ96+1c7xI$O!!@{);FpGB~wcRXDz{aw!% zt6$#tY_Wn%J^ldJ%v}x3?;}rN>+w2RAJ`q?^Q^sbtoi?kr(f~(JnWQjNl?aqHO*sdWI;xE8iH6OCc@Ks>B;O+9V~ z>myct3t02JHLR$%+4@!hmO}?vJ<-|I#j?A4@%MY&3synBVg9T>p552uM34J<+~4B? z9w)*4S=oa;A=%>;SQQzfSdUfEP;5zQe90c>@oEHjd7J|)%J%FRJ)Q#V^!f&@AzldUAvGtU zE?(j}zUxG=i2M!9?*mU4%UEnm@^|62&C1zSDGyexg2r;BB8 z_iVB39UkxWc$deY!1{<4+~e7KIonx8yokejSS|YkThcL4&&xVIzeU%Ooq|=7?>+lR z&tI(B{;6zvzp9*UR%!HM04y^pM=MgAQU^%RWAHrIJ zcfv~eIa~@p=f$6gmBDWwUx8InK}1!&6s%opC0Gr*&Exv8ma%5A%4q@fmu5!Ah47QwM7V%%7!a|D`_)tLvYDmCy4qf0nJUtIYWS zRrsr|f?o6zh}DJDVM(v@rGjS5_zzeOnCtoFWuNB%JTF454BzlU zp8F@T+PMcVYi4xyRWxsR^%eauemR@7AG{ifHAX+fH^8MZWS7&I$EtC8&lamH6+Qd! zSpJnfzbc+z9(Gr-JOb`KewfEm8QkDyP}S4L(yMuVlgHJ)c(LMdhE>5^J^MB<{u;aG zTh|0PVGYkwtl3w~v&G6d4pzo@c=nxMyjcGAJiWfBi;caj#EPF}oN@%MVRSoOKjv-7g_F6e4_ zcP~CKE1w>oE>^HFUs_iN!%F{PKJ8Q8fFlg?B8JMFk60O{d3Ih_2E)+RF`1s<2v`f) zqp()i39vq5=`VP;Sm`I_qkIK&5EN&;h^Zb=lgLLbzv-SWR)(`ZTdd>hby$9Hz^eG0 zp1lCpM=bqqj~8hw=&beutgc)E>)i1PtOEAK`s8K#9YR+@hdut>^ZPqi4}Iyy=VhhO zKIUbR>pA3Q)$}V*7t1~YtEHzrT`c{yXNy(fSy%;}^Yp)C(si(Y_8juE5}rp_LBDzN zVij~5R{ZatE|z{px+&j_OOm(s@$XkJb?msa5HT?hFfACi3f9^m0-F*jUh;v^;C)0oKKd3kI z-iOeyMNiN!;-C8u>Wu>GivNIh%oX(f#0vg%|KXqe5C7bM(0z!1?muY#_~-t^KldNB zL*?_&{fB?m|{(ef9^kcmvaBP|M1WK2i=FzPs)Gp zKX`X6qL;OJz!$1xj!yTrHB)V0VN>U2Ut8ZRX6(zpZl=|X2qz@WG;yyWT$C{76@*zP zSHk=$2rXwIyk>G{Aas8T;ev#@rrAt{XoE0sCc^9HoP^~Py1a@o-^_j$A$cl7a2CP> z(`gn$>@65ckx*$7)CB+W)xWR^%6IUS+oYY2-?;%f-iUq;v@;aw9m2jQTEtT_np zn{^Tf`5wY?lk*-z_qP!)Nch?`dmkZs zA;P@(5xz0!BrKQEWhuf*GkYmQ@*;%b2fnucQBHeFtT!l+%{+FGJZPC21MT zkCu5?%E-kiC6}X|wM@U|DAkvsY?AVmWs0ppIVdG-1a0Tf-7@1=p|o0xaze@#%hX7W zP{4FrhY-6GVX1^d#89ih%%guBexy$Ba2oRHAe#C?h|e+R;pPZ64%TnXKGBDDMrp@qr$ z3?X_K!UYLo(`+BYatZVHA+$2*BqV==&}BbD8#8-9LhNpY-~ohorqcn0EfSVW=wN&Y z5k~GoNIHnn(JYZreJ?`ELkOKs;vs~C5;jS=&%_)?nD8k=)?tLMW}SrkpCMHJ9HF}z z{yD-)3Hv1UFqMxWOx=et{s=-ZvqwU!{RnlAB0ONm9!0n);e>>~ChiM_`3DfDe1Xu< zPHbuevOcB62C?`C}ER?OcQegVZs*(Stk%i zm~|5Be~D1_8-$T&_%{eACG3+h+Eo4)Vd^o2@!ujmV)jUAm5Wg4B*J56>`8=+5>7}M zW8%I;n138$%6ACkOs<6PUm>(Sh46&QIfW4YHNpi6Pnu@mBP^FN?|Xy^=A4A&69`>S zBTO{2Pb0*BgAn`y;aSt^2ZSvWmP&Zu_imo_(~SKY;i7~S5@wmW^9b{QK$vnK;Wd*hq5F>rEiWLoURzW}Srk7Z9rcjZ5=`|WjE_b*V)jUAtFgq8&nzBV}p5u$?#7bJXRniWD=E@56Fgp=kRg6})ix-fLg%ocrbeuMm{eWr5} ze^>txKC?jlqtE!SgL$_^5Aj)_c~^YSX9^UBfAX1r;-7tHrTDzh6pQh5MkzpPSuuY0 z9X_*OO8tT;Rg0lq^qKTxC?}=tlXA&tsuV|=S_ox)ag^VEW-p5W51+ZE1boG3#)<#* znZq!9j<}N4+Gm~?`Ax1UU>cNyqD+n`XucEWGtEjv`OP#@v^fWvm<}Kg;2FTLaZ5H9^s^feG#>QqFi;3l~! zVRco6N+zxn9`nl}%qWFW#pFupUKXKcWrQ0|PGyAX>mwf3OtUHo%OyOjVyl~T5|Yay zbh!cH7Bl+>gxK;3!5a~7Go5Zk*dk%6gqp@z6=7tBNFKG!5((8SB9yG=Z)?U>^e353 zgnW0pt(s7YsH~e1>Y8;o;ak5lLe=UB_090=2qz`%lhDvqz8PU^6@>9OBQ!R9B(%B# zq0TJ`cbT!bFqHA;kf^DNyA^6?o)$GXxsd5z73Y?>;oQRH+=dWc4dH@>uxVBUVY!5P zH4s{va}ttoLg-Qxp^cec6Ct)bLhyEkcBa$q2wNm9mC(WXY9Wlg86l|_LPxViLiJk^ zO2#2{Hi>am=U%fybf1Z-4RtXoqONA0sGBKs2h`mR7u|2Rih7vJcS1eQC{Zu7N7UQg zTnBoalOswp--!mAX7!;#W|}D3oD-#()(xP+ zX13@-^P6ah>C_M!YU27qsm9j`N;CJ1hM6Uz;U?4=N;iq346{O%X=0i{Stdm^!mJZL zWXjwHjWokWqs&&(Xj7SY&G{ZSylu9dwg#d{&CN}r$IMt!wmBpkW8#`YW6jf|aVA&v zxM|QFdcx$0#+&a%Pnu>4&{JlbXo5K>dfK#Z0ZlZsMbDVuM9-Q|EurVko1*6pFK+4P zd%@fbFOzdLP1aGyFb;lM?nx zSZOMEL73VBVSE>aRc4QbR`(#(>58z%jO~hWQNjrcYfW4?g!vs2rgTGCZ*nDc?}X5@ zJHkej(;XqYGr|Q4n@zL(5td7scR#`wb526?y$D@;AZ#+U6239b1|Te#FmC|DNpns@@&gE6k`PXr*+~eo zeGq~JInSQTCPJ)9$wW9QVW)($ zrc4&X)HH-gvk=OetrA)dL#QzVp@JDT0^y>BqY^5an;$}$KOEt?hp1YWfSK5iPV1hI z(qtqqH=3tM;u4*K@PmYErokwLB#az^(EAaDTIS71Sli-^?@_3>xnFdLSt7dAgdT(Hm_$)svqDtQ#AHMD zO^T?2Stn{}%8Y>;nc! z2Ittv`b7mZY@S(LhWWDZs_!+QWsY|C4S#fS75{9zxYF_BSJEAwK{}ZgWtLja%VT(Q zZ45U6oR4mgU75M;vHAX6e8B>9ReyYY%GdwKJX2(We{fx=CZy3_1O8_>{-;J>7@^vs zDgBoD&eJDj2s$5WQE!?>3;fNm)zGO;;K{eFW$|nLG5>aF{9OlK)99)wGv{O4(m_-0m#DtmbC_@wo+>_ICee#;ios zGd0kliqj`o{&YVwHqw#mBR!6y&qlK(HBh|CCQnvsy(&PT&1n2N4}O$$lxt6a>z|!g z^t7$Umqr$m2fp=y%MD)Cb}tJ(3{%b1A`gD+8Ks*%ZI|h!EcEQRDyOG>?((8`dzzj? zi1#%8TP*qMF~}C4w%5!ii|kK{ibB#eqVI6GNuL8~{5cP_>VY_Y4tZJVO%oSAO;407 zTRrj-xsm<3r|HqqGoIfOH2(BIh3S6;aXxzboV3~cALI1ji#VSzUD4_6F<#W;tJngur>50KuPy5Q#^!lMS-ao1h=R>+KQhe~c#G)5g={2(R&4+}6`-qiyiCcAj(or-P=ppBkKo3LfC`tkY z!61+fbQBE+4M8K&7~BqOgFAqZs9f?t4!!~>z$x%O@DsN$ilN-XLZau#^{?Dkfz?2V z-A6#L0GI=20llPSK6n!>0M*cL0-ArCZ<=4Xg4;k1@De@-Oa;@xbnpt833Rm10y%ow z%VYwNg2%vU@Gy7;lmTVI^`IOm4=R9)pc1GIs(>57ji4&125th?!Oh?na4WbC)C8r$ zMdsyi;1am3C*ytxdT-8opnpXFDfkTR1N*@Na1a~P2jCpf_@y2N%FE;8$=F{0{yAe*&#E zKJYekYYvzT<^es`st07-gASl02!jL=51N8zpaEzI?gVx8Bx_v)2gx@Mt_}3>d1?YZ zn0y1c5$GK#72#5#G$;egg6qLFpnv%B7{~@%*`5FofxaLS=uxjV;3KdWtOM)82FuJG z8R!uDknk!n%Ul>4=+968`$q+C&3*wT9h_#qYRS_Q_Y#-}o&ZmRr$LA=Yyy75_h)bc z`~vhYhZEp?@B`4xBDDOi1@D0mfZlNN2AB`t1Pj1h;Oziivyi|d@D5lEmH@qnW)XM? zECx2(OJE=2{XpkpErnY8IsmOsT6sEydqEwbQ=iVKUjnVO>%az}O^P-pD?lwBA8`a~ zgFC>Tpbn@D>Vf*80cZ#sfoDJp&|AO?!i9j|XCu{qzO+5*!1$;5hgSd<{;3 zZ@{c~0(CTxr5o`t@gDqey*aq|luGL@-*a3EeSHUbW8@vYQfayRdh2cOiZo3!U z2f6?*9$Vc&cW^)G0eS*6?6E+J>=jI(m0*>o5zuL5J62pl7EqfM3CB@B_%!liIo9b8rM41z&*OU=P>}J_Y;0Dk`Iw55<6Dpg1T2t^@kl zc}>8rK<{GEziFKdUITi;$1I??=ZpfQ!3e-_jciNX`L)zeFTZ;o{6^wSK#z)l3G|Hn zK~Rzedbz_mco%8@Abc4d1BbvB(1SwSg8HBVILVOdJu8cWUfePbqyqh;>wV-?N{fK@ zt-n&RUK^-=sJ5Li0Btpwf$pF!7zeb490>G`t+tNZ0p3VvrSbm`-bAK)xlwblo_q`E z!7hAe0=;ffo4OalpIXuNNWTyGK>$R7Ajk*ugJ=)}1wcVi2owfIz;&P~hylewaZm!3 z1f@V}5DPw{oOK`-Xa|@@u_J)logL^~ST7WL6X-=Edriwn0{xqBp#|FQJqUKwiY;IY zHGTyALIyv9Az%(k)XGf!QbDUUzW6MD=GyKr+j%z^y7s9LgV8`I-$_6VhZYbmBxitL zqoq^7y7vXb%1-OA)?%&6TAQ^-YpvG0tu?#`&^|=_5$#Jxkw$wI?N!*fWIG!fZD=Y1 zZFaQj(dI`Rq0&HepadueVt^KRE%G`fwW-mftp!}`tM(^aYjvol0j;+~fDSwDJ9MZu z1PwraP|tS{H72m0TGfF+hAYD5!1W*i{NOaY_K(^}ZU@`ILtqooSZxFwz{|_-9~bx} zkgYiB%6A=D3qAr%!F%9c@Cu0dEg`%ZECLI`TVMfr6TAxMgLz;Mm<_nvVsQb+iJJw# z=7ryY@ym7`=3>b4b?`P&hVOv)fwm;ezy}~w32jxh710r-xQH%$1y~NWU6J1-AQCU$ z3bp`s;AYBqB0tCY4jciW0`0Z-gHOONuoLV6d%+&C8|(w}l_vW$Z~!PT>4(7~p!MTh z@D0cXN5L2182FO%oo)Zu@K@kCkmCs;O&kd;PMR`MOElDK;T7-)(3a{v&=%_la1Q(k z&VaKX{|qb5??ArUm-y02=_2?Q`~ofmA9G13tUn&4+?{lpadueVn9)F9Vn=Ggcc!C2o!JyCqZ$->b^)Jc?(vd6+n5QiYa^thyyo* z8$cCM2~-BRgPNcks0wO;+rX{h7GFhQpu+8Ol#+9`Dh+BtOroq={#_kvEKBe(~206Oa1f<{2ULRy1X;BIwN zO9IWoU7!VM3Yvi?pfQjxO}4`E9!KIMX(K*Lqi}-f7ttfE_%LwOF-a8>NfgO6Z=urE zE2_Pqa9*h8k$8m#?I|N##5ZqR^@h+c`(GR*nJJO>Ct4y>;AAiWL^6FCeKd&7-=sWo zg9s1wkXM(l(htq!n=M0_1y+LPU^dOS+wuhvDJ9wqz;xRVSYhR1@(z!;#O5@f#so&giV1n?vn4;}|m zqM^IcNTaw&p3>z1A^N=_qDLC`s#+AuY(C-F!8{PjG*Ym7W-iDelR5BfU^a*p{03na zB!5*plI}gi?}E3$n?Pw6fF)ot$bN^fMc{3)5U7@Nc3J~R#(f##4?vK3$QgJRk?`Lmqzt9|50($ca)XQt8qn1s)|V zP2(S#XmqW!8OwmxyXuWd*K3$GJc`SXbeFm}GEVAd8>sv9CW>Sh(N5r_@Ok)KFqN=+ zcK1UA71!(SQXdj4xiaIDNv=1elb3e-*ey@pkI+s!U2<*6DV$GjSobbN;!dY zLH*1OnPxeG(jon_)Gy3@@~OxjVx0^++|Ee%mZeW9k?kblHJwj znk9DN_A+Wyq=(fpN_nkHL0vqpkhfZH*ED@GP%b7?a3pzUGxWv4?S=o+So7wKfr?J& z1WeA9K#rt0V`3(A^?oBk&3)yn-+T(|H=t}?lZ$AwwZo10K1WkwnK$oR}%(*k9S zj7NL|JPyYBO^2z0ve^$49t}o;k>DXP0%U`^cY45w0`!-v5^ zZ~*KCyTK=52iOL-f-RsU{u|)ceoo%Y2xK690KX631xvs?U=dgd=7ZP3Y%mMF3bad_ z3C{r2z*LX}YO#vZ*z6Yx3pSVzUI8xyrJD=S0rSA?;0^F5cpEGLZ-K?&5q#f+RVRg) zdb;9Pft6r6SOGo+Yrz`uk*-jzBd{K*0Uv|SU?bQBwgdHqdT9#S1=J(z2sM5`P($|u zozd06J>WC&DcA>;_7G4S#UBA04UNQix(xOW0S%Kx4be&XTOj>wpoF>bF>nXrFJbu! z#|eK0RP<6$>#$>pkdQB`4G^xmi%zEV>AA`psNeHMSw2e zM=td00`E;^rp#5SDx-aj!rCmWYs+|X<>BjrDxvst@H3>X1gkN(!c~EO*W3uJQPn{; z6?PMl!_D9pb7Dr|rq0a>HU+w*dKYK{8iPilA!q>V16^LP3v~16PH+dP4dMWQ*0E>w z&2rXaS=pI^Ez!$JQe%~<9cfcJrGE;^oS)=L}{c!U5SzY|TQC`fr`li&! zfp+B{Zs^vh&ZSbR{c9J>_4{to`0$xi*F5$yt?k&z?T%ksqakt2*)~fI$7-{Mx*RMFno+@R{K_EK_PTl%O>U(@+kLjdt85) ziP{>dUGDr{Zr7chKk>T#`|}O+`@Tj|)hWO8)`HpOe`*l_TbB zSXFu>@QFY3()wdwm8k65X68o<^oN?8D%;?b38pJt?zaRt#SJZ5tX_Y3Ykj}30j*>1 zS-}?OfgOQZvuazQY~AZxxZRapr19_@Z!c2L?^7qxRI3az8vLUplW$zteaa@qIGtcs zX<-U&XGY)F!c^N%k(*nZBiq^FXKfF}l{-nfF(kWv-Lq|Ke*ZDuTHDLeE7xNTI}C2?dy+X-yyp@Yu=%e{-%vNhKK)r8*^z#U|_jTZQb5@uVd=B zB~H!x9M4)c={MH!cIL`XJcI3D`aMv?Y}gs7=#QlSOI)l!Vn*0WQqnxUD^T7|9&6s+ z6}Zj6_8xO=S0J`P_m1xIz{K!>5*X8QJ+?aj$_E=(?D;imYLr$3r@H%z(Ud*(c=x2+ z>i*Fy%D3H9T6c2ucy&e3qMtwCcbwB>PRDfXWcGf-Al2_|^6d`Pt~;3%ND1ZsR^o-| zmX#ZkyZW{sX9cFc)`?PAs~0RB zs4ngZzQ3SN;|2{+*rcdSUMvumy17Si^@i`&AJL`P>TC5`)7{*)Coo3ybnPB>s5={( z6^z^U=DNMip}(JcENPm0z4med9_!%_RM8?o&R#MjrW5&l)B98pvvDu&+}zXku)DtD zYc$NL86Yw_STJnFgAya_Q{%MTowyP@0LMamGPQ$#I(BlI?lNbB#{ z+tm7uQd05Mntti@mDFF}TF3uc%t$!n{CIEkyXx^A9)z3oiPtU(p0S}!Q$ji&a zf2x;h^OxAn(sS}go*&0T(9{hEvxojN1Qbl4ZTrNBx&Sl7qA zkhE;vzJT9X?$czqE!%$xc5hbgqq=_IW2zxO$CJ&h{j_CEidngz@%Svo?T_t^!i~(s z^X_pxotmCZF~bgUO66$#ImI+Spza;)*5tK2_IG%7-f#7AW~%CVbe&`UYl+VrmEE9srLV7f%=OA0zu?u$Yqx)K`?Z+0>E>}){opD=(PQ%2?_V)saYH`vBa#p&G*!g?LVk>Ep6)zQ}Zxs z`{1Fv_t{W;=37Ne>D+ZkO{d*i#9U8Imp=yGbou_Ki>}2?$}o?Rw%kHID&Wzxe(CRb zetwPCsv+3y#BVeBd&Q= zBSxEw_kJu^vGxywazqpyv=Qn2Q}aq2rjbp#ASVn>Y{fkd&R#`qZ#jS@g5 z8oN>yyW;oTx9@S*0U7x8G3Jh}uFzkRa zz;B}Q;=A8`DPy$eWyhQ4^0fi(@fQ%Yf`{IXOMEjn&*bN((Jija8!_ai20m`*-lmHQ z`3bfV^O*Rc9CDD&@3q*G$C(58v}|lVak2ROTQ-#sZFMz(o*Gfn$=2`+pzTzL~Hqw-o%kk7NA1 zRPd_B?filk@R`0U=K|PZ!2S;|V*awXxRrUP8D503X%zWieqmJKzik{gg`RRc6|T~& z@0HPbAV!n{vE8ks3!TT;!OVHp0vo+bsXnWt%29n*M}5@tix8{~>RWYul}gn|g{$L= zSjqt#bGweB7#aL+_9mU%&M4^D2KphEGGfJg`YFJ*+4|fs@@1dNrQ`8fa=ip=-vCB^ zc-8Mz?~JqNl32OKk+YO4MbU=lUeek7RG%+Wbsub2e38ZOTAOQ_ezLipR)xG?Im-}v zkFZveewEf-Rj~46{!Bl49`Z_iRm(Gf>s(Z} zWPRE4phQQIbYUUI-_q%qKhQDr4Yccd7Jm>FSK|41qX_VA>w)#@sgdG@UB*4g@bbOW z`6~;gK^&!&>hx54S;wSSag%MEUD3HqJLAaaDku+v@*Pk<$5UtloXk;XJQ@WHXvI@qqAyPq&NX-*?}i z`HKajid5$$ELS-5qdW597%(qBTC#m>^ zLd&qe;liT3I!A^AM67i2+G3*it7uXg<`le2RBSiXMy*NC{hl9GluR-X5Z*ADxZ;HE z%-A3T#0yIV{+hmu_LL#eJyXf%4#KNns=#c$c*KnT-=%ymX?x%e-*dxL$)96PQ=T&o zhYE9YDtNWakBqI&nmMTybqD4DtJ3VWw?V^0UFckyDkLQd8RL;;c=a8tpMNB$b2fH2 zo~Aqzkx6SP;4b1AOLh}aSBuut)(;p@c4mz*%p2cP^K!H^lGh1C8wP#bZC1jJr8oO}!I!sgOWG-1pTRDdH zda*#->~1p3b#&-C!M&|VYp*8jY2kAO`_uB5GNFPlx}?D^j{T8sFI{_Ko2za{8F^jBiz&nKgpk^oC`ogafyny8kFk z&0s7CKL<>BR>dBtR%^a=l(bjzhI?L>JUov2KES$Cw+>ZZb-Je?=w?gR(`dj$oapPM zQT{_TNe8D1CUfx1BiB}K%vQn$h07Q~Y{9;UZOcDX){N<7fqarigC8L%#b_|T9dp|z zI{ye^@$Z0fSd7%Lg25w=pvK0x*yi`L;533$=Oz`^?`$BcDKhnWce#dxCuYQu_xW zaX>YeZxuF(9>RY7WXflmV8-_-h*LTtl=u|X-)^Ifr{Me&mlovtOy?t{I8e+pG?Z#= zrxYYdqZzroA#}VFIzty6mcZF6u2<8ivKdpm3b0ol{HjA!D|GfR?Bvp%c*?23&abSI zO1f79!u!O>F}lHAi+)*>b$m)UE2c$u?RqV> zjRkTlouakOU@Qd&KPLZv{g2J_Qty3h!Kjr%TY+Kr$`H@_}C%_6gonaq!~#QwbEKtghaAq$xeE1(sx z=4^xYA@yi23Pv?09y40&O^fVTL(lcIpfVNn%MB_GK7@$qogEfyn z%^$c~PM>_?X^tMCefE(0*8!SYjs4EYkm?w5U~si&v!t|aO0kBv+1WJ9mKic{S+nt4 zY4#y1tqq+8)R4K)hV_%wCu(KOLO_rS0;5(sad^2S1PDR1D842Op`ljHOFDUkT%ExB zWo9OtWDj5^RVLJ%t9=Wyfr|7jLa~&Iq8-?5l~UNsKqg0aL!ln6YM7bq#9U!ud2R;6 zlb13@J(61T-{LlDNlP?C0jY{-2mf7(# z&6{VUC}8lLpNGF&yC;NXoZ^of(l zjhZ}ClQg#4h+FqV(XZbCDO}S77iI~GVZAUwzZe9|RoM9k!2 z7Dy5xJjZSGm3m$4p-WL9xWS!8^8PU73`MnOL!}M5bhQkB?sXe&GxScp=r@2Zl8;4i}DIyX51;g))ZRx9D(I^bj{X-Cy{i z;VxdKdx~A*gR`^=+$BYdv?Y&<`177TdJLXw+A@0X6(@F z&8P4-NEU>fB56Cw^JG1+uDoY&wZ6ozCPf+HlHdu=0RX`GagB; z$Qg9y@@j@knfI~r(L+9!dIR%WJ_VUE)-9kc{@lKRX5ra5us~4$u{|PwPttW?3+2=T zisYD7K)(aioC!>xsEcD`3#)bec(z5GV}LjU^4YEMQkyv&UeNQe0y4IRln21zX*JQN zL3K8;qrZjLwva-BVQx|=xW}B3n)R6@eQv?<0faXzN(P);Rx2>w$pYz9NXeXb958AF zqiDZF#oWAzzbzQifN;%rU0Qagd3?>EEs({9bc<`YPLbPlx;C)a-9kGH#?5o&<_*6o z^OqER{DZ|5n^xLbwYlPhfAEsxM@jMP8`>A}yoV3``NsBze4QrR7mk^!KI~^nLJ}F= zff=kri}CdrEYQ7#X5!fxQ6d)c=s*3ohqds=*9mA6c=MbQQ$pvv!QX32Xi^X}(EV=A zUfNwkIe2LNC&>8m_uW#l_NHWorEQUH%Mkv^MZC=IR!XitnIrSm3@@dSjt~_ETyFg7 zVS6_&vpTU!UPN+w`nr@N--oE>rL?jmOuV*~azJ7J85BI9eE3y^89wRvah;5X>1oEH z?vNt4ooCO!E-@E4FXcMu66E@_(b9ub`qCFmS1J>Mv~bn-uxFp2;9UgeZp{%8p2w0B z8t(~SvaTEuZ*g1Qu#Aeq!`KEG{OsZU>!RxC=50*_2CutY<0HT_n&byf(fL`;$G&Bh z$H!r1WaE#y&Q*9vKJs}OJhpdTS*m<35no3B93w&D?O?ZU*NnKx6~ItF7+7CMQT|x= z#btEBA3Q6{XlN%`r`jE|!)Ua>BleDcwXSaH_R~mibH2Kf22@OCG*<&APg~y0TP$sG z&>mMWGx>%9?>xCHW;Sqdag~+lZ@(k+;3sKKuX5VNr41{m!=12G#M~GAK)+tcLO!zF zaRiwBz7{+d+$Vi!7E~|hfxu|F&UfFHdEsaVa4&HTd;Eg-=bc&4da(}$%7k}a!#6Gs z$5kJ{lk`OV{_;pempe00qt|0Gs})QAvrqp#0Ck_-8b%-rZx|@B3$t%>2xxru*MB0= zKRVFhP`4G%{G$%u>4s3wF{TT1(y9NT?Om9QuJnn9PIO^Cb^Gy?-Sq;PlX1o~p;SoA z1F6ox9n{M#WWAB1Lj#zpo?nHCzwnP6cl57e%e!d2K7`&2@hjiogGt-Bga}Y{&xNLQ z{Z7{n%=xvOLJSS-J=f6f0M^s&tkuf#om=Bd_-9L6><0?C`#`{@QW3S~`HdV_ZMekS z$cpF0S}{rIw3PZj%8-o``F2H=C~+laNVK3UqNKl0@J?$mAocOQ=Z(REuMmhIsiS=y z;|?%*yXB^hn{$oXO-#U0Zi?0Qh_8HWb$fv~JTbT%&Ph+IXyuORyQLJ56k*(0RV(l3 zk*;_5{*l+%$C5;Tt4hPWBbr1qaaZ$)wVFTtt*ANR#&9dGe1fq*m3?v8p!&GRQ`3;j zVU87r1Ttqjfxq}j2dcwRC+9NX59 z4#UY)g}mOL+6G*n19xGx$M|Ir-=05|$37D@JSL6r2E>q3}A z<9q-;0DN;poqq#^ZeR=J9XcG!Mq5{af^X_Q^rOq*?S(C1lwP>X({FW? z=sC4rz=?lc1Xp4E%jKAndUERx8%zf#H}=g5*+~Pg_QJtmUR~&$l(ehy zhFkVHMy~n5v_>~-&YPA68f>;a*%jz%co@=xPaoD+QoH}qJk)^}^nv9EI?&oaC>O>$ zP_4dr_H?9pjK;dY!VkUYpV{I%Akf;PMF&S3+!y&_o}*SS9~27Rf1R}S*Iu2I@ee1V z%nxIyP5rcDP(6^MF=FOf-HFa~A-A3AVP9s_HFMTduLC+Kau35oef<*`*D6HRSRFaB+b@dGAxjhb*ySqg+v+NRMY`xE!-PY{E0& ztG>8jT{my~*$ItuY3Cs3Dpe#?zA`?>*zOJjfuC9n!aiHwKh4eg8J>BK7vmIG>$%?R ze02w5ibFob`uI(2ceYwrA@_b{X79l)pbdRLh1JPymBhCBP-r46$}B(4tk+i`HKoO< z$&)8eo|0J+UByRBXO}T&o6%DvM?{U87}+9xOeA%>$Ba~CIcrHd@vIJ&5Njs$BHJ&j NRLk_6S>>SZ{{Yhrge3p~ diff --git a/package.json b/package.json index 115edd1..760cef2 100644 --- a/package.json +++ b/package.json @@ -81,6 +81,7 @@ "react-resizable-panels": "^4.6.5", "recharts": "^2.15.4", "sonner": "^2.0.7", + "stripe": "^17", "tailwind-merge": "^3.5.0", "tailwindcss": "^4.2.1", "tw-animate-css": "^1.3.4", diff --git a/src/integrations/supabase/types.ts b/src/integrations/supabase/types.ts index 4ce7b79..85e0b56 100644 --- a/src/integrations/supabase/types.ts +++ b/src/integrations/supabase/types.ts @@ -2327,6 +2327,110 @@ export type Database = { }, ] } + payment_requests: { + Row: { + base_amount_cents: number + case_id: string | null + client_id: string | null + collection_id: string | null + created_at: string + created_by: string | null + currency: string + description: string | null + email_sent_at: string | null + fee_amount_cents: number + homeowner_id: string | null + id: string + notes: string | null + paid_at: string | null + recipient_email: string | null + recipient_name: string + status: string + stripe_checkout_url: string | null + stripe_payment_intent_id: string | null + stripe_session_id: string | null + total_amount_cents: number + updated_at: string + } + Insert: { + base_amount_cents: number + case_id?: string | null + client_id?: string | null + collection_id?: string | null + created_at?: string + created_by?: string | null + currency?: string + description?: string | null + email_sent_at?: string | null + fee_amount_cents?: number + homeowner_id?: string | null + id?: string + notes?: string | null + paid_at?: string | null + recipient_email?: string | null + recipient_name: string + status?: string + stripe_checkout_url?: string | null + stripe_payment_intent_id?: string | null + stripe_session_id?: string | null + total_amount_cents: number + updated_at?: string + } + Update: { + base_amount_cents?: number + case_id?: string | null + client_id?: string | null + collection_id?: string | null + created_at?: string + created_by?: string | null + currency?: string + description?: string | null + email_sent_at?: string | null + fee_amount_cents?: number + homeowner_id?: string | null + id?: string + notes?: string | null + paid_at?: string | null + recipient_email?: string | null + recipient_name?: string + status?: string + stripe_checkout_url?: string | null + stripe_payment_intent_id?: string | null + stripe_session_id?: string | null + total_amount_cents?: number + updated_at?: string + } + Relationships: [ + { + foreignKeyName: "payment_requests_case_id_fkey" + columns: ["case_id"] + isOneToOne: false + referencedRelation: "cases" + referencedColumns: ["id"] + }, + { + foreignKeyName: "payment_requests_client_id_fkey" + columns: ["client_id"] + isOneToOne: false + referencedRelation: "clients" + referencedColumns: ["id"] + }, + { + foreignKeyName: "payment_requests_collection_id_fkey" + columns: ["collection_id"] + isOneToOne: false + referencedRelation: "collections" + referencedColumns: ["id"] + }, + { + foreignKeyName: "payment_requests_homeowner_id_fkey" + columns: ["homeowner_id"] + isOneToOne: false + referencedRelation: "homeowners" + referencedColumns: ["id"] + }, + ] + } profiles: { Row: { avatar_url: string | null diff --git a/supabase/migrations/20260418174953_948297af-7c8b-4cdc-8f0f-cdf66772736d.sql b/supabase/migrations/20260418174953_948297af-7c8b-4cdc-8f0f-cdf66772736d.sql new file mode 100644 index 0000000..4d86557 --- /dev/null +++ b/supabase/migrations/20260418174953_948297af-7c8b-4cdc-8f0f-cdf66772736d.sql @@ -0,0 +1,49 @@ +-- Payment requests for homeowner Stripe checkout +CREATE TABLE IF NOT EXISTS public.payment_requests ( + id uuid PRIMARY KEY DEFAULT gen_random_uuid(), + homeowner_id uuid REFERENCES public.homeowners(id) ON DELETE SET NULL, + collection_id uuid REFERENCES public.collections(id) ON DELETE SET NULL, + case_id uuid REFERENCES public.cases(id) ON DELETE SET NULL, + client_id uuid REFERENCES public.clients(id) ON DELETE SET NULL, + recipient_name text NOT NULL, + recipient_email text, + description text, + -- amounts in cents + base_amount_cents integer NOT NULL CHECK (base_amount_cents > 0), + fee_amount_cents integer NOT NULL DEFAULT 0, + total_amount_cents integer NOT NULL, + currency text NOT NULL DEFAULT 'usd', + status text NOT NULL DEFAULT 'pending', -- pending | paid | canceled | expired + stripe_session_id text, + stripe_payment_intent_id text, + stripe_checkout_url text, + paid_at timestamptz, + email_sent_at timestamptz, + notes text, + created_by uuid, + created_at timestamptz NOT NULL DEFAULT now(), + updated_at timestamptz NOT NULL DEFAULT now() +); + +CREATE INDEX IF NOT EXISTS idx_payment_requests_status ON public.payment_requests(status); +CREATE INDEX IF NOT EXISTS idx_payment_requests_homeowner ON public.payment_requests(homeowner_id); +CREATE INDEX IF NOT EXISTS idx_payment_requests_session ON public.payment_requests(stripe_session_id); + +ALTER TABLE public.payment_requests ENABLE ROW LEVEL SECURITY; + +-- Authenticated users can view all (firm-internal) +CREATE POLICY "pr_select_auth" ON public.payment_requests + FOR SELECT TO authenticated USING (true); + +CREATE POLICY "pr_insert_auth" ON public.payment_requests + FOR INSERT TO authenticated WITH CHECK (auth.uid() IS NOT NULL); + +CREATE POLICY "pr_update_owner_or_admin" ON public.payment_requests + FOR UPDATE TO authenticated USING (is_admin(auth.uid()) OR created_by = auth.uid()); + +CREATE POLICY "pr_delete_owner_or_admin" ON public.payment_requests + FOR DELETE TO authenticated USING (is_admin(auth.uid()) OR created_by = auth.uid()); + +CREATE TRIGGER trg_payment_requests_updated_at + BEFORE UPDATE ON public.payment_requests + FOR EACH ROW EXECUTE FUNCTION public.tg_set_updated_at(); \ No newline at end of file