Files
Fitness/api/app.py
T
2026-10-16 02:58:58 -07:00

132 lines
4.8 KiB
Python

from flask import Flask, request, jsonify
from database import *
app = Flask(__name__)
# Initialise database on startup
initialize_db()
# ----------------------------- Users -----------------------------
@app.route("/users", methods=["GET", "POST"])
def users():
if request.method == "GET":
# Optional query parameters
name = request.args.get("name")
id = request.args.get("id", type=int)
username = request.args.get("username")
fields = request.args.get("fields")
fields = fields.split(",") if fields else None
users = get_user(name=name, id=id, username=username, fields=fields)
return jsonify(users)
if request.method == "POST":
data = request.get_json()
if not data:
return jsonify({"error": "Missing JSON body"}), 400
name = data.get("name")
age = data.get("age")
photo = data.get("photo")
username = data.get("username")
if not all([name, age, username]):
return jsonify({"error": "name, age and username required"}), 400
result = add_user(name, age, photo, username)
return jsonify(result), 201
@app.route("/users/<int:user_id>", methods=["PUT"])
def update_user_route(user_id: int):
data = request.get_json()
if not data:
return jsonify({"error": "Missing JSON body"}), 400
name = data.get("name")
photo = data.get("photo")
settings = data.get("settings")
result = update_user(user_id, name=name, photo=photo, settings=settings)
return jsonify(result)
# ----------------------------- Providers -----------------------------
@app.route("/providers", methods=["GET", "POST"])
def providers():
if request.method == "GET":
name = request.args.get("name")
id = request.args.get("id", type=int)
phone = request.args.get("phone")
fields = request.args.get("fields")
fields = fields.split(",") if fields else None
provs = get_provider(name=name, id=id, phone=phone, fields=fields)
return jsonify(provs)
if request.method == "POST":
data = request.get_json()
if not data:
return jsonify({"error": "Missing JSON body"}), 400
name = data.get("name")
age = data.get("age")
photo = data.get("photo")
phone = data.get("phone")
rates = data.get("rates", {})
private = data.get("private", False)
if not all([name, age, phone]):
return jsonify({"error": "name, age and phone required"}), 400
result = add_provider(name, age, photo, phone, rates, private)
return jsonify(result), 201
@app.route("/providers/<int:prov_id>", methods=["PUT"])
def update_provider_route(prov_id: int):
data = request.get_json()
if not data:
return jsonify({"error": "Missing JSON body"}), 400
name = data.get("name")
phone = data.get("phone")
rates = data.get("rates")
private = data.get("private")
photo = data.get("photo")
result = update_provider(prov_id, name=name, phone=phone, rates=rates, private=private, photo=photo)
return jsonify(result)
# ----------------------------- Visits -----------------------------
@app.route("/visits", methods=["GET", "POST"])
def visits():
if request.method == "GET":
provider = request.args.get("provider", type=int)
user = request.args.get("user", type=int)
start = request.args.get("start")
end = request.args.get("end")
date_range = [start, end] if start and end else None
visits_list = get_visits(provider=provider, user=user, date_range=date_range)
return jsonify(visits_list)
if request.method == "POST":
data = request.get_json()
if not data:
return jsonify({"error": "Missing JSON body"}), 400
user_ids = data.get("user_ids", [])
provider_ids = data.get("provider_ids", [])
cost = data.get("cost")
location = data.get("location")
time = data.get("time")
if not (user_ids and provider_ids and time):
return jsonify({"error": "user_ids, provider_ids and time required"}), 400
result = add_visit(user_ids, provider_ids, cost, location, time)
return jsonify(result), 201
@app.route("/visits/<int:visit_id>", methods=["PUT"])
def update_visit_route(visit_id: int):
data = request.get_json()
if not data:
return jsonify({"error": "Missing JSON body"}), 400
user_ids = data.get("user_ids")
provider_ids = data.get("provider_ids")
cost = data.get("cost")
location = data.get("location")
time = data.get("time")
result = update_visit(visit_id, user_ids=user_ids, provider_ids=provider_ids,
cost=cost, location=location, time=time)
return jsonify(result)
# Run the app if this file is executed directly
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000, debug=False)