| 1 | from flask import Flask, jsonify, request |
| 2 | |
| 3 | from app.storage import TaskStore |
| 4 | |
| 5 | app = Flask(__name__) |
| 6 | store = TaskStore() |
| 7 | |
| 8 | |
| 9 | @app.get("/health") |
| 10 | def health(): |
| 11 | return jsonify(status="ok") |
| 12 | |
| 13 | |
| 14 | @app.get("/tasks") |
| 15 | def list_tasks(): |
| 16 | return jsonify(tasks=store.all()) |
| 17 | |
| 18 | |
| 19 | @app.post("/tasks") |
| 20 | def create_task(): |
| 21 | payload = request.get_json(silent=True) or {} |
| 22 | title = payload.get("title", "").strip() |
| 23 | if not title: |
| 24 | return jsonify(error="title is required"), 400 |
| 25 | task = store.add(title=title, done=bool(payload.get("done", False))) |
| 26 | return jsonify(task=task), 201 |
| 27 | |
| 28 | |
| 29 | @app.get("/tasks/<int:task_id>") |
| 30 | def get_task(task_id): |
| 31 | task = store.get(task_id) |
| 32 | if task is None: |
| 33 | return jsonify(error="not found"), 404 |
| 34 | return jsonify(task=task) |
| 35 | |
| 36 | |
| 37 | @app.delete("/tasks/<int:task_id>") |
| 38 | def delete_task(task_id): |
| 39 | if not store.remove(task_id): |
| 40 | return jsonify(error="not found"), 404 |
| 41 | return "", 204 |
| 42 | |
| 43 | |
| 44 | if __name__ == "__main__": |
| 45 | app.run(host="127.0.0.1", port=8000) |