feat: smart recommendation generator with feedback loop and result checker

This commit is contained in:
2026-01-26 01:15:49 +09:00
parent 597353e6d4
commit 432840a38d
4 changed files with 216 additions and 3 deletions

View File

@@ -10,8 +10,9 @@ from .db import (
update_recommendation,
)
from .recommender import recommend_numbers
from .recommender import recommend_numbers
from .collector import sync_latest, sync_ensure_all
from .generator import generate_smart_recommendations
from .checker import check_results_for_draw
app = FastAPI()
scheduler = BackgroundScheduler(timezone=os.getenv("TZ", "Asia/Seoul"))
@@ -80,7 +81,20 @@ def calc_recent_overlap(numbers: List[int], draws: List[Tuple[int, List[int]]],
@app.on_event("startup")
def on_startup():
init_db()
scheduler.add_job(lambda: sync_latest(LATEST_URL), "cron", hour="9,21", minute=10)
# 1. 로또 당첨번호 동기화 (매일 9시, 21시 10분)
# 동기화 후 새로운 회차가 있으면 채점(check)까지 수행
def _sync_and_check():
res = sync_latest(LATEST_URL)
if res["was_new"]:
# 새로운 회차(예: 1000회)가 나오면, 999회차 기반 추천들을 채점
check_results_for_draw(res["drawNo"])
scheduler.add_job(_sync_and_check, "cron", hour="9,21", minute=10)
# 2. 매일 아침 8시: 지능형 자동 추천 (10개씩)
scheduler.add_job(lambda: generate_smart_recommendations(10), "cron", hour="8", minute=0)
scheduler.start()
@app.get("/health")
@@ -115,7 +129,17 @@ def api_draw(drw_no: int):
@app.post("/api/admin/sync_latest")
def admin_sync_latest():
return sync_latest(LATEST_URL)
res = sync_latest(LATEST_URL)
# 수동 동기화 시에도 신규 회차면 채점
if res["was_new"]:
check_results_for_draw(res["drawNo"])
return res
@app.post("/api/admin/auto_gen")
def admin_auto_gen(count: int = 10):
"""지능형 자동 생성 수동 트리거"""
n = generate_smart_recommendations(count)
return {"generated": n}
@app.get("/api/lotto/stats")
def api_stats():