"""Authenticated reminder API routes.""" from datetime import datetime import flask import uuid from api.security import jsonObject, requireUser from modules.reminders import service def registerRoutes(app): @app.route("/api/reminders", methods=["GET"]) @requireUser() def api_listReminders(): includeFinished = flask.request.args.get("include_finished", "false").lower() includeFinished = includeFinished in {"1", "true", "yes"} reminders = service.listReminders( flask.g.user_uuid, includeFinished=includeFinished, limit=flask.request.args.get("limit", 50), ) return flask.jsonify( {"reminders": [_serializeReminder(item) for item in reminders]} ), 200 @app.route("/api/reminders", methods=["POST"]) @requireUser() def api_createReminder(): data = jsonObject() if data is None: return flask.jsonify({"error": "JSON object required"}), 400 try: reminder = service.createReminder( flask.g.user_uuid, data.get("message"), data.get("run_at"), data.get("timezone") or _userTimezone(), recurrence=data.get("recurrence"), ) except ValueError as error: return flask.jsonify({"error": str(error)}), 400 return flask.jsonify(_serializeReminder(reminder)), 201 @app.route("/api/reminders/", methods=["DELETE"]) @requireUser() def api_cancelReminder(reminderID): try: reminder = service.cancelReminder(flask.g.user_uuid, reminderID) except (TypeError, ValueError): reminder = None if not reminder: return flask.jsonify({"error": "active reminder not found"}), 404 return flask.jsonify(_serializeReminder(reminder)), 200 def _userTimezone(): from core import users return users.getUserTimezone(flask.g.user_uuid) or "UTC" def _serializeReminder(reminder): serialized = {} for key, value in reminder.items(): if isinstance(value, datetime): serialized[key] = value.isoformat() elif isinstance(value, uuid.UUID): serialized[key] = str(value) else: serialized[key] = value return serialized