Projet B: Systeme de Gestion de Taches
Description
Developper une API RESTful pour un systeme de gestion de projets et taches, permettant aux equipes de collaborer, suivre l'avancement et gerer leur temps.
Fonctionnalites Requises
1. Gestion des Utilisateurs
POST /api/auth/register - Inscription
POST /api/auth/login - Connexion (retourne JWT)
GET /api/users/me - Profil utilisateur
PUT /api/users/me - Modifier profil
GET /api/users - Liste utilisateurs (ADMIN/MANAGER)
Entite User:
- id, email, password, firstName, lastName
- role (ADMIN, MANAGER, MEMBER)
- department, createdAt
2. Gestion des Projets
GET /api/projects - Mes projets
POST /api/projects - Creer projet
GET /api/projects/{id} - Detail projet
PUT /api/projects/{id} - Modifier projet
DELETE /api/projects/{id} - Supprimer projet
POST /api/projects/{id}/members - Ajouter membre
DELETE /api/projects/{id}/members/{userId} - Retirer membre
Entite Project:
- id, name, description
- owner (User)
- members (ManyToMany User)
- status (PLANNING, ACTIVE, ON_HOLD, COMPLETED)
- startDate, endDate, createdAt
3. Gestion des Taches
GET /api/projects/{id}/tasks - Taches du projet
POST /api/projects/{id}/tasks - Creer tache
GET /api/tasks/{id} - Detail tache
PUT /api/tasks/{id} - Modifier tache
DELETE /api/tasks/{id} - Supprimer tache
PUT /api/tasks/{id}/status - Changer statut
PUT /api/tasks/{id}/assign - Assigner tache
GET /api/tasks/my-tasks - Mes taches
Entite Task:
- id, title, description
- project (ManyToOne)
- assignee (User)
- priority (LOW, MEDIUM, HIGH, URGENT)
- status (TODO, IN_PROGRESS, IN_REVIEW, DONE)
- dueDate, estimatedHours, createdAt
4. Commentaires et Activite
GET /api/tasks/{id}/comments - Commentaires
POST /api/tasks/{id}/comments - Ajouter commentaire
DELETE /api/comments/{id} - Supprimer commentaire
GET /api/tasks/{id}/activity - Historique activite
Entite Comment:
- id, task, author, content, createdAt
Entite Activity:
- id, task, user, action, details, createdAt
5. Suivi du Temps
POST /api/tasks/{id}/time-entries - Logger du temps
GET /api/tasks/{id}/time-entries - Temps sur la tache
GET /api/time-entries/my-entries - Mon temps
GET /api/projects/{id}/time-report - Rapport temps projet
Entite TimeEntry:
- id, task, user, hours, description, date
Schema de Base de Donnees
users
├── id (PK)
├── email (UNIQUE)
├── password
├── first_name
├── last_name
├── role
├── department
└── created_at
projects
├── id (PK)
├── name
├── description
├── owner_id (FK)
├── status
├── start_date
├── end_date
└── created_at
project_members
├── project_id (FK)
└── user_id (FK)
tasks
├── id (PK)
├── title
├── description
├── project_id (FK)
├── assignee_id (FK)
├── priority
├── status
├── due_date
├── estimated_hours
└── created_at
comments
├── id (PK)
├── task_id (FK)
├── author_id (FK)
├── content
└── created_at
activities
├── id (PK)
├── task_id (FK)
├── user_id (FK)
├── action
├── details
└── created_at
time_entries
├── id (PK)
├── task_id (FK)
├── user_id (FK)
├── hours
├── description
└── date
Regles Metier
Projets
- Seul le owner ou ADMIN peut supprimer un projet
- MANAGER peut creer des projets
- Un membre peut voir les projets auxquels il appartient
Taches
- Seuls les membres du projet peuvent voir les taches
- Assigner une tache cree une activite
- Changement de statut cree une activite
Transitions de Statut Tache
TODO -> IN_PROGRESS -> IN_REVIEW -> DONE
<- (peut revenir en arriere)
Permissions
| Role | Projets | Taches | Membres |
|---|---|---|---|
| ADMIN | CRUD all | CRUD all | Gerer tous |
| MANAGER | CRUD owns | CRUD projets | Gerer projets |
| MEMBER | Read assigned | CRUD assigned | - |
Endpoints Detailles
Projets
POST /api/projects
Authorization: Bearer <token>
Content-Type: application/json
{
"name": "Website Redesign",
"description": "Complete redesign of company website",
"startDate": "2024-02-01",
"endDate": "2024-04-30"
}
Response 201:
{
"id": 1,
"name": "Website Redesign",
"description": "Complete redesign of company website",
"owner": { "id": 1, "firstName": "John", "lastName": "Doe" },
"status": "PLANNING",
"startDate": "2024-02-01",
"endDate": "2024-04-30",
"members": [],
"createdAt": "2024-01-15T10:30:00"
}
Taches
POST /api/projects/1/tasks
Authorization: Bearer <token>
Content-Type: application/json
{
"title": "Design Homepage",
"description": "Create new homepage design mockups",
"priority": "HIGH",
"dueDate": "2024-02-15",
"estimatedHours": 16,
"assigneeId": 2
}
Response 201:
{
"id": 1,
"title": "Design Homepage",
"description": "Create new homepage design mockups",
"project": { "id": 1, "name": "Website Redesign" },
"assignee": { "id": 2, "firstName": "Jane", "lastName": "Smith" },
"priority": "HIGH",
"status": "TODO",
"dueDate": "2024-02-15",
"estimatedHours": 16
}
Suivi du Temps
POST /api/tasks/1/time-entries
Authorization: Bearer <token>
Content-Type: application/json
{
"hours": 4.5,
"description": "Initial design concepts",
"date": "2024-02-01"
}
Response 201:
{
"id": 1,
"task": { "id": 1, "title": "Design Homepage" },
"user": { "id": 2, "firstName": "Jane" },
"hours": 4.5,
"description": "Initial design concepts",
"date": "2024-02-01"
}
Rapport Temps
GET /api/projects/1/time-report
Authorization: Bearer <token>
Response 200:
{
"project": { "id": 1, "name": "Website Redesign" },
"totalHours": 45.5,
"estimatedHours": 120,
"byUser": [
{ "user": "Jane Smith", "hours": 28.5 },
{ "user": "Bob Wilson", "hours": 17.0 }
],
"byTask": [
{ "task": "Design Homepage", "logged": 16, "estimated": 16 },
{ "task": "Implement Header", "logged": 12.5, "estimated": 24 }
]
}
Tests Requis
Tests Unitaires
- ProjectService: CRUD, member management
- TaskService: CRUD, status transitions
- TimeEntryService: logging, calculations
Tests Integration
- ProjectController: all endpoints
- TaskController: task workflow
- Security: role-based access
Bonus Points
| Fonctionnalite | Points |
|---|---|
| WebSocket notifications | +5 |
| Kanban board data endpoint | +3 |
| Email notifications (simulation) | +3 |
| Taches recurrentes | +3 |
| Export rapport PDF | +3 |
| Dashboard statistiques | +5 |
Estimation Temps
| Tache | Heures |
|---|---|
| Setup projet et DB | 2 |
| Entites et repositories | 5 |
| Services metier | 8 |
| Controllers REST | 5 |
| Securite et permissions | 5 |
| Tests | 6 |
| Documentation | 2 |
| Bonus | 4-8 |
| Total | 33-41 |