Add Score route

This commit is contained in:
Esa Kataja
2024-11-25 18:52:22 +02:00
parent eb3b4478fc
commit 90dbed634d
3 changed files with 36 additions and 8 deletions
+11
View File
@@ -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")
+17 -8
View File
@@ -1,12 +1,21 @@
from sqlmodel import Field, SQLModel
from datetime import datetime from datetime import datetime
from typing import Optional from typing import Optional
from pydantic import BaseModel, Field
class Score(SQLModel, table=True): class ScoreBase(BaseModel):
id: Optional[int] = Field(default=None, primary_key=True) user_id: str = Field(
user_id: Optional[int] = Field(default=None, foreign_key="user.id") description="UUID representation of the user",
movie_id: Optional[int] = Field(default=None, foreign_key="movie.id") examples=["123e4567-e89b-12d3-a456-426655440000"],
score: int )
created_at: datetime = Field(default_factory=datetime.utcnow) movie_id: str = Field(
updated_at: datetime = Field(default_factory=datetime.utcnow) 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]
+8
View File
@@ -1,5 +1,8 @@
from fastapi import APIRouter from fastapi import APIRouter
from models.score import ScoreBase
from lib.database.score import set_score
router = APIRouter( router = APIRouter(
prefix="/score", prefix="/score",
tags=["score"], tags=["score"],
@@ -10,3 +13,8 @@ router = APIRouter(
@router.get("/leaderboard") @router.get("/leaderboard")
async def get_leaderboard(): async def get_leaderboard():
return {"leaderboard": ["user1", "user2", "user3"]} return {"leaderboard": ["user1", "user2", "user3"]}
@router.post("/")
async def add_score(score: ScoreBase):
return set_score(score)