From 57b7a4921d65bb4829d7a071fd60ef90d0a74741 Mon Sep 17 00:00:00 2001 From: gahusb Date: Mon, 13 Apr 2026 04:14:47 +0900 Subject: [PATCH] =?UTF-8?q?feat(realestate-lab):=20=EC=A2=85=EB=A3=8C(?= =?UTF-8?q?=EC=99=84=EB=A3=8C)=20=EC=B2=AD=EC=95=BD=20=EA=B3=B5=EA=B3=A0?= =?UTF-8?q?=20=EC=9D=BC=EA=B4=84=20=EC=82=AD=EC=A0=9C=20API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - db.delete_closed_announcements(): status='완료' 공고 일괄 삭제 - DELETE /api/realestate/announcements/closed 엔드포인트 추가 - {ann_id} 라우트보다 먼저 등록 (FastAPI prefix 매칭 순서) - 반환: {"ok": True, "deleted": } Co-Authored-By: Claude Opus 4.6 --- realestate-lab/app/db.py | 7 +++++++ realestate-lab/app/main.py | 9 ++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/realestate-lab/app/db.py b/realestate-lab/app/db.py index aa81e65..45b4dc6 100644 --- a/realestate-lab/app/db.py +++ b/realestate-lab/app/db.py @@ -401,6 +401,13 @@ def delete_announcement(ann_id: int) -> bool: return cur.rowcount > 0 +def delete_closed_announcements() -> int: + """status='완료' 공고 일괄 삭제. 삭제된 건수 반환.""" + with _conn() as conn: + cur = conn.execute("DELETE FROM announcements WHERE status = '완료'") + return cur.rowcount + + def update_all_statuses(): """모든 진행중 공고의 status를 날짜 기반으로 재계산.""" with _conn() as conn: diff --git a/realestate-lab/app/main.py b/realestate-lab/app/main.py index 9edf760..d436058 100644 --- a/realestate-lab/app/main.py +++ b/realestate-lab/app/main.py @@ -8,7 +8,7 @@ from apscheduler.schedulers.background import BackgroundScheduler from .db import ( init_db, get_announcements, get_announcement, create_announcement, - update_announcement, delete_announcement, toggle_bookmark, + update_announcement, delete_announcement, delete_closed_announcements, toggle_bookmark, update_all_statuses, get_profile, upsert_profile, get_matches, mark_match_read, get_last_collect_log, get_dashboard, @@ -112,6 +112,13 @@ def api_announcement_bookmark(ann_id: int): return result +@app.delete("/api/realestate/announcements/closed") +def api_announcement_delete_closed(): + """status='완료' 공고 일괄 삭제.""" + count = delete_closed_announcements() + return {"ok": True, "deleted": count} + + @app.delete("/api/realestate/announcements/{ann_id}") def api_announcement_delete(ann_id: int): if not delete_announcement(ann_id):