Skip to content

Commit b717e68

Browse files
authored
Merge pull request #44 from RestTest-App/feat/review_note_test-#43
[Feat #43] review note post api μž‘μ„±
2 parents 0b883c1 + 8ef8493 commit b717e68

12 files changed

Lines changed: 154 additions & 12 deletions

File tree

β€Žapi/v1/review/review_router.pyβ€Ž

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,31 @@
1+
from pyexpat.errors import messages
2+
13
from fastapi import APIRouter, Depends
4+
from sqlalchemy.ext.asyncio import AsyncSession
25
from sqlalchemy.orm import Session
36

7+
from app.auth.dependency import get_current_user
8+
from app.review.dto.request.add_review_note_test_request import AddReviewNoteTestRequestDto
49
from app.review.dto.request.review_test_mode_request import ReviewTestModeRequest
510
from app.review.dto.response.get_review_note_list_response import GetReviewNoteListResponse
611
from app.review.dto.response.get_review_rest_mode_response import GetReviewRestModeResponse
712
from app.review.dto.response.get_review_test_mode_response import GetReviewTestModeResponse
13+
from app.review.usecase.review_note_test_usecase import ReviewNoteTestUseCase
814
from app.review.usecase.review_usecase import add_review_note_test_mode_usecase, get_review_note_list_usecase, \
915
get_review_note_rest_mode_usecase, get_review_note_test_mode_usecase, delete_review_note_usecase
16+
from app.utils.dto.success import ok
1017
from database.dependency import get_db
18+
from domain.user.entity import User
1119

1220
router = APIRouter()
1321

14-
@router.post("/add-review-note-test-mode/{exam_id}", response_model=GetReviewTestModeResponse)
15-
async def add_review_note_test_mode(
16-
exam_id: int,
17-
request: ReviewTestModeRequest,
18-
db: Session = Depends(get_db)
19-
):
20-
return add_review_note_test_mode_usecase(db, request, exam_id=exam_id)
22+
# @router.post("/add-review-note-test-mode/{exam_id}", response_model=GetReviewTestModeResponse)
23+
# async def add_review_note_test_mode(
24+
# exam_id: int,
25+
# request: ReviewTestModeRequest,
26+
# db: Session = Depends(get_db)
27+
# ):
28+
# return add_review_note_test_mode_usecase(db, request, exam_id=exam_id)
2129

2230
@router.get("/get-review-note-test-mode/{review_note_id}", response_model=GetReviewTestModeResponse)
2331
async def get_review_note_test_mode(review_note_id: int, db: Session = Depends(get_db)):
@@ -34,3 +42,18 @@ async def get_review_note_list(db: Session = Depends(get_db)):
3442
@router.delete("/delete-review-note/{reviewNoteId}")
3543
async def delete_review_note(reviewNoteId: int, db: Session = Depends(get_db)):
3644
return delete_review_note_usecase(db, review_note_id=reviewNoteId)
45+
46+
@router.post("/add-review-note-test-mode/{exam_id}", response_model=None)
47+
async def add_review_note_test_mode(
48+
request: AddReviewNoteTestRequestDto,
49+
user: User = Depends(get_current_user),
50+
db: AsyncSession = Depends(get_db)
51+
):
52+
usecase = ReviewNoteTestUseCase()
53+
await usecase.execute(
54+
request=request,
55+
user_id=user.id,
56+
db=db
57+
)
58+
return ok(data=None, message="λ³΅μŠ΅λ…ΈνŠΈ μΆ”κ°€ 성곡")
59+

β€Žapi/v1/routers.pyβ€Ž

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,5 @@
1414
router.include_router(studybook_router.router, tags=["studybook"], prefix="/studybook")
1515
router.include_router(studybook_question_router.router, tags=["studybook_question"], prefix="/studybook-question")
1616
router.include_router(test_router.router, tags=["test"], prefix="/test")
17-
router.include_router(certificate_router.router, tags=["certificate"], prefix="/user")
17+
router.include_router(certificate_router.router, tags=["certificate"], prefix="/user")
18+
router.include_router(review_router.router, tags=["review"], prefix="/review")

β€Žapp/review/dto/__init__.pyβ€Ž

Whitespace-only changes.

β€Žapp/review/dto/request/__init__.pyβ€Ž

Whitespace-only changes.
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
from typing import List
2+
from pydantic import BaseModel
3+
4+
from app.review.dto.request.question_info import QuestionInfoResponseDto
5+
6+
7+
class AddReviewNoteTestRequestDto(BaseModel):
8+
result_id: int
9+
test_id: int
10+
question_list: List[QuestionInfoResponseDto]
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
from pydantic import BaseModel
2+
3+
4+
class QuestionInfoResponseDto(BaseModel):
5+
test_tracker_id: int
6+
question_id: int
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
from sqlalchemy.ext.asyncio import AsyncSession
2+
3+
from app.review.dto.request.add_review_note_test_request import AddReviewNoteTestRequestDto
4+
from domain.review.service.review_note_test_service import ReviewNoteTestService
5+
6+
7+
class ReviewNoteTestUseCase:
8+
9+
def __init__(
10+
self,
11+
service: ReviewNoteTestService = ReviewNoteTestService()
12+
):
13+
self.service = service
14+
15+
async def execute(
16+
self,
17+
request: AddReviewNoteTestRequestDto,
18+
user_id: int,
19+
db: AsyncSession
20+
) -> None:
21+
await self.service.add_review_note_test(
22+
db=db,
23+
user_id=user_id,
24+
question_list=request.question_list
25+
)

β€Ždomain/auth/service/jwt_service.pyβ€Ž

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,12 +56,13 @@ def create_refresh_token(self, user_id: int) -> Tuple[str, str]:
5656

5757

5858
# 토큰 λ””μ½”λ”© 및 μœ νš¨μ„± μ˜ˆμ™Έμ²˜λ¦¬
59-
def verify_token(self, token: str) -> Dict:
59+
@staticmethod
60+
def verify_token(token: str) -> Dict:
6061
try:
6162
payload = jwt.decode(
6263
token,
63-
self.secret_key,
64-
algorithms=[self.algorithm]
64+
settings.JWT_SECRET_KEY,
65+
algorithms=[settings.JWT_ALGORITHM]
6566
)
6667
return payload
6768
except ExpiredSignatureError:
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
from datetime import datetime
2+
3+
from sqlalchemy.ext.asyncio import AsyncSession
4+
5+
from domain.review.entity import ReviewNoteByTest
6+
7+
8+
class ReviewNoteTestRepository:
9+
10+
@staticmethod
11+
async def add_review_note(db: AsyncSession, user_id: int, study_tracker_id: int) -> ReviewNoteByTest:
12+
review = ReviewNoteByTest(
13+
user_id=user_id,
14+
study_tracker_id=study_tracker_id,
15+
created_at = datetime.now()
16+
17+
)
18+
db.add(review)
19+
await db.commit()
20+
await db.refresh(review)

β€Ždomain/review/service/__init__.pyβ€Ž

Whitespace-only changes.

0 commit comments

Comments
Β (0)