Skip to content

Commit d6315cd

Browse files
committed
feat: Add detailed JSDoc comments to Extension DTOs for improved documentation
1 parent db907ff commit d6315cd

File tree

1 file changed

+159
-0
lines changed

1 file changed

+159
-0
lines changed

apps/api/src/extensions/_dto/extension.dto.ts

Lines changed: 159 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,206 @@
11
import { Type } from 'class-transformer'
22
import { IsDefined, IsEnum, IsOptional, IsString, ValidateNested } from 'class-validator'
33

4+
/**
5+
* DTO pour les métadonnées de service d'une extension (app ou service).
6+
*
7+
* Définit la configuration pour charger et intégrer un module d'extension
8+
* dans l'application ou le service.
9+
*
10+
* @class ExtensionSettingsAppServiceMetadataV1
11+
*
12+
* @description
13+
* Cette classe configure :
14+
* - Le chemin cible du module d'extension à charger
15+
* - Le nom du module principal à importer (par défaut 'ExtensionModule')
16+
*/
417
export class ExtensionSettingsAppServiceMetadataV1 {
18+
/**
19+
* Chemin cible du module d'extension.
20+
* Chemin relatif ou absolu vers le fichier compilé du module.
21+
*
22+
* @type {string}
23+
* @required
24+
* @example "./dist/my-extension", "/path/to/extension"
25+
*/
526
@IsDefined()
627
@IsString()
728
public target: string
829

30+
/**
31+
* Nom du module principal à importer depuis l'extension.
32+
* Par défaut, recherche 'ExtensionModule' comme point d'entrée.
33+
*
34+
* @type {string}
35+
* @optional
36+
* @default "ExtensionModule"
37+
*/
938
@IsOptional()
1039
@IsString()
1140
public mainModule: string = 'ExtensionModule'
1241
}
1342

43+
/**
44+
* DTO pour les paramètres de configuration d'une extension.
45+
*
46+
* Définit les configurations séparées pour l'application (frontend)
47+
* et le service (backend) si l'extension nécessite d'être chargée
48+
* dans les deux environnements.
49+
*
50+
* @class ExtensionSettingsMetadataV1
51+
*
52+
* @description
53+
* Permet de configurer des extensions qui peuvent :
54+
* - S'intégrer uniquement côté application (frontend)
55+
* - S'intégrer uniquement côté service (backend)
56+
* - S'intégrer des deux côtés avec des modules différents
57+
*/
1458
export class ExtensionSettingsMetadataV1 {
59+
/**
60+
* Configuration pour le chargement côté application (frontend).
61+
*
62+
* @type {ExtensionSettingsAppServiceMetadataV1}
63+
*/
1564
@ValidateNested()
1665
@Type(() => ExtensionSettingsAppServiceMetadataV1)
1766
public app: ExtensionSettingsAppServiceMetadataV1
1867

68+
/**
69+
* Configuration pour le chargement côté service (backend).
70+
*
71+
* @type {ExtensionSettingsAppServiceMetadataV1}
72+
*/
1973
@ValidateNested()
2074
@Type(() => ExtensionSettingsAppServiceMetadataV1)
2175
public service: ExtensionSettingsAppServiceMetadataV1
2276
}
2377

78+
/**
79+
* DTO pour les informations descriptives d'une extension.
80+
*
81+
* Contient les métadonnées d'identification et de version de l'extension.
82+
*
83+
* @class ExtensionInformationMetadataV1
84+
*
85+
* @description
86+
* Ces informations permettent :
87+
* - L'identification unique de l'extension
88+
* - Le suivi de la version pour la gestion des mises à jour
89+
* - L'attribution de l'extension à son auteur
90+
*/
2491
export class ExtensionInformationMetadataV1 {
92+
/**
93+
* Nom de l'extension.
94+
* Identifiant unique et descriptif de l'extension.
95+
*
96+
* @type {string}
97+
* @required
98+
* @example "authentication-ldap", "custom-dashboard"
99+
*/
25100
@IsString()
26101
public name: string
27102

103+
/**
104+
* Auteur de l'extension.
105+
*
106+
* @type {string}
107+
* @required
108+
* @example "John Doe", "ACME Corporation"
109+
*/
28110
@IsString()
29111
public author: string
30112

113+
/**
114+
* Version de l'extension.
115+
* Format semantic versioning recommandé (MAJOR.MINOR.PATCH).
116+
*
117+
* @type {string}
118+
* @required
119+
* @example "1.0.0", "2.3.1"
120+
*/
31121
@IsString()
32122
public version: string
33123
}
34124

125+
/**
126+
* DTO principal pour le fichier de configuration d'une extension (v1).
127+
*
128+
* Ce DTO représente la structure complète du fichier de métadonnées d'une extension
129+
* (typiquement extension.yml). Il définit comment l'extension doit être chargée,
130+
* intégrée et identifiée dans le système.
131+
*
132+
* @class ExtensionFileV1
133+
*
134+
* @description
135+
* Une extension est un plugin qui permet d'ajouter des fonctionnalités personnalisées
136+
* à l'application sans modifier le code source principal. Les extensions peuvent :
137+
* - Ajouter de nouveaux endpoints API
138+
* - Enrichir les fonctionnalités existantes via des hooks
139+
* - Intégrer des services tiers
140+
* - Personnaliser le comportement de l'application
141+
* - Ajouter des interfaces utilisateur personnalisées
142+
*
143+
* Le système de chargement d'extensions permet :
144+
* - Le chargement dynamique au démarrage de l'application
145+
* - L'isolation des extensions dans leurs propres modules
146+
* - La configuration séparée pour frontend et backend
147+
* - La gestion des versions et des dépendances
148+
*
149+
* @example
150+
* ```typescript
151+
* // Fichier extension.yml
152+
* {
153+
* version: "1",
154+
* information: {
155+
* name: "custom-auth-extension",
156+
* author: "Security Team",
157+
* version: "1.0.0"
158+
* },
159+
* settings: {
160+
* app: {
161+
* target: "./dist/client",
162+
* mainModule: "CustomAuthClientModule"
163+
* },
164+
* service: {
165+
* target: "./dist/server",
166+
* mainModule: "CustomAuthServerModule"
167+
* }
168+
* }
169+
* }
170+
* ```
171+
*/
35172
export class ExtensionFileV1 {
173+
/**
174+
* Version du format de fichier d'extension.
175+
* Actuellement seule la version "1" est supportée.
176+
*
177+
* @type {string}
178+
* @required
179+
* @enum "1"
180+
*/
36181
@IsDefined()
37182
@IsEnum(['1'])
38183
public version: string
39184

185+
/**
186+
* Informations descriptives de l'extension.
187+
* Contient le nom, l'auteur et la version de l'extension.
188+
*
189+
* @type {ExtensionInformationMetadataV1}
190+
* @required
191+
*/
40192
@IsDefined()
41193
@ValidateNested()
42194
@Type(() => ExtensionInformationMetadataV1)
43195
public information: ExtensionInformationMetadataV1
44196

197+
/**
198+
* Paramètres de configuration pour le chargement de l'extension.
199+
* Définit comment charger l'extension côté application et service.
200+
*
201+
* @type {ExtensionSettingsMetadataV1}
202+
* @required
203+
*/
45204
@IsDefined()
46205
@ValidateNested()
47206
@Type(() => ExtensionSettingsMetadataV1)

0 commit comments

Comments
 (0)