diff --git a/src/lib/database/score.py b/src/lib/database/score.py new file mode 100644 index 0000000..a61827a --- /dev/null +++ b/src/lib/database/score.py @@ -0,0 +1,11 @@ +from models.score import ScoreBase +from lib.database.database import get_db +from models.general import Message + + +def set_score(score: ScoreBase) -> Message: + sql = "INSERT INTO scores (movie_id, user_id, score) VALUES (?, ?, ?)" + with get_db() as conn: + conn.execute(sql, (score.movie_id, score.user_id, score.score)) + + return Message(message="Score added successfully", message_type="success") diff --git a/src/models/score.py b/src/models/score.py index 96665b9..a6cd2ed 100644 --- a/src/models/score.py +++ b/src/models/score.py @@ -1,12 +1,21 @@ -from sqlmodel import Field, SQLModel from datetime import datetime from typing import Optional +from pydantic import BaseModel, Field -class Score(SQLModel, table=True): - id: Optional[int] = Field(default=None, primary_key=True) - user_id: Optional[int] = Field(default=None, foreign_key="user.id") - movie_id: Optional[int] = Field(default=None, foreign_key="movie.id") - score: int - created_at: datetime = Field(default_factory=datetime.utcnow) - updated_at: datetime = Field(default_factory=datetime.utcnow) +class ScoreBase(BaseModel): + user_id: str = Field( + description="UUID representation of the user", + examples=["123e4567-e89b-12d3-a456-426655440000"], + ) + movie_id: str = Field( + description="UUID representation of the movie", + examples=["123e4567-e89b-12d3-a456-426655440000"], + ) + score: int = Field(description="Score of the movie", examples=[5], ge=-18, le=33) + created_at: Optional[datetime] = Field(default_factory=datetime.utcnow) + updated_at: Optional[datetime] = Field(default_factory=datetime.utcnow) + + +class ScoreDB(ScoreBase): + id: Optional[str] diff --git a/src/routes/score.py b/src/routes/score.py index a124cc8..6361ffe 100644 --- a/src/routes/score.py +++ b/src/routes/score.py @@ -1,5 +1,8 @@ from fastapi import APIRouter +from models.score import ScoreBase +from lib.database.score import set_score + router = APIRouter( prefix="/score", tags=["score"], @@ -10,3 +13,8 @@ router = APIRouter( @router.get("/leaderboard") async def get_leaderboard(): return {"leaderboard": ["user1", "user2", "user3"]} + + +@router.post("/") +async def add_score(score: ScoreBase): + return set_score(score)