Multimedika/Bot_Development
0
1from typing import Annotated, List, Optional2from api.router.user import user_dependency3from api.auth import check_user_authentication4from fastapi import APIRouter, Depends5from db.database import get_db6from sqlalchemy.orm import Session7from db.query.query_user_meta import UserMetaQuery8from db.fetching import DataFetching9from utils.error_handlers import handle_exception10 11 12router = APIRouter(tags=["Book_Collection"])13db_dependency = Annotated[Session, Depends(get_db)]14 15 16@router.get("/book_collection")17async def get_book_collection(user: user_dependency, db: db_dependency):18 """Fetch user's book collection."""19 auth_response = check_user_authentication(user)20 if auth_response:21 return auth_response22 23 try:24 25 fetching = DataFetching(user, db)26 book_collection = fetching.collection_fetching()27 28 return {29 "status": "success",30 "book_collection": book_collection,31 }32 except Exception as e:33 return handle_exception(e)34 35 36@router.post("/book_collection")37async def request_book_collection(38 user: user_dependency, db: db_dependency, metadata_ids: List[Optional[int]]39):40 """Insert book collection metadata for a user."""41 auth_response = check_user_authentication(user)42 if auth_response:43 return auth_response44 45 user_meta_query = UserMetaQuery(user)46 47 try:48 return user_meta_query.insert_user_meta_entries(db, metadata_ids)49 50 except Exception as e:51 return handle_exception(e)52 53 54@router.put("/book_collection")55async def update_book_collection(56 user: user_dependency, db: db_dependency, metadata_ids: List[Optional[int]]57):58 """Update user's book collection metadata."""59 auth_response = check_user_authentication(user)60 if auth_response:61 return auth_response62 63 try:64 user_meta_query = UserMetaQuery(user)65 return user_meta_query.update_user_meta_entries(db, metadata_ids)66 67 except Exception as e:68 return handle_exception(e)69 70 71@router.delete("/book_collection/{metadata_id}")72async def delete_book_collection(73 user: user_dependency, db: db_dependency, metadata_id: int74):75 """Delete a specific book collection entry."""76 auth_response = check_user_authentication(user)77 if auth_response:78 return auth_response79 80 try:81 user_meta_query = UserMetaQuery(user)82 return user_meta_query.delete_user_meta(83 db, metadata_id=metadata_id84 )85 except Exception as e:86 return handle_exception(e)87 88 89@router.delete("/all_collections")90async def delete_all_book(user: user_dependency, db: db_dependency):91 """Delete all book collections for the authenticated user."""92 auth_response = check_user_authentication(user)93 if auth_response:94 return auth_response95 96 try:97 user_meta_query = UserMetaQuery(user)98 user_meta_query.delete_all_user_meta(db)99 100 return {101 "status": "success",102 "message": f"Deleted book collection for user {user.get('id')}",103 }104 except Exception as e:105 return handle_exception(e)106 