Skip to content

Commit 1153dcc

Browse files
committed
feat: Add detailed JSDoc comments to AgentPart and Audits schemas for improved documentation
1 parent 324eb98 commit 1153dcc

File tree

2 files changed

+169
-19
lines changed

2 files changed

+169
-19
lines changed
Lines changed: 56 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,66 @@
1-
import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
2-
import { Document, Types } from 'mongoose';
1+
import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose'
2+
import { Document, Types } from 'mongoose'
33

4+
/**
5+
* Schéma Mongoose pour la partie Agent des audits.
6+
*
7+
* Ce schéma représente les informations de l'agent (utilisateur ou système)
8+
* qui a effectué l'action auditée. Il est utilisé comme sous-document dans
9+
* les entrées d'audit pour tracer l'origine des modifications.
10+
*
11+
* @class AgentPart
12+
* @extends {Document}
13+
*
14+
* @description
15+
* Structure de l'agent :
16+
* - $ref : Référence au type de collection de l'agent (ex: "agents", "users", "system")
17+
* - id : Identifiant unique de l'agent dans sa collection
18+
* - name : Nom ou identifiant lisible de l'agent (optionnel)
19+
*
20+
* Note : Le schéma utilise `_id: false` car il est intégré comme sous-document
21+
* dans le schéma d'audit principal et n'a pas besoin de son propre identifiant.
22+
*
23+
* @example
24+
* ```typescript
25+
* {
26+
* $ref: "agents",
27+
* id: ObjectId("507f1f77bcf86cd799439011"),
28+
* name: "john.doe"
29+
* }
30+
* ```
31+
*/
432
@Schema({ _id: false })
533
export class AgentPart extends Document {
34+
/**
35+
* Référence au type de collection de l'agent.
36+
* Indique la collection MongoDB où se trouve l'enregistrement complet de l'agent.
37+
*
38+
* @type {string}
39+
* @example "agents", "users", "system"
40+
*/
641
@Prop({ type: String, required: true })
7-
public $ref: string;
42+
public $ref: string
843

44+
/**
45+
* Identifiant unique de l'agent dans sa collection.
46+
*
47+
* @type {Types.ObjectId}
48+
*/
949
@Prop({ type: Types.ObjectId, required: true })
10-
public id: Types.ObjectId;
50+
public id: Types.ObjectId
1151

52+
/**
53+
* Nom ou identifiant lisible de l'agent.
54+
* Permet une identification rapide sans avoir à faire une jointure.
55+
*
56+
* @type {string}
57+
* @optional
58+
*/
1259
@Prop({ type: String })
13-
public name?: string;
60+
public name?: string
1461
}
1562

16-
export const AgentPartSchema = SchemaFactory.createForClass(AgentPart);
63+
/**
64+
* Factory pour créer le schéma Mongoose à partir de la classe AgentPart.
65+
*/
66+
export const AgentPartSchema = SchemaFactory.createForClass(AgentPart)
Lines changed: 113 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,150 @@
1-
import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
2-
import { Document, Types } from 'mongoose';
3-
import { AbstractSchema } from '~/_common/abstracts/schemas/abstract.schema';
4-
import { AgentPart, AgentPartSchema } from './_parts/agent.parts.schema';
5-
import { ChangesType } from '~/_common/plugins/mongoose/history.plugin';
1+
import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose'
2+
import { Document, Types } from 'mongoose'
3+
import { AbstractSchema } from '~/_common/abstracts/schemas/abstract.schema'
4+
import { AgentPart, AgentPartSchema } from './_parts/agent.parts.schema'
5+
import { ChangesType } from '~/_common/plugins/mongoose/history.plugin'
66

7+
/**
8+
* Énumération des types d'opérations auditées.
9+
*
10+
* @enum {string}
11+
*/
712
export enum AuditOperation {
13+
/** Insertion d'un nouvel enregistrement */
814
INSERT = 'insert',
15+
/** Mise à jour d'un enregistrement existant */
916
UPDATE = 'update',
17+
/** Suppression d'un enregistrement */
1018
DELETE = 'delete',
19+
/** Remplacement complet d'un enregistrement */
1120
REPLACE = 'replace',
1221
}
1322

14-
export type AuditsDocument = Audits & Document;
23+
/**
24+
* Type combiné pour les documents d'audit avec les fonctionnalités Mongoose.
25+
*/
26+
export type AuditsDocument = Audits & Document
1527

