diff --git a/app/api/routes.py b/app/api/routes.py index 1648ed4..dff6b9f 100644 --- a/app/api/routes.py +++ b/app/api/routes.py @@ -195,7 +195,6 @@ def education_search( def bookmark_education( data: EducationBookmarkRequest = Body( example={ - "user_id": 1, "bookmarks": [ { "title": "교육1", @@ -211,7 +210,8 @@ def bookmark_education( db: Session = Depends(get_db), token_data=Depends(verify_jwt), ): - return save_bookmarked_education(data, db) + user_id = token_data["userId"] + return save_bookmarked_education(user_id, data, db) @router.post( @@ -279,7 +279,6 @@ async def policy_recommend( def bookmark_policy( data: PolicySaveRequest = Body( example={ - "user_id": 1, "policies": [ { "title": "정책1", @@ -299,7 +298,8 @@ def bookmark_policy( db: Session = Depends(get_db), token_data=Depends(verify_jwt), ): - return save_policy_bookmarks(data, db) + user_id = token_data["userId"] + return save_policy_bookmarks(user_id, data, db) # 세션 생성 및 첫 번째 질문 반환 @@ -371,7 +371,7 @@ def result(session_id: str, token_data=Depends(verify_jwt)): "/api/resume/save", tags=["AI 자기소개서"], summary="자기소개서 저장", - description="완성된 자기소개서를 DB에 저장합니다. 저장된 content는 JSON 문자열로 저장되며, resume_category와 제목도 함께 저장됩니다.", + description="완성된 자기소개서를 DB에 저장합니다. 저장된 content는 JSON 문자열로 저장되며, resume_category(GENERAL, TECH, CAREER, ACADEMIC)와 제목도 함께 저장됩니다.", response_description="저장 결과 메시지 및 생성된 resume_id", responses={ 200: { @@ -398,7 +398,6 @@ def result(session_id: str, token_data=Depends(verify_jwt)): def save_resume( data: ResumeSaveRequest = Body( example={ - "user_id": 1, "title": "삼성전자 백엔드 개발자 지원 자기소개서", "sections": { "성장과정": "...", @@ -413,16 +412,17 @@ def save_resume( db: Session = Depends(get_db), token_data=Depends(verify_jwt), ): - saved = save_resume_to_db(db, data) + user_id = token_data["userId"] + saved = save_resume_to_db(user_id, db, data) return {"resume_id": saved.id, "message": "자기소개서가 저장되었습니다."} @router.get( - "/api/resume/user/{userId}", + "/api/resume/user", tags=["AI 자기소개서"], response_model=list[ResumeResult], summary="사용자의 자기소개서 목록 조회", - description="특정 user_id에 해당하는 사용자가 저장한 자기소개서 리스트를 조회합니다. 각 자기소개서는 title과 sections(JSON 파싱된 dict 형태)로 반환됩니다.", + description="accessToken 기반 사용자 인증을 통해 사용자가 저장한 자기소개서 리스트를 조회합니다. 각 자기소개서는 title과 sections(JSON 파싱된 dict 형태)로 반환됩니다.", response_description="자기소개서 목록", responses={ 200: { @@ -438,6 +438,8 @@ def save_resume( "입사포부": "...", "강점약점": "...", "프로젝트경험": "...", + "created_at": "2025-05-01T12:00:00", + "updated_at": "2025-05-01T13:00:00", }, } ] @@ -455,9 +457,11 @@ def save_resume( }, ) def get_user_resumes( - userId: int, db: Session = Depends(get_db), token_data=Depends(verify_jwt) + db: Session = Depends(get_db), + token_data=Depends(verify_jwt), ): - return get_resumes_by_user_id(db, userId) + user_id = token_data["userId"] + return get_resumes_by_user_id(db, user_id) @router.get("/ping") diff --git a/app/models/eduSchemas.py b/app/models/eduSchemas.py index 963a0a5..0317e92 100644 --- a/app/models/eduSchemas.py +++ b/app/models/eduSchemas.py @@ -28,5 +28,4 @@ class EducationItem(BaseModel): class EducationBookmarkRequest(BaseModel): - user_id: int bookmarks: List[EducationItem] diff --git a/app/models/policySchemas.py b/app/models/policySchemas.py index 9003b26..e4b59c6 100644 --- a/app/models/policySchemas.py +++ b/app/models/policySchemas.py @@ -26,5 +26,4 @@ class PolicyItem(BaseModel): class PolicySaveRequest(BaseModel): - user_id: int policies: List[PolicyItem] diff --git a/app/models/resumeSchemas.py b/app/models/resumeSchemas.py index 24bdc72..9bf4dc0 100644 --- a/app/models/resumeSchemas.py +++ b/app/models/resumeSchemas.py @@ -37,7 +37,6 @@ class Config: class ResumeSaveRequest(BaseModel): - user_id: int title: str sections: Dict[str, str] resume_category: ResumeCategory diff --git a/app/services/education_service.py b/app/services/education_service.py index 8cf5404..4c2a79b 100644 --- a/app/services/education_service.py +++ b/app/services/education_service.py @@ -50,9 +50,11 @@ def parse_education_xml(xml_data, category): return results -def save_bookmarked_education(data: EducationBookmarkRequest, db: Session): +def save_bookmarked_education( + user_id: int, data: EducationBookmarkRequest, db: Session +): for item in data.bookmarks: - edu = EducationInfoDB(user_id=data.user_id, title=item.title, url=item.url) + edu = EducationInfoDB(user_id=user_id, title=item.title, url=item.url) db.add(edu) db.commit() return {"message": "교육 정보 북마크 성공."} diff --git a/app/services/policy_service.py b/app/services/policy_service.py index dcead7a..a79343f 100644 --- a/app/services/policy_service.py +++ b/app/services/policy_service.py @@ -169,10 +169,10 @@ def recommend_policy_by_category(category: str) -> list[dict]: return results -def save_policy_bookmarks(data: PolicySaveRequest, db: Session): +def save_policy_bookmarks(user_id: int,data: PolicySaveRequest, db: Session): for policy in data.policies: info = PolicyInfo( - user_id=data.user_id, + user_id=user_id, category=policy.category, title=policy.title, description=policy.description, diff --git a/app/services/resume_service.py b/app/services/resume_service.py index 83c9ba3..7d5d798 100644 --- a/app/services/resume_service.py +++ b/app/services/resume_service.py @@ -139,10 +139,10 @@ def get_resume(session_id: str): } -def save_resume_to_db(db: Session, data: ResumeSaveRequest): +def save_resume_to_db(user_id: int, db: Session, data: ResumeSaveRequest): content_json_str = json.dumps(data.sections, ensure_ascii=False) resume = Resume( - user_id=data.user_id, + user_id=user_id, title=data.title, content=content_json_str, resume_category=data.resume_category,