From 7102a02143f6ae630443f8925089a894fc934ab0 Mon Sep 17 00:00:00 2001 From: seoyeon0103 Date: Sun, 23 Mar 2025 01:00:47 +0900 Subject: [PATCH] =?UTF-8?q?Feat:=20document=20=EC=A1=B0=ED=9A=8C=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../document/controller/DocumentAPIRouter.py | 13 +++++- src/main/document/dto/document.py | 17 +++++++- .../repository/document_repository.py | 40 ++++++++++++++++++- src/main/document/service/document_service.py | 10 +++-- 4 files changed, 72 insertions(+), 8 deletions(-) diff --git a/src/main/document/controller/DocumentAPIRouter.py b/src/main/document/controller/DocumentAPIRouter.py index df08a0f..578f34a 100644 --- a/src/main/document/controller/DocumentAPIRouter.py +++ b/src/main/document/controller/DocumentAPIRouter.py @@ -3,8 +3,8 @@ from sqlalchemy.orm import Session from src.auth.dependencies import get_current_user -from src.main.document.service.document_service import save_document_service -from src.main.document.dto.document import documentRequestDto +from src.main.document.service.document_service import save_document_service, get_document_detail +from src.main.document.dto.document import documentRequestDto,documentDetailDto router = APIRouter( prefix="/documents", @@ -18,3 +18,12 @@ async def uploadDocument(request: documentRequestDto, user_id: uuid.UUID = Depen return document_id except Exception as e: raise HTTPException(status_code=500, detail=f"문서 업로드 중 문제 발생: {str(e)}") + +@router.get("/{document_id}", response_model=documentDetailDto) +async def getDocument(document_id: str): + try: + if not document_id: + raise Exception(404, detail="문서를 찾을 수 없습니다.") + return await get_document_detail(document_id) + except Exception as e: + raise HTTPException(500, detail=f"조회 실패: {str(e)}") \ No newline at end of file diff --git a/src/main/document/dto/document.py b/src/main/document/dto/document.py index 02299c0..b3db460 100644 --- a/src/main/document/dto/document.py +++ b/src/main/document/dto/document.py @@ -12,10 +12,25 @@ class saveDocument(BaseModel): uploader_id: str price: float category: str + rating: float # 더미 class documentRequestDto(BaseModel): file_id: str document_name: str introduction: str price: float - category: str \ No newline at end of file + category: str + +class documentDetailDto(BaseModel): + document_id: str + file_id: str + document_name: str + document_image_url: str + introduction: str + downloads: int + pageNumber: int + upload_date: datetime + uploader: str + price: float + category: str + rating: float \ No newline at end of file diff --git a/src/main/document/repository/document_repository.py b/src/main/document/repository/document_repository.py index dc0ae15..80c3b8c 100644 --- a/src/main/document/repository/document_repository.py +++ b/src/main/document/repository/document_repository.py @@ -1,6 +1,7 @@ from src.config.mongodb import get_mongo_client -from src.main.document.dto.document import saveDocument +from src.main.document.dto.document import saveDocument, documentDetailDto from datetime import datetime +from bson import ObjectId ##db에 문서 저장하기 def save_document(document : saveDocument) -> str: @@ -9,4 +10,39 @@ def save_document(document : saveDocument) -> str: document_collection = db['document_collection'] #db 이름 지정 document_id = document_collection.insert_one(document.model_dump()).inserted_id - return str(document_id) \ No newline at end of file + return str(document_id) + +# db에서 문서 조회하기 +def get_document(document_id: str) -> documentDetailDto: + client = get_mongo_client() + db = client['xrpedia-data'] + document_collection = db['document_collection'] + + get_doc = document_collection.find_one({"_id": ObjectId(document_id)}) + + # uploader = + + doc = documentDetailDto( + document_id=str(get_doc["_id"]), + file_id=get_doc["file_id"], + document_name=get_doc["document_name"], + document_image_url= get_doc["document_image_url"], + introduction= get_doc["introduction"], + downloads= get_doc["downloads"], + pageNumber= int(get_doc["pageNumber"], 0), + upload_date= get_doc["upload_date"], + uploader= get_doc["uploader_id"], #이거 추후에 변경해야 함함 + price= get_doc["price"], + category= get_doc["category"], + rating= get_doc["rating"]) + + return doc + +# def get_user_name(user_id: str): +# client = get_mongo_client() +# db = client['xrpedia-data'] +# document_collection = db['wallet'] + +# user = document_collection.find_one({"_id":ObjectId(user_id)}) + +# return user[""] diff --git a/src/main/document/service/document_service.py b/src/main/document/service/document_service.py index 3545556..ff09646 100644 --- a/src/main/document/service/document_service.py +++ b/src/main/document/service/document_service.py @@ -2,7 +2,7 @@ #2. 이를 db에 저장한다. #3. client에게 보낸다. -from src.main.document.repository.document_repository import save_document +from src.main.document.repository.document_repository import save_document, get_document from src.main.document.dto.document import saveDocument, documentRequestDto from datetime import datetime import asyncio @@ -22,11 +22,15 @@ async def save_document_service(request: documentRequestDto, user_id: str) : upload_date=upload_date, uploader_id=user_id, price=request.price, - category=request.category + category=request.category, + rating=4.0 ) #db에 저장하기 document_id = save_document(saved) + return document_id - return document_id \ No newline at end of file +# 조회하기 +async def get_document_detail(document_id: str): + return get_document(document_id) \ No newline at end of file