Skip to content

Commit 32e934e

Browse files
committed
feat: Enhance AgentsService with detailed JSDoc comments for improved documentation
1 parent 5f0e906 commit 32e934e

File tree

1 file changed

+91
-17
lines changed

1 file changed

+91
-17
lines changed
Lines changed: 91 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,114 @@
1-
import { Injectable } from '@nestjs/common';
2-
import { InjectModel } from '@nestjs/mongoose';
3-
import { Agents } from '~/core/agents/_schemas/agents.schema';
4-
import { Document, Model, ModifyResult, Query, QueryOptions, SaveOptions, Types, UpdateQuery } from 'mongoose';
5-
import { AbstractServiceSchema } from '~/_common/abstracts/abstract.service.schema';
6-
import { AgentsCreateDto } from './_dto/agents.dto';
7-
import { hash } from 'argon2';
8-
import { randomBytes } from 'node:crypto';
9-
import { SecurityPartDTO } from './_dto/parts/security.part.dto';
1+
import { Injectable } from '@nestjs/common'
2+
import { InjectModel } from '@nestjs/mongoose'
3+
import { Agents } from '~/core/agents/_schemas/agents.schema'
4+
import { Document, Model, ModifyResult, Query, QueryOptions, SaveOptions, Types, UpdateQuery } from 'mongoose'
5+
import { AbstractServiceSchema } from '~/_common/abstracts/abstract.service.schema'
6+
import { AgentsCreateDto } from './_dto/agents.dto'
7+
import { hash } from 'argon2'
8+
import { randomBytes } from 'node:crypto'
9+
import { SecurityPartDTO } from './_dto/parts/security.part.dto'
1010

11+
/**
12+
* Service de gestion des agents.
13+
*
14+
* Ce service fournit les opérations CRUD pour les agents avec des fonctionnalités
15+
* de sécurité intégrées telles que le hachage des mots de passe et la génération
16+
* de clés secrètes.
17+
*
18+
* @class AgentsService
19+
* @extends {AbstractServiceSchema}
20+
*
21+
* @description
22+
* Fonctionnalités principales :
23+
* - Création d'agents avec hachage automatique du mot de passe (Argon2)
24+
* - Génération automatique d'une clé secrète unique pour chaque agent
25+
* - Mise à jour d'agents avec re-hachage du mot de passe si modifié
26+
* - Hérite des opérations CRUD standard via AbstractServiceSchema
27+
*/
1128
@Injectable()
1229
export class AgentsService extends AbstractServiceSchema {
30+
/**
31+
* Constructeur du service AgentsService.
32+
*
33+
* @param {Model<Agents>} _model - Le modèle Mongoose pour la collection des agents
34+
*/
1335
constructor(@InjectModel(Agents.name) protected _model: Model<Agents>) {
14-
super();
36+
super()
1537
}
1638

39+
/**
40+
* Crée un nouvel agent dans la base de données.
41+
*
42+
* Cette méthode effectue les opérations suivantes :
43+
* - Hache le mot de passe fourni avec Argon2
44+
* - Génère une clé secrète aléatoire de 64 caractères hexadécimaux
45+
* - Initialise l'objet security si non fourni
46+
* - Persiste l'agent dans la base de données
47+
*
48+
* @template T - Type étendu de Agents ou Document
49+
* @param {AgentsCreateDto} [data] - Les données de l'agent à créer
50+
* @param {SaveOptions} [options] - Options de sauvegarde Mongoose
51+
* @returns {Promise<Document<T, any, T>>} Le document de l'agent créé
52+
*
53+
* @example
54+
* ```typescript
55+
* const agent = await agentsService.create({
56+
* username: 'john.doe',
57+
* email: 'john.doe@example.com',
58+
* password: 'SecurePassword123!'
59+
* });
60+
* ```
61+
*/
1762
public async create<T extends Agents | Document>(
1863
data?: AgentsCreateDto,
1964
options?: SaveOptions,
2065
): Promise<Document<T, any, T>> {
21-
data.password = await hash(data.password);
22-
data.security = (data.security || {}) as SecurityPartDTO;
23-
data.security.secretKey = randomBytes(32).toString('hex');
24-
return await super.create(data, options);
66+
data.password = await hash(data.password)
67+
data.security = (data.security || {}) as SecurityPartDTO
68+
data.security.secretKey = randomBytes(32).toString('hex')
69+
70+
return await super.create(data, options)
2571
}
2672

73+
/**
74+
* Met à jour un agent existant dans la base de données.
75+
*
76+
* Cette méthode gère automatiquement le re-hachage du mot de passe
77+
* si celui-ci est modifié. Elle supporte les mises à jour directes
78+
* ainsi que les mises à jour via l'opérateur $set de MongoDB.
79+
*
80+
* @template T - Type étendu de Agents ou Document
81+
* @param {Types.ObjectId | any} _id - L'identifiant de l'agent à mettre à jour
82+
* @param {UpdateQuery<T> & any} update - Les données de mise à jour
83+
* @param {QueryOptions<T>} [options] - Options de requête Mongoose
84+
* @returns {Promise<ModifyResult<Query<T, T, any, T>>>} Le résultat de la modification
85+
*
86+
* @example
87+
* ```typescript
88+
* // Mise à jour simple
89+
* await agentsService.update(agentId, {
90+
* password: 'NewPassword456!'
91+
* });
92+
*
93+
* // Mise à jour avec $set
94+
* await agentsService.update(agentId, {
95+
* $set: { password: 'NewPassword456!' }
96+
* });
97+
* ```
98+
*/
2799
public async update<T extends Agents | Document>(
28100
_id: Types.ObjectId | any,
29101
update: UpdateQuery<T> & any,
30102
options?: QueryOptions<T>,
31103
): Promise<ModifyResult<Query<T, T, any, T>>> {
32104
if (update.password) {
33-
update.password = await hash(update.password);
105+
update.password = await hash(update.password)
34106
}
107+
35108
if (update.$set?.password) {
36-
update.$set.password = await hash(update.$set.password);
109+
update.$set.password = await hash(update.$set.password)
37110
}
111+
38112
return await super.update(
39113
_id,
40114
{
@@ -44,6 +118,6 @@ export class AgentsService extends AbstractServiceSchema {
44118
},
45119
},
46120
options,
47-
);
121+
)
48122
}
49123
}

0 commit comments

Comments
 (0)