Skip to content

Commit 9193649

Browse files
committed
feat: Enhance AgentsController with detailed JSDoc comments for better documentation
1 parent 2400f97 commit 9193649

File tree

1 file changed

+114
-28
lines changed

1 file changed

+114
-28
lines changed
Lines changed: 114 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,100 @@
1-
import { Body, Controller, Delete, Get, HttpStatus, Param, Patch, Post, Res } from '@nestjs/common';
2-
import { ApiParam, ApiTags } from '@nestjs/swagger';
1+
import { Body, Controller, Delete, Get, HttpStatus, Param, Patch, Post, Res } from '@nestjs/common'
2+
import { ApiParam, ApiTags } from '@nestjs/swagger'
33
import {
44
FilterOptions,
55
FilterSchema,
66
SearchFilterOptions,
77
SearchFilterSchema,
8-
} from '~/_common/restools';
9-
import { Response } from 'express';
10-
import { Types } from 'mongoose';
11-
import { AbstractController } from '~/_common/abstracts/abstract.controller';
12-
import { ApiCreateDecorator } from '~/_common/decorators/api-create.decorator';
13-
import { ApiDeletedResponseDecorator } from '~/_common/decorators/api-deleted-response.decorator';
14-
import { ApiPaginatedDecorator } from '~/_common/decorators/api-paginated.decorator';
15-
import { ApiReadResponseDecorator } from '~/_common/decorators/api-read-response.decorator';
16-
import { ApiUpdateDecorator } from '~/_common/decorators/api-update.decorator';
17-
import { PickProjectionHelper } from '~/_common/helpers/pick-projection.helper';
18-
import { ObjectIdValidationPipe } from '~/_common/pipes/object-id-validation.pipe';
19-
import { PartialProjectionType } from '~/_common/types/partial-projection.type';
20-
import { AgentsCreateDto, AgentsDto, AgentsUpdateDto } from '~/core/agents/_dto/agents.dto';
21-
import { AgentsService } from './agents.service';
8+
} from '~/_common/restools'
9+
import { Response } from 'express'
10+
import { Types } from 'mongoose'
11+
import { AbstractController } from '~/_common/abstracts/abstract.controller'
12+
import { ApiCreateDecorator } from '~/_common/decorators/api-create.decorator'
13+
import { ApiDeletedResponseDecorator } from '~/_common/decorators/api-deleted-response.decorator'
14+
import { ApiPaginatedDecorator } from '~/_common/decorators/api-paginated.decorator'
15+
import { ApiReadResponseDecorator } from '~/_common/decorators/api-read-response.decorator'
16+
import { ApiUpdateDecorator } from '~/_common/decorators/api-update.decorator'
17+
import { PickProjectionHelper } from '~/_common/helpers/pick-projection.helper'
18+
import { ObjectIdValidationPipe } from '~/_common/pipes/object-id-validation.pipe'
19+
import { PartialProjectionType } from '~/_common/types/partial-projection.type'
20+
import { AgentsCreateDto, AgentsDto, AgentsUpdateDto } from '~/core/agents/_dto/agents.dto'
21+
import { AgentsService } from './agents.service'
2222

23+
/**
24+
* Contrôleur pour la gestion des agents
25+
*
26+
* Ce contrôleur fournit les endpoints REST pour gérer les agents du système,
27+
* incluant la création, la recherche, la lecture, la mise à jour et la suppression.
28+
*
29+
* @class AgentsController
30+
* @extends {AbstractController}
31+
*/
2332
@ApiTags('core/agents')
2433
@Controller('agents')
2534
export class AgentsController extends AbstractController {
35+
/**
36+
* Projection des champs retournés pour les opérations de recherche
37+
*
38+
* Définit les propriétés de l'agent qui seront incluses dans les réponses
39+
* des requêtes de recherche et de liste.
40+
*
41+
* @protected
42+
* @static
43+
* @readonly
44+
* @type {PartialProjectionType<AgentsDto>}
45+
*/
2646
protected static readonly projection: PartialProjectionType<AgentsDto> = {
2747
// entityId: 1,
2848
username: 1,
2949
displayName: 1,
3050
email: 1,
3151
state: 1,
3252
hidden: 1,
33-
};
53+
}
3454

55+
/**
56+
* Constructeur du contrôleur agents
57+
*
58+
* @param {AgentsService} _service - Service de gestion des agents injecté par dépendance
59+
*/
3560
public constructor(private readonly _service: AgentsService) {
36-
super();
61+
super()
3762
}
3863

64+
/**
65+
* Crée un nouvel agent
66+
*
67+
* Endpoint POST permettant de créer un nouvel agent dans le système.
68+
*
69+
* @async
70+
* @param {Response} res - Objet de réponse Express
71+
* @param {AgentsCreateDto} body - Données de création de l'agent
72+
* @returns {Promise<Response>} Réponse HTTP avec l'agent créé et le code 201
73+
* @throws {BadRequestException} Si les données fournies sont invalides
74+
*/
3975
@Post()
4076
@ApiCreateDecorator(AgentsCreateDto, AgentsDto)
4177
public async create(@Res() res: Response, @Body() body: AgentsCreateDto): Promise<Response> {
42-
const data = await this._service.create(body);
78+
const data = await this._service.create(body)
4379
return res.status(HttpStatus.CREATED).json({
4480
statusCode: HttpStatus.CREATED,
4581
data,
46-
});
82+
})
4783
}
4884

