API REST de gestion de tâches, construite avec Node.js et PostgreSQL, entièrement dockerisée.
- Docker Desktop installé et démarré
- Git
- Pas besoin de Node.js, PostgreSQL ou XAMPP en local — Docker gère tout
git clone <url-du-repo>
cd todo-apicp .env.example .envLe fichier .env par défaut fonctionne directement, aucune modification nécessaire pour un lancement local.
docker compose up --buildL'API est disponible sur http://localhost:3000
Au premier lancement, Docker télécharge les images Node.js et PostgreSQL. C'est normal que ça prenne 1-2 minutes.
Pour lancer en arrière-plan :
docker compose up -d --buildPour arrêter :
docker compose downGET /health
{ "status": "ok", "timestamp": "2026-06-03T10:00:00.000Z" }| Méthode | Route | Description |
|---|---|---|
| GET | /api/tasks |
Lister toutes les tâches |
| GET | /api/tasks/:id |
Voir une tâche |
| POST | /api/tasks |
Créer une tâche |
| PUT | /api/tasks/:id |
Modifier une tâche |
| DELETE | /api/tasks/:id |
Supprimer une tâche |
{
"id": "uuid (généré automatiquement)",
"title": "string (optionnel)",
"description": "string (obligatoire)",
"status": "todo | in_progress | done",
"created_at": "timestamp",
"updated_at": "timestamp"
}Créer une tâche
curl -X POST http://localhost:3000/api/tasks \
-H "Content-Type: application/json" \
-d '{"description":"Ma tâche","status":"todo"}'Lister les tâches
curl http://localhost:3000/api/tasksModifier une tâche
curl -X PUT http://localhost:3000/api/tasks/<id> \
-H "Content-Type: application/json" \
-d '{"description":"Tâche modifiée","status":"done"}'Supprimer une tâche
curl -X DELETE http://localhost:3000/api/tasks/<id>Sur Windows (cmd), remplace les
\par une seule ligne et échappe les guillemets :\"
Les tests tournent en local sans Docker (Jest + Supertest, DB mockée) :
npm install
npm testTest Suites: 2 passed
Tests: 18 passed
tests/unit/task.test.js— teste le modèle Task de manière isoléetests/integration/api.test.js— teste les routes HTTP
todo-api/
├── src/
│ ├── app.js # point d'entrée, config Express
│ ├── routes/
│ │ └── tasks.js # routes CRUD
│ ├── models/
│ │ └── task.js # requêtes PostgreSQL
│ └── middleware/
│ └── errorHandler.js # gestion des erreurs
├── tests/
│ ├── unit/
│ │ └── task.test.js
│ └── integration/
│ └── api.test.js
├── .env.example # variables d'environnement à copier
├── .gitignore
├── Dockerfile
├── docker-compose.yml
└── README.md
| Variable | Description | Valeur par défaut |
|---|---|---|
PORT |
Port de l'API | 3000 |
DB_HOST |
Hôte PostgreSQL | db |
DB_PORT |
Port PostgreSQL | 5432 |
DB_NAME |
Nom de la base | todo_db |
DB_USER |
Utilisateur | todo_user |
DB_PASSWORD |
Mot de passe | todo_pass |
Les données PostgreSQL survivent aux redémarrages grâce aux volumes Docker :
docker compose down # stoppe les conteneurs
docker compose up -d # relance — les données sont toujours làPour tout supprimer y compris les données :
docker compose down -v