Skip to content

Commit 6686f3e

Browse files
9keyyyyGukhee Jo
andauthored
fix: 로또 번호 추천 버그 수정 및 지난회차 1등 당첨금 필드 추가 (#15)
Co-authored-by: Gukhee Jo <[email protected]>
1 parent 9e2e34f commit 6686f3e

File tree

4 files changed

+30
-18
lines changed

4 files changed

+30
-18
lines changed

src/lotto/entities/schemas.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ class LottoRecommendationContent(BaseModel):
6969
)
7070
strong_element: FiveElements = Field(description="강한 기운", examples=["화(火)"])
7171
weak_element: FiveElements = Field(description="상충되는 기운", examples=["목(木)"])
72+
last_prize_amount: int = Field(description="지난 회차 1등 당첨금")
7273

7374

7475
class LottoRecommendation(CommonBase):

src/lotto/repository.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,3 +108,13 @@ async def get_excluded_numbers(
108108
)
109109
result = await self.session.execute(query)
110110
return [row[0] for row in result.fetchall()]
111+
112+
async def get_latest_prize_amount(self) -> Optional[int]:
113+
"""가장 최신 회차의 1등 당첨금을 조회합니다."""
114+
query = (
115+
select(LottoDraws.first_prize_amount)
116+
.order_by(desc(LottoDraws.round))
117+
.limit(1)
118+
)
119+
result = await self.session.execute(query)
120+
return result.scalar_one_or_none()

src/lotto/service.py

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,11 @@ async def create_lotto_recommendation(self, user_id: str) -> LottoRecommendation
7070
# 3. 통계 데이터 조회
7171
frequent_nums = await self.lotto_repository.get_frequent_numbers(limit=10)
7272
infrequent_nums = await self.lotto_repository.get_excluded_numbers(limit=2)
73+
74+
# 4. 최신 회차 당첨금 조회
75+
latest_prize_amount = await self.lotto_repository.get_latest_prize_amount()
7376

74-
# 4. HCX API 호출하여 로또 추천 생성
77+
# 5. HCX API 호출하여 로또 추천 생성
7578
hcx_client = HCXClient()
7679

7780
# 사용자 사주 정보 사용
@@ -81,16 +84,8 @@ async def create_lotto_recommendation(self, user_id: str) -> LottoRecommendation
8184
"month_pillar": four_pillar.get("month_pillar"),
8285
"day_pillar": four_pillar.get("day_pillar"),
8386
"time_pillar": four_pillar.get("time_pillar"),
84-
"strong_element": (
85-
four_pillar.get("strong_elements")[0]
86-
if four_pillar.get("strong_elements")
87-
else None
88-
),
89-
"weak_element": (
90-
four_pillar.get("weak_elements")[0]
91-
if four_pillar.get("weak_elements")
92-
else None
93-
),
87+
"strong_element": four_pillar.get("strong_element"),
88+
"weak_element": four_pillar.get("weak_element"),
9489
}
9590

9691
# HCXUtils를 사용하여 프롬프트 가져오기
@@ -125,6 +120,7 @@ async def create_lotto_recommendation(self, user_id: str) -> LottoRecommendation
125120
infrequent_nums=infrequent_nums,
126121
strong_element=lotto_prompt_data["strong_element"],
127122
weak_element=lotto_prompt_data["weak_element"],
123+
last_prize_amount=latest_prize_amount or 0,
128124
)
129125

130126
except Exception as e:
@@ -133,7 +129,7 @@ async def create_lotto_recommendation(self, user_id: str) -> LottoRecommendation
133129
status_code=400, detail=f"로또 추천 생성 실패: {str(e)}"
134130
)
135131

136-
# 5. 데이터베이스에 저장
132+
# 6. 데이터베이스에 저장
137133
recommendation = await self.lotto_repository.create_lotto_recommendation(
138134
user_id=user_id, round=latest_round + 1, content=content.model_dump()
139135
)

src/users/router.py

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ async def create_user(user_create: UserCreate, user_service: UserService = Depen
3838
- name: 사용자 이름
3939
- birth_date: 사용자 생년월일시 (YYYY-MM-DD HH:MM:SS 형식)
4040
- 생시를 모르는 경우 입력하지 않음 (YYYY-MM-DD 형식)
41-
- 선택한 시간 범위에서 가장 빠른 시간으로 입력 (예, 23:00:00 ~ 00:59:59의 경우 23:00:00로
41+
- 선택한 시간 범위에서 가장 빠른 시간으로 입력 (ex. 23:00:00 ~ 00:59:59의 경우 23:00:00로 입력)
4242
- gender: 사용자 성별 (M/F)
4343
"""
4444
return await user_service.create_user(user_create)
@@ -66,15 +66,15 @@ async def get_user_four_pillar(user_id: str, user_service: UserService = Depends
6666
"""
6767
return await user_service.get_user_four_pillar(user_id)
6868

69+
6970
@user_router.put("/{user_id}", response_model=UserDetail)
7071
async def update_user(
71-
user_id: str,
72-
user_update: UserUpdate,
73-
user_service: UserService = Depends()
72+
user_id: str, user_update: UserUpdate, user_service: UserService = Depends()
7473
):
7574
"""사용자 정보를 수정합니다."""
7675
return await user_service.update_user(user_id, user_update)
7776

77+
7878
@user_router.post("/{user_id}/lotto-recommendation", response_model=LottoRecommendation)
7979
async def create_lotto_recommendation(
8080
user_id: str,
@@ -90,6 +90,7 @@ async def create_lotto_recommendation(
9090
status_code=500, detail=f"로또 추천 생성 중 오류가 발생했습니다: {str(e)}"
9191
)
9292

93+
9394
@user_router.get(
9495
"/{user_id}/lotto-recommendation", response_model=Optional[LottoRecommendation]
9596
)
@@ -99,20 +100,24 @@ async def get_lotto_recommendation(
99100
):
100101
"""
101102
사용자의 최신 로또 추천을 조회합니다.
102-
103+
103104
content:
104105
- reason: 사주 기반 로또 추천 이유
105106
- num1, num2: 기운과 잘 맞는 숫자 (1-45)
106107
- num3, num4: 재물운 좋을 때 나오는 숫자 (1-45)
107108
- num5, num6: 최근 자주 나온 번호 (1-45)
108109
- cold_nums: 기운과 상충하는 숫자 (1-3개)
109110
- infrequent_nums: 등장 빈도가 낮은 숫자 (1-3개)
111+
- last_prize_amount: 지난 회차 1등 당첨금 (1인당 수령액)
110112
- strong_element: 강한 기운
111113
- weak_element: 상충되는 기운
112114
"""
113115
return await lotto_service.get_lotto_recommendation(user_id=user_id)
114116

115-
@user_router.get("/{user_id}/daily-fortunes", response_model=List[UserDailyFortuneSummary])
117+
118+
@user_router.get(
119+
"/{user_id}/daily-fortunes", response_model=List[UserDailyFortuneSummary]
120+
)
116121
async def get_user_daily_fortunes(
117122
user_id: str,
118123
fortune_date: date = Query(default=date.today()),

0 commit comments

Comments
 (0)