forked from Rockachopa/Timmy-time-dashboard
feat: code quality audit + autoresearch integration + infra hardening (#150)
This commit is contained in:
committed by
GitHub
parent
fd0ede0d51
commit
ae3bb1cc21
@@ -6,7 +6,7 @@ import uuid
|
||||
from datetime import datetime
|
||||
from pathlib import Path
|
||||
|
||||
from fastapi import APIRouter, HTTPException, Request, Form
|
||||
from fastapi import APIRouter, Form, HTTPException, Request
|
||||
from fastapi.responses import HTMLResponse, JSONResponse
|
||||
|
||||
from dashboard.templating import templates
|
||||
@@ -26,7 +26,8 @@ def _get_db() -> sqlite3.Connection:
|
||||
DB_PATH.parent.mkdir(parents=True, exist_ok=True)
|
||||
conn = sqlite3.connect(str(DB_PATH))
|
||||
conn.row_factory = sqlite3.Row
|
||||
conn.execute("""
|
||||
conn.execute(
|
||||
"""
|
||||
CREATE TABLE IF NOT EXISTS work_orders (
|
||||
id TEXT PRIMARY KEY,
|
||||
title TEXT NOT NULL,
|
||||
@@ -41,7 +42,8 @@ def _get_db() -> sqlite3.Connection:
|
||||
created_at TEXT DEFAULT (datetime('now')),
|
||||
completed_at TEXT
|
||||
)
|
||||
""")
|
||||
"""
|
||||
)
|
||||
conn.commit()
|
||||
return conn
|
||||
|
||||
@@ -71,7 +73,9 @@ class _WOView:
|
||||
self.submitter = row.get("submitter", "dashboard")
|
||||
self.status = _EnumLike(row.get("status", "submitted"))
|
||||
raw_files = row.get("related_files", "")
|
||||
self.related_files = [f.strip() for f in raw_files.split(",") if f.strip()] if raw_files else []
|
||||
self.related_files = (
|
||||
[f.strip() for f in raw_files.split(",") if f.strip()] if raw_files else []
|
||||
)
|
||||
self.result = row.get("result", "")
|
||||
self.rejection_reason = row.get("rejection_reason", "")
|
||||
self.created_at = row.get("created_at", "")
|
||||
@@ -98,6 +102,7 @@ def _query_wos(db, statuses):
|
||||
# Page route
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
|
||||
@router.get("/work-orders/queue", response_class=HTMLResponse)
|
||||
async def work_orders_page(request: Request):
|
||||
db = _get_db()
|
||||
@@ -109,21 +114,26 @@ async def work_orders_page(request: Request):
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
return templates.TemplateResponse(request, "work_orders.html", {
|
||||
"pending_count": len(pending),
|
||||
"pending": pending,
|
||||
"active": active,
|
||||
"completed": completed,
|
||||
"rejected": rejected,
|
||||
"priorities": PRIORITIES,
|
||||
"categories": CATEGORIES,
|
||||
})
|
||||
return templates.TemplateResponse(
|
||||
request,
|
||||
"work_orders.html",
|
||||
{
|
||||
"pending_count": len(pending),
|
||||
"pending": pending,
|
||||
"active": active,
|
||||
"completed": completed,
|
||||
"rejected": rejected,
|
||||
"priorities": PRIORITIES,
|
||||
"categories": CATEGORIES,
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Form submit
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
|
||||
@router.post("/work-orders/submit", response_class=HTMLResponse)
|
||||
async def submit_work_order(
|
||||
request: Request,
|
||||
@@ -159,6 +169,7 @@ async def submit_work_order(
|
||||
# HTMX partials
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
|
||||
@router.get("/work-orders/queue/pending", response_class=HTMLResponse)
|
||||
async def pending_partial(request: Request):
|
||||
db = _get_db()
|
||||
@@ -174,7 +185,9 @@ async def pending_partial(request: Request):
|
||||
parts = []
|
||||
for wo in wos:
|
||||
parts.append(
|
||||
templates.TemplateResponse(request, "partials/work_order_card.html", {"wo": wo}).body.decode()
|
||||
templates.TemplateResponse(
|
||||
request, "partials/work_order_card.html", {"wo": wo}
|
||||
).body.decode()
|
||||
)
|
||||
return HTMLResponse("".join(parts))
|
||||
|
||||
@@ -194,7 +207,9 @@ async def active_partial(request: Request):
|
||||
parts = []
|
||||
for wo in wos:
|
||||
parts.append(
|
||||
templates.TemplateResponse(request, "partials/work_order_card.html", {"wo": wo}).body.decode()
|
||||
templates.TemplateResponse(
|
||||
request, "partials/work_order_card.html", {"wo": wo}
|
||||
).body.decode()
|
||||
)
|
||||
return HTMLResponse("".join(parts))
|
||||
|
||||
@@ -203,8 +218,11 @@ async def active_partial(request: Request):
|
||||
# Action endpoints
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
|
||||
async def _update_status(request: Request, wo_id: str, new_status: str, **extra):
|
||||
completed_at = datetime.utcnow().isoformat() if new_status in ("completed", "rejected") else None
|
||||
completed_at = (
|
||||
datetime.utcnow().isoformat() if new_status in ("completed", "rejected") else None
|
||||
)
|
||||
db = _get_db()
|
||||
try:
|
||||
sets = ["status=?", "completed_at=COALESCE(?, completed_at)"]
|
||||
|
||||
Reference in New Issue
Block a user