from fastapi import FastAPI, HTTPException from pydantic import BaseModel from typing import List, Optional # Initialisation de l'application app = FastAPI( title="Task API CRUD", root_path="/proxy/9000/", # Aide certains proxys à s'y retrouver openapi_url="/openapi.json" ) # --- Modèles de données --- class TaskCreate(BaseModel): title: str description: Optional[str] = None completed: bool = False class Task(TaskCreate): id: int # --- Base de données en mémoire --- tasks_db = [] current_id = 1 # --- Routes CRUD --- # 1. CREATE : Ajouter une nouvelle tâche @app.post("/tasks", response_model=Task, status_code=201) def create_task(task: TaskCreate): global current_id # Création de la tâche avec l'ID actuel new_task = Task(id=current_id, **task.model_dump()) tasks_db.append(new_task) current_id += 1 return new_task # 2. READ : Récupérer toutes les tâches @app.get("/tasks", response_model=List[Task]) def get_tasks(): return tasks_db # 3. READ : Récupérer une tâche spécifique via son ID @app.get("/tasks/{task_id}", response_model=Task) def get_task(task_id: int): for task in tasks_db: if task.id == task_id: return task raise HTTPException(status_code=404, detail="Tâche non trouvée") # 4. UPDATE : Mettre à jour une tâche @app.put("/tasks/{task_id}", response_model=Task) def update_task(task_id: int, updated_task: TaskCreate): for index, task in enumerate(tasks_db): if task.id == task_id: # Remplacement de l'ancienne tâche par la nouvelle tasks_db[index] = Task(id=task_id, **updated_task.model_dump()) return tasks_db[index] raise HTTPException(status_code=404, detail="Tâche non trouvée") # 5. DELETE : Supprimer une tâche @app.delete("/tasks/{task_id}", status_code=204) def delete_task(task_id: int): for index, task in enumerate(tasks_db): if task.id == task_id: tasks_db.pop(index) return raise HTTPException(status_code=404, detail="Tâche non trouvée")