mirror of
https://github.com/sunrin-ana/2025-SSF.git
synced 2026-03-09 18:40:02 +00:00
2025 SSF Public
This commit is contained in:
commit
76a02076c9
192 changed files with 5016 additions and 0 deletions
110
Backend/services/guestbook_service.py
Normal file
110
Backend/services/guestbook_service.py
Normal 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
|
||||
Loading…
Add table
Add a link
Reference in a new issue