Skip to content

Commit fe48833

Browse files
authored
[Feat] 문서 업로드 구현하기 (#21)
## 작업 내역 (관련 이슈) - 문서 업로드 구현하기 ## 특이 사항 - feat/ #16
2 parents 02789b5 + 46d3d0c commit fe48833

11 files changed

Lines changed: 288 additions & 13 deletions

File tree

.vscode/settings.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"devon-aide.resourcePath": "c:\\Users\\user\\.vscode\\extensions\\lgcns-devon-aide.devon-aide-0.0.1\\resource"
3+
}

poetry.lock

Lines changed: 196 additions & 12 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ httpx = "^0.28.1"
1818
pymongo = "^4.11.3"
1919
requests = "^2.32.3"
2020
python-multipart = "^0.0.20"
21+
sqlalchemy = "^2.0.39"
2122

2223
[build-system]
2324
requires = ["poetry-core"]

src/main/document/__init__.py

Whitespace-only changes.
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import uuid
2+
from fastapi import APIRouter, Depends, HTTPException
3+
from sqlalchemy.orm import Session
4+
5+
from src.auth.dependencies import get_current_user
6+
from src.main.document.service.document_service import save_document_service
7+
from src.main.document.dto.document import documentRequestDto
8+
9+
router = APIRouter(
10+
prefix="/documents",
11+
tags=["문서 업로드"]
12+
)
13+
14+
@router.post("")
15+
async def uploadDocument(request: documentRequestDto, user_id: uuid.UUID = Depends(get_current_user)):
16+
try:
17+
document_id = await save_document_service(request, str(user_id))
18+
return document_id
19+
except Exception as e:
20+
raise HTTPException(status_code=500, detail=f"문서 업로드 중 문제 발생: {str(e)}")

src/main/document/dto/__init__.py

Whitespace-only changes.

src/main/document/dto/document.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
from pydantic import BaseModel
2+
from datetime import datetime
3+
4+
class saveDocument(BaseModel):
5+
file_id: str
6+
document_name: str
7+
document_image_url: str # 더미
8+
introduction: str
9+
downloads: int # 더미
10+
pageNumber: int # 더미
11+
upload_date: datetime
12+
uploader_id: str
13+
price: float
14+
category: str
15+
16+
class documentRequestDto(BaseModel):
17+
file_id: str
18+
document_name: str
19+
introduction: str
20+
price: float
21+
category: str

src/main/document/repository/__init__.py

Whitespace-only changes.
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
from src.config.mongodb import get_mongo_client
2+
from src.main.document.dto.document import saveDocument
3+
from datetime import datetime
4+
5+
##db에 문서 저장하기
6+
def save_document(document : saveDocument) -> str:
7+
client = get_mongo_client()
8+
db = client['xrpedia-data']
9+
document_collection = db['document_collection'] #db 이름 지정
10+
11+
document_id = document_collection.insert_one(document.model_dump()).inserted_id
12+
return str(document_id)
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
#1. 사용자로부터 request를 받아온다.
2+
#2. 이를 db에 저장한다.
3+
#3. client에게 보낸다.
4+
5+
from src.main.document.repository.document_repository import save_document
6+
from src.main.document.dto.document import saveDocument, documentRequestDto
7+
from datetime import datetime
8+
import asyncio
9+
10+
11+
# 사용자로부터 request 받아서 ~~
12+
async def save_document_service(request: documentRequestDto, user_id: str) :
13+
upload_date = datetime.now()
14+
15+
saved = saveDocument(
16+
file_id = request.file_id,
17+
document_name = request.document_name,
18+
document_image_url="https://image일것 같아?",
19+
introduction=request.introduction,
20+
downloads=32,
21+
pageNumber=3,
22+
upload_date=upload_date,
23+
uploader_id=user_id,
24+
price=request.price,
25+
category=request.category
26+
)
27+
28+
#db에 저장하기
29+
document_id = save_document(saved)
30+
31+
32+
return document_id

0 commit comments

Comments
 (0)