132 lines
4.8 KiB
Python
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)
|