Skip to content

Commit 4212da1

Browse files
committed
책 추가 로직 구현
1 parent 930e0e5 commit 4212da1

File tree

2 files changed

+24
-15
lines changed

2 files changed

+24
-15
lines changed

app/BE/routers/book_router.py

+12-3
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
from fastapi import APIRouter, Depends
22
from pymongo.database import Database
3-
from ..database.mongodb import get_crawling_db
3+
from ..database.mongodb import get_crawling_db, get_user_db
44
from ..services.auth_service import require_login
5-
from ..services.book_service import get_book_info
5+
from ..services.book_service import get_book_info, add_book_to_user
66

77
router = APIRouter(
88
prefix="/book",
@@ -16,4 +16,13 @@ async def book_info(
1616
current_user: str = Depends(require_login)
1717
):
1818
book = await get_book_info(crawling_db, book_id)
19-
return book
19+
return book
20+
21+
@router.post("/{book_id}", response_model=dict)
22+
async def add_book(
23+
book_id: str,
24+
crawling_db: Database = Depends(get_crawling_db),
25+
current_user: str = Depends(require_login)
26+
):
27+
result = add_book_to_user(get_crawling_db, get_user_db, current_user, book_id)
28+
return result

app/BE/services/book_service.py

+12-12
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,29 @@
11
from bson import ObjectId
2-
from fastapi import HTTPException
2+
from fastapi import HTTPException, status
33
from pymongo.database import Database
44

5-
async def add_book_to_user(db: Database, username: str, book_name: str):
5+
async def add_book_to_user(book_db: Database, user_db: Database, username: str, book_id: str):
66
"""
7-
주어진 username에 해당하는 사용자의 books 필드에,
7+
주어진 username에 해당하는 사용자의 book 필드에,
88
books 컬렉션에서 book_name에 해당하는 책의 _id를 추가합니다.
99
"""
1010
# books 컬렉션에서 book_name에 해당하는 책을 조회합니다.
11-
book = await db["books"].find_one({"book_name": book_name})
11+
book = await book_db["books"].find_one({"_id": book_id})
1212
if not book:
1313
raise HTTPException(status_code=404, detail="Book not found")
1414

15-
# 책의 _id를 가져옵니다.
16-
book_id = book["_id"]
17-
18-
# 사용자의 문서에서 books 필드에 책의 _id를 추가합니다.
15+
# 사용자의 문서에서 book 필드에 책의 _id를 추가합니다.
1916
# $addToSet은 이미 존재하는 값은 추가하지 않습니다.
20-
result = await db["users"].update_one(
17+
result = await user_db["users"].update_one(
2118
{"name": username},
2219
{"$addToSet": {"book": book_id}}
2320
)
24-
25-
# result.modified_count가 0이면 이미 추가되었거나 사용자가 존재하지 않을 수 있음.
26-
return book_id
21+
if result.modified_count == 0:
22+
raise HTTPException(
23+
status_code=status.HTTP_400_BAD_REQUEST,
24+
detail="사용자 상태 업데이트에 실패하였습니다."
25+
)
26+
return result
2727

2828
async def get_book_info(db: Database, book_id: str):
2929
"""

0 commit comments

Comments
 (0)