Build reusable bot framework
This commit is contained in:
71
modules/reminders/routes.py
Normal file
71
modules/reminders/routes.py
Normal file
@@ -0,0 +1,71 @@
|
||||
"""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/<reminderID>", 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
|
||||
Reference in New Issue
Block a user