Add admin-only case reset functionality

Introduce a new "reset" action for bulk operations and a dedicated
endpoint for individual case resets. These features allow administrators
to revert a case to its raw audio state by deleting derived artifacts
like transcripts, analysis input, and documents. The functionality also
includes renaming `.m4a.failed` files back to `.m4a` to re-trigger
transcription.

This commit also:
- Adds a `reset_case_artefacts` helper function to `case_actions.rs`.
- Implements the `handle_reset_case` endpoint.
- Adds the "Reset" button to the UI for administrators.
- Includes unit and integration tests to verify the new functionality
  and access control.
This commit is contained in:
2026-04-16 11:27:55 +02:00
parent bbc9b53609
commit b2b1368902
8 changed files with 261 additions and 2 deletions
+3
View File
@@ -50,6 +50,9 @@ header form { margin: 0; }
{% else if llm_missing && !has_document %}
<span class="llm-missing">LLM-Analyse nicht konfiguriert</span>
{% endif %}
{% if is_admin %}
<form method="post" action="/web/cases/{{ case_id }}/reset" style="display:inline"><button type="submit">Reset</button></form>
{% endif %}
<form method="post" action="/web/cases/{{ case_id }}/delete" style="margin-left:auto;display:inline"><button type="submit">Entfernen</button></form>
</div>
+2
View File
@@ -75,6 +75,7 @@ section h2 { font-size: 1.1em; color: #555; border-bottom: 1px solid #ddd; paddi
</div>
<div class="actions">
<button type="submit" formaction="/web/cases/{{ case.case_id }}/analyze"{% if !case.can_analyze %} disabled{% endif %}>{% if case.has_document %}Neu analysieren{% else %}Analysieren{% endif %}</button>
{% if is_admin %}<button type="submit" formaction="/web/cases/{{ case.case_id }}/reset">Reset</button>{% endif %}
<button type="submit" formaction="/web/cases/{{ case.case_id }}/delete">Entfernen</button>
</div>
</li>
@@ -85,6 +86,7 @@ section h2 { font-size: 1.1em; color: #555; border-bottom: 1px solid #ddd; paddi
<div class="bulk-bar">
<span>Auswahl:</span>
<button type="submit" name="action" value="analyze">Analysieren</button>
{% if is_admin %}<button type="submit" name="action" value="reset">Reset</button>{% endif %}
<button type="submit" name="action" value="delete">Entfernen</button>
</div>
</form>