From 9bf78374b7cee028724d9cde2c28cf6029facbc2 Mon Sep 17 00:00:00 2001 From: Vomitblood Date: Mon, 11 Nov 2024 00:43:09 +0800 Subject: [PATCH] setup postgres backend --- README | 14 ++++++++++ client/bun.lockb | Bin 172465 -> 181174 bytes client/package.json | 3 +++ client/src/components/Generic/Layout.tsx | 8 +++--- client/src/components/HeaderBar/HeaderBar.tsx | 2 ++ client/src/components/Testing/Testing.tsx | 24 ++++++++++++++++++ client/src/lib/postgresql.ts | 17 +++++++++++++ docker/docker-compose.yml | 14 ++++++++++ 8 files changed, 79 insertions(+), 3 deletions(-) create mode 100644 client/src/components/Testing/Testing.tsx create mode 100644 client/src/lib/postgresql.ts create mode 100644 docker/docker-compose.yml diff --git a/README b/README index 3a3a5a0..2b9e566 100644 --- a/README +++ b/README @@ -14,3 +14,17 @@ 10. sever side request forgery 11. broken authentication and session management 12. clickjacking + +## backend + +backend-for-frontend server + +!remember to set the environment variables +!include this in the setup instructions +!should we use a .env file and let the user set the variables? + +PGHOST=localhost +PGPORT=5432 +PGDATABASE=asdfdb +PGUSER=asdfuser +PGPASSWORD=asdfpassword diff --git a/client/bun.lockb b/client/bun.lockb index a8a83805b8851f03c468b79577b7fce841e4090a..34556dfe41e4285005b4665b3cfdd9bad7f2cd48 100755 GIT binary patch delta 38566 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 delta 33794 zcmeHwd3a6N+xFR84mlwqBoT4QU&yzV+tZERU(3zB|?lRF|?Xi(N$fB4zx9N z_-VCOZMAA_Nl|HQtSVY+s?&pWR?dZF5P{m%qEx2)sk+*f4RNh=n7lKGlA(P-zA;FYR{pS6oJ z0$uZ7Ry4(8$<7}?lF8kG&0;Ca%gM@~h_ojRszF}`NxqID$L16=+mb&bD{nmHKC8vz zgZvL5eIeIEdP8ojY_U{_oR~j4cL?kjg7=56LI$~zn1n9aV8}>aR>%lGxG7z#ZBpq^ttPPo;GiFjwp2c#jlEvbx3L<;l z=yA|3E>Atu1CUg6N!`dmdVFo=w%86>^)gJgHO zL9*hjD1djJ z0nhr+K(gGvAUf=_6s<=BwnaI4dE@fJa|+FIU7;CRiaLhq6YnSrvYP`M=+YCC4XuS_ z#k-Nu9vFmfqC=w_>W&{k0Ene1p^;v01|+DWP{``yW4F4l?v3@nZwtv9qafLbBlC0e zv*G&DCi+ZyCR8su0}|a=v>iO<;->o8w1>hObPOI)ehJA?%`rUGOs{_dB)i7oUHRFg z^9#|AWdjPZE7lkxJa1GW3^@;y1%tx%v8e{hu^I!OA+;S-kQ+HVYe-In-X*U?(vg5j zJ)p^u9MfTt?5ZcxW-W_2Xszj57Nr*njMn84$m%e;0?FPyWynL2bYVLro6gP8%FD}| zV#yslA}23*V*W<(9HsfFk9|3DMBcc9;Ui)SC+3XBTCqGCtCu(HH|ni*x1uq*V{^yk z=1=sB6;mtMcfFLP_u&#lHf*WuPZ@eCbdLTOgMZJEqjM&WWtXmo&aoVtlQSO6$l^jd z#x)6&<=$zf>$O|!_1YjA??~h$4p&h}BrsDj8N#)xoRv3xd{$n5P6Buu=H`bFA3bh} zrE43#f-vyxpxohO$K~Z%EDfNuAsS_k&bQ>Z)pdWvZdmTvq2UGNE%7OOx#or(A3l0q zc2?{}xIG#jGSSk!oo?Wcf{f@R=-TYc9g~+e%wo~JK*ST;i_$9fUBlYz=A&|^OkziT z)j`*Xjn0}lF=wddR-ztwPJY3}T=mq{Gmfn6 zae3_7qu@Evt2*oa&~e!l^K!@Ld;uQuw=bGJA~$;k40H2y3Q>>ckuG|JkzMtfF+OYJ zh;Vq9JtAxLDCA!U&kn^#5)LPapY1AMbFc4mbLtcAe5$^kzmNL4=+;8A8-``&Pn>|_ zc{v67xx=PdHh0tgUC>?k?;A)CxC@f@B`C+^)Hq148K0i|_K*Xe-I;FG`wMu)?YcW~ zt&mX%2K6CX!P*2}Uku3(`Vw0$9V_gkcl7jr`XW0FNe6EC)%oG$#&aQ9-h$2*as!eb zJJ^uJxC>@wk7$%mdu)(ZjSS@>y`gWR`=dY)NUr7~;C)yT8s=)>++XjhF-F642k6_A z-@|%CLr^grtPGt!as&C^kQX7zPleTZPblRJH$qUf^pm!UB{%6J-BpBf$WU$L- zL(-uskQ}paMuAq4j3^3{bJGu!4cQ=BE(Y_E{8w<4H$Vz zA=Co@TbiEVvp4#mMDS>%AS69LXXtar=#HF$WJJddiLTAhnaIT#J|=5CrM^v%Lp}q^ zgk;2>A=$&`>P>({3?vAW`R??TgeyUBc+CVo!ex-2;AiFO`3s!($;CVOC*I zIChMj!G_)sl8%l-eLj%B1-jiUkeqxY^T&;i!|GT9okQg^yRwR5_%otn14DC$6by%9 zBr4(%n7SE>sULzpkEweh*>EcCgCRE;>H)kB$%eA0=so!=bUJbaI_zCV$y0S=NM2TU zPQJzRHgr~W6Os|8PSf+pO&6>*MC%o?9HWORHK-Oae;A=y^49N!W zE#DZuNJlaAwIO_Zmfj;!E!Ddtqxl?t$EyYz2>s%0y`g=O+zHo1vY|x=p9e|1o{$Y7 z;~=>|)R`@&dd0sJRDFf=PLQ{I)f$T;`_FH@p>>jNT&qvdr!CtgLhUP*FU4+q8*7MS zv9u6-?a4~I=vuFhZ5{NMsKZU91tlnF#qN4-)F@Sy1UuAED~ZxzhxL@zV(BLK1}9r1 zDqAc)wA6H@Ix%G{L&|~jiYT)usMV_oj|L8FN)?NxukdWrN~t1Bpx=a^sTJ(yjsvQg z-yqq#5h=aeN|+V{H0}|kdTDm+kQ$_Mo|qFlHxMbE`v@t$tUJ~Q%GOV|W+OFFE3pNs zEG-p`38*_f4yoR(S>0Dnq&9KbR4g+3t%^m#32IwUQQE|zKH(`mLLKV&o+1?@#!Hky zjQ0|yp$^*{n3Fg&V1b|n>m_J?#C&v03WhgBOD#c4=Pn?Xrg5z>0rXsfRJz8UMarqA zT6kM5J(*Hxd5hHM4%;sv=#_*4b69uO#6^JUUO!p&swGOo9BR8- zq7>rsTEZjTq3*6FQXy?cYg*4GvuEgZH0O!t18$)eB% z+jwZKvxe}lpJ00pT32WmkybB3z3wkOVjb29EXc{Cdw8;K6;kbytq2rV{Q^X3tV7KV z5FT+3RR)OEIEQUN<}|&k%KFs0bwz1?hqWj6qGZv%Ub0$JSER-})Yf)U67R51v7>RV z=68_lg<{%FwpGHy>87>g9hYG139SdTN(@_lr=BQHaM*&e#)fGonEKYoptTZv1C!P5 z^+idd!{&~q7K>~QcwmCHE3|fEZ&b4F38XkiRkXTp1&Wd+hpkyqg=J(L3au4PtfCAN zd>15ATRLn_u{+{;i~6uqY)?Q-gr@a_Z96o5+`YpRR3${DCOg#OA)*9gZ-^*OcGwzY z#kWNPEj;TmXzj%Opk&*6q}cmfXx0nR+Kc&!BBG)2Xzfs44Ml2ehjm{=i>1GqpPX!M z--sRN**e*}1gT7oyMk0(E%k6?xFx#BC)=Ju3cD`aTNIXH`xIIjG&mogV7&%Sx9`|Q zo0O=x7^!xmdvdbv52RSK5<5Nm^&&(`M~6B#LX>tyEfIP-^c`Yu7AaCYVbw;85{O-qqO_C4 zW`$c^H2Om95hYSPqsyX1NoR-cH1asWm??n?w$Nx@vxu_L1nUH7oy7dk$+p`_bug{0 z?a==nxL4R7MT#>EQ!y&RwgVd1h_;E@d|K!$UE$tuONGW6i9Gc0ENGl=Xf-&&wg(#f zS1YH6#EOzshpj(W2gg~9%O;`eQ<&@iK&(i0I#hd{C~-P$LvZH7Ek)bbY)haSQ@>M! zZ9g=<932dRnZ9z;nj~2JLF=wg@8q>n?L-d2?M zao9G3XBl)9rqB&&bi=9*drFF)r*E4sL&HRbQy)X4i@N0vXe_7gG`4um2i*?_GZ7lD zL)ik#eF}{p;}C*jQrqi3YWsmL9vZv6iYUVf7enj9&av($uXXe-!(N~8;pi28wxsn; zu;oBwtJ;)RU+y40G99+#28jmHxV@w4CimIi&^qa^z|AE_9_Ddyf^{D?;fbS?7fk3d zR!MS#n%YT}KIBjz>m)q-J8TD#$8p!XSdHl{N(w$4jN6|Slo6N8a+lo z!JQy<3q7tP7NIZZLetj_4=Nj}iSCI098#EO*w0&GA3*mRrDsAj>O$%Fps_UC!CFzU zk#fqQCz00?8ZGs4oB@rkY96VZQiaDO4x2yrD^3)HZ_m`Tu(#TwA!K4|D@=HcWd0KVfSI5gQh5~;pg>BC5Ij5G^d?0|~? zE`!G4wYsc})(6&_|)rIv~zd#AnoJx3UvVCxPI%O82(EfQ=`Lu+OBmu(-kzPg6(H)N>3wds4tNN70q!EAjE zDSC)qr$K^xWvD0(bl4m@=CsFdWt|DF6+7PcAyP(_=uod=X5Znw+d34QcKTy|AE^$! znz8+X6njx?)YfIVIh^djWz@9kcM&OV_q4^1z>PrDW$V+>aAp^jtezhsJSIA99dq@S zUs=0Ko02O^K)wgEomPg+`X)5J#j;TeYKM^`wZLJUH`3gUyi*cv$D!%{iGz(TWt2I4 zIY$;i>!9^UT0w&CtGjuuy2WU7O5o(twiue;73`wlna7c}Ju^n{XMO%(fyNQhJ0NVV zsilofbce!iOwW4mFWO%x#s0CvV~WGpV4T_AoT^ixrD~h*cBB%8=b%<@NMQECi9X}+ zn&No+Dzr?|y+^W5nSf0SZQ}Trlwdmp4XckH;8de+o=BbMP?zP2l4%ax^*nv)*tn>z z(fQ~k&TE?sDRz*4@ZSzCNz+*0A4VQdYeps5+D_Di)ekt+CyLY=4z*8#D4F4~{ii_R zSoCAdRcJgOXkDf@m?TnX-ZR#=fs^!RVS>555?W8q@wE5^+ZAXmju|{GK@FKKN?eY= zk~Xc2^a2>VzZ9?*O~wTcd&hbTsW|N-tahQrf?2{Hxk-Y0vXED0 z_JPJKacstFnGY>ic*Z8%wj$*Kub&Fvfri5=wLvH|-P}xg0rvQGQ91`F=hKD9T!*dp z4BcUO!Nbx8Xq>*f)@G)@3Fz8fXk3Mwre2;YQtLTvkuKdGn|1<_3#}7Ow5fAX^nZ2m zO<49bE3;XPDr#$?u@=4AOVGG3^=2K#qGX=KT2gG$??%|ZMT-4_voV|y{iP9W?O8m4 z;o?YrXqNDZbf_=P5~-06+jrnuM!!$cbq>~nsaaP->(6E5j>N+zZOfQj!N~R|GHb4dKg*}bpQU#O7_L=AdumC2W_NgezV{6hr{}ah}GK_jC+2j3v45EKU zDF)8xq}GO1a}RS~`%u;dux)BQwnFVwQM!Yf3fO?z0Nuwt(mwZ-%*R}^Sb-AFN|XA) zR3J2i1%^RISryzega0SVc%KI-R{;F1(7ts^M^*xqFBua93Ei_bko;7XZqQ%X*uP3v z@P@%tvcWeEost8w-q0y&|F)sum5iSm?-&`BEV#jt8x5Ya3b5JGDOv6lL#Lzz+W_+0 z0e1B+fFDZMTS^5VQ;N)mJ}ws62UG^W23XM{fS-zz6&%snze<)rYVeet8>ayB-viZv z%K+!fO@NO53Gf5y;_n2Os<8He^o67Y{*Y`ifVCKs$-4OBkOV@qqJ~C3CG8tSl4^o4 z_E-cJLoyj@=;czMgZIhM8;C^#RvZt>vI#~7lyoH7(EmGhh(`I4E;q&ekhq-Vdxbl>v_q@f7!@~bZG@%0l_J? z)-ZV0F!(3Q3ST$u-!SYc$*(i`Hx2%Nk^#J}7;E5d!;q4zb(5h}GWn6AQ?h~02LA~p z5ARfX%L3Kl?WJNxZoCyJt%&%)mJ0v3s zH1r@yekj?a4Ix>+sgd8zkj)M03PS?_ED;6~Nd+HDHW+8{@rK?Ck`<;vvf&Pf>k{?Ri^?;;9y$wAb68~J53?pLzBtMii9AwCBgQp}v+|Vi6;0QzJ8ayR=K3+#^ zG`{G-I7pVyH~0dL$M_c-8PhcaEq{R#TWOvm#7$$ z4X=VuxfYTRykY2XQs?}8$H>?S$%fyDWY=$otPZ&sl3o5KBzN{BkZkBQBr7}ziGP+0 z{Q55>>%Ry)%AX*)2U{)~#AQe}^fM$Yz6nW3ZbR09^g{gIH}r~vg z6vDLhGE6DyN}3^i8?uj)Us2MoFL;*kXXM{c(v^n|yGIN=NS8K^hJj#3!wosYkhzd_ zaIB$^gJeS!AQ=mvV`Y9ZB>QqMBtMj_?@=TF2}6Ioo z7xzelRsZcW$Y}rn<#iC6)vkxM9!b@-^2;EX(;z6>W!(&&lKTCwe`rFU`TzBGkUnI6 z4Eu_gKcHONbrCE2pIrZ-xK^HXBZCS)l*2VxA!`jsP_j;(}br3s_ zIv3aLRPd=NIdE@itS;H%|6ULMdp(rQiGk1kBoE*JUJw0yJ)|E${=FWu;i$!vn18Q_ z{=FXh_j>5x>mh6f|NpLsjI-ze_3NQ`rmPK9MZud+JXXB*%?!m|)OjmIv55)z_7J=A zT~!3H&k$?h@Dy{`I~7k+wmw7g5>4OEP^yb!eAf_1@a-+4-^oyFipTL?OPs{Fk4Snq zL-7@h@a-qg;k&j-*^r_5i>3IkBd+2*Ky-aCL#ZoP;@d86;k%wl+nAx$7q8+wP$=(b zC_&;OdFVnA`9OQ#RvFqB)mV&P#TL|d^ZtW@f|AaY|2oYiV65`CU)by zxd{F!LkSa8@EtD7KFSc8?|X{4kDW@SDE>G@xPRa&PD6_p(VH{G`_L9|b}B8z$;}x` ztVsGKLx~fM@EtGC;X6U3Y{^g(#Zr7HiL3Z-DROsaD9K{$&I}Ryv8QPCsZ(h!CVZM9 z4nsQtt&Ir&EJMuOj6VF#sicT9Xo;VAiW$e8N_$bfD?^-xc6ygn=_sOiXNVT!ogo-BYCRaVkB<$~}l{ zho`Xabt-8hZ7<@2wgFlnq3p{LBX)Xj0ce9n@Rx{hH{$!!sbq;VXo;ohB;E_)E)0jH8H79Bu*&~88*B~lI|zP*U=pi>zm zu0qS)hxiUTm2qO_A;k9u;ydhACWy4dh!5HZX!$}pg823$z9UYhK&*%6UxxUOI+e*H z>nP%bwiDVE;r$Kb`x5be<5Z@Jt2#i9&a z;sL~W+^NhK#m5mJwA0Y$isT^&U=YRucsDtvRf?r1@S?<0qt{<@+;!Ig!q1SDtpCMXqlH0-%Y3Tg;;qL@m)cDx136uNV|pj zplyKml~8^|d{+_QZ%*ZaSP#wr8shuisT>knzau_qJE0vB-hUvz>xl0Ur}B;13N7?! z#P_FD`BqH$6Y)Vi0PQ;wd>irI!1&#EDknu5w8UQ!-yNs&y(qqe_@JGJc6xC%R{4@& zJr^%loa&F3#ix{hqRUNB*-?Rh&LW>yK->gzgTw`kY^Q=)d&^UHw>@P+6%fB$S!ypcTQ0|DPKW8kS zr+CV_HmHg$vnd%eQ2`O>0iu#D_5g8~#Ay;%8C?~`5*5VasvxS!lO(!S0@1M=2%B6~ z4a7|nH%L^KDV`wKx`9~b3BpreC6Q@GD%}f2b-B_DgnMNW*6JX9INbDq0M|#%;QD_5EP!mL5xs^ny2Z%Q@N-%h?^vCkZ3Mb{6Va(4q{9b5aIGFiOd=x((8bTlq>6iaQ6mb4FC}> z(*i)ePhta!7E-ATVnj_4IdwtA$@L`sYk}~!gGi8Bb`ZNr>?DySz3YJ}^Z`*&4@9!u zN+Q%3M5Fp3TFVLbK^!J=fJ7S^90+2bABeeuAW~!*iNx9<;(|c5m&HLK&XPDyqN9us z2C>8+#NuEOo#jaqUFv}77y_cJToeN0CW#v)oHC^Wh_wMARy6?8U0x-TSrSR4joxI9UsOG6MH!$IWAMd2WBlDI))luU^Lv9=M2RS_V@ z$g3nW8-r-gJ{>1lMuKo}0>T;vVuDPI0`WeH4J7h)Vnis2y$r5EC;Xd&@Qnd6S!Ttc z$Sx8)NlcO6EkG1D15wZd#5B2;L}+smjbcH}kP~7-942vqgi8j;ftVKtVs0FWVp&Ea zF&so(Jc!w{I3C1V5(AS#%$3mzAeKacSeyXjF?o_imq-vD6G1#K7bSwYN#X{HCuB+z zh_z85RwaR$FRzlwj0Tb362tnbjJ^E)qLQEY<5Mi~~{Nz~;GJ5x;HiCqv_LIzMn5P6p&whmxVZAnUY& zcu`KESRr>)tdzlRAzqSGC|;Ij6tBppDG;k;m zNc}WJs;`=9M;%@28A*(|o9-Icc#J;Yv^Y@Mh^2KSs{$2-Su!I6I6;5?CTr`h3W9P^|0RvMf)xIGLVAM>G&nn=H+F%}CuomFFES>l+$htF^*U6Ig! z*@Z#}_~(aMk1uf8sBjGpq4RgZwE#cngCDzC0H4us$bCDM5V_@JrJIWv;tPOs?S6=Rqpq1iAs;fgV6lpcjw^^alC>eSvhKACLiL z0uLz``Qv7#QRQqXLlv32SqX9Rj(#hkHQ)d^vDyNhIPCyVmJUD(9C-qG5||G>1xy9- z=&of3FcT;Sf?yjAga8wv-v+dK1YH4Cpb{_$d^RW9P$WhGxd5LU4FKu_b^vRe|NEN% z(^`AnstIH$&=hC}GzY?faDWq&!@wcihz33c_^b?{yLk=ZXsiY}WGev9kL7%3hO?2g zZ!-#VR&y2$;2B^xFcaXT1=E3P0H3tt<6Dz}$-r1(9FPz2c`&YqJRl#K2owNQfDC}E zA{vMR_yfL!&n$6SqyU`uHGx`y58w;<0d;{uAP5KsLVyN9Lx7JnD3B^p32+0fKox+0 z?WrnI4cG$5wgEeU-M|;Xe!#`27#9GGfMANY1RetTGjJpj1;hZ@h56{XB@T$^f=ZB!K2e&uQlPg3+5;Vc+Q6H@ zTL2%0`VYWIq`10X23`WV6>y7~1Iz^;1&RPZG&co!9D$brFQASW0Y2A|4s-$dV9E!; zhrlKk^Y9}iJ_eGInGCE%0X)=UX#z9_)+5gwvM=N|U?=b?@ENcR*bS5dp99=)UIbPE z{99+-Yu*Kx0|{^}31|s$zwrfnp?&SqXg*`g2fq43@&PzLJXZ|#K*K$O>Zq(1z$cSZ z0Y0O305}L7295wnf$xA5z$xH7Z~?do`~+MEt^(J9>%cAGcTVs>fIorTz#V|QodWPV ztNj4~xYtI|?*ktI9|9YI_kfpxSAbQ(YM>d)HwVH2f1nP~8~i-T$AKq-`M@lIkEgi! z(ANxLCeRuP26#5WopvV*ehPdBaF=}*cn#W;PQ~tO z1g#1X2yoNo=F3f(n=v4m=9X1?B*=fmuK? z&>ENy6amwKwg7wc&K=jCJM4Bgz;w(oY$nGpv|-th590JRpFl0p>je$sSw` zJO?ZXmH|rv*Aje5;8}p_RR9fM0agMp81hBP6@Xd6%SgWj@Z9NHfagx!;`0C=iF1KL zKqWv0*1~o*z_UR{^e4n09P!_fxCLATt^yZ% zfpGx4iNnD(yZsKZ1;_^2rOdw#FnT)2F($fWd>;V@0uKWN0A8}t;S7M6Gc4PcM_^v# zbOxq_=mgmj=m59@tgI2F6=)B%1AKt$Knl2=M%u=fOP8^PHF`H$2H{3WNepfCfMa5DWwX z^#MPiGGIFFi8P(40?+|ESIvd5On6e!D>`FF#5@|-0BQk@(&WsDXiFQj40)bkvX|-s zY^*k52kHU=0E6Qhnv0qAh+qLq7Gm1;n9i{$Sn2&DGV||Oh8&${d8Rp>942xI$fb=5 zyS8GcndZ3D*sO#@!?fuvqh&c;}&=>R7wCnfWk zzSoAm#K!0#Bjoi4Cn|e_!SsUz=|Eq@5!TN#u8I|zU2SG|hk+B|tnUm|wCx7njLLM@ zbb^zsqAi2qvNR`dh2`kFJM-yrPoO!#3K;%~dn;r|HWqDva zFcp{r&@ncii!{znTzBe0nFi%1B+minAUzwH0kC&w0!2VEFbiM>k3l{PJPkYnJPDKl zY?PIg;{l1%&H0e4dHi31#6}RN1B;-W4zPe(i3L0xTnsz|u;Q)A-vaPt zf)zdv&;bRqqI2ZvB+JoB+AaZZra@uUOQBS3v=zALz^wsR1FL{nfR}-nfR(@s;6>mC zAaoPH@LA$7_kE=_+xW*<$}FXh`3Jc-6m|958rE?-|5KOtk)Iz>>OOl=2~c*+x(Agy zbv;qM8ai4%G@(eQ#57lxN1`L5BcgDmkUbA7EnE*apldc1J-fD~`oV*h$Eyl^s0Nq^ zm*GtXmRYy<`eVJ9t>3LG(Qy$`5iRup^h8HGy>{nS`}%g(RV503w6MbMNveGEuoBa2 z0SeQk#nahSw?4mOhN{d0;|a$6gXRxs?JK?5&AnJv5+hReBv!{O$a|OLThks&{sF`OmvueAolA(GfAY*CX2ka8{i~Y>pMQDQut{#{-WDw);&5i*CjVev=AW-`|K9K4 zmVNYMK3c=b#3JUNZZhf{SeSqC{?{MFTNawaWzxaog_ z_`usE7H(dC&QV_12{&1vma0|mp=AgL*as0@nm6y5d*=zW%KeJBK6?z^WBxV%-=0Wm zF!QUW1?2`qjH1O~s7?CJR%evwOtQ)zENlMhe|z0qPn>R1{b0F;`Lci$TYYcOIXvQr z@|+K>@;Q{Xo39sePF7OWt{f6xH3!~WpxU|ETcyP*}!9L`O#?;_u4Kh?AJ!U;4_n7Zo45@FafxJLW6j zB6-bM-aZLetNO_+*A@SURk1X&^WSIvnmO5ia@Z*)Cf@u@`+m1WI)3uzS5KkAgox-w z>`%tq1&W4S9A)Q2kN7Z5^bESbeQmk#6r6sjwk*1=_y(e%%~u&L{P>l;&A)uMnZ}3^ zIkL8NoL2m0?DtAd>nbenYVz_mJlrw(d&S-UPp!*2-($*|ZD6$j%QoznP(3=Zs4(%{ zO9AitdcX^;XL?b|Uk3evkvUsOZh<#;^A!uvENi>+&E0<6G|MDfS_9-qKOi{xeeef# z(1R__*D!Q>e7WbT?X8Y!F>9?EF{_tq%goaV;y_*bBwKxOxQ1W<(3<&@h{)DYx;4D@ z%_mxG7!2G>s4KnBpmy_Z4;RiZTh=FXdpFGj#~N(ZcKOsT#MI0#ABLsc!Y(JB!4`Rc ze`2slK3`AnfQ5R#-m}eAf4ljjh}m!De99UW%bnBRxE*5 zfpYMVaK?O-!_oIf{ipVnnX6F(T|;M%2Fm9uss8GjK)DW<>Xksb>qj)TB1ry0xjsln zoyDTw7o^>4Et>jGV2wT5;Zw9WwF8;?c8OocK0C|DV|4@Ma8YB5bPSO*QP%$V1GU+@ zv4~aA267KA%{Nh8ygB6CLABgt%l%y2;MsFy&xQHZ6LL<52JSsO|Q_*PW>OM{Cj&v)xFdSvj&!H8&`MQb=Bd0xT zYZ?Dyxnc-^*p9y3|D=E z$Zv0=AAOhmZag0__oGp00*6c6>-|9-aOXdN9NfzS-YL(SyciJAP7X{%vE$ zDTsDr7U0{+ySPE0Jv9__V>Ron7A_+$p)bt$e0=>w@E4DN9EEen2kiawnM+D+#irfl znak+&-{o>AJpS60xkvh|o^|E2%YSuWtE1CBCGH+>{@Pl_K<_Of_g_&0{$d{g z;Deg^>XNG=?@Z6mdgVP;$&Ap?TFs6&4tH|&Ri)fH{UGM=^Y>xIVa?-bB}lqoQ)=Gp znfiK!bX>zevc^|tUb`oHwL*hiuHgW=H9}s5al@@}sOEhSkY-Lmqzt{T#Neu7z;&gL z-F)53t3B(LJ@@pNo3ts-MPr#9DHr0HtD4f70P@)N@*(5=VFWy?g#CbdWH6z$*%CNNsALmlzvt7v*ZesEp= z%v2ujV)b=61Y2QsSbqMKH8Z90C-Fw@*q%2=%Rhcry2WpY1y4dhPwtc~r>*L#Dl?7t z&6mRje-rsglShJoL=LYXV1FuF&b)zk&DY7i)Z$=|7gycF-;l-`lXgD#fU=0hD^~8g zp>*^4yJvM`W!Nw1nIX}#$1jN6eBnd`pUuy|c&O|mYB!GI@cp@8;QJ}~;sxI~eR*cc z+WdDP(=4K+A_^@p<0{7=IsKOYP*mOi!rJm{txfT={;%-e{QLU5_UtOSnQ8Hog9@QSFi!| z9Sgs{^-SkV1172 ziAiFomqZzitqQRTx+lpF zzhQ~`C&@y}21)V_%CIDPf-)gV`uq;rF-dlz9GN7i|Bj_KDM{|UK3r34%5!&?!KPL>&I6+zcchIa@bKg4jE<5I_!V1!<@VCw37Be z(dp)^i89i@?mqC^?vq+w+PbgZTK4)A^WS_2k;n5VkIt#`eG6FN$jJ!u+sYSc(L6=_ zt+}XQ+UGs8YP|ayEEpqJS$vAT_$Nl7c{|-Aa*bolnYlx7+kk^li;vpLzPFVkby$0O z@HU24?^$1&bVsSDPG~PP@8Bf)s}6F@9dwmjCwcS^x@cyn#a=vNOI#ePHuI?7S-%2b z)p_y5VBI<`UTBJL>LXniA6L7nkzHk&g7e0+U3Eu#L~eVjPU&`DLl|4s^{#TTqQ=-C zd~tUxQLbYh=1YU-wE4Pj>i%7wwGPq3b#uy73R>ITO-8AZuI_TCs`|&9uMK*vO4Ap* zzx?(Zl;Fik5`Nn0u5XOVfn6S%`gE#O%h6`APfxi=Rb$X0&sI{GsrpGORc+?kjW-Du z_54rSAR!C-r*8xX1&%63s1VDRbP+cY1*%pcoU2q?S@F)d+XbiY|tj` z=-AeEjMg!cf_lppuuv0v%Mab)MbF;y5_OD#yOq6!lDzBF_nWDq&FzW9RAmU58er}& zjoxy+6(#2PmSLfgFZPy$DJz`HRF;RWY7O;`-txRv4N^boEvr?gMQ_=-vf9jX4mF0N z#^HVR^X@J?TKo0L>ycsf9u}ARR-`9(&8&K8@A2RDoCK_dZGGfZs4L!lm(G=<&wDj% zd~2Czq225728#)Zb!Gd|W|P?JHM!qj${r@szH8tomVV=WmU&=;DTbWsNGZ zFyG*FboN$%zkOFZt$ESY9`{5ngZs)WRUvcx%C@yo0x$p34)b1ZpFLl9TAxgm z;9(B2l=PKvpiXru>JEl{tFJu4Hq6%vRd;*g)Swu9kO}`AXrOUV6(IMvBi^eSbD0orUW?pAv59Zy4M(O&}sCwk* z#hLF_ouD-o!%M2Dba@+P)mG`!--gN1EnRlA!L=bM!JBbDUq9J?^XkukGF(H6QR%V> z7V+l0l#bMv5jBg3{ZQ__`L?BwQ`#-tw6&wBmV?7VG+yQ=_o1x1DE--bs;?E3@r865 zhD$p2-E_G*5bf?nyF8ni_HxhEtaW>M1;lPgCw`qSdwHN;^W{+E+fILdi!0g7u)v|j ze65s!;~#^MFI>h;HJ0VUsh@m-Wz82+`J}|PE79Zj{RI6A!gqbtUyv{Y>{8i8Xr)$w`Kk~3)xL;vP1laF8+FFJ8PFnML+FtUahY&Z9pJ!+sA^cCsL z%lWAT@oUan`_osHFv|-=Zs(dSj&HN*4$gsKel3I-rb_i)=hqR9~oswgvQoo+S!LZ zq@SrDux~lm=iMEz7=41Eum_E=i4x`teo#&K@`Zh5Q3I9N;AUH}xWeggOm6vPEzAbJ zm^KS4bgEgIv0oY!BgU}ySIscYb<%B!Y#W4q1#{`%`MPF^Jb^v)?p|s(h%Lyh#h7;Y zgs9bKI`Y?k)UtHnw1GDx^7BJPF*$N@UHF0-XO=eIG`If;?~{g0at~{&;Oad!+|5G3 zDAKDo0@OR)r!wz=m_av6moFeM-h54+y;Jd|vxn8d^5K2JVnDqWhQk~NozjM(;z+9I zvE<%(EAaQVHxB4`qp2_^Ml^Co9o5Y~7zbD$lNxmoUa_Oiv09q@+MOPFwxtdNeDD#_ zeB+=0++9mIXTJKq5jp}ix;GH5KDf9Uk~vq*X&qxRhs2!TMknbTqB*6EBeZHB?J7)E zeV+LLw{L#_ZStE9KiI_wS(rRd8TVi}u$wOx966%%&B-T{Kh*k&hi!{?y!N-7ZzXJA zd%SqK&y-7=fp(YF=tQo(`%T1%QPSQ}zj15M=knEC-j}9B<^p-}Nyzo(%p;i#h5ayd zE&F@z__Oo(=Iq1Xpw9&JF!=XQiM~6*j837$JTmer|tT|M3rQ z%6yY$msMle9S*Eq1y01_jyF2UxMow$E3?59WKbhqiJ9-jwBIbM`tB!h;CFZPigx-0 zIkpjY`vnu^JXorEz2!&H?dDrHpJ-kd@Jd|I7$ZhNoM^9^ARUcy?Y(7! z{=2+69)I2Y{MA``a!X^hX}&0PV|?(AAAX+NL2DD|rR8xQnkc=R!14hb40^zbT=s8* zDWcy4^H+bKC|_%W;I!X`eB`wzYJKw>*}U|$n{WAS)p%`mjdlxH8UbS(=@+Fj_6J`t z_!h`@yvfj@KzsbXXi0%Q6^cvyR|;fQQ?z^k!2RU9rfM(UsiFtj{C#5BA3QON3uXQ0 z7;f_gpd&87d%1V)#HNS^cSCv84m~ltIfnbyLU|$r^6f&og8Jq{`C)Ulo85dlYUR_{ zYNc25nN&k*hTjbM`MgkugrV;2Df%UR{T7|F&Q4t%V)PRR2{$svhoP>uiSi@dE#v*N zgE5Hy#uRxNCDr7qvRXI>&wPz(>+4(Am)3~ml^JgS@#t`Ks%#4jHFcWoAC3}Trpu=w z?dE$%$JW38$$`TSlX$~WyDMmM&5*bqir+nF$RM`4X@;y3p?2^%Izzu5VCL)hIdCt| zu-ENkjDFDWnD|7Z#qVdzUeP$d435P45^jG@kA%YyzWwzNA$znyb$@LR7srXRC<><+ z4-RNRk^UR_qK(_P=Y~YjD-X4>NbW;fBSe4WHe|Srj8?7YJx0@iAM+Kj=6&HB%EBT! z9g*Gb8QiXY0s4QxZ>3v|TJvskv%?LqWM~9B%;-J4`JUJ4Hm@|AKHED$Ra#(w!T|r% z96^V5>t((H)_gB3?vmryaT4~nIz@kwS!z8tHw0(!o7O_crqt3ZjVyvbvv_;Zd7NbE { // contexts @@ -78,7 +76,11 @@ export const Layout = () => { debounce when typing update textfield color based on the response */} - + } + openState={openState} + setMaximisedState={setMaximisedState} + title="Testing" + /> + ); +}; diff --git a/client/src/lib/postgresql.ts b/client/src/lib/postgresql.ts new file mode 100644 index 0000000..783b8a6 --- /dev/null +++ b/client/src/lib/postgresql.ts @@ -0,0 +1,17 @@ +import { Client } from "pg"; +import "dotenv/config"; + +console.log("PGHOST:", process.env.PGHOST); + +export const pgClient = new Client({ + host: "localhost", + port: 5432, + user: "asdfuser", + password: "asdfpassword", + database: "asdfdb", +}); + +pgClient + .connect() + .then(() => console.log("Connected to PostgreSQL")) + .catch((err) => console.error("Error connecting to PostgreSQL", err)); diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml new file mode 100644 index 0000000..35eef03 --- /dev/null +++ b/docker/docker-compose.yml @@ -0,0 +1,14 @@ +services: + postgres: + image: postgres:latest + container_name: postgres_db + environment: + POSTGRES_USER: asdfuser + POSTGRES_PASSWORD: asdfpassword + POSTGRES_DB: asdfdb + ports: + - "5432:5432" + volumes: + - postgres_data:/var/lib/postgresql/data +volumes: + postgres_data: