ui update and some backend functionality adding in accordance with research on adhd and ux design
This commit is contained in:
74
api/routes/preferences.py
Normal file
74
api/routes/preferences.py
Normal file
@@ -0,0 +1,74 @@
|
||||
"""
|
||||
Preferences API - user settings
|
||||
"""
|
||||
|
||||
import os
|
||||
import uuid
|
||||
import flask
|
||||
import jwt
|
||||
import core.auth as auth
|
||||
import core.postgres as postgres
|
||||
|
||||
|
||||
def _get_user_uuid(token):
|
||||
try:
|
||||
payload = jwt.decode(token, os.getenv("JWT_SECRET"), algorithms=["HS256"])
|
||||
return payload.get("sub")
|
||||
except (jwt.ExpiredSignatureError, jwt.InvalidTokenError):
|
||||
return None
|
||||
|
||||
|
||||
def _auth(request):
|
||||
header = request.headers.get("Authorization", "")
|
||||
if not header.startswith("Bearer "):
|
||||
return None
|
||||
token = header[7:]
|
||||
user_uuid = _get_user_uuid(token)
|
||||
if not user_uuid or not auth.verifyLoginToken(token, userUUID=user_uuid):
|
||||
return None
|
||||
return user_uuid
|
||||
|
||||
|
||||
def register(app):
|
||||
|
||||
@app.route("/api/preferences", methods=["GET"])
|
||||
def api_getPreferences():
|
||||
"""Get user preferences."""
|
||||
user_uuid = _auth(flask.request)
|
||||
if not user_uuid:
|
||||
return flask.jsonify({"error": "unauthorized"}), 401
|
||||
prefs = postgres.select_one("user_preferences", {"user_uuid": user_uuid})
|
||||
if not prefs:
|
||||
# Return defaults
|
||||
return flask.jsonify({
|
||||
"sound_enabled": False,
|
||||
"haptic_enabled": True,
|
||||
"show_launch_screen": True,
|
||||
"celebration_style": "standard",
|
||||
}), 200
|
||||
return flask.jsonify(prefs), 200
|
||||
|
||||
@app.route("/api/preferences", methods=["PUT"])
|
||||
def api_updatePreferences():
|
||||
"""Update user preferences."""
|
||||
user_uuid = _auth(flask.request)
|
||||
if not user_uuid:
|
||||
return flask.jsonify({"error": "unauthorized"}), 401
|
||||
data = flask.request.get_json()
|
||||
if not data:
|
||||
return flask.jsonify({"error": "missing body"}), 400
|
||||
|
||||
allowed = ["sound_enabled", "haptic_enabled", "show_launch_screen", "celebration_style", "timezone_offset"]
|
||||
updates = {k: v for k, v in data.items() if k in allowed}
|
||||
if not updates:
|
||||
return flask.jsonify({"error": "no valid fields"}), 400
|
||||
|
||||
existing = postgres.select_one("user_preferences", {"user_uuid": user_uuid})
|
||||
if existing:
|
||||
result = postgres.update("user_preferences", updates, {"user_uuid": user_uuid})
|
||||
return flask.jsonify(result[0] if result else {}), 200
|
||||
else:
|
||||
updates["id"] = str(uuid.uuid4())
|
||||
updates["user_uuid"] = user_uuid
|
||||
result = postgres.insert("user_preferences", updates)
|
||||
return flask.jsonify(result), 201
|
||||
Reference in New Issue
Block a user