From 7609159f606e3c146776be55bf0ed1bb141ac034 Mon Sep 17 00:00:00 2001 From: Esa Kataja Date: Sat, 10 May 2025 15:18:26 +0300 Subject: [PATCH] Add message model --- src/models/msg.py | 8 ++++++++ src/routes/reviews.py | 41 ++++++++++++++++++++++++++++------------- 2 files changed, 36 insertions(+), 13 deletions(-) create mode 100644 src/models/msg.py diff --git a/src/models/msg.py b/src/models/msg.py new file mode 100644 index 0000000..2f03983 --- /dev/null +++ b/src/models/msg.py @@ -0,0 +1,8 @@ +from pydantic import BaseModel, Field +from datetime import datetime + + +class Message(BaseModel): + type: str | None = None + message: str + timestamp: datetime = Field(default_factory=datetime.now) diff --git a/src/routes/reviews.py b/src/routes/reviews.py index aee98a0..ae0851c 100644 --- a/src/routes/reviews.py +++ b/src/routes/reviews.py @@ -1,6 +1,7 @@ from fastapi import APIRouter, HTTPException -from models.review import ReviewOut, ReviewSearch, ReviewIn +from models.review import ReviewOut, ReviewIn +from models.msg import Message from lib.db import get_connection router = APIRouter(prefix="/reviews", tags=["reviews"]) @@ -16,11 +17,11 @@ async def list_reviews(): @router.get("/", response_model=ReviewOut) -async def get_review(review_id: ReviewSearch): +async def get_review(song_id: int, user_id: int): with get_connection() as conn: review = conn.execute( "SELECT * FROM Review WHERE song_id = ? AND user_id = ?", - (review_id.song_id, review_id.user_id), + (song_id, user_id), ).fetchdf() if review.empty: raise HTTPException(status_code=404, detail="Review not found") @@ -30,7 +31,8 @@ async def get_review(review_id: ReviewSearch): @router.post("/", response_model=ReviewOut) async def create_review(review: ReviewIn): with get_connection() as conn: - review = conn.execute( + # Insert the review + conn.execute( "INSERT INTO Review (user_id, song_id, score_song, score_show, score_costume, text_review) VALUES (?, ?, ?, ?, ?, ?)", ( review.user_id, @@ -40,20 +42,26 @@ async def create_review(review: ReviewIn): review.score_costume, review.text_review, ), + ) + + # Fetch the newly created review + result = conn.execute( + "SELECT * FROM Review WHERE song_id = ? AND user_id = ?", + (review.song_id, review.user_id), ).fetchdf() - if review.empty: + + if result.empty: raise HTTPException(status_code=404, detail="Review not found") - return review.to_dict(orient="records")[0] + return Message(type="success", message="Review created successfully") -@router.put("/", response_model=ReviewOut) +@router.put("/", response_model=Message) async def update_review(review: ReviewIn): with get_connection() as conn: - review = conn.execute( - "UPDATE Review SET user_id = ?, song_id = ?, score_song = ?, score_show = ?, score_costume = ?, text_review = ? WHERE song_id = ? AND user_id = ?", + # Update the review + conn.execute( + "UPDATE Review SET score_song = ?, score_show = ?, score_costume = ?, text_review = ? WHERE song_id = ? AND user_id = ?", ( - review.user_id, - review.song_id, review.score_song, review.score_show, review.score_costume, @@ -61,7 +69,14 @@ async def update_review(review: ReviewIn): review.song_id, review.user_id, ), + ) + + # Fetch the updated review + result = conn.execute( + "SELECT * FROM Review WHERE song_id = ? AND user_id = ?", + (review.song_id, review.user_id), ).fetchdf() - if review.empty: + + if result.empty: raise HTTPException(status_code=404, detail="Review not found") - return review.to_dict(orient="records")[0] + return Message(type="success", message="Review updated successfully")