From 8f6d6d68a8e7e61a988049d9c4faa8c5ec0a2a4f Mon Sep 17 00:00:00 2001 From: dorian melenotte Date: Thu, 10 Oct 2024 17:28:29 +0200 Subject: [PATCH] ADD: good set up docker --- .env | 3 ++ back-end/Dockerfile | 10 +++++ back-end/bun.lockb | Bin 150523 -> 157709 bytes back-end/package.json | 8 ++-- .../20240908141853_init/migration.sql | 10 ----- .../migrations/20240908142435_/migration.sql | 2 - .../20241010152336_init/migration.sql | 13 ++++++ .../prisma/migrations/migration_lock.toml | 2 +- back-end/prisma/schema.prisma | 2 +- compose.yaml | 41 +++++++++++++++++- Dockerfile => front_end/Dockerfile | 0 front_end/src/files/Profil.jsx | 3 ++ front_end/src/files/Sign_in.jsx | 1 + front_end/src/services/AuthContext.jsx | 25 +++++++++++ front_end/src/services/Router.jsx | 6 +++ 15 files changed, 106 insertions(+), 20 deletions(-) create mode 100644 .env create mode 100644 back-end/Dockerfile delete mode 100644 back-end/prisma/migrations/20240908141853_init/migration.sql delete mode 100644 back-end/prisma/migrations/20240908142435_/migration.sql create mode 100644 back-end/prisma/migrations/20241010152336_init/migration.sql rename Dockerfile => front_end/Dockerfile (100%) create mode 100644 front_end/src/files/Profil.jsx create mode 100644 front_end/src/services/AuthContext.jsx diff --git a/.env b/.env new file mode 100644 index 0000000..7883457 --- /dev/null +++ b/.env @@ -0,0 +1,3 @@ +POSTGRES_DB=db +POSTGRES_USER=db +POSTGRES_PASSWORD=db diff --git a/back-end/Dockerfile b/back-end/Dockerfile new file mode 100644 index 0000000..e10d115 --- /dev/null +++ b/back-end/Dockerfile @@ -0,0 +1,10 @@ +FROM docker.io/oven/bun:1.1-slim +WORKDIR /app/ +COPY package.json bun.lockb . +RUN bun install +COPY api/ api/ +COPY index.js . +COPY prisma/ prisma/ +COPY .env . +EXPOSE 3000 +CMD ["bun", "index.js"] \ No newline at end of file diff --git a/back-end/bun.lockb b/back-end/bun.lockb index 3be6064296067dc6aa97c826093a9d299f1ba964..564567e0be14c46ead0825394f05fd7dbc48ffdf 100755 GIT binary patch delta 32301 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
_6Dp=f#N3KV7<&ug&UQ@)BudY&1At`H%T-5vz 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 delta 28481 zcmeHwd3=r6*8h19hnz!*2oi#r$3zk`iJZh#k|V@L3>6hg5F&|$Rt(MQZEHxYrTglp z%5`g~c_!vr5fm*&%|p#&RZC6p_xlW_%DwOXz5o3F==u2Wwb$CyT5FHb;K}%d)<@Dh z!LQ!o%`rO;PmK;p>$%`S+fm7#H4|~De1{A!COrx=V(wH=tI!5pjSZ4fS#T>uTj7eJyV?`TBbp%gHn8x`=sU)N&ifO4&!MlR*pO~HTPP)l719I}KK}&!x z0;MYVk&pC-PJ>)DmF9zbLS6&Z9kgFYW-=5reGc9O{D73~A>>0~2ik4m{1y>bTmb`BB=|{+!exQWNGgrxNsAnGvrMw~T1zG_#45n2C?FgRw{sf+` zX$^+eX2At?SyS+=uDF{fPwJnTHW2zu1W)h4Zr{FXiTy@{XTI*Jg!Rn@Mbo*?>Im`A z8I0PzK<~jyx_1UBGoFBzKA;hxtROpO(Az0lCewiIjPxKh)GsBS9bn3Zm*}9j$VUY$ zL3{EKQE7G1)1Z|=Gm($=_e;y@lbDv9ZA#Py_hB|IjDQ=Utg|sF75fyFJ!4oFRax`= z|I$KdXVgzaGNBmj9gv-podm^4SB1g35JbT|YE}=FuFpUMY4d6(Q#sH#Pyt<82NX%p zc$mZdO+ndZ#UMvk=k^+!qB)6aX{i_$`QYh^{F)|Hc~CT)n3kBFG9Nq@`W!SDN;&fo zVa6#aPz7`hC|!3JT2O%xK#|2cv5qz-x`1y4z7c3`(4wFXKu@6+WO3$$Qa%RMA2c2` z05k}cik1U~tz z3QD6=)BC4nr4GqXP4AnQ+OPkR+y&5z?ogU(8Ga4d=q|Lziuz`!yq%IhB>Mu=slYKk zpD_cLMQ94uLZUiTQhiZ(hH1Z^uTM57Ec!fBQ!p_-XHephr2f;vqyAjyJ6JQArDl{? z!H_|jX)KVLnw2;N{x;@(%CO9oq#?*xR#PO?H!XEg>JZbq=929yn3yJ+QO^>RnR)1YmjWkK^nS>N~Z=znTb5U(|~Rj0`*$r$t|Q&I*U z3)i9m6-(`=SAp#6sdIX26=r5-49XmmZ3<1$6d0J6GBgVcYoaV^jv3F;yb>5GLm!pvd+Uxs;7oyT(F@{Su2*83|3Z5C^fdI%bE#)ukhimv8RP+*=C~7ic|8tte#EK!x zP!U}@QduI#A^b_~L0Capt3)a-MKr=}F|JCab)m&%iqiC`6ry+uYt=}lmx!(!Y28{( z)6h%}E%(8-5aTO{Dv3A0M#X>{QC)5Q@gi*x&YblY}z-|sHEeaag ztsi17X^XUSqKr?7d4FjU)6i}%>n8FV+O3`4w1$g{iIqdF{{+V#D=w(U1#s*!)dFiJ zOi;}pD%=-b3#6IFp=u%4<={A~(9@MeEVsagi1Bs8EgdjN-W0Ljo4Fu@4N2~uhFHrzl#lo_jiXtW; zQmH8N5LOZeYG?~&JVp)k5PFLOHMBKmJO*K9k*9_QYG`W`=~7uUS?yr6PZg2ZBvPp& z3e?aR6j`(i3>EwRn<-UAUQi^$0yVS+M=CxdMh)}SumE8-VGCgxqlS41tBV3Pw1q}0 zHAIXW<{_*p3e?aR#&`_ES|U#k3)Ilol#&>PwMCv97O0^uJW{D6V$?7XVO>$6hPGym z#~`dH^3<>ZVSQnXU>Jk2fyh(C0)!2P&CW1J4f7ECiUKvXMMf%qB1R4K)UW_yBVmhT z7^8-HYFL2KU)Y*6j8VfpH7r0FAZ#rd#vS7&Xj8*jN;( zp{-S5C0yjGVFAKs!scKYqlS4}Slw>+jSvM6yCn;AH&UGu8xi9abPVT-j}mqWm2wRP|gqW)sPSGcu)q&6Sbwbt4f9OrQnQKm|W zbs;!5pnA}92V4^|-aFjv8zl#nwx~_46k`51O2pK(Tg=T(rXY20 zhaeWKs{8?B%vgkz*t!!Obuy`35iAnyFN&p0tm_4FJUcBAfKiU`qGZ5I#d%XiQ-P-_<#I9u2M2Ic-n>6`a4?5LSIlZHKWOry_=t3{|tQ#4-%i9NL>7%TeDy72Fvn?AtEvr?G17Fa zGr_Sxp|*F3WidE)R9mhhrh3}qhi$H{*k3!``Zi+daBb(XZUaXJ)uCp23{LBT)^SE1 zPQ2>Ys8xSz-UOlPGx0ZVB%UgLne5OrCv0EOIr$Jx=R{|SQmi9dV`}4 z9A~`&PFq6QsN7pqR68Pf1;@#OwZJ>XJf^pZ z8DO`}NaV7}9zKYeUF@$GZZ6eF*aq6IaquT=#$t;}^9eY*R9jcR0mrV#`KC^Y*_I@1 zX?C+CNyMbtts|2(ZQ=adA=VAxSPRO5`yHItF|;c%*+}Cs9SJUq3RpKFMoqQN^hUC< z`Pi-XQ#50=nVt+T*igXw1vr|GwK*unye~!AGVIo;5OUyXi*kL;2iA$5tV)QvM_*BZ zEO`*>%#I9U8)i3;%MdZc?3TkB+*tPyYgROqvmIfkW5qjees${#5eh$Dj^ zDf454Q7Lv3m15^mf22(B%$t_{bp|NFo}m6nsQ{K!Ro+dNs;3K;$Lg%o9=e>A-hKyQ zxg3B$Qug9_zzvuNlm-?8{4Lbme<9H1Do>X!(fL==;z(Pqr;{@OT7U|y2iUcn0sab8 z=G&%9;eSSG`F34EN`8kHQBODn%7)GY{GA2Z;6;EHUIzI4ZzvnS3Xon0_#-v5|8J@hlj*ij@9OlPPVejV zH=RDz=_8#!(djdtD$t${7160hr^R(@)oBUPqG;b#8WCFN4$9xFC_PYKPbX!x0s_ux zA6-t$Xf>TLOsP-}T~5kqO$51&)Y1jD$>8@YS{m{oJ)M+&*i@&HplqPIo=(bW3!Q%z zW%)LWKK~F=f28z83@Ako1gtog%uAH>y^}6~6=k_Ddikz;zQVL5(vuYWUyW!DCL<$V z-5-=?QuTtQY%oLTNg2)5sqtu>lnrMyQKyU!(en+}<^$Qkpv%)C+VOD79Ltr;}3KwYq!* zD3dla&}gpeht0Zxlof0PrGIvSGHEA+*H9|3S5GfYT_FEnFMn81FHFlL{Te%#72MG? z-qq>PdI3@@bRU$KKh))*YM9;|Ey8Mxr z1FZ#01si}e$(Mmn8Eu4s4fyMFQttO{L8(wXT~5j!rnk-;G?x+fQ3@z4>Z@lUWd#Ft zzA$CJfx4WOuFeK!J;Okmo}<&@p!jDRiGY^VVAlISgp?DoP9XBi$ABM?D`YEkB|2r1Z#H zoqr|e!t$yFR&-7;_}@?#xuBQ(ca)yIhJ4LI)yV586}gU#?4sX5$v@B=AT28Pe^^2M z@}Zl$l02gXIf}s3q{ZoRowATs=L=JcO6qb_<|_rtmP+f?O_#favflEb{E;$Wg(CVE zfr#4674?KlpscX6&Q}37ew?5L(@W^_!e?oS)H%Z<6#zEGxy4^$%JLQY1_ggST(iJm zhiW*19{cN1y%}EMkCa1W8yWomI#mC4sQ&9vjnlQZQ2ceMR#%0;4%L4hs{cAv|8=PT z|Kd7(ds6w;PUwdjKwCo&)bR zjGNb0%>Bw$+yv(dti) zgO)gy2(cF2F>sZaI+RF}y0ohpJI__@2iIJ9E$b>m=evqg%N%&gX%Dz7;Cz=ml-43= zc~>!cfvY$Lu8pX-0`@J0eJdPFv^Wm#0l0{j4#gqHt%QAxU>~?x5w;5UErxxo97+dq z6`acw*tgoDbQDuo!#;3Nz;zPQ`LJ&(?8|p3UBp9hp37k08i&$V%v%Hdz`3q;w0vu&#rBD`4L`hms)Hf;$GT@_L8zmPlO>`&Pm}aEZce1MFJ``!+a~B(VqF z6>z>A9ZHJG*$Deq!#;5RM7>S0FCX@8aww_dIJgJkA~rjefnwZd*tZ7ufg2>kw!pr% zuy2b)$q-k;xvYbITOG<^F=Z?41NQ`6wus&a`_{w0Z4SIz_7I%s2H3aVp}ZsJZHIl} zTz5E>9MOFT?Ar+Yz>N^rov?2c?Az&3Mv1lHj)ANEjYG*5so%i9&9D#Ld%|lM?ArqS zb~%*y#U5~1!1?ZWC?ATP-LP*f>;pGO)Y}95w!ywV4rQD;4(jQ z6e;F?3;V#i9&jjAME3)*Z#V1%H&s{#Q z5?;ZQLobUGzyv&#LJ?z^D`@nrI>K%rC`(fW;-p3L|;G;o`Ss>9LiDg5ZrEX2^Ss8aWU^A>^luzesU-$ zME9Ry-x>5LxKqM<3HE^-bjhKd5o^JXJ&XRl>`=~$)XT8%9QqU71>toC_JJF9#laUW z!A(Ao{=Di?E{mM2u0Q!3zti<@P@;D*CeiiT?01uro(*CB)+&AFZy4GjbQJaM9i&t;duo{-g20KGl}29 z?gpE1+hKla67z4zi(yw`<{gLmkxBHp6EEssgPmZXn1t^Jn}UD)}XLn$M!f?ESF_JKnwE2ca^PyP%m z!Icxy57CqNVB|xGQb9Zfw;No-?+(1WIPZ7#CeUt!-9hf+SSL)S^;73_tRj)R-~yQ_>)!1~H@3ixi1T;)yjjbxY^yvt)(In4|{Kwc%k z27GK0@Qvk^BH;T!ag|TV2g&H7;60zZ%0)%NhscNIcY{x`fDe=NEZ~PdbCs^ez=zB3 z#gwj->ME{sBl!qvEe`$|_(8?NN6NL}Z{(1pUh@uK7>AlmkgEWz;pMLv; zdnq3$Fx_~r$j1j^6yV2ai;VJVPz6nvYZ|B*=I#8&i1U}G%lK3#P?rtTWxU-z1K=-R zmr=RdsziHm$s)WRJ{O<@#=}cK0pJrpwnaavPi3ib2pBe&r3%&mqhSg|oIgI{WR%Z^ z*HM7q5M9PM9aaKVfKNJ^uMEJK5}5yO23=OJYQ51<_23fO=WKrx^*@;*lSC%{eMHgE^{8Mp_W1x^BI z%(>cwEIw;G5BQ+qLD1a*pU`~(d00qM%m51{?){95@YJ04@TT6xeeJk>SvG z1TYeKPYxcVRL$jUAABL98;}4b0<(ZQz}LV6U?H#w;1aL|s0;W50RWePCV)3k1*i&e z!gN9td^QsYv;tZJe0as@SbPe`iGye4x$0|OzF-;wb%44+J)j%F7oYf`bq4S+fDdma z&>juM0Ud$A0U3~G0{wvgKq@c|WoH2YVjaLtU>3l&XdW;hXvcBc0hv1joq(>un*d)< z;mZ$wfkxmP01bhXfGbc6;6wV`0N*Ak2P{N|i-5(zE?^J9w`|6Pegb?7OaLYVp8*2+ z2gl_k;B!C%lYuF~7r<12O9@v)zUsmE8rA`;fdZuM1-c*}4+H^R6ny}`eZ|F)Z)@SRSfbIZafEfu(hXQW{?*IdUACYzfI0>8r z4guc*tALs)a|hUmI9K9KpcxPWY=Dd}f$;T^aX=o|crLvTFztY|h@S(_0~dfZKrP7c z0+B!z@GVvh3q z&@I4Lpe?W+*aqwXGPyb6cjZGa>(wjLI(7}G_yC|cz$09sBJCe5Kjd-@MIk@ES{vYA z&Vg+V^7@E31R4OG0Db@`K~o?U2nN_2fj|JzSf}ir5FiYQ0K$Q0fU$UALmYMFs^f?* zr*Rx?mjNon$~gdCp zei!f!+BbcK2pi{MW5aAT2FL?gF)RE6NB~$NXUb^cL*N5|>&E-Q-+}i4CxB{A?*gNM zk-!LGIFJJj1Kt7N28J*r8_otg0&Ju|kOCwFJ%Ko&JwT;6mdXO`_BH@#M=a0|Z~#Uf zMmd&Y{tf`+lrv8!;BP=~7X+Pk0W0B*;(`_rbOU+-Zvre#^a0)idI5<*Zy*VvjBzT< zeEopF0PCdkG?H?|5Yj9e6955E(tl&U1KcW2Le4?U zO6UcDfc2~bIKr0$94pfRcFmW-T;OY9HbA4N1G%#h)CXn){{-p+{{m(JUjghAHo$?y z!gGK{z&xFw54sRo02Bk30ZRdqi$=mDm){3c*CuoYn1c3=mKa3+xB>0S9z^4|)jr4mb=P1E|Oe;71?;ppxuw)^8|D1+D>$(EcAXTrQN! z@B}Nn1pEX{1ug*Rf#U!xVnb(vIlvj<6z~?n6|XGlX@F@jcjGsZ1yuu$8yLUjnG;9f0G;@WyY5BX6$BqP%bmEq)3- z23i6f&9s<{k!1$piRzXFAoVqT*g?s1`h1OXeS#YW;2#M#g; zfQlGeD^Qk|G5>Xd3Ys8$213P)B3=YA0~Nuu9LLtno-w-iDcb+Tj#dH%4XdeuVWkan z7oa%svbBasc#LCT8(mTod|{V!rc{TF22=tSpt*cOngfF_p;kPYaJ!{7tcX^!f7t~* zg_i=T1P50rWK#f^qtaBCXH3Ie9*EQWvY>3#9n^6B1n}^3u4+A9%tp!}Lt(2&L&nNj zm<0{X*my_qUdZnWQ~)XhM#EHSD&PYdkNndRr;#y0Pk_gNUItWF;C~7YFtHjET7en` z;t)5k8?GVFMtE&OrJ?{T#`7c(Dzy=($LI+vY2@ee&@h6^F>f8_=gBt!Xao#GLPO97 zKz*Pda2YZ`P+!1b=b0x$&&zaP5cLFjfy7fbPurb=PC#oQ3Wx!C7Htc31X=-hAU6(y zJ1XJnHyY>wv;)dR77pqFc=qJ6Jrv*pmB;udKx3dJ@&$t$4X_U8_kf%Yv%xk16=9<- z0oKt1fI_*d7Hpi2@%YU`OHtTpj3??h0A5YS0<6er%ut#Y@(PQ}QgPPtCcwOuvr#JD z1K=ejEoa#-?EmhFFf%h6iL|O0c#iNC(EdPQAQ2!>c@k(JAX(=PSwEdm)#*UcG+;H# z@B%3lNCyT18SG;U4M7&-yqaQVgy(25_|-fr-KQu$JdLk(6!~n^dyV{mz3QR_`2~de z1;_zY6yIuQH7^2=Ni6+NXA*c?10d{F-PxAX7e_(x(5N)yzA%1=wzsft%6ZU|+NVL<0oNBShx zu7nH$evO&op=>@?Ie>e+WxiCrlsdA(muT?1d<&$~42wE!oUY{`^tki!*->gKD2Gi& zE@JlkGIl!1Q+bYD3HhjyaE5F&4J{kru&eC-BzNNc%X{=X0^nwuG!1QO`IH)R8L}HS z>O!sJAme*?ck;(hnBwviZsw6I=P6o!GVY&BMOo@ArJ}jIO)fsAc$yp9Wac{1 z5S#4vmE!5q%cfp9I;Vf-{`QiMspUPCmNuF9mEvRm)+QGshq*!t`OQ~Kp!b0i+KuV> zj(giDx~<#=ZGyC3`>}-dn5j6;O0}P$D{Ji=ZTrfrV7mv}Z-TLj_9wc@ zm9t>2@o~RCgKI`al_L*U%XF0WHa=~Y zTKDOvZvA_I_oD0=clqUaXhpcocXxo!aF?a#f-Z8GcTm#2&i(T>AiLb<$fKY~+@<|% z(2MS}_dL*h?s5}{g}JOu-w#^0tXxca&9ZU}@&y~8G#oRwSn8S&&VTx%;a3eH?Tc`R z3VPi#YOd1W+{8mppkBK7yp3-mu6$VK#|h5qYfy2BUqAq6t>H(*e{DVF>60kg*+cgF z0dr3?NH-uj5gS8kEE(n8maQNDY5HW;gNel+H9l5&eZYv()~3P#R9gt~!z|K`^md{w z_A2KOp)E5$h#BX6VccgPa{6(!Im<&nhC95CulEi7ZFLj-&n?EhsOyA>^q&t$C6!bE z52sVq$xZBXtNjBtM<`c4<4b_O=9jL1%jX@Axe&il&e@sefw<^)^08*saI=@oSV-m=#9t@#Q~X zfXa<882WV#*|W1{d#-GH^Tsz0uhsqA))_hXKGB->ht8+U%l0g5d=;_M_mlfHoBNMW zFUlILM;xwEI-azgPahBXV{$&@oF%k-4aWzfL*&}R9vm)g}G+ji@V(z%}U z)_n_g%X{9Gdp^4g1)cCXdQzfdWE!$01}_dT=6wSBsBcFmD!6^j{LjqsKy7h~J< zmTpU+x3~Iq!};fY#-~O9Y|&^p*=q@WWPBm9_4cHs{dMkTp^YGIPmZcAKU?zZB{RSe z#{+fAJc~MlU+3pw)9X_*s!G45nC?|&+odqXM~(zn$wyma9+pWN__WFXDXPI(!JC+x zSCdPTA*iZ)Q`ebuch#{IksIDc27hQ9*u)g|nxfA~#lO+AX>}agF%5eizvI__M#XWc zRiB3O)n&V7(Cf7WLmz5pW6;0aU=ATIr-u*Y|1noF<{DE&dM`)gHMDP@USE(hd-`|( zTy1CEp%QFPfXks*xstT zHHeGX{F?FxYp5xUtxy`jW*lL2G#)EwOg>Qh-LdVYn^LWob_~?}vC?ZhW?~(AdKD%m zJalITn)(xKU-^gBf6tcsV^uF@{;yIOul_^3g_W#SN4*|*j@r=48NPMQDb?ix*s>eH zu;QhrUt(XX9BlcbAttS~r}W6j(aqR0|FH4Nkw|*gIYvK|b##@>^Oe9q?3P}YFc(Xq ze-B68UleG*M|JfBnO3)_Y_~>f^87^e@(vsnAP@2op`9hXjjs&Hta^6#bkDP0UKk%0 zAgioJ7gm;`YcXd7Wg56j*y(WCbVl6UvaG-@sK1t-C#r9a1|=3R7<~rzHP#2>+<^V#><0K1+Vb@BXPr8Q z%1?IVTB+eirBYCsHVvzq&-dzh>sBV3=ZPC0dc94f!sN(}XaGeyYPxnj9Gmd-o^vlW zKNlvKZdCfcvhD!(tnr;*%jHSI>5~_id{J~xQ`v5l5?d);yQpYX+NDp`i7T!l104#r zlxA|}CZ*lWqv56FwO6HPS_MnCe-+)ij?Xbvpl`Uwx$#&tIh|J}#u4{IGx^3!qb?-LS#RWq|n8y275%~1z$1i4tb4A5C68V${{DyGwE`=sk`(o4HF{f^aN$7P%S{JIi!62O0DpF}}l` zl=*I4;@B^Fj;DI?=4fpdd-Wy#wOzQRU))A!9#+a(V2jp{y4yx!jWCYKK8^jtUbiB^ zE^S3=tf)$Q${%-Qd%~>vb+-~2Y<%Z=*hfP)mc8-&cqpdN#MfI3m3!^M5c%^py;>G} z8Y{J5j9iGE&#$tF#K^OIuu29?zXFJjLGZ^tvi?Eb{#aZ9C5@49XC2z0X zG-5wp80N=Y1ID$qvBSM|-R^CCv%2h&>VC79P2HrG)V`a0$ zpoSI3mA)~@Ub5!7XA4a)_0GV$SZV(jYlrbw?OKULtH%w_nueD3p=^9-yX}pYGkae9 z8n>@FPeC7OuXRD?^@+`;QPCp1~%M;e3KiuK5c9EM7!#7`akx@s`p5BhP z@p1Bc;j_Ed?s;FZN3_YJ-;oP8K6Bnb=&d=88s40Q9Jp7&rSgA&*D1e?bo&8*c>P^F zy)SgF|8&PqKX!N;*NBYXVHXNcc^qfim{35=64iZq0#e3 zzv=xX7avvr?rnVEz2{F)t`GmXB=3jlE-;*Adtb^Z}Mj`7+0@Vu{123C8>+cr3cv44#Z+Ydic)oovrFSk#)nvVi{ zb(b4{#8JcWtFe$?>@Mvm(9g!F?ng)49W#F!`vfI%KazJAv}*-*$NZQ%Uwv)P>8#z@ z@eDRTk6-e$)}70IaIDRX`_M@})CWq=h;Ll#c5>OZ>P1RU4_S(LIdLPXC+NRvMbE*V z8uqC=MsvEv1YLkK*E+5CFDlX}R8rwUz` zz4Ro(+jz~p%Aj(eK5CIrfxV#3L;a4o@vPzby=Z+ry!xQ>_GzWFF~^^8K1OfpHOjy< zm?EJGvi%t-b|FE|IEzyathk*Z51xUY#@`QElDgo?zOtLjQzwi`TqzlUVc_Daj=NHC zR_>*ysM8SV#45OdA8h<>fg8y^x}0jZr4@37YUA1X>jMij0#>HoN}7%oeXH~6Ez@}K zU#~+~$uszs&l%Li+Jyvdw|J7KEX}Om>POV2KY`HBtAXB|dTWP)4?4J{H+z3d53|A{ zjP=5_x3_F|4rAj79d1zcpSJ&o%SO}?%xmQ_iE`lu zXf-KO{*Iiu)AQ+7rF>P~oNL`jyWHs0{p}~vAh+m_d&TX+j{NopO#SM~+S(ot_Bfhxp+&(>P{R-4YpW|ofrPF^? z*Nk-Oe;pn)a%z8F!sMLSqvNxk7x5qa9x>?S8YQflV!2{L!~aY^i(;@f9v-@f@3e#8Hc`y|=yBAY%?>dR*j6&JZS+3YR1JiuMA pqsit*6{55k5*nqX_e)Jr$@azHNy|>nNS7y*&GqyBQ_QE#{{z30ZlVAH diff --git a/back-end/package.json b/back-end/package.json index 4b0931a..d940fcb 100644 --- a/back-end/package.json +++ b/back-end/package.json @@ -3,18 +3,18 @@ "module": "index.ts", "type": "module", "devDependencies": { - "@types/bun": "latest", - "prisma": "5.19.1" + "@types/bun": "latest" }, "peerDependencies": { "typescript": "^5.0.0" }, "dependencies": { - "@prisma/client": "5.19.1", + "@prisma/client": "^5.20.0", "@types/express": "^4.17.21", - "@types/jsonwebtoken": "^9.0.6", + "cors": "^2.8.5", "express": "^4.21.0", "jest": "^29.7.0", + "jsonwebtoken": "^9.0.2", "supertest": "^7.0.0" }, "scripts": { diff --git a/back-end/prisma/migrations/20240908141853_init/migration.sql b/back-end/prisma/migrations/20240908141853_init/migration.sql deleted file mode 100644 index 0fc7a5f..0000000 --- a/back-end/prisma/migrations/20240908141853_init/migration.sql +++ /dev/null @@ -1,10 +0,0 @@ --- CreateTable -CREATE TABLE `User` ( - `id` INTEGER NOT NULL, - `username` VARCHAR(191) NOT NULL, - `pswd` VARCHAR(191) NOT NULL, - `email` VARCHAR(191) NOT NULL, - - UNIQUE INDEX `User_id_key`(`id`), - UNIQUE INDEX `User_email_key`(`email`) -) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; diff --git a/back-end/prisma/migrations/20240908142435_/migration.sql b/back-end/prisma/migrations/20240908142435_/migration.sql deleted file mode 100644 index 7a5139e..0000000 --- a/back-end/prisma/migrations/20240908142435_/migration.sql +++ /dev/null @@ -1,2 +0,0 @@ --- AlterTable -ALTER TABLE `User` MODIFY `id` INTEGER NOT NULL AUTO_INCREMENT; diff --git a/back-end/prisma/migrations/20241010152336_init/migration.sql b/back-end/prisma/migrations/20241010152336_init/migration.sql new file mode 100644 index 0000000..fabebc4 --- /dev/null +++ b/back-end/prisma/migrations/20241010152336_init/migration.sql @@ -0,0 +1,13 @@ +-- CreateTable +CREATE TABLE "User" ( + "id" SERIAL NOT NULL, + "username" TEXT NOT NULL, + "pswd" TEXT NOT NULL, + "email" TEXT NOT NULL +); + +-- CreateIndex +CREATE UNIQUE INDEX "User_id_key" ON "User"("id"); + +-- CreateIndex +CREATE UNIQUE INDEX "User_email_key" ON "User"("email"); diff --git a/back-end/prisma/migrations/migration_lock.toml b/back-end/prisma/migrations/migration_lock.toml index e5a788a..fbffa92 100644 --- a/back-end/prisma/migrations/migration_lock.toml +++ b/back-end/prisma/migrations/migration_lock.toml @@ -1,3 +1,3 @@ # Please do not edit this file manually # It should be added in your version-control system (i.e. Git) -provider = "mysql" \ No newline at end of file +provider = "postgresql" \ No newline at end of file diff --git a/back-end/prisma/schema.prisma b/back-end/prisma/schema.prisma index c8348ba..ff5e129 100644 --- a/back-end/prisma/schema.prisma +++ b/back-end/prisma/schema.prisma @@ -9,7 +9,7 @@ generator client { } datasource db { - provider = "mysql" + provider = "postgres" url = env("DATABASE_URL") } diff --git a/compose.yaml b/compose.yaml index 1d8ce4b..cf99b86 100644 --- a/compose.yaml +++ b/compose.yaml @@ -1,9 +1,46 @@ --- services: - app: - build: . + front-end: + build: ./front_end + restart: unless-stopped ports: - "8000:5173" + environment: + - PROD_URL=${PROD_URL} + depends_on: + - back-end + + back-end: + build: ./back-end + restart: unless-stopped + ports: + - "3000:3000" + command: + - sh + - -c + - "bunx prisma migrate deploy && bunx prisma generate && bun index.js" + environment: + - POSTGRES_DB + - POSTGRES_USER + - POSTGRES_PASSWORD + - POSTGRES_HOST=db + depends_on: + - redis + - db redis: image: "valkey/valkey:7" + restart: unless-stopped + + db: + image: "postgres:17" + restart: unless-stopped + environment: + - POSTGRES_DB + - POSTGRES_USER + - POSTGRES_PASSWORD + volumes: + - db:/var/lib/postgresql/data + +volumes: + db: diff --git a/Dockerfile b/front_end/Dockerfile similarity index 100% rename from Dockerfile rename to front_end/Dockerfile diff --git a/front_end/src/files/Profil.jsx b/front_end/src/files/Profil.jsx new file mode 100644 index 0000000..2c244a3 --- /dev/null +++ b/front_end/src/files/Profil.jsx @@ -0,0 +1,3 @@ +export function Profil() { + return

