Skip to content

Commit 4bf42b5

Browse files
authored
Merge pull request #44 from 9git9git/hotfix/challenges-bug-fix
Hotfix/challenges bug fix
2 parents 23d6277 + 8630f69 commit 4bf42b5

File tree

2 files changed

+37
-8
lines changed

2 files changed

+37
-8
lines changed

app/services/ai.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ async def get_goal_challenges_analysis(user_id: str):
2727
모든 목표에 대한 도전과제 추천을 가져옵니다.
2828
"""
2929
challenges = {}
30-
for goal in ["영어", "코딩", "운동"]:
30+
for goal in ["운동", "영어", "코딩"]:
3131
challenge_result = await get_goal_challenges(user_id, goal)
3232
challenges[goal] = challenge_result
3333

app/services/analyze.py

Lines changed: 36 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@
2020
add_recommended_challenge,
2121
update_recommended_challenge_service,
2222
)
23+
from app.services.category import (
24+
select_categories,
25+
)
2326
from app.services.ai import get_ai_analysis, get_goal_challenges_analysis
2427

2528

@@ -95,23 +98,49 @@ async def get_or_create_today_recommended_challenges(
9598
# 3. AI 분석 요청
9699
challenges_data = await get_goal_challenges_analysis(str(user_id))
97100

101+
# 카테고리 목록 가져오기
102+
categories = await select_categories(db)
103+
# 카테고리 이름을 키로, ID를 값으로 하는 딕셔너리 생성
104+
category_map = {
105+
str(category.category_name.value): category.id for category in categories
106+
}
107+
98108
# 4. 각 목표별로 추천 도전과제 생성
99109
created_challenges = []
100110
for goal, challenge_data in challenges_data.items():
111+
progress_rate = 0.0
112+
# AI 분석 결과에서 받은 ID 사용
113+
try:
114+
category_id = UUID(str(challenge_data.get("category_id", "")))
115+
except (ValueError, TypeError):
116+
category_id = None
117+
118+
# category_id가 None이거나 유효하지 않은 경우, 목표 이름에 따라 카테고리 매핑
119+
if category_id is None or category_id not in category_map.values():
120+
# 목표 이름과 카테고리 이름의 유사도를 기반으로 매핑
121+
# 예: "운동하기" -> "운동", "영어공부" -> "영어"
122+
matched_category = None
123+
for category_name, category_id in category_map.items():
124+
if category_name in goal or goal in category_name:
125+
matched_category = category_id
126+
break
127+
128+
# 매칭되는 카테고리가 없으면 첫 번째 카테고리를 기본값으로 사용
129+
category_id = (
130+
matched_category
131+
if matched_category
132+
else next(iter(category_map.values()))
133+
)
134+
progress_rate = -1.0
135+
101136
new_challenge = RecommendedChallengeCreate(
102-
progressRate=0.0,
137+
progressRate=progress_rate,
103138
challengeTask=challenge_data["title"],
104139
challengeDuration=challenge_data["duration"],
105140
challengeDifficulty=challenge_data["difficulty"],
106141
challengeSuggestion=f"{challenge_data['reason']}\n{challenge_data['motivation']}",
107142
)
108143

109-
# AI 분석 결과에서 받은 ID 사용
110-
try:
111-
category_id = UUID(str(challenge_data.get("category_id", "")))
112-
except (ValueError, TypeError):
113-
category_id = None
114-
115144
created_challenge = await add_recommended_challenge(
116145
db, user_id, category_id, new_challenge
117146
)

0 commit comments

Comments
 (0)