85+
/**
86+
* Recherche et liste les agents avec pagination
87+
*
88+
* Endpoint GET permettant de rechercher et filtrer les agents avec support
89+
* de la pagination, du tri et des filtres avancés.
90+
*
91+
* @async
92+
* @param {Response} res - Objet de réponse Express
93+
* @param {FilterSchema} searchFilterSchema - Schéma de filtres de recherche
94+
* @param {FilterOptions} searchFilterOptions - Options de pagination et tri
95+
* @returns {Promise<Response>} Réponse HTTP avec la liste paginée des agents et le total
96+
* @todo Implémenter la recherche arborescente par parentId
97+
*/
4998
@Get()
5099
@ApiPaginatedDecorator(PickProjectionHelper(AgentsDto, AgentsController.projection))
51100
public async search(
@@ -58,14 +107,26 @@ export class AgentsController extends AbstractController {
58107
searchFilterSchema,
59108
AgentsController.projection,
60109
searchFilterOptions,
61-
);
110+
)
62111
return res.status(HttpStatus.OK).json({
63112
statusCode: HttpStatus.OK,
64113
total,
65114
data,
66-
});
115+
})
67116
}
68117

118+
/**
119+
* Récupère un agent par son identifiant
120+
*
121+
* Endpoint GET permettant de récupérer les détails complets d'un agent spécifique.
122+
* Les champs sensibles (password, security) sont exclus de la réponse.
123+
*
124+
* @async
125+
* @param {Types.ObjectId} _id - Identifiant MongoDB de l'agent (24 caractères hexadécimaux)
126+
* @param {Response} res - Objet de réponse Express
127+
* @returns {Promise<Response>} Réponse HTTP avec les données de l'agent
128+
* @throws {NotFoundException} Si l'agent n'est pas trouvé
129+
*/
69130
@Get(':_id([0-9a-fA-F]{24})')
70131
@ApiParam({ name: '_id', type: String })
71132
@ApiReadResponseDecorator(AgentsDto)
@@ -76,13 +137,27 @@ export class AgentsController extends AbstractController {
76137
const data = await this._service.findById(_id, {
77138
password: 0,
78139
security: 0,
79-
});
140+
})
80141
return res.status(HttpStatus.OK).json({
81142
statusCode: HttpStatus.OK,
82143
data,
83-
});
144+
})
84145
}
85146

147+
/**
148+
* Met à jour un agent existant
149+
*
150+
* Endpoint PATCH permettant de modifier partiellement les données d'un agent.
151+
* Seuls les champs fournis dans le body seront mis à jour.
152+
*
153+
* @async
154+
* @param {Types.ObjectId} _id - Identifiant MongoDB de l'agent (24 caractères hexadécimaux)
155+
* @param {AgentsUpdateDto} body - Données de mise à jour de l'agent
156+
* @param {Response} res - Objet de réponse Express
157+
* @returns {Promise<Response>} Réponse HTTP avec l'agent mis à jour
158+
* @throws {NotFoundException} Si l'agent n'est pas trouvé
159+
* @throws {BadRequestException} Si les données fournies sont invalides
160+
*/
86161
@Patch(':_id([0-9a-fA-F]{24})')
87162
@ApiParam({ name: '_id', type: String })
88163
@ApiUpdateDecorator(AgentsUpdateDto, AgentsDto)
@@ -91,24 +166,35 @@ export class AgentsController extends AbstractController {
91166
@Body() body: AgentsUpdateDto,
92167
@Res() res: Response,
93168
): Promise<Response> {
94-
const data = await this._service.update(_id, body);
169+
const data = await this._service.update(_id, body)
95170
return res.status(HttpStatus.OK).json({
96171
statusCode: HttpStatus.OK,
97172
data,
98-
});
173+
})
99174
}
100175

176+
/**
177+
* Supprime un agent
178+
*
179+
* Endpoint DELETE permettant de supprimer un agent du système.
180+
*
181+
* @async
182+
* @param {Types.ObjectId} _id - Identifiant MongoDB de l'agent (24 caractères hexadécimaux)
183+
* @param {Response} res - Objet de réponse Express
184+
* @returns {Promise<Response>} Réponse HTTP avec les données de l'agent supprimé
185+
* @throws {NotFoundException} Si l'agent n'est pas trouvé
186+
*/
101187
@Delete(':_id([0-9a-fA-F]{24})')
102188
@ApiParam({ name: '_id', type: String })
103189
@ApiDeletedResponseDecorator(AgentsDto)
104190
public async remove(
105191
@Param('_id', ObjectIdValidationPipe) _id: Types.ObjectId,
106192
@Res() res: Response,
107193
): Promise<Response> {
108-
const data = await this._service.delete(_id);
194+
const data = await this._service.delete(_id)
109195
return res.status(HttpStatus.OK).json({
110196
statusCode: HttpStatus.OK,
111197
data,
112-
});
198+
})
113199
}
114200
}

0 commit comments

Comments
 (0)