Project Owner¶
Endpoints d'administration pour gérer les porteurs de projet (entité project_owner : identité, contact). Source : project-owner.controller.ts.
Tous les endpoints requièrent une session admin BetterAuth valide (AdminAuthGuard).
POST /administration/project-owner¶
Crée un porteur de projet, ou retourne celui existant si un porteur avec le même email est déjà présent (getOrCreateProjectOwner). Une AdminAction PROJECT_OWNER_CREATION est créée via interceptor.
Décorateur : L26.
Request body¶
{
"id": "uuid-v4-optional",
"firstname": "Jean",
"lastname": "Dupont",
"email": "jean@example.com",
"phoneNumber": "+33 6 00 00 00 00"
}
Validé via ProjectOwner.createOrUpdatePayload. phoneNumber optionnel.
Response¶
Ok<ProjectOwner.T> :
{
"ok": true,
"value": {
"id": "uuid-v4",
"createdAt": "...",
"updatedAt": "...",
"firstname": "Jean",
"lastname": "Dupont",
"email": "jean@example.com",
"phoneNumber": "+33 6 00 00 00 00"
}
}
GET /administration/project-owner¶
Liste tous les porteurs de projet.
Décorateur : L38.
Response¶
Tableau de ProjectOwner.T.
PUT /administration/project-owner/:projectOwnerId¶
Met à jour un porteur de projet. Une AdminAction PROJECT_OWNER_UPDATE est créée via interceptor.
Décorateur : L44.
Path param¶
projectOwnerId— UUIDv4 (validé viaParseUUIDPipe({ version: '4' }))
Request body¶
Identique à POST /administration/project-owner (ProjectOwner.createOrUpdatePayload).
Response¶
204 No Content (la méthode du service ne retourne rien).
DELETE /administration/project-owner/:projectOwnerId¶
Supprime un porteur de projet. Refusé si le porteur a au moins un projet rattaché. Une AdminAction PROJECT_OWNER_UPDATE est créée via interceptor.
Décorateur : L57.
Path param¶
projectOwnerId— UUIDv4
Response¶
200 avec body vide dans tous les cas. Le handler fait await safePgTransaction(...) sans return, donc la méthode résout undefined : NestJS émet un 200 sans corps. Les valeurs Ok({}) (succès) et Err('project-owner-has-projects') (porteur ayant des projets) sont les retours du callback de transaction, mais ils sont ignorés par l'absence de return et n'apparaissent pas dans la réponse.
Erreurs¶
| Code | Statut | Cause |
|---|---|---|
project-owner-has-projects |
200 (body vide) | Le porteur a des projets associés ; suppression bloquée (le code d'erreur n'est pas renvoyé dans le body) |
Liens¶
- Service :
project-owner.service.ts - Repository :
project-owner.repository.ts - Modèle :
project-owner.model.ts