feat(backend): add create admin API and update docs

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
MARTIN Julien 2026-02-24 11:07:14 +01:00
parent 10ebc77ba1
commit 33cc7a9191
4 changed files with 102 additions and 8 deletions

View File

@ -1,4 +1,10 @@
import { OmitType } from "@nestjs/swagger";
import { PickType } from "@nestjs/swagger";
import { CreateUserDto } from "./create_user.dto";
export class CreateAdminDto extends OmitType(CreateUserDto, ['role'] as const) {}
export class CreateAdminDto extends PickType(CreateUserDto, [
'nom',
'prenom',
'email',
'password',
'telephone'
] as const) {}

View File

@ -6,6 +6,7 @@ import { User } from 'src/common/decorators/user.decorator';
import { RoleType, Users } from 'src/entities/users.entity';
import { UserService } from './user.service';
import { CreateUserDto } from './dto/create_user.dto';
import { CreateAdminDto } from './dto/create_admin.dto';
import { UpdateUserDto } from './dto/update_user.dto';
@ApiTags('Utilisateurs')
@ -15,6 +16,17 @@ import { UpdateUserDto } from './dto/update_user.dto';
export class UserController {
constructor(private readonly userService: UserService) { }
// Création d'un administrateur (réservée aux super admins)
@Post('admin')
@Roles(RoleType.SUPER_ADMIN)
@ApiOperation({ summary: 'Créer un nouvel administrateur (super admin seulement)' })
createAdmin(
@Body() dto: CreateAdminDto,
@User() currentUser: Users
) {
return this.userService.createAdmin(dto, currentUser);
}
// Création d'un utilisateur (réservée aux super admins)
@Post()
@Roles(RoleType.SUPER_ADMIN)

View File

@ -3,6 +3,7 @@ import { InjectRepository } from "@nestjs/typeorm";
import { RoleType, StatutUtilisateurType, Users } from "src/entities/users.entity";
import { In, Repository } from "typeorm";
import { CreateUserDto } from "./dto/create_user.dto";
import { CreateAdminDto } from "./dto/create_admin.dto";
import { UpdateUserDto } from "./dto/update_user.dto";
import * as bcrypt from 'bcrypt';
import { StatutValidationType, Validation } from "src/entities/validations.entity";
@ -106,6 +107,31 @@ export class UserService {
return this.findOne(saved.id);
}
async createAdmin(dto: CreateAdminDto, currentUser: Users): Promise<Users> {
if (currentUser.role !== RoleType.SUPER_ADMIN) {
throw new ForbiddenException('Seuls les super administrateurs peuvent créer un administrateur');
}
const exist = await this.usersRepository.findOneBy({ email: dto.email });
if (exist) throw new BadRequestException('Email déjà utilisé');
const salt = await bcrypt.genSalt();
const hashedPassword = await bcrypt.hash(dto.password, salt);
const entity = this.usersRepository.create({
email: dto.email,
password: hashedPassword,
prenom: dto.prenom,
nom: dto.nom,
role: RoleType.ADMINISTRATEUR,
statut: StatutUtilisateurType.ACTIF,
telephone: dto.telephone,
changement_mdp_obligatoire: true,
});
return this.usersRepository.save(entity);
}
async findAll(): Promise<Users[]> {
return this.usersRepository.find();
}

View File

@ -1,9 +1,9 @@
# 🎫 Liste Complète des Tickets - Projet P'titsPas
**Version** : 1.5
**Date** : 17 Février 2026
**Date** : 24 Février 2026
**Auteur** : Équipe PtitsPas
**Estimation totale** : ~184h
**Estimation totale** : ~208h
---
@ -33,6 +33,9 @@
| 93 | [Frontend] Panneau Admin - Homogeneiser la presentation des onglets | Ouvert |
| 94 | [Backend] Relais - modele, API CRUD et liaison gestionnaire | ✅ Terminé |
| 95 | [Frontend] Admin - gestion des relais et rattachement gestionnaire | Ouvert |
| 96 | [Frontend] Admin - Création administrateur via modale (sans relais) | Ouvert |
| 97 | [Backend] Harmoniser API création administrateur avec le contrat frontend | ✅ Terminé |
| 89 | Log des appels API en mode debug | Ouvert |
*Gitea #1 et #2 = anciens tickets de test (fermés). Liste complète : https://git.ptits-pas.fr/jmartin/petitspas/issues*
@ -662,6 +665,21 @@ Le back-office admin doit gérer des Relais avec des données réelles en base,
---
### Ticket #97 : [Backend] Harmoniser API création administrateur avec le contrat frontend
**Estimation** : 3h
**Labels** : `backend`, `p2`, `auth`, `admin`
**Description** :
Rendre l'API de création administrateur cohérente et stable avec le besoin frontend (modale simplifiée), en définissant un contrat clair et minimal.
**Tâches** :
- [ ] Introduire un DTO dédié `CreateAdministrateurDto`
- [ ] Champs autorisés : nom, prenom, email, password, telephone
- [ ] Champs exclus : adresse, ville, photo, etc.
- [ ] Rôle forcé à `ADMINISTRATEUR`
- [ ] Validation stricte
---
## 🟢 PRIORITÉ 3 : Frontend - Interfaces
### Ticket #35 : [Frontend] Écran Création Gestionnaire
@ -1085,6 +1103,24 @@ Interface de gestion des Relais dans le dashboard admin et rattachement des gest
---
<<<<<<< HEAD
=======
### Ticket #96 : [Frontend] Admin - Création administrateur via modale (sans relais)
**Estimation** : 3h
**Labels** : `frontend`, `p3`, `admin`
**Description** :
Permettre la création d'un administrateur via une modale simple depuis le dashboard admin.
**Tâches** :
- [ ] Bouton "Créer administrateur" dans l'onglet Administrateurs
- [ ] Modale avec formulaire simplifié (Nom, Prénom, Email, MDP, Téléphone)
- [ ] Appel API `POST /users` (ou endpoint dédié si #97 implémenté)
- [ ] Gestion succès/erreur et rafraîchissement liste
---
>>>>>>> develop
## 🔵 PRIORITÉ 4 : Tests & Documentation
### Ticket #52 : [Tests] Tests unitaires Backend
@ -1200,6 +1236,20 @@ Mettre en place un système de logs centralisé avec Winston pour faciliter le d
---
### Ticket #89 : Log des appels API en mode debug
**Estimation** : 2h
**Labels** : `backend`, `monitoring`
**Description** :
Ajouter des logs détaillés pour les appels API en mode debug pour faciliter le diagnostic.
**Tâches** :
- [ ] Middleware ou Intercepteur pour logger les requêtes entrantes (méthode, URL, body)
- [ ] Logger les réponses (status, temps d'exécution)
- [ ] Activable via variable d'environnement `DEBUG=true` ou niveau de log
---
### Ticket #51 (réf.) : [Frontend] Écran Logs Admin (optionnel v1.1)
**Estimation** : 4h
**Labels** : `frontend`, `p3`, `monitoring`, `admin`
@ -1302,8 +1352,8 @@ Rédiger les documents légaux génériques (CGU et Politique de confidentialit
## 📊 Résumé final
**Total** : 69 tickets
**Estimation** : ~200h de développement
**Total** : 72 tickets
**Estimation** : ~208h de développement
### Par priorité
- **P0 (Bloquant BDD)** : 7 tickets (~5h)
@ -1338,7 +1388,7 @@ Rédiger les documents légaux génériques (CGU et Politique de confidentialit
---
**Dernière mise à jour** : 9 Février 2026
**Version** : 1.4
**Dernière mise à jour** : 24 Février 2026
**Version** : 1.6
**Statut** : ✅ Aligné avec le dépôt Gitea