feat(lotto): POST /api/lotto/purchase/bulk — 결정카드 원클릭 기록
This commit is contained in:
@@ -991,6 +991,51 @@ def update_purchase_results(purchase_id: int, results: list, total_prize: int) -
|
||||
)
|
||||
|
||||
|
||||
def bulk_insert_purchases_from_briefing(draw_no: int, tier_mode: str, amount: int) -> Dict[str, Any]:
|
||||
"""tier_mode 에 해당하는 큐레이터 picks 를 purchase_history 에 일괄 INSERT.
|
||||
|
||||
tier_mode: "core" | "core_bonus" | "core_bonus_extended" | "full"
|
||||
"""
|
||||
briefing = get_briefing(draw_no)
|
||||
if not briefing:
|
||||
return {"ok": False, "reason": "briefing not found"}
|
||||
|
||||
picks = briefing.get("picks") or {}
|
||||
if isinstance(picks, list):
|
||||
# 마이그레이션 이전 형태
|
||||
picks = {"core": picks, "bonus": [], "extended": [], "pool": []}
|
||||
|
||||
tier_chain = {
|
||||
"core": ["core"],
|
||||
"core_bonus": ["core", "bonus"],
|
||||
"core_bonus_extended": ["core", "bonus", "extended"],
|
||||
"full": ["core", "bonus", "extended", "pool"],
|
||||
}.get(tier_mode)
|
||||
if not tier_chain:
|
||||
return {"ok": False, "reason": f"unknown tier_mode: {tier_mode}"}
|
||||
|
||||
inserted_ids = []
|
||||
with _conn() as conn:
|
||||
for tier in tier_chain:
|
||||
for idx, pick in enumerate(picks.get(tier) or []):
|
||||
source_strategy = f"curator_{tier}"
|
||||
source_detail = json.dumps({
|
||||
"tier": tier,
|
||||
"role": pick.get("risk_tag"),
|
||||
"set_index": idx,
|
||||
"draw_no": draw_no,
|
||||
}, ensure_ascii=False)
|
||||
numbers_json = json.dumps([pick.get("numbers")], ensure_ascii=False)
|
||||
cur = conn.execute(
|
||||
"""INSERT INTO purchase_history
|
||||
(draw_no, amount, sets, prize, note, numbers, is_real, source_strategy, source_detail)
|
||||
VALUES (?, ?, 1, 0, '', ?, 1, ?, ?)""",
|
||||
(draw_no, 1000, numbers_json, source_strategy, source_detail),
|
||||
)
|
||||
inserted_ids.append(cur.lastrowid)
|
||||
return {"ok": True, "inserted_ids": inserted_ids, "sets": len(inserted_ids)}
|
||||
|
||||
|
||||
# --- Lotto Briefings ---
|
||||
|
||||
def save_briefing(data: Dict[str, Any]) -> int:
|
||||
|
||||
Reference in New Issue
Block a user