From 8da70dbdb84887e9c6ecd9418ecd96eb4efa164d Mon Sep 17 00:00:00 2001 From: root Date: Sat, 20 Jun 2026 18:11:18 +0000 Subject: [PATCH] add archive column + endpoint for orders --- server.py | 40 +++++++++++++++++++++++++++++++++++----- 1 file changed, 35 insertions(+), 5 deletions(-) diff --git a/server.py b/server.py index 7f6e6e3..eeeb90d 100644 --- a/server.py +++ b/server.py @@ -110,6 +110,11 @@ def init_schema(db): db.execute("ALTER TABLE submissions ADD COLUMN status TEXT NOT NULL DEFAULT 'received'") except Exception: pass + # Migration: add archived column if missing + try: + db.execute("ALTER TABLE submissions ADD COLUMN archived INTEGER NOT NULL DEFAULT 0") + except Exception: + pass def get_setting(db, key, default=""): row = db.execute("SELECT value FROM settings WHERE key = ?", (key,)).fetchone() @@ -403,6 +408,23 @@ def update_status(body: StatusUpdate, request: Request): db.close() return {"ok": True} +# ---- Admin: Archive / Unarchive ---- + + +@app.post("/admin/archive", status_code=200) +def archive_order(body: dict, request: Request): + check_auth(request) + submission_id = body.get("submission_id") + archived = body.get("archived", True) + if not submission_id: + raise HTTPException(400, "submission_id is required") + db = get_db() + db.execute("UPDATE submissions SET archived = ? WHERE id = ?", (1 if archived else 0, submission_id)) + db.commit() + db.close() + return {"ok": True, "id": submission_id, "archived": archived} + + # ---- Admin: Add Note ---- class NoteBody(BaseModel): @@ -437,18 +459,25 @@ def admin_submissions( request: Request, form_id: Optional[int] = None, page: int = 1, - per_page: int = 50 + per_page: int = 50, + include_archived: bool = False ): check_auth(request) db = get_db() offset = (page - 1) * per_page query = "SELECT s.*, f.name as form_name FROM submissions s JOIN forms f ON s.form_id = f.id" - count_query = "SELECT COUNT(*) as c FROM submissions" + count_query = "SELECT COUNT(*) as c FROM submissions s" params = [] + wheres = [] + if not include_archived: + wheres.append("s.archived IS NULL OR s.archived = 0") if form_id: - query += " WHERE s.form_id = ?" - count_query += " WHERE form_id = ?" + wheres.append("s.form_id = ?") params.append(form_id) + if wheres: + where = " WHERE " + " AND ".join(wheres) + query += where + count_query += where query += " ORDER BY s.id DESC LIMIT ? OFFSET ?" total = db.execute(count_query, params).fetchone()["c"] rows = db.execute(query, params + [per_page, offset]).fetchall() @@ -468,7 +497,8 @@ def admin_submissions( "created_at": r["created_at"], "status": r["status"], "data": [dict(d) for d in data], "tags": [t["tag"] for t in tags], - "reply": dict(reply) if reply else None + "reply": dict(reply) if reply else None, + "archived": bool(r["archived"]) if "archived" in r.keys() else False }) db.close() return {