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 b5c6ce3..221f8aa 100644 Binary files a/backend/src/backend/__pycache__/main.cpython-314.pyc and b/backend/src/backend/__pycache__/main.cpython-314.pyc differ 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 0000000..3611c7f Binary files /dev/null and b/backend/src/backend/models/__pycache__/comment.cpython-314.pyc differ diff --git a/backend/src/backend/models/__pycache__/user.cpython-314.pyc b/backend/src/backend/models/__pycache__/user.cpython-314.pyc new file mode 100644 index 0000000..ce1b3d8 Binary files /dev/null and b/backend/src/backend/models/__pycache__/user.cpython-314.pyc differ 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 8afa31a..1704d6f 100644 Binary files a/backend/src/backend/routers/__pycache__/test_subscriptions.cpython-314-pytest-9.1.1.pyc and b/backend/src/backend/routers/__pycache__/test_subscriptions.cpython-314-pytest-9.1.1.pyc differ 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 new file mode 100644 index 0000000..ee1f03b Binary files /dev/null and b/backend/src/backend/routers/__pycache__/test_users.cpython-314-pytest-9.1.1.pyc differ 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 0000000..2c4f339 Binary files /dev/null and b/backend/src/backend/routers/__pycache__/users.cpython-314.pyc differ 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