Spaces:
Sleeping
Sleeping
File size: 3,881 Bytes
d57efd6 b39c0ba d57efd6 b39c0ba d57efd6 b39c0ba d57efd6 b39c0ba d57efd6 b39c0ba d57efd6 b39c0ba d57efd6 878c73a 1c14126 878c73a 1c14126 878c73a d57efd6 b39c0ba d57efd6 b39c0ba d57efd6 b39c0ba d57efd6 b39c0ba d57efd6 1c14126 d57efd6 b39c0ba d57efd6 b39c0ba d57efd6 b39c0ba d57efd6 b39c0ba 1c14126 d57efd6 b39c0ba d57efd6 b39c0ba d57efd6 b39c0ba d57efd6 b39c0ba 1c14126 d57efd6 b39c0ba d57efd6 b39c0ba d57efd6 b39c0ba d57efd6 1c14126 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 |
from typing import Annotated, List, Optional
from api.router.user import user_dependency
from api.auth import check_user_authentication
from fastapi import APIRouter, Depends
from db.database import get_db
from sqlalchemy.orm import Session
from db.query.query_user_meta import UserMetaQuery
from db.fetching import DataFetching
from utils.error_handlers import handle_exception
router = APIRouter(tags=["Book_Collection"])
db_dependency = Annotated[Session, Depends(get_db)]
@router.get("/book_collection")
async def get_book_collection(user: user_dependency, db: db_dependency):
"""Fetch user's book collection."""
auth_response = check_user_authentication(user)
if auth_response:
return auth_response
try:
fetching = DataFetching(user, db)
book_collection = fetching.collection_fetching()
return {
"status": "success",
"book_collection": book_collection,
}
except Exception as e:
return {
"status": "error",
"book_collection": [],
"error_message": handle_exception(e)
}
@router.post("/book_collection")
async def request_book_collection(
user: user_dependency, db: db_dependency, metadata_ids: List[Optional[int]]
):
"""Insert book collection metadata for a user."""
auth_response = check_user_authentication(user)
if auth_response:
return auth_response
user_meta_query = UserMetaQuery(user)
try:
return user_meta_query.insert_user_meta_entries(db, metadata_ids)
except Exception as e:
return {
"status": "error",
"message": "User meta entries failed to added.",
"metadata_ids": [], # Include the metadata IDs in the result
"error_message":handle_exception(e)
}
@router.put("/book_collection")
async def update_book_collection(
user: user_dependency, db: db_dependency, metadata_ids: List[Optional[int]]
):
"""Update user's book collection metadata."""
auth_response = check_user_authentication(user)
if auth_response:
return auth_response
try:
user_meta_query = UserMetaQuery(user)
return user_meta_query.update_user_meta_entries(db, metadata_ids)
except Exception as e:
return {
"status": "error",
"added_meta": [],
"deleted_meta": [],
"kept_meta": [],
"message":handle_exception(e)
}
@router.delete("/book_collection/{metadata_id}")
async def delete_book_collection(
user: user_dependency, db: db_dependency, metadata_id: int
):
"""Delete a specific book collection entry."""
auth_response = check_user_authentication(user)
if auth_response:
return auth_response
try:
user_meta_query = UserMetaQuery(user)
return user_meta_query.delete_user_meta(
db, metadata_id=metadata_id
)
except Exception as e:
return {
"status": "error",
"message": f"Book user with id {metadata_id} deleted successfully.",
"error_message": handle_exception(e)
}
@router.delete("/all_collections")
async def delete_all_book(user: user_dependency, db: db_dependency):
"""Delete all book collections for the authenticated user."""
auth_response = check_user_authentication(user)
if auth_response:
return auth_response
try:
user_meta_query = UserMetaQuery(user)
user_meta_query.delete_all_user_meta(db)
return {
"status": "success",
"message": f"Deleted book collection for user {user.get('id')}",
}
except Exception as e:
return {
"status": "error",
"message": f"Delete failed for user {user.get('id')}",
"error_message": handle_exception(e)
}
|