| from flask import Flask, jsonify, request, render_template |
| from datetime import datetime |
| import uuid |
|
|
| app = Flask(__name__) |
|
|
| |
| tasks = {} |
|
|
| def make_task(title, priority="medium", due_date=None, category="general"): |
| return { |
| "id": str(uuid.uuid4())[:8], |
| "title": title, |
| "priority": priority, |
| "category": category, |
| "due_date": due_date, |
| "done": False, |
| "created_at": datetime.now().strftime("%Y-%m-%d %H:%M"), |
| } |
|
|
| |
| for t in [ |
| make_task("Design the landing page", "high", "2026-06-25", "work"), |
| make_task("Buy groceries", "low", "2026-06-22", "personal"), |
| make_task("Review pull request #42", "high", "2026-06-23", "work"), |
| make_task("Read Clean Code book", "medium", "2026-06-30", "learning"), |
| make_task("Call the dentist", "medium", "2026-06-24", "personal"), |
| ]: |
| tasks[t["id"]] = t |
|
|
|
|
| |
|
|
| @app.route("/") |
| def index(): |
| return render_template("index.html") |
|
|
|
|
| |
|
|
| @app.route("/api/tasks", methods=["GET"]) |
| def get_tasks(): |
| filter_done = request.args.get("done") |
| filter_priority = request.args.get("priority") |
| filter_category = request.args.get("category") |
|
|
| result = list(tasks.values()) |
|
|
| if filter_done is not None: |
| result = [t for t in result if t["done"] == (filter_done == "true")] |
| if filter_priority: |
| result = [t for t in result if t["priority"] == filter_priority] |
| if filter_category: |
| result = [t for t in result if t["category"] == filter_category] |
|
|
| |
| priority_order = {"high": 0, "medium": 1, "low": 2} |
| result.sort(key=lambda t: (t["done"], priority_order.get(t["priority"], 9))) |
|
|
| return jsonify({"tasks": result, "total": len(result)}) |
|
|
|
|
| @app.route("/api/tasks", methods=["POST"]) |
| def create_task(): |
| data = request.get_json() or {} |
| title = data.get("title", "").strip() |
| if not title: |
| return jsonify({"error": "Title is required"}), 400 |
|
|
| task = make_task( |
| title=title, |
| priority=data.get("priority", "medium"), |
| due_date=data.get("due_date"), |
| category=data.get("category", "general"), |
| ) |
| tasks[task["id"]] = task |
| return jsonify(task), 201 |
|
|
|
|
| @app.route("/api/tasks/<task_id>", methods=["PATCH"]) |
| def update_task(task_id): |
| task = tasks.get(task_id) |
| if not task: |
| return jsonify({"error": "Task not found"}), 404 |
|
|
| data = request.get_json() or {} |
| for field in ("title", "priority", "due_date", "category", "done"): |
| if field in data: |
| task[field] = data[field] |
|
|
| return jsonify(task) |
|
|
|
|
| @app.route("/api/tasks/<task_id>", methods=["DELETE"]) |
| def delete_task(task_id): |
| if task_id not in tasks: |
| return jsonify({"error": "Task not found"}), 404 |
| del tasks[task_id] |
| return jsonify({"deleted": task_id}) |
|
|
|
|
| @app.route("/api/stats", methods=["GET"]) |
| def stats(): |
| all_tasks = list(tasks.values()) |
| return jsonify({ |
| "total": len(all_tasks), |
| "done": sum(1 for t in all_tasks if t["done"]), |
| "pending": sum(1 for t in all_tasks if not t["done"]), |
| "high_priority": sum(1 for t in all_tasks if t["priority"] == "high" and not t["done"]), |
| }) |
|
|
|
|
| if __name__ == "__main__": |
| print("\n TaskMaster running β http://127.0.0.1:5000\n") |
| app.run(debug=True) |
|
|