feat: two-step issue resolution (resolve then delete)
- New PATCH /issues/{id} endpoint to toggle resolved flag
- Add resolved:false to new issues
- Frontend: click "✓ Resolve" marks issue green with strikethrough
- Resolved issues show "↺ Reopen" and "🗑 Delete" buttons
- Delete requires confirmation
- Sort: unresolved first, then resolved
- Issues persist until explicitly deleted
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
f2b43fce0b
commit
604d4376b4
3 changed files with 120 additions and 16 deletions
20
main.py
20
main.py
|
|
@ -1368,6 +1368,7 @@ async def add_issue(issue: dict):
|
|||
"category": issue.get("category", "other"),
|
||||
"author": issue.get("author", "Anonymous").strip(),
|
||||
"created": datetime.utcnow().isoformat(),
|
||||
"resolved": False,
|
||||
}
|
||||
if not new_issue["title"]:
|
||||
raise HTTPException(status_code=400, detail="Title is required")
|
||||
|
|
@ -1376,9 +1377,26 @@ async def add_issue(issue: dict):
|
|||
return new_issue
|
||||
|
||||
|
||||
@app.patch("/issues/{issue_id}")
|
||||
async def update_issue(issue_id: str, update: dict):
|
||||
"""Update an issue (e.g. toggle resolved state)."""
|
||||
issues = _load_issues()
|
||||
found = None
|
||||
for i in issues:
|
||||
if i.get("id") == issue_id:
|
||||
if "resolved" in update:
|
||||
i["resolved"] = bool(update["resolved"])
|
||||
found = i
|
||||
break
|
||||
if not found:
|
||||
raise HTTPException(status_code=404, detail="Issue not found")
|
||||
_save_issues(issues)
|
||||
return found
|
||||
|
||||
|
||||
@app.delete("/issues/{issue_id}")
|
||||
async def delete_issue(issue_id: str):
|
||||
"""Resolve (delete) an issue."""
|
||||
"""Permanently delete an issue."""
|
||||
issues = _load_issues()
|
||||
issues = [i for i in issues if i.get("id") != issue_id]
|
||||
_save_issues(issues)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue