Selaa lähdekoodia

Add counting functionality to server

Maarten van den Berg 6 vuotta sitten
vanhempi
commit
c29b26b308
1 muutettua tiedostoa jossa 57 lisäystä ja 4 poistoa
  1. 57 4
      piket_server/__init__.py

+ 57 - 4
piket_server/__init__.py

@@ -2,7 +2,7 @@
2 2
 Piket server, handles events generated by the client.
3 3
 """
4 4
 
5
-from flask import Flask, jsonify
5
+from flask import Flask, jsonify, abort, request
6 6
 
7 7
 
8 8
 app = Flask("piket_server")
@@ -24,9 +24,62 @@ PRESET_NAMES = [
24 24
 ]
25 25
 
26 26
 PEOPLE = {index: {"name": name, "count": 0} for index, name in enumerate(PRESET_NAMES)}
27
+NEXT_ID = len(PEOPLE)
27 28
 
28 29
 
29
-@app.route("/people")
30
-def get_people() -> None:
30
+@app.route("/people", methods=["GET"])
31
+def get_people():
31 32
     """ Return a list of currently known people. """
32
-    return jsonify(PEOPLE)
33
+    return jsonify(people=PEOPLE)
34
+
35
+
36
+@app.route("/people/<int:person_id>", methods=["GET"])
37
+def get_person(person_id: int):
38
+    person = PEOPLE.get(person_id)
39
+
40
+    if not person:
41
+        abort(404)
42
+
43
+    return jsonify(person=person)
44
+
45
+
46
+@app.route("/people", methods=["POST"])
47
+def add_person():
48
+    """
49
+    Add a new person.
50
+
51
+    Required parameters:
52
+    - name (str)
53
+    """
54
+    global NEXT_ID
55
+
56
+    data = request.get_json()
57
+
58
+    if not data:
59
+        abort(400)
60
+
61
+    name = data.get("name")
62
+
63
+    if not name:
64
+        abort(400)
65
+    person = {"name": name, "count": 0}
66
+
67
+    PEOPLE[NEXT_ID] = person
68
+
69
+    person["id"] = NEXT_ID
70
+    NEXT_ID += 1
71
+
72
+    return jsonify(person=person)
73
+
74
+
75
+@app.route("/people/<int:person_id>/add_consumption", methods=["POST"])
76
+def add_consumption(person_id: int):
77
+    person = PEOPLE.get(person_id)
78
+
79
+    if not person:
80
+        abort(404)
81
+
82
+    increment = int(request.form.get("amount", 1))
83
+    person["count"] += increment
84
+
85
+    return jsonify(person=person)