fix(realestate-lab): 매칭 재계산 DB lock 오류 수정
- sqlite3.connect timeout=10 추가 (기본 0초 → 즉시 실패 방지) - run_matching() 단일 connection으로 통합 (프로필 조회~매칭~저장) - matches/refresh 엔드포인트 에러 핸들링 추가 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -11,7 +11,7 @@ DB_PATH = "/app/data/realestate.db"
|
||||
|
||||
|
||||
def _conn():
|
||||
c = sqlite3.connect(DB_PATH)
|
||||
c = sqlite3.connect(DB_PATH, timeout=10)
|
||||
c.row_factory = sqlite3.Row
|
||||
c.execute("PRAGMA journal_mode=WAL;")
|
||||
c.execute("PRAGMA foreign_keys=ON;")
|
||||
|
||||
@@ -159,7 +159,11 @@ def api_matches(page: int = Query(1, ge=1), size: int = Query(20, ge=1, le=100))
|
||||
|
||||
@app.post("/api/realestate/matches/refresh")
|
||||
def api_matches_refresh():
|
||||
try:
|
||||
run_matching()
|
||||
except Exception as e:
|
||||
logger.exception("매칭 실행 실패")
|
||||
raise HTTPException(status_code=500, detail=str(e))
|
||||
return {"ok": True}
|
||||
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ import json
|
||||
import logging
|
||||
from typing import Dict, Any, List
|
||||
|
||||
from .db import get_profile, _conn
|
||||
from .db import _conn, _profile_row_to_dict
|
||||
|
||||
logger = logging.getLogger("realestate-lab")
|
||||
|
||||
@@ -115,13 +115,16 @@ def _compute_score(
|
||||
|
||||
|
||||
def run_matching():
|
||||
"""프로필 기반 매칭을 실행하여 결과를 저장한다."""
|
||||
profile = get_profile()
|
||||
if not profile:
|
||||
"""프로필 기반 매칭을 실행하여 결과를 저장한다.
|
||||
단일 connection으로 프로필 조회 + 매칭 + 저장을 처리하여 DB lock 방지.
|
||||
"""
|
||||
with _conn() as conn:
|
||||
profile_row = conn.execute("SELECT * FROM user_profile WHERE id = 1").fetchone()
|
||||
if not profile_row:
|
||||
logger.info("프로필 미설정 — 매칭 건너뜀")
|
||||
return
|
||||
profile = _profile_row_to_dict(profile_row)
|
||||
|
||||
with _conn() as conn:
|
||||
anns = conn.execute(
|
||||
"SELECT * FROM announcements WHERE status IN ('청약예정', '청약중')"
|
||||
).fetchall()
|
||||
|
||||
Reference in New Issue
Block a user