28+
/**
29+
* Schéma Mongoose principal pour les audits.
30+
*
31+
* Ce schéma stocke l'historique complet de toutes les modifications apportées
32+
* aux enregistrements du système. Les entrées d'audit sont créées automatiquement
33+
* par le plugin Mongoose d'historique qui intercepte les opérations de base de données.
34+
*
35+
* @class Audits
36+
* @extends {AbstractSchema}
37+
*
38+
* @description
39+
* Chaque entrée d'audit enregistre :
40+
* - La collection et l'identifiant du document modifié
41+
* - Le type d'opération effectuée (insert, update, delete, replace)
42+
* - L'agent qui a effectué l'action (utilisateur ou système)
43+
* - L'état complet du document après l'opération (data)
44+
* - Le détail des changements pour les mises à jour (changes)
45+
* - Les métadonnées héritées d'AbstractSchema (dates de création, modification, etc.)
46+
*
47+
* Ces informations permettent :
48+
* - De consulter l'historique complet d'un enregistrement
49+
* - D'auditer les actions des utilisateurs
50+
* - D'effectuer un rollback en restaurant une version antérieure
51+
* - D'analyser les modifications pour détecter des anomalies
52+
*
53+
* @example
54+
* ```typescript
55+
* {
56+
* coll: "users",
57+
* documentId: ObjectId("507f1f77bcf86cd799439011"),
58+
* op: "update",
59+
* agent: {
60+
* $ref: "agents",
61+
* id: ObjectId("507f1f77bcf86cd799439012"),
62+
* name: "john.doe"
63+
* },
64+
* data: { username: "john.doe", email: "new@example.com" },
65+
* changes: [],
66+
* createdAt: ISODate("2025-11-25T10:00:00Z")
67+
* }
68+
* ```
69+
*/
1670
@Schema({ versionKey: false, collection: 'audits' })
1771
export class Audits extends AbstractSchema {
72+
/**
73+
* Nom de la collection MongoDB du document audité.
74+
* Permet d'identifier le type d'enregistrement concerné par l'audit.
75+
*
76+
* @type {string}
77+
* @example "users", "agents", "tasks"
78+
*/
1879
@Prop({
1980
type: String,
2081
required: true,
2182
})
22-
public coll!: string;
83+
public coll!: string
2384

85+
/**
86+
* Identifiant unique du document audité dans sa collection.
87+
* Permet de retrouver l'enregistrement concerné par cette entrée d'audit.
88+
*
89+
* @type {Types.ObjectId}
90+
*/
2491
@Prop({
2592
type: Types.ObjectId,
2693
required: true,
2794
})
28-
public documentId!: Types.ObjectId;
95+
public documentId!: Types.ObjectId
2996

97+
/**
98+
* Type d'opération effectuée sur le document.
99+
* Détermine la nature de la modification auditée.
100+
*
101+
* @type {'insert' | 'update' | 'delete' | 'replace'}
102+
* @see {AuditOperation}
103+
*/
30104
@Prop({
31105
type: String,
32106
required: true,
33107
enum: AuditOperation,
34108
})
35-
public op!: 'insert' | 'update' | 'delete' | 'replace';
109+
public op!: 'insert' | 'update' | 'delete' | 'replace'
36110

111+
/**
112+
* Agent (utilisateur ou système) qui a effectué l'opération.
113+
* Contient la référence et l'identifiant de l'agent responsable de la modification.
114+
*
115+
* @type {AgentPart}
116+
* @see {AgentPart}
117+
*/
37118
@Prop({
38119
type: AgentPartSchema,
39120
required: true,
40121
})
41-
public agent!: AgentPart;
122+
public agent!: AgentPart
42123

124+
/**
125+
* État complet du document après l'opération.
126+
* Pour les insertions et mises à jour, contient l'état final du document.
127+
* Pour les suppressions, peut contenir l'état avant suppression.
128+
*
129+
* @type {Document}
130+
* @optional
131+
*/
43132
@Prop({ type: Object })
44-
public data?: Document;
133+
public data?: Document
45134

135+
/**
136+
* Détail des changements effectués lors d'une mise à jour.
137+
* Tableau contenant chaque champ modifié avec ses valeurs avant/après.
138+
* Uniquement présent pour les opérations de type UPDATE.
139+
*
140+
* @type {ChangesType[]}
141+
* @optional
142+
*/
46143
@Prop({ type: Array, of: Object })
47-
public changes?: ChangesType[];
144+
public changes?: ChangesType[]
48145
}
49146

50-
export const AuditsSchema = SchemaFactory.createForClass(Audits);
147+
/**
148+
* Factory pour créer le schéma Mongoose à partir de la classe Audits.
149+
*/
150+
export const AuditsSchema = SchemaFactory.createForClass(Audits)

0 commit comments

Comments
 (0)