fixes for starting to test

This commit is contained in:
ebby 2026-09-12 15:19:57 +03:00
parent 29b9dd9b84
commit b5aa03eb95
12 changed files with 57 additions and 13 deletions

View file

@ -1,5 +1,5 @@
[tool.pyrefly] [tool.pyrefly]
project-includes = [ project-includes = [
"./**/*.py", "./**/**/*.py",
] ]

View file

@ -1,4 +1,4 @@
from .routers import subscriptions from .routers import subscriptions, users
from backend.internal.database import create_db_and_tables from backend.internal.database import create_db_and_tables
from fastapi import APIRouter from fastapi import APIRouter
from fastapi import FastAPI from fastapi import FastAPI
@ -16,3 +16,4 @@ def on_startup():
router = APIRouter() router = APIRouter()
app.include_router(subscriptions.router) app.include_router(subscriptions.router)
app.include_router(users.router)

View file

@ -1,17 +1,20 @@
import uuid
from typing import TYPE_CHECKING, Optional
from sqlmodel import Relationship from sqlmodel import Relationship
from ..models.user import User
from sqlmodel import DateTime from sqlmodel import DateTime
from sqlmodel import Field from sqlmodel import Field
from sqlmodel import UUID
from sqlmodel import SQLModel from sqlmodel import SQLModel
if TYPE_CHECKING:
from ..models.user import User
class CommentBase(SQLModel): class CommentBase(SQLModel):
pass pass
class Comment(CommentBase, table=True): 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) slug: str = Field(index=True)
content: str = Field() content: str = Field()
date_time: DateTime = Field(default=DateTime()) date_time: DateTime = Field(default=DateTime())
user_id: UUID = Field(foreign_key="user.id") user_id: uuid.UUID = Field(foreign_key="user.id")
user: User = Relationship(back_populates="comments") user: Optional["User"] = Relationship(back_populates="comments")

View file

@ -1,17 +1,24 @@
from unicodedata import name import uuid
from typing import TYPE_CHECKING
from sqlmodel import Field from sqlmodel import Field
from sqlmodel import UUID
from sqlmodel import Relationship from sqlmodel import Relationship
from ..models.comment import Comment
from sqlmodel import SQLModel from sqlmodel import SQLModel
if TYPE_CHECKING:
from ..models.comment import Comment
class UserBase(SQLModel): class UserBase(SQLModel):
pass pass
class User(UserBase): 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) email: str = Field(unique=True)
name: str = Field(unique=True) name: str = Field(unique=True)
user_code: str = Field(unique=True) # TODO: create generation function user_code: str = Field(unique=True) # TODO: create generation function
subscription: bool = Field() subscription: bool = Field()
comments: list[Comment] = Relationship(back_populates="user") comments: list["Comment"] = Relationship(back_populates="user")
class RegisterUser(UserBase):
email: str
name: str
subscription: bool

View file

@ -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

View file

@ -3,5 +3,23 @@
# Forgot Code <- email (rate limit) # Forgot Code <- email (rate limit)
# Delete User <- token # Delete User <- token
# change mail <- token, new mail # change mail <- token, new mail
# subscribe
# unsubscribe
# delete all deactivated users after 48h # 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