Skip to content

Commit 1a87a59

Browse files
committed
Refactor IdentitiesActivationController to enhance validation and error handling for activation status
1 parent 9455c5a commit 1a87a59

File tree

1 file changed

+76
-18
lines changed

1 file changed

+76
-18
lines changed

apps/api/src/management/identities/identities-activation.controller.ts

Lines changed: 76 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,94 @@
1-
import {AbstractController} from '~/_common/abstracts/abstract.controller';
2-
import {IdentitiesActivationService} from '~/management/identities/identities-activation.service';
3-
import {ApiOperation, ApiResponse, ApiTags} from '@nestjs/swagger';
4-
import {Body, Controller, HttpStatus, Post, Res} from '@nestjs/common';
5-
import {Response} from 'express';
6-
import {ActivationDto} from '~/management/identities/_dto/_parts/activation-dto';
7-
import {DataStatusEnum} from "~/management/identities/_enums/data-status";
1+
import { AbstractController } from '~/_common/abstracts/abstract.controller';
2+
import { IdentitiesActivationService } from '~/management/identities/identities-activation.service';
3+
import { ApiOperation, ApiResponse, ApiTags } from '@nestjs/swagger';
4+
import { Body, Controller, HttpStatus, Post, Res } from '@nestjs/common';
5+
import { Response } from 'express';
6+
import { ActivationDto } from '~/management/identities/_dto/_parts/activation-dto';
7+
import { DataStatusEnum } from "~/management/identities/_enums/data-status";
88

9+
/**
10+
* Contrôleur pour la gestion de l'activation/désactivation des identités
11+
* Permet de modifier le statut des identités entre ACTIVE et INACTIVE
12+
*/
913
@ApiTags('management/identities')
1014
@Controller('identities')
1115
export class IdentitiesActivationController extends AbstractController {
16+
/**
17+
* Constructeur du contrôleur d'activation des identités
18+
*
19+
* @param _service - Service d'activation des identités
20+
*/
1221
public constructor(protected readonly _service: IdentitiesActivationService) {
1322
super();
1423
}
1524

25+
/**
26+
* Active ou désactive une identité selon le paramètre status
27+
*
28+
* @param res - Objet de réponse Express
29+
* @param body - Données contenant l'ID de l'identité et le statut souhaité
30+
* @returns Réponse HTTP avec le résultat de l'opération
31+
*/
1632
@Post('activation')
17-
@ApiOperation({ summary: 'active/desactive l identité' })
18-
@ApiResponse({ status: HttpStatus.OK })
19-
public async activation(@Res() res: Response, @Body() body: ActivationDto): Promise<Response> {
33+
@ApiOperation({ summary: 'Active ou désactive une identité' })
34+
@ApiResponse({
35+
status: HttpStatus.OK,
36+
description: 'Identité activée/désactivée avec succès'
37+
})
38+
@ApiResponse({
39+
status: HttpStatus.BAD_REQUEST,
40+
description: 'Erreur de validation ou identité introuvable'
41+
})
42+
public async activation(
43+
@Res() res: Response,
44+
@Body() body: ActivationDto,
45+
): Promise<Response> {
2046
try {
21-
let param = DataStatusEnum.INACTIVE
22-
if ( body.status === true){
23-
param=DataStatusEnum.ACTIVE
47+
// Validation des paramètres d'entrée
48+
if (!body?.id || typeof body.id !== 'string') {
49+
return res.status(HttpStatus.BAD_REQUEST).json({
50+
statusCode: HttpStatus.BAD_REQUEST,
51+
message: 'Valid identity ID is required',
52+
});
2453
}
25-
const data = await this._service.activation(body.id, param);
54+
55+
if (typeof body.status !== 'boolean') {
56+
return res.status(HttpStatus.BAD_REQUEST).json({
57+
statusCode: HttpStatus.BAD_REQUEST,
58+
message: 'Status must be a boolean value',
59+
});
60+
}
61+
62+
// Détermination du statut cible selon le paramètre booléen
63+
const targetStatus = body.status ? DataStatusEnum.ACTIVE : DataStatusEnum.INACTIVE;
64+
65+
// Appel du service d'activation
66+
const result = await this._service.activation(body.id, targetStatus);
67+
2668
return res.status(HttpStatus.OK).json({
2769
statusCode: HttpStatus.OK,
28-
data,
70+
message: `Identity ${body.status ? 'activated' : 'deactivated'} successfully`,
71+
data: result,
2972
});
73+
3074
} catch (error) {
31-
return res.status(HttpStatus.BAD_REQUEST).json({
32-
statusCode: HttpStatus.BAD_REQUEST,
33-
message: error.message,
75+
// Gestion différenciée des erreurs selon leur type
76+
let statusCode = HttpStatus.INTERNAL_SERVER_ERROR;
77+
let message = 'Internal server error';
78+
79+
if (error.status) {
80+
// Erreur HTTP avec status défini (BadRequestException, HttpException, etc.)
81+
statusCode = error.status;
82+
message = error.message || error.response?.message || 'Request failed';
83+
} else if (error.message) {
84+
// Autres erreurs avec message
85+
statusCode = HttpStatus.BAD_REQUEST;
86+
message = error.message;
87+
}
88+
89+
return res.status(statusCode).json({
90+
statusCode,
91+
message,
3492
});
3593
}
3694
}

0 commit comments

Comments
 (0)