67 lines
2.0 KiB
Python
67 lines
2.0 KiB
Python
|
|
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")
|