Digitale bierlijst

people.py 2.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. """
  2. Provides routes related to managing Person objects.
  3. """
  4. from flask import jsonify, request
  5. from sqlalchemy.exc import SQLAlchemyError
  6. from piket_server.models import Consumption, Person
  7. from piket_server.flask import app, db
  8. @app.route("/people", methods=["GET"])
  9. def get_people():
  10. """ Return a list of currently known people. """
  11. people = Person.query.order_by(Person.full_name).all()
  12. q = Person.query.order_by(Person.full_name)
  13. if request.args.get("active"):
  14. active_status = request.args.get("active", type=int)
  15. q = q.filter_by(active=active_status)
  16. people = q.all()
  17. result = [person.as_dict for person in people]
  18. return jsonify(people=result)
  19. @app.route("/people/<int:person_id>", methods=["GET"])
  20. def get_person(person_id: int):
  21. person = Person.query.get_or_404(person_id)
  22. return jsonify(person=person.as_dict)
  23. @app.route("/people", methods=["POST"])
  24. def add_person():
  25. """
  26. Add a new person.
  27. Required parameters:
  28. - name (str)
  29. """
  30. json = request.get_json()
  31. if not json:
  32. return jsonify({"error": "Could not parse JSON."}), 400
  33. data = json.get("person") or {}
  34. person = Person(name=data.get("name"), active=data.get("active", False))
  35. try:
  36. db.session.add(person)
  37. db.session.commit()
  38. except SQLAlchemyError:
  39. return jsonify({"error": "Invalid arguments for Person."}), 400
  40. return jsonify(person=person.as_dict), 201
  41. @app.route("/people/<int:person_id>", methods=["PATCH"])
  42. def update_person(person_id: int):
  43. person = Person.query.get_or_404(person_id)
  44. data = request.json["person"]
  45. if "active" in data:
  46. person.active = data["active"]
  47. db.session.add(person)
  48. db.session.commit()
  49. return jsonify(person=person.as_dict)
  50. @app.route("/people/<int:person_id>/add_consumption", methods=["POST"])
  51. def add_consumption(person_id: int):
  52. person = Person.query.get_or_404(person_id)
  53. consumption = Consumption(person=person, consumption_type_id=1)
  54. try:
  55. db.session.add(consumption)
  56. db.session.commit()
  57. except SQLAlchemyError:
  58. return (
  59. jsonify(
  60. {"error": "Invalid Consumption parameters.", "person": person.as_dict}
  61. ),
  62. 400,
  63. )
  64. return jsonify(person=person.as_dict, consumption=consumption.as_dict), 201
  65. @app.route("/people/<int:person_id>/add_consumption/<int:ct_id>", methods=["POST"])
  66. def add_consumption2(person_id: int, ct_id: int):
  67. person = Person.query.get_or_404(person_id)
  68. consumption = Consumption(person=person, consumption_type_id=ct_id)
  69. try:
  70. db.session.add(consumption)
  71. db.session.commit()
  72. except SQLAlchemyError:
  73. return (
  74. jsonify(
  75. {"error": "Invalid Consumption parameters.", "person": person.as_dict}
  76. ),
  77. 400,
  78. )
  79. return jsonify(person=person.as_dict, consumption=consumption.as_dict), 201