fix: published_at bei Tier-1-Triage setzen + Mobile-Triage-Badges + ⏳ für Ungeprüfte
- published_at = CURRENT_TIMESTAMP bei Tier-1-Publish (sonst sortieren NULLs ans Ende) - Mobile-Cards zeigen jetzt auch Triage-Badge (🟢🟡🔴⏳) - Desktop-Tabelle zeigt ⏳ für noch nicht triagierte Einträge - TRIAGE_DELAY_SECONDS env-var (default 360)
This commit is contained in:
@@ -440,7 +440,8 @@ def triage_submission(db, submission_id: int) -> dict:
|
|||||||
db.execute(
|
db.execute(
|
||||||
"""UPDATE submissions
|
"""UPDATE submissions
|
||||||
SET triage_tier=?, triage_reasons=?, triage_at=CURRENT_TIMESTAMP,
|
SET triage_tier=?, triage_reasons=?, triage_at=CURRENT_TIMESTAMP,
|
||||||
public=?, status=?, display_text=?
|
public=?, status=?, display_text=?,
|
||||||
|
published_at=CASE WHEN ? = 1 THEN COALESCE(published_at, CURRENT_TIMESTAMP) ELSE published_at END
|
||||||
WHERE id=?""",
|
WHERE id=?""",
|
||||||
(
|
(
|
||||||
tier,
|
tier,
|
||||||
@@ -448,6 +449,7 @@ def triage_submission(db, submission_id: int) -> dict:
|
|||||||
1 if tier == 1 else 0,
|
1 if tier == 1 else 0,
|
||||||
"published" if tier == 1 else ("blocked" if tier == 3 else "pending"),
|
"published" if tier == 1 else ("blocked" if tier == 3 else "pending"),
|
||||||
display_text,
|
display_text,
|
||||||
|
tier,
|
||||||
submission_id,
|
submission_id,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
@@ -481,7 +483,7 @@ def _run_triage_async(submission_id: int):
|
|||||||
import time as _time
|
import time as _time
|
||||||
import sqlite3 as _sqlite3
|
import sqlite3 as _sqlite3
|
||||||
|
|
||||||
THREAD_WINDOW_SEC = 360 # 6 Minuten (5 Min Thread-Window + 1 Min Puffer)
|
THREAD_WINDOW_SEC = int(os.environ.get("TRIAGE_DELAY_SECONDS", "360")) # default: 6 Min
|
||||||
|
|
||||||
print(f"[triage] #{submission_id} geplant in {THREAD_WINDOW_SEC}s", file=sys.stderr)
|
print(f"[triage] #{submission_id} geplant in {THREAD_WINDOW_SEC}s", file=sys.stderr)
|
||||||
_time.sleep(THREAD_WINDOW_SEC)
|
_time.sleep(THREAD_WINDOW_SEC)
|
||||||
@@ -1316,6 +1318,8 @@ def admin_dashboard():
|
|||||||
reasons = json.loads(r["triage_reasons"] or "[]")
|
reasons = json.loads(r["triage_reasons"] or "[]")
|
||||||
tooltip = " | ".join(reasons) if reasons else "Keine Details"
|
tooltip = " | ".join(reasons) if reasons else "Keine Details"
|
||||||
triage_badge = f'<span class="triage-badge" title="{tooltip}">{emoji}</span>'
|
triage_badge = f'<span class="triage-badge" title="{tooltip}">{emoji}</span>'
|
||||||
|
else:
|
||||||
|
triage_badge = '<span class="triage-badge" title="Wartet auf KI-Prüfung" style="opacity:0.4">⏳</span>'
|
||||||
|
|
||||||
table_rows += f"""
|
table_rows += f"""
|
||||||
<tr class="row-{r['status']}" style="cursor:pointer;" onclick="window.location='/submission/{r['id']}'">
|
<tr class="row-{r['status']}" style="cursor:pointer;" onclick="window.location='/submission/{r['id']}'">
|
||||||
@@ -1338,8 +1342,17 @@ def admin_dashboard():
|
|||||||
content_snippet = (r["content"] or "")[:80]
|
content_snippet = (r["content"] or "")[:80]
|
||||||
media_icon = {"image": "🖼️", "audio": "🎤", "video": "🎬", "document": "📎"}.get(r["type"], "")
|
media_icon = {"image": "🖼️", "audio": "🎤", "video": "🎬", "document": "📎"}.get(r["type"], "")
|
||||||
st_label = status_names.get(r["status"], r["status"])
|
st_label = status_names.get(r["status"], r["status"])
|
||||||
|
# Triage badge for mobile
|
||||||
|
triage_mobile = ""
|
||||||
|
if r["triage_tier"]:
|
||||||
|
emoji = triage_emoji.get(r["triage_tier"], "⚪")
|
||||||
|
reasons = json.loads(r["triage_reasons"] or "[]")
|
||||||
|
tooltip = " | ".join(reasons) if reasons else ""
|
||||||
|
triage_mobile = f'<span class="triage-badge" title="{tooltip}">{emoji}</span>'
|
||||||
|
else:
|
||||||
|
triage_mobile = '<span class="triage-badge" title="Wartet auf KI-Prüfung" style="opacity:0.5">⏳</span>'
|
||||||
mobile_cards += f"""<a href="/submission/{r['id']}" class="mobile-card row-{r['status']}">
|
mobile_cards += f"""<a href="/submission/{r['id']}" class="mobile-card row-{r['status']}">
|
||||||
<div class="mc-top"><span class="mc-id">#{r['id']}</span><span class="mc-badge badge badge-{r['status']}">{st_label}</span></div>
|
<div class="mc-top"><span class="mc-id">#{r['id']}</span>{triage_mobile}<span class="mc-badge badge badge-{r['status']}">{st_label}</span></div>
|
||||||
<div class="mc-body"><b>{media_icon} {r['type']}</b> · {r['channel']}</div>
|
<div class="mc-body"><b>{media_icon} {r['type']}</b> · {r['channel']}</div>
|
||||||
<div class="mc-meta">{'📍 ' + r['halle'] if r['halle'] else ''}{' 🎯 ' + r['spiel_titel'] if r['spiel_titel'] else ''}</div>
|
<div class="mc-meta">{'📍 ' + r['halle'] if r['halle'] else ''}{' 🎯 ' + r['spiel_titel'] if r['spiel_titel'] else ''}</div>
|
||||||
<div class="mc-snippet">{content_snippet}</div>
|
<div class="mc-snippet">{content_snippet}</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user