From 174bd714139d484de9aa980eb87181869564c56f Mon Sep 17 00:00:00 2001 From: ebby Date: Sat, 12 Sep 2026 20:34:35 +0300 Subject: [PATCH] tests and fixtures for clean test env --- .vscode/settings.json | 7 ++- backend/dev.db | Bin 12288 -> 0 bytes .../backend/__pycache__/main.cpython-314.pyc | Bin 813 -> 992 bytes .../__pycache__/__init__.cpython-314.pyc | Bin 186 -> 186 bytes .../__pycache__/database.cpython-314.pyc | Bin 1256 -> 1256 bytes backend/src/backend/internal/database.py | 3 +- backend/src/backend/main.py | 6 +- backend/src/backend/models/__init__.py | 2 + .../__pycache__/__init__.cpython-314.pyc | Bin 184 -> 260 bytes .../__pycache__/comment.cpython-314.pyc | Bin 1592 -> 1783 bytes .../models/__pycache__/user.cpython-314.pyc | Bin 2099 -> 2119 bytes backend/src/backend/models/comment.py | 10 ++-- backend/src/backend/models/user.py | 10 ++-- .../__pycache__/comments.cpython-314.pyc | Bin 0 -> 1173 bytes .../test_users.cpython-314-pytest-9.1.1.pyc | Bin 1705 -> 4928 bytes .../routers/__pycache__/users.cpython-314.pyc | Bin 897 -> 1552 bytes backend/src/backend/routers/comments.py | 22 ++++++- backend/src/backend/routers/test_users.py | 54 ++++++++++++++++-- backend/src/backend/routers/users.py | 16 +++++- 19 files changed, 108 insertions(+), 22 deletions(-) delete mode 100644 backend/dev.db create mode 100644 backend/src/backend/routers/__pycache__/comments.cpython-314.pyc diff --git a/.vscode/settings.json b/.vscode/settings.json index 8c125bf..7d9bb57 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -2,5 +2,10 @@ "cSpell.language": "en,de-DE", "cSpell.words": [ "Chiara" - ] + ], + "python.testing.pytestArgs": [ + "backend" + ], + "python.testing.unittestEnabled": false, + "python.testing.pytestEnabled": true } \ No newline at end of file diff --git a/backend/dev.db b/backend/dev.db deleted file mode 100644 index 5cfe6803fad6d43e54ce807bb557f87eca8aec1f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12288 zcmeI#F-yZx5C`ykiBKA_?bh{{Km+39;A&bQ8jLSCCSnIEX%pc=+ejOwYu){({RB>u zA~Y4dbrAXgrhCWTy~o?`zVGWIKxakY~>n_nz8S?2 zZrHnaLsmh=D)#*ow(2@%Pet-d?xvG*q2Ds@27xbKwbOAIdbe&k;2SyMj!qrRDR*;f f9qNYx00000007`GvdTwc{|5j700000_}9JwBTZr9 diff --git a/backend/src/backend/__pycache__/main.cpython-314.pyc b/backend/src/backend/__pycache__/main.cpython-314.pyc index 221f8aa3218d8e8e5d551f81bcce74666c28bb22..1f02bd32516df250038db52df4e3dc14aa3eeb20 100644 GIT binary patch literal 992 zcmah{&ubGw82u)@ncajog;q#^r!`gxLUXAgQY`f#S<$klSJN=N8O^qv-F0T7^cMAC z!HYfhFYwTR!@Gyj(#Sxtq8D#1`3GduY}bqUPVf6>-uvEs%$?kL769Pu!ROsC2;iqG zV(23>un|B9cA$zZs33s~u!E{8D^<~iR?&rCP-mKzu3&+OT(^vhDa;{HTSg@#G6kq* zmSJsVDYCV!osS14sNywrRaK3Aa(k?1{-qtSW$lGT6QictvoTK)`xW3HD*ZpIiDjrE zdns{@Vc(2d0(&LlG2%BTNvdWMN}1p4LJ3K8``MGHVT1amluWldWn7wW*lN*0@M9!z zxQr4(>kX$)f<|2s$EUo6WMvmp*-_&ob57Dosg~zw%pZ z9ZW@*1{=PSGxZx;TD4|IgI2vjP!wLt`N2&c>#N?s5yNaQi)&oZi|ktmX87}V)& z8i-*6iLabx&I??>-JtbRosO6n2x+#cAj(+ctDQ@IkM46erc6~>mQ&8=dMj+SefogS z1Ay8re+K{;8bYWK3*X^ZAMW>Ip$~JHV_@XodmZf@=^y6b&L4OuX!+G(rR@M>D5Nk7i)fEb=qN(@d=rp9d{uD0woi40UNS9W>QHY{=9q zsRc8aNh*o%b2|0EDG76R-Jl!LwJ)(mmw3eWkKG2d9nbExU9R}9#d`OI5v3QC8rx9- zVF0c+dEjRtIS4E>(K*s1oU)GZSs diff --git a/backend/src/backend/internal/__pycache__/__init__.cpython-314.pyc b/backend/src/backend/internal/__pycache__/__init__.cpython-314.pyc index 16a96f950a85f637c737655c2dbdf3c32d646d89..e8e4a826e996537f00079fa5a7daed9f3ee74764 100644 GIT binary patch delta 18 ZcmdnRxQmfXn~#@^fq{WR+kYb01^^+(1C{^) delta 18 ZcmdnRxQmfXn~#@^fq{XcPkbWR1^^<}1Hk|Q diff --git a/backend/src/backend/internal/__pycache__/database.cpython-314.pyc b/backend/src/backend/internal/__pycache__/database.cpython-314.pyc index ab0bf1b28b5cb34a4ce8d2352dbc6a8dd58d0725..b6681d4ac5c8d1051d7b255c38fe77d62424783e 100644 GIT binary patch delta 43 zcmaFC`GS*6n~#@^fq{X+tZO3|KNBO*WGSYDjQo@DF#ToZpL~n?2IGUtn^{Z&=nD*d delta 43 zcmV+`0M!5J3Frw5D-I0`00000m=&=K4*~%TlNtiS0S=Sg0{sCFliCB=0oaqX1U2RB B3|;^L diff --git a/backend/src/backend/internal/database.py b/backend/src/backend/internal/database.py index 16820d8..de12497 100644 --- a/backend/src/backend/internal/database.py +++ b/backend/src/backend/internal/database.py @@ -2,6 +2,7 @@ from collections.abc import Generator from sqlmodel import Session from sqlmodel import SQLModel from sqlmodel import create_engine + sqlite_file = "dev.db" sqlite_url = f"sqlite:///{sqlite_file}" @@ -13,4 +14,4 @@ def create_db_and_tables(): def get_session() -> Generator[Session, None, None]: with Session(engine) as session: - yield session + yield session \ No newline at end of file diff --git a/backend/src/backend/main.py b/backend/src/backend/main.py index 8095601..e9892ce 100644 --- a/backend/src/backend/main.py +++ b/backend/src/backend/main.py @@ -1,4 +1,5 @@ -from .routers import users +from sqlmodel import SQLModel +from .routers import users, comments from backend.internal.database import create_db_and_tables from fastapi import APIRouter from fastapi import FastAPI @@ -16,3 +17,6 @@ def on_startup(): router = APIRouter() app.include_router(users.router) +app.include_router(comments.router) + +print(SQLModel.metadata.tables.keys()) diff --git a/backend/src/backend/models/__init__.py b/backend/src/backend/models/__init__.py index e69de29..c27d1df 100644 --- a/backend/src/backend/models/__init__.py +++ b/backend/src/backend/models/__init__.py @@ -0,0 +1,2 @@ +from .user import User +from .comment import Comment \ No newline at end of file diff --git a/backend/src/backend/models/__pycache__/__init__.cpython-314.pyc b/backend/src/backend/models/__pycache__/__init__.cpython-314.pyc index eaefbcb7ddbe0ea4f4e4786b9f264202ec5902af..63e9ebfbd737b52d04fcd124e4f83c8451961ea6 100644 GIT binary patch delta 165 zcmdnN*uqq=&Bx2dz`(%pI%H{P_jJMdG^K)}k^Gf_QS#GhE7N-^!F*7hQ t++t6L2p6$1Ffgo~Xqh1kvLB?kn45ut;R7=xBja5LvHJ`%MH~za3;^4>Acp_| delta 89 zcmZo++QDe4&Bx2dz`(%JExt4hL_Y=*Fu(|9d}d={U}#_nVo+w#Wb|9fP{hQ*FtI*E XoRxtAtfm;m_{7Y}$XLY8z`y_i8T|`e diff --git a/backend/src/backend/models/__pycache__/comment.cpython-314.pyc b/backend/src/backend/models/__pycache__/comment.cpython-314.pyc index 3611c7f439908d5a3d57d921133634b0e164bbca..e3d9eaa80284d8157c1e6eb2622e49349802215b 100644 GIT binary patch delta 1107 zcmZuwO>Y}T7=C7F_RG6=lQ$by;2$ zT7)&1<#nN_QKaw6&H&0f@RsbOyGGs=W*Q^NfE#1rW>KG^y(|$ML8b;C8w0nBF>dpC zmi0pxSEk@3-pHjxLZe&~o~YEkfAYjgRlbJyI$fkiT z42tTa-BWYYIN?fG=`li=d7N;XC4I(_%uK&Pm{FhD;^@f^J&Uq-BFx!wxg9lBxpvIN zi-`=l&W&T{)NNcQ+#EyI5Cc3W25&=1`{YtImZ?A25+j2^kdZO%o(smWSr|cg&Pu0!7+mu^unZX00`Mu)AJn`vaPL3Ib_Sr?tDm_ z!uM%#M6XXI05m@X@XrH$kB(tKG9Q|c=YKa&@3BH~mz}$mJupGYK@5qZM=K9k_So!! z1w!_1Sc7})%HMGi;tvAwEdT{489ZaD*>iGlRqi?CpOwM1bd%D_XByIa<7+=7mv2j_ zN;eg}VVCYtOGWbDKlFzrJN%!Eq~7dFZJ~2!^7-&@sTZkN!|gML)<>Ozkss&V1DV!* zCwV%^wiY_6^se!%{fqr9(N1MsZfE@L?)&ZW+15fQncn@joxBo!r%o(5b|lD;1Z!e@ zvr_-Um)|8cnqO6G@|E}0X;OzS1If=z_cpwG`C=4pUX&9KUaO9K8GuyY%mUb_gpe*K t{(#lRWEYt(Qe8~^Ne8-Y`j8P~KAt`VA?Bf`k=zd(KMfy2Be`gl{{nLO=}-Uw delta 979 zcmYjPO>Yxd6g_w5&4)c6=cD;FIPQK_43Dz#$6vVS9zHy+6wcHI#ai7wHdn84=f+;i`H_q_Y=2lwBMdp7H) z0pL~fuU{5kx{JF{0ras6Nj@s1D347|YQ9#{m7Zr^_fZi_BwYBY7|KYv;iF zilwYPW>J8&<{|B>by4R=fU*-cH4mAt+R~Akq8MjV@<(?WUiLqZJ&H3jXw_A-+vz=Q zZg~`oJG~(ED7MRW72IyN1CL_kYBOjxlH?t~%*pjzH-73if>tz5XULA$Xh3%4YAd^Y z0P5(Y3Plo1+jNvZhc2q307+7ldQlrYF%nIaqDW)KWaZ*f0A+DhwLdG;IIc`3XH97x zE9t6JfV^wV)UlM=z$(e~JX*GLrK7SNP!p1t;bmg$O1Iq(I_l=HmpliIfc*6ALVG^u~V#h7a) zO&Vj)_2!uCB~4n)m*LsbIkB=Bi*2622)RM5_f!}f074P%h#LzIfZjTQ|DWMk4DHNw z^}^W~rRc3Vy}Npl0?|Pl+39_8{=nfN17~7iti5+Z6i)F)e1$g|W|+GSS%wJ)lOe}& zf+5e4G(X9#z`*+zo?>fLwOYN?>8iR4Y7e$MKi8r^jc@LsVT1ggKZMgBP)ALYShp{^f9%)k!P08qAI>c9H3u{2``3n3 zxxeoYrq-f@nOnW-rDMDIxYgzzOiaa2!h7HI_(ERxBkReVc$U#`rgvop0K4m50Ps#H qq7e!soERZD!qNzfBjgSRQR?^a4ndSUG)=nn{L$Xb2bgpz8Q@2zVaMVC diff --git a/backend/src/backend/models/__pycache__/user.cpython-314.pyc b/backend/src/backend/models/__pycache__/user.cpython-314.pyc index ce1b3d8b2455940f8b44b940d348762d8d500828..69ea8e676ec4b2f68f5a981ff18374ddb9acd629 100644 GIT binary patch delta 726 zcmZ8fO=uHA7=1Ilo6V+4v$08owf?jlt(&%yHlZz4#FlDNu!XVKgNQWEN~=i=+l`8+ zPztFhDRZeO3q?>6R6KYSZ+f-lk_du$5|2jdQNAQaa1M`e-Z%5+y^ncoel+{~+d}~W zD9=8-v&(_+v^iLMtN69E)i=Yib#EXk+C*?vZSr0qh8~De9HRZEkx^P~n_w2~@S9J| zjJ=e@d`VXY6WS=3Px+BPpU_8H>ttviX(s$}mI z4^BE?mEDf(0QSpRN7WyEY&Jn<^|BKaXviB6X$tC7y_TqRz9f z_FTp6ElpKpT{|PMqm|f*e5WM>b2h7K-aL@RiAP0%R%3*iEet~pDQwCbN3{% z6xQbMX{sB>D0FYB=`2afqNK9t%U&F$Ghu=h!I}SJ3=>HZqXzwn{W8kffNLIf?4WDO zhkA0hGrO>O*ICJ>3adFMzm{5DEfky;&!td^PerO=8AdeoI3`9 t#<(^qf9l<-R9$7v*nCh2V@BQQV^eH%Y&-KCRMky|#W$D!Kw9Y|@Ih11CpISt()kSgd8cFRE z9p^OkEULW?f=DBph18|d*JE?2kThK^*+E=d!QdQ%gtT)gIqJKpsB@Y}&s0OJ#3gyw zkq-d1spT$fLnB1s|jfy#k#b-)W5SeA#GOJ^oIaYS3k9vBl7?bx_FE|JNndl z;;henu}41Zb+x7Esi5BLH_BN6`$nhJTCDnM0RAY$7{fTjNd|)$vu zI95tgKdV-)(-c=b)_CzSgMUfy1lQfSrvKQfbNqUFaRC6V zz3=YqXuzK;nMENJ=RW{A#6BF-M1u%YRa$Fm4PEG|)|*BnCvvGanp(pYW)=IIlWXQ1 z1yQJ?Yi`0ZoqV0t;S?OpS+I#soZ^l#ts$(g)n1tuei2UT7MW&UeG^?W%ibc+;#D~1 zs|YWJaFr#d zJjI=bLQQeMN_RMLV3Xv3h;0RTAvV#Ow?5H2Xe;Ck@nS_49klZoUIUnoNfl0NqcjBN zqE$1Pnsiwn#Xb#tcik}XT|uSp`o1((^8-=S*;49xHVgBi*yal6#>NIyHpoRrhXEIq z^~Rhs_9_774Bt*+f3K{Z436W&kAJJI{!-ccv9k4Wcv`6+HYP^#!S2!SN&Y9}C8b+O zt)Go$whEwCE6JC$=G22oP!_pi-FJoCcR6LMy37w;F5Dzw>Ti+-{&|?9FcSb%Mr3Tf zo*jP*Y)<G`Ja`OypXIMYOD`&X= zhqW{*u1*$~kJl%cuS_aSC*6m;kC)$kT;Bf2$}MPz=F>8?!h^M=wd1{0a{1S-H@^Sm VbnBgGYFN&7XiI-<23bkV{|5sI6bS$T literal 0 HcmV?d00001 diff --git a/backend/src/backend/routers/__pycache__/test_users.cpython-314-pytest-9.1.1.pyc b/backend/src/backend/routers/__pycache__/test_users.cpython-314-pytest-9.1.1.pyc index ee1f03b00448a971db329d1f52c3e555f5a9a06b..a17eab1d945167b8fb12526adefbcc6a603b0fa1 100644 GIT binary patch literal 4928 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 delta 825 zcmZ8f&rcIU6#iy+yWQQk+hPkvC7@P*Y$Q|xg9g!HC34Y_36=vzQ_6~~{juzBqrrn5 zOgtzFX8r>c4_r*VdGuoRphqv05cTLygC|dBmKM?PFnRO6H}8A%-g`T+oftZ0CJX@3 z3oq|JBS1x5+K^ku?rl6Dy80+Sn+OtpSV|nnQf!>;IRlfbSp-Q+a=7+V>qI_-^Si3UVVprb-Jt(Q|s5y;ICo?B# zvZ#y^np((>N#m_#RHJ$+?3w`U&@yb(>?A5XZ}v(>!aix)*xx)UHl6G|O4|LpMyO7W z13ICfebjW5#{Q>?%*uK;7ol;QC`R&Rct0)Rs-<+h*pkW~YQ0iXWv`Rz%jP6;rAguy zsF{P+!6SC9>{PiTdd`)4xn}c-u+Q+g-(2=9p5q2iqdvbL%{P79^Ya!vZ1j_LcFE|B zTI9DhHD$3yW5SGawGz(E6D?+MjLk%pYjyknE%DAvvW3`;9tChrfSr|>*sIu)Og{h( zfd2wws9&|@Ru}u3$}ltjB)u#CV5PXW+;pmeQ}?}Y_O4@WvI_uL?*xJSU^JBD>E&|e zo?TxVsWn#Ysy`BHiY?&reNWk`dkR}S)V&x1;AO-iYZ6*Dll=E6u8X(K`)5 o?6EKSA2K223-B19k=?=Y4tjQAebduhg{OTR>Mtcq2E#0W0N4tn(EtDd diff --git a/backend/src/backend/routers/__pycache__/users.cpython-314.pyc b/backend/src/backend/routers/__pycache__/users.cpython-314.pyc index 2c4f3397727b7436703776521bdb5bd528e42aa6..d95f89b9eedfc005576bbe8636da8b197ecf61f4 100644 GIT binary patch literal 1552 zcmZ8gO>Y}T7=CBhA8T*C&KGUcBu(6q!WQIBLL?#;QKd?REl`whK2Axk_3p&pvfg!P z#w6(}NJz8?L=PN#;J}3g690e;{Rf3aG>qy4f=h3Kln=oL&Dfhnox{%a&O7hUJkR^g z8%8b*0Fe3Y>pMyU;8zjEL+gSQ4gmXb8*EgD5@KjvV5O{-RHjO-mJ_8UOG=z5r%Gv- zmN;2Xl{BVFoGNEZS(cSJT~~5 zB0gAJTU)8jO;1;DE-Y5;rCaMut7|6WIkCR9>*6N!qtHa$D2EK!h|l(x2#JV^cw(Jm zF{hXDP8aGm%qkR9+Nnt|;wBC~DmJa2u4Wci%68OZnA}TQEs6={NjdpnAONm=n7YK5 z=ibXKM{Hs{YK5Me;Hf6T+x{+3FsDX&k0*bQL)XWYX9%XvD5RKjWVu3+t|%bnQvu*) zTDEipZY%Sj0C+0EDBMDIWTVYfHEm^6i33ZS1XF!3Vy=aFry?%N(=k1Tqyc~kFPVs^ zwjKaX>M zhKaNWxdMU+09}_Y`AyG1)i3|3Uw*WEpufJqc$`QkXOFb}=lTQv;o_k-EU@vw_(>c3 z=b1kI0u-5kstx_14IOHio*5&Dqtge*%oA zcq+MYO0NSVW0R1)FoZHF?a=}T_hpmzf&aO=3SSH!z+hyOs=fJLbk zEeg6)JLz#g9H;$|VG=q)(Q}wnbtopHk0c{Cq;~^ZE}sMut>meWiFu+KQ6}~I28b|h zM?dYIM&z{u{4RO3`(UXL0LLmq=+6s)X4_C`gV}~x+wfW&X4){)hS4^R{gUZF(g%*R zefNit`UZ~j{SUXkdjHAb^b=#|MJAb5_EX0ODB7nZACKH$JwSaw&)@i7KbZgEFYz)? OR8ac=P&70vukt^!W@C5& delta 527 zcmYjNO=}ZT6g_v6%p_?utshM)f>P32hROuBP%7d^7p_Wq3l~Z#)6Q#&ozBGjUg)L} z{Rft8OLv9#H~2H$&CX?aYEZ$I+(`uQ;=OzBd*_~W@2A<1p1HzTQ#l^eV&Z)mh z=clXT(0S!r_ddGr5>!RGA%#$$s;XLtI;83wW#ItU>w4QaCi(xNX4YwfyQL*`=^uJR zYPJQ{Xd#(TXnjhtHRZPv%v}o(D4#iKYP(~!F}*AeDED6KzD{FvHL`S4cL0k0v}Oljo(0ZY5Q!TO+Qtmd78(afULk}s8l`L$f-;R1lIpq}5^jrI<88i&2qYEGjh zj3XQEMnx9Jwds1^b8(7VGxt|$ZXt9W~C`{~BpB-iK wAkokH9#G6-{5Jr;m5AtP6ZClWx$^Yx%EQaIUsg7M$ri>XI5&SdM75&NU$a(e>i_@% diff --git a/backend/src/backend/routers/comments.py b/backend/src/backend/routers/comments.py index 83ab410..6393035 100644 --- a/backend/src/backend/routers/comments.py +++ b/backend/src/backend/routers/comments.py @@ -1,4 +1,24 @@ # add comment # delete comment -# get comments \ No newline at end of file +# get comments + +from backend.internal.database import get_session +from fastapi import Depends +from sqlmodel import Session +from fastapi import APIRouter +from ..models.comment import Comment + +router = APIRouter( + prefix="/comments", + tags=["comments"], + dependencies=[], + responses={404: {"description": "Not found"}}, +) + +@router.post("/") +def register_user(session: Session = Depends(get_session)): + comment = {"test":"test"} + comment1 = Comment.model_validate(comment) + session.add(comment) + session.commit() diff --git a/backend/src/backend/routers/test_users.py b/backend/src/backend/routers/test_users.py index cdf58db..ff62a1c 100644 --- a/backend/src/backend/routers/test_users.py +++ b/backend/src/backend/routers/test_users.py @@ -1,15 +1,57 @@ -from httpx2 import post -from backend.models.user import RegisterUser +from backend.models.user import User +from backend.internal.database import get_session +from sqlmodel import Session +from sqlmodel import StaticPool +from sqlmodel import create_engine +import pytest +from backend.internal.database import engine +from sqlmodel import SQLModel from backend.main import app from fastapi.testclient import TestClient -client = TestClient(app) +@pytest.fixture(name="session") +def session_fixture(): + engine = create_engine( + "sqlite://", connect_args={"check_same_thread": False}, poolclass=StaticPool + ) + SQLModel.metadata.create_all(engine) + with Session(engine) as session: + yield session -def test_register_user_works(): + +@pytest.fixture(name="client") +def client_fixture(session: Session): + def get_session_override(): + return session + + app.dependency_overrides[get_session] = get_session_override + + client = TestClient(app) + yield client + app.dependency_overrides.clear() + + + + +def test_register_user_works(client: TestClient): + print(SQLModel.metadata.tables.keys()) new_user = { - "email": "Test", + "email": "Test@Test.test", "name": "Test1", "subscription": True } response = client.post(url="/users/", json=new_user) - assert response.status_code == 200 \ No newline at end of file + assert response.status_code == 200 + +def test_email_not_unique(session: Session, client: TestClient): + new_user = { + "email": "Test@Test.test", + "name": "Test1", + "subscription": True + } + user = User.model_validate(new_user) + session.add(user) + session.commit() + response = client.post(url="/users/", json=new_user) + + assert response.status_code == 400 \ No newline at end of file diff --git a/backend/src/backend/routers/users.py b/backend/src/backend/routers/users.py index 3bb20fa..8b8cef1 100644 --- a/backend/src/backend/routers/users.py +++ b/backend/src/backend/routers/users.py @@ -8,6 +8,11 @@ # delete all deactivated users after 48h +from starlette.status import HTTP_400_BAD_REQUEST +from fastapi import HTTPException +from sqlalchemy.exc import IntegrityError +from backend.models.user import User +from backend.models.user import NewUser from backend.internal.database import get_session from fastapi import Depends from sqlmodel import Session @@ -21,5 +26,12 @@ router = APIRouter( ) @router.post("/") -def register_user(session: Session = Depends(get_session)): - pass +def register_user(new_user: NewUser, session: Session = Depends(get_session)): + user = User.model_validate(new_user) + + try: + session.add(user) + session.commit() + except IntegrityError as e: + session.rollback() + raise HTTPException(HTTP_400_BAD_REQUEST)