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'
33import {
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' )
2534export 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