This commit is contained in:
암냥 2025-09-13 16:18:28 +09:00
commit 40266cc6e5
191 changed files with 5022 additions and 0 deletions

View file

@ -0,0 +1,110 @@
from datetime import datetime
from typing import List
from fastapi import HTTPException
from Backend.utils.db import execute, fetch_one, fetch_all
from Backend.utils.queries.guestbook import GuestBookQueries
from Backend.schemas.guestbook import GuestBook, GuestBookCreate, GuestbookResponse
from Backend.schemas.user import User
from Backend.utils.queries.user import UserQueries
class GuestbookService:
def __init__(self):
pass
@staticmethod
async def init_db():
await execute(GuestBookQueries.CREATE_TABLE)
async def create_guestbook(
self, data: GuestBookCreate, user: User
) -> GuestbookResponse:
user_exist = await fetch_one(UserQueries.SELECT_BY_ID, (data.target_user_id,))
if user_exist is None:
raise HTTPException(status_code=404, detail="User not found")
ex_row = await fetch_one(
GuestBookQueries.SELECT_GUEST_BOOK_BY_USER_ID, (user.id,)
)
created_at = datetime.now()
query = GuestBookQueries.INSERT_GUEST_BOOK
await execute(query, (data.target_user_id, user.id, data.content, created_at))
query = GuestBookQueries.SELECT_GUEST_BOOK_BY_USER_ID
row = await fetch_one(query, (user.id,))
if not (ex_row is None):
if row is None or ex_row["id"] == row["id"]:
raise HTTPException(
status_code=400, detail="Failed to create guest book"
)
return GuestbookResponse(
id=row["id"],
content=row["content"],
target_user_id=row["target_user_id"],
user_id=row["user_id"],
user_profile_path=user.profile_image_path,
username=user.username,
created_at=row["created_at"],
)
async def get_target_user_guestbooks(
self, target_user_id: int, limit: int = 20, offset: int = 0
) -> List[GuestbookResponse]:
query = GuestBookQueries.SELECT_TARGET_USER_GUEST_BOOKS
rows = await fetch_all(query, (target_user_id, limit, offset))
response_list = []
for row in rows:
user = await fetch_one(UserQueries.SELECT_BY_ID, (row["user_id"],))
response_list.append(
GuestbookResponse(
id=row["id"],
content=row["content"],
target_user_id=row["target_user_id"],
user_id=row["user_id"],
user_profile_path=user["profile_image_path"],
username=user["username"],
created_at=row["created_at"],
)
)
return response_list
async def update_guestbook_by_id(self, id: int, content: str) -> GuestbookResponse:
query = GuestBookQueries.SELECT_GUEST_BOOK_BY_ID
row = await fetch_one(query, (id,))
if row is None:
raise HTTPException(status_code=404, detail="Guest book not found")
query = GuestBookQueries.UPDATE_GUEST_BOOK_BY_ID
await execute(query, (content, id))
query = GuestBookQueries.SELECT_GUEST_BOOK_BY_ID
row = await fetch_one(query, (id,))
user = await fetch_one(UserQueries.SELECT_BY_ID, (row["user_id"],))
return GuestbookResponse(
id=row["id"],
content=row["content"],
target_user_id=row["target_user_id"],
user_id=row["user_id"],
user_profile_path=user["profile_image_path"],
username=user["username"],
created_at=row["created_at"],
)
async def delete_guestbook_by_id(self, id: int, user_id: int) -> bool:
try:
query = GuestBookQueries.DELETE_GUEST_BOOK
await execute(query, (id, user_id))
return True
except Exception:
return False