From b5aa03eb951a0bae63fee81898509cbe547a5f54 Mon Sep 17 00:00:00 2001 From: ebby Date: Sat, 12 Sep 2026 15:19:57 +0300 Subject: [PATCH] fixes for starting to test --- backend/pyrefly.toml | 2 +- .../backend/__pycache__/main.cpython-314.pyc | Bin 725 -> 813 bytes backend/src/backend/main.py | 3 ++- .../__pycache__/comment.cpython-314.pyc | Bin 0 -> 1592 bytes .../models/__pycache__/user.cpython-314.pyc | Bin 0 -> 2099 bytes backend/src/backend/models/comment.py | 13 +++++++----- backend/src/backend/models/user.py | 17 ++++++++++----- ...subscriptions.cpython-314-pytest-9.1.1.pyc | Bin 2325 -> 2326 bytes .../test_users.cpython-314-pytest-9.1.1.pyc | Bin 0 -> 1705 bytes .../routers/__pycache__/users.cpython-314.pyc | Bin 0 -> 897 bytes backend/src/backend/routers/test_users.py | 15 +++++++++++++ backend/src/backend/routers/users.py | 20 +++++++++++++++++- 12 files changed, 57 insertions(+), 13 deletions(-) create mode 100644 backend/src/backend/models/__pycache__/comment.cpython-314.pyc create mode 100644 backend/src/backend/models/__pycache__/user.cpython-314.pyc create mode 100644 backend/src/backend/routers/__pycache__/test_users.cpython-314-pytest-9.1.1.pyc create mode 100644 backend/src/backend/routers/__pycache__/users.cpython-314.pyc create mode 100644 backend/src/backend/routers/test_users.py diff --git a/backend/pyrefly.toml b/backend/pyrefly.toml index 906a017..718209c 100644 --- a/backend/pyrefly.toml +++ b/backend/pyrefly.toml @@ -1,5 +1,5 @@ [tool.pyrefly] project-includes = [ - "./**/*.py", + "./**/**/*.py", ] \ No newline at end of file diff --git a/backend/src/backend/__pycache__/main.cpython-314.pyc b/backend/src/backend/__pycache__/main.cpython-314.pyc index b5c6ce3587be18d3fb4b950924a10883ac9a7f63..221f8aa3218d8e8e5d551f81bcce74666c28bb22 100644 GIT binary patch delta 381 zcmZ{fKTE?<6vfYb`AcguR46tSqFaOLq=OJ#O+X}cPo=ggv}h9EdvSK^Y{=jzaP&L) z6$Gu4#l;WMMO@_thc4dfaDL~W%YD?bwWZf0>PmNz^T$ z`_4aG$+Tz6(pRjo@=2^;Xt>6hOe;CoK1(_V!0JZ>dv-#mm-C3y)lg@=_)dtH7 zkuc5_08FjEi965%)W&Sg#WFCpE$Nx_iopkzcXVFRxj%mJOMivkrsEe#L{AF< delta 338 zcmYk2ze>Yk6vfZYzpuumMX`v86g#!JI!G1gWRZ|PEisJ{sY$r`;;OF@@(fPm>YFGS z$UErjBxxObr*nUtbB6O~eCYOB-!=ij9KYPpEBnZK2k?wJ`Q*YONh8eRE3V?GQeA7+ z)f`>wYpuDOV@P9!z&OQu*8@O`KzMrS3ZYU Q{9{4XU&^faiOD+t2UZJ90{{R3 diff --git a/backend/src/backend/main.py b/backend/src/backend/main.py index a5c9adc..9920c45 100644 --- a/backend/src/backend/main.py +++ b/backend/src/backend/main.py @@ -1,4 +1,4 @@ -from .routers import subscriptions +from .routers import subscriptions, users from backend.internal.database import create_db_and_tables from fastapi import APIRouter from fastapi import FastAPI @@ -16,3 +16,4 @@ def on_startup(): router = APIRouter() app.include_router(subscriptions.router) +app.include_router(users.router) diff --git a/backend/src/backend/models/__pycache__/comment.cpython-314.pyc b/backend/src/backend/models/__pycache__/comment.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3611c7f439908d5a3d57d921133634b0e164bbca GIT binary patch literal 1592 zcmY*Z&2Jk;6o0e3_O3sZlzcUi1~&q+0^*`nN-9?f1&i7eMCv5X0pyI<>q)ZBde@yD z3&H_efS?y7Bsg%)1&N9a|B9ttJjjQNQ*W3=Do6BoH))x})9<}E`{w=L$G%-ITRq6J#qFj7yBmR7+oKSR|fsz|x- zNG}YcBd=!@Wju(uu!*wjj^w*um)k^TKJvKViJcFcb#(6B|M-)z!+kfU6d#f*=kqbY z7Dz%tYWtSdDUk-%R>9U);lr@o<$>ICBK`!n?ToS*3!E-zOywEthMm5TxX9R}zT>B! zDaH;w5lP<*cn~tC<`|2lBR!WnQVOr#mpo!j6ae5H^H96hqp-`Xyxl&j?zl&Sdu{1O z?oqWT!iU_IQFY7j^Uod0McWS#t8K?U=0T?#3HJ(jkz-VKlZ@ATCjz@03kv|E3;=uw ze;SsUxwQYUBIw6+ehL5%3|`cvAoY0&p=DHn5~@*sLrbp8Ol;Grv60qOX3=sxaf38b zYgsQWG;?(`7k`_j=9MMiDpY`4GkCaR3J zWxcT1_Z`V27l~aC3yviY?RgIX?verQ!M?WnEkH*Hcn$88BT|JO@)=O_&gB9DKux3C zn*it`HI3>oVI##_O{19<&v9!yWOxP1+J?YHlpaYTu)_j5*qX{7gre(6RbtHboha&fu4F927j6#3HT~o+CJa5^U8`I`SC`_98@9M?ltUb+`@!uTmo#cz!gsxK28=B zO+v@5wC*Oqs`tga={QI40l?onA!H1dG29r#@)(xJaD5ER7X~4@AK$tFLUI?`EV=Xe N_;mI;WXYX4&WLLS3t=)r3fd zdZMOQb)io}Lpc^ZY9#>gV-kum4K!H-YBcmyYIIGcLTjo7G~Gz;TGOF5 zQv#YDvSuhLgPD7RpVmzxbJyR$a)HfPFU()6)!#9ROk8vwuVoUMrH*F_*Y5-?Zr3Ez zxOVmOdw$FDOd^x>e!J~-gdHauE)s9H#>4U(AP5DaETx4?iO{H022+*Bjlkh^R^a>q zbu%Fi#yVEpVN9kOYx}L9hkBN=J3Y&bPevG9c6lH?x8rnt#$=JPKv=@HnI!~wn?2zK zjB)JD7A7IDR#yDBQ*oNj)yg${g*$FjxPiS=>2m*;V~e0N=k=VAEaC8`=ijU}E&I09 zX;lJl@9J%=HK_Cgho9`O@)Q7s0;2@j>d)Y@X7Iv}eGeA9RQM49Ea*Q+BPY~x@S&ki zLnCn|8)G)KD51(}B{GO4-lK%7r(<-5@scI=k|m9nQ?XBxX=JB?YBaIyBew`|5~`QL zGen*y#mFLv0yWBDrlf}bxo#?Qq~$DIJx{P@%N9Ogm6HET@Cgiz z?3by}Qx6w@H(p!Q>YFMM@<%4Wrj<7nK***JxH+Hz+~?E=2(JVQ^sTr+vRn z{5R%pA&HQ?C zeQLg6{THkK6ry_3`=0sTq2bodi}PEI<~N)m5>Ajt6_Hp3p;NUCriKsaO*aq@#}2-F z49@+}7|be^#H1Z2JlP>U#^FfiA>0viQ{iQ_9*uN#5y3gcGkzSA-#?t>9-0*qe*7|` zStft?-H2T2+}+v^w~#^OPmx>0gh{@VFefkzY&S2X- zCuTMxoGw=V+HehN4CN^Mt0}lPA7B;lw+ZrLM2On<(A*pR$Cky1knQg$| R?Se{556}DqDk+5#{sR=o!Z`o{ literal 0 HcmV?d00001 diff --git a/backend/src/backend/models/comment.py b/backend/src/backend/models/comment.py index 138c73d..9d15f97 100644 --- a/backend/src/backend/models/comment.py +++ b/backend/src/backend/models/comment.py @@ -1,17 +1,20 @@ +import uuid +from typing import TYPE_CHECKING, Optional from sqlmodel import Relationship -from ..models.user import User from sqlmodel import DateTime from sqlmodel import Field -from sqlmodel import UUID from sqlmodel import SQLModel +if TYPE_CHECKING: + from ..models.user import User + class CommentBase(SQLModel): pass class Comment(CommentBase, table=True): - id: UUID | None = Field(default=None, primary_key=True) + id: uuid.UUID | None = Field(default_factory=uuid.uuid4, primary_key=True) slug: str = Field(index=True) content: str = Field() date_time: DateTime = Field(default=DateTime()) - user_id: UUID = Field(foreign_key="user.id") - user: User = Relationship(back_populates="comments") \ No newline at end of file + user_id: uuid.UUID = Field(foreign_key="user.id") + user: Optional["User"] = Relationship(back_populates="comments") \ No newline at end of file diff --git a/backend/src/backend/models/user.py b/backend/src/backend/models/user.py index a7caf1e..3937665 100644 --- a/backend/src/backend/models/user.py +++ b/backend/src/backend/models/user.py @@ -1,17 +1,24 @@ -from unicodedata import name +import uuid +from typing import TYPE_CHECKING from sqlmodel import Field -from sqlmodel import UUID from sqlmodel import Relationship -from ..models.comment import Comment from sqlmodel import SQLModel +if TYPE_CHECKING: + from ..models.comment import Comment + class UserBase(SQLModel): pass class User(UserBase): - id: UUID | None = Field(default=None, primary_key=True) + id: uuid.UUID | None = Field(default_factory=uuid.uuid4, primary_key=True) email: str = Field(unique=True) name: str = Field(unique=True) user_code: str = Field(unique=True) # TODO: create generation function subscription: bool = Field() - comments: list[Comment] = Relationship(back_populates="user") \ No newline at end of file + comments: list["Comment"] = Relationship(back_populates="user") + +class RegisterUser(UserBase): + email: str + name: str + subscription: bool diff --git a/backend/src/backend/routers/__pycache__/test_subscriptions.cpython-314-pytest-9.1.1.pyc b/backend/src/backend/routers/__pycache__/test_subscriptions.cpython-314-pytest-9.1.1.pyc index 8afa31ab8ae1621ebc11575ae9d3efa0f7dccf2e..1704d6f85df96ace85e51aa3aa405caface1b80d 100644 GIT binary patch delta 175 zcmbO#G);(Cn~#@^fq{Wxz1-5Qe;avUv#_v-q!w@f&2o{c-l)U2+x`NJ(E_#wl^5iU zF0dF~kTbf-ZFHRliY~Jlb=bpsa7Kp(oOy`_&b!89)L{#exPs7k1#Bo>Ju-v&8jI0n OKaPWJ#zm?O3=9CGKs!4C delta 174 zcmbOxG*yUKn~#@^fq{Wxf!xxpzZ-d9voN!Tq;CGha*?Utu*0_7{sN2P0=5Me7vu~t zuozyDGrY)cc%21`F0&YR*u!~nMu!EQd5HziyT)SJVGEJCg3xybY$#kkGK2XVi{WH{ Nj)QDQMXC%83;;qvI*yCCn*&uel!ZfD%j=zFoqBC| zW>(22Ldt?f^y`z)|v5nrdIELsR30y7VX;deh)Wg4K;;v&2gY z);7vblbZ=HY*dKA0u4C z<=lz>o3CX1VDo>uYR0wIE2ByQ#06ZzW37UXUa;z06Ioul$ggI$bD4#fo<+{SU4*OG zQLJ1?bRAdcz`7s`r04p9(B$X{Ep&TC6ePYXDy-jT9`$4HN8zml!|pRenQbXT?bASL zyDSQY8V?pkkrEb1AtO>q;ch@h5k|2)+}_eB+ZK!D<7s{ zW-VbZSggUg%lpjnq7Es4F|#&wT(g*E3f)VFo62DnW{xPzH{t;&j5{tB7aY$G0*8{A zdQmTSDG`+$@xW>K{eb%+6M7JNZotH}!@5yF=peSpB%)G z!jCA8sF-lJBieJhL-ymq4PEK63{ecpo+B$nYe{l)!(j=oikz~XSC)p#Fy7mFWtABK zFf$bKx!sL=#3t?b!2ZPRQsTF{&%CZ3(`c7?oY@})eX{3rLfb*KW4B%JE(tp}quvP9 zsLy5lk|HIYY{UaGov1XuO%l7a7ty41V0dfB3kzdel5IC!U)1M`rz@HvipH@_J;>Kh@Ibu{QtEtdG9lOaYtC>i8pBrjQP`klkNTX5(#Rx? z)J7-e8okSTyuUacvWc{ojb79t0c#{3mbav+j6AL%Qh9BOSGHZo-Pmu)s-~k_001g~ z&!nP10iBol4M{J)+lxB=fV@W+06^aSOxmBR2%$d!zJ%Xk>J+Y=!o^dt{whrzuYX-X M(w}Pvx|~G$7s(isqyPW_ literal 0 HcmV?d00001 diff --git a/backend/src/backend/routers/__pycache__/users.cpython-314.pyc b/backend/src/backend/routers/__pycache__/users.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2c4f3397727b7436703776521bdb5bd528e42aa6 GIT binary patch literal 897 zcmYLH&ubGw6n<|v+0716Hc5SlnePqr-uHcP=30I<3jnb6@XO}90`OfX z!^jLk?-Ky*zy{b@h7xj|lUOM$C6%iQR?DeUnx_+-Dk~+8YjaT5=D|+eS`mw2>vqOA zEVR(huB7^Xxn9-R3PZC0Vds{ypH&_tm>A~6X)wueHmoSqu@*UEO(;e>8$R)-PFL^|304+tP~9$_x^W9~=c zwy_%VOO2=#dS*&!F(nQEwMcQN$;614G$*0!6DABwSR93nFoBjUEevdc0stxi^sXd> zT!#(i_FDi?1(<~=*g_khpZd3O0Zips)(CxIgr@uEv_?eR4rj9QWl^zOQJYw#Uf;4R zZi^DX&VA;#te8fd#O2I-5Ol~ZhZ9;4qNY`M+!rMDEJoc^Op__F{t$}smKdqkoG^^I z!%3}1CjsC*0I-Qf`CmXZe#qtHO0xB&?8NIZq_o7VmQ>iV04A>Pfr(VUbt3&LmF>hR zB~71kLThsNRPs#8E7I%^9Hlb!EC8&USus73Ui3pwXy^n*&*4tpVT4L9p*I}Ho!F=H zYl#ed8MGsh1XOCEx;)eRMnx))7*D9E)*+aN+WQ=!n6WwfKce-1c=#GuQuYP{KKY3$6zx2yUXO$i8Bo9jF-OQVr-O2$L azAaw=`s`rw&L26ro(jtNPX*CPxc>p%Vbu2k literal 0 HcmV?d00001 diff --git a/backend/src/backend/routers/test_users.py b/backend/src/backend/routers/test_users.py new file mode 100644 index 0000000..cdf58db --- /dev/null +++ b/backend/src/backend/routers/test_users.py @@ -0,0 +1,15 @@ +from httpx2 import post +from backend.models.user import RegisterUser +from backend.main import app +from fastapi.testclient import TestClient + +client = TestClient(app) + +def test_register_user_works(): + new_user = { + "email": "Test", + "name": "Test1", + "subscription": True + } + response = client.post(url="/users/", json=new_user) + assert response.status_code == 200 \ No newline at end of file diff --git a/backend/src/backend/routers/users.py b/backend/src/backend/routers/users.py index 1c612f3..3bb20fa 100644 --- a/backend/src/backend/routers/users.py +++ b/backend/src/backend/routers/users.py @@ -3,5 +3,23 @@ # Forgot Code <- email (rate limit) # Delete User <- token # change mail <- token, new mail +# subscribe +# unsubscribe -# delete all deactivated users after 48h \ No newline at end of file +# delete all deactivated users after 48h + +from backend.internal.database import get_session +from fastapi import Depends +from sqlmodel import Session +from fastapi import APIRouter + +router = APIRouter( + prefix="/users", + tags=["users"], + dependencies=[], + responses={404: {"description": "Not found"}}, +) + +@router.post("/") +def register_user(session: Session = Depends(get_session)): + pass