profil page

; +} diff --git a/front_end/src/files/Sign_in.jsx b/front_end/src/files/Sign_in.jsx index d736e15..d22121e 100644 --- a/front_end/src/files/Sign_in.jsx +++ b/front_end/src/files/Sign_in.jsx @@ -25,6 +25,7 @@ export function SignIn() { const data = await response.json(); alert("Login successful:", data); + //login(); } catch (error) { console.error("Error during login:", error); alert("Error during login: " + error.message); diff --git a/front_end/src/services/AuthContext.jsx b/front_end/src/services/AuthContext.jsx new file mode 100644 index 0000000..a22bc0f --- /dev/null +++ b/front_end/src/services/AuthContext.jsx @@ -0,0 +1,25 @@ +import { createContext, useContext, useState } from "react"; + +const AuthContext = createContext(); + +export function AuthProvider({ children }) { + const [isAuthenticated, setIsAuthenticated] = useState(false); + + const login = () => { + setIsAuthenticated(true); + }; + + const logout = () => { + setIsAuthenticated(false); + }; + + return ( + + {children} + + ); +} + +export function useAuth() { + return useContext(AuthContext); +} diff --git a/front_end/src/services/Router.jsx b/front_end/src/services/Router.jsx index e4d9bdf..1328af8 100644 --- a/front_end/src/services/Router.jsx +++ b/front_end/src/services/Router.jsx @@ -21,6 +21,12 @@ export const router = createBrowserRouter([ { path: "/sign-in", element: , + children: [ + { + path: "profil", + /* element: } />, */ + }, + ], }, { path: "/register",