Erinnerungen & Routinen (A3): Wecker in MC2 + Hermes-Tools
- services/reminders.py: persistenter Store (/srv/models/mc2-reminders.json), Wecker-Loop feuert in Briefkasten (Lucy spricht) + Telegram; repeat daily/weekdays/weekly; naive Zeiten = Commander-TZ (Europe/Berlin, Box ist UTC); verpasste Einmal-Erinnerungen feuern verspätet nach (ehrlich markiert) - routers/reminders.py: GET/POST/DELETE /api/reminders - mcp_mc.py: reminder_create/list/delete (Guards, ISO aus Sofort-Kontext) - announce.notify_telegram als gemeinsamer Helper (sentry nutzt ihn jetzt) - requirements: tzdata (zoneinfo-Fallback, Windows-Dev) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
"""Erinnerungen & Routinen (A3) — dünner REST-Layer über services/reminders.py.
|
||||
Konsument ist v.a. der Hermes-Agent via mcp_mc.py (reminder_create/list/delete);
|
||||
LAN-only wie alle MC2-Endpoints."""
|
||||
|
||||
from fastapi import APIRouter, HTTPException
|
||||
from pydantic import BaseModel
|
||||
|
||||
from services import reminders
|
||||
|
||||
router = APIRouter(prefix="/api")
|
||||
|
||||
|
||||
class ReminderIn(BaseModel):
|
||||
text: str # was angesagt werden soll
|
||||
when: str # ISO-8601; ohne Offset = Commander-Zeitzone (Europe/Berlin)
|
||||
repeat: str = "" # '' einmalig | daily | weekdays | weekly
|
||||
|
||||
|
||||
@router.get("/reminders")
|
||||
def list_reminders() -> dict:
|
||||
return {"items": reminders.list_all()}
|
||||
|
||||
|
||||
@router.post("/reminders")
|
||||
def create_reminder(body: ReminderIn) -> dict:
|
||||
try:
|
||||
return {"ok": True, "item": reminders.create(body.text, body.when, body.repeat)}
|
||||
except ValueError as exc:
|
||||
raise HTTPException(400, str(exc))
|
||||
|
||||
|
||||
@router.delete("/reminders/{reminder_id}")
|
||||
def delete_reminder(reminder_id: int) -> dict:
|
||||
try:
|
||||
return {"ok": True, "deleted": reminders.delete(reminder_id)}
|
||||
except KeyError as exc:
|
||||
raise HTTPException(404, str(exc.args[0]))
|
||||
Reference in New Issue
Block a user