Skip to content

Commit e2bfbb0

Browse files
Mise a jours des services validations et jsonforms pour prendre en compte les config montees en volume
1 parent 58341e7 commit e2bfbb0

File tree

5 files changed

+83
-31
lines changed

5 files changed

+83
-31
lines changed

configs/identities/jsonforms/.gitkeep

Whitespace-only changes.

configs/identities/validations/.gitkeep

Whitespace-only changes.

src/management/identities/jsonforms/identities.jsonforms.controller.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ export class IdentitiesJsonFormsController extends AbstractController {
2020

2121
@Post('generate')
2222
async generate(@Res() res: Response, @Body('schema') schema: string | null = null): Promise<any> {
23-
const result = await this._service.generate(schema);
23+
const result = await this._service.generate({ schema, path: './configs/identities/jsonforms' });
2424
return res.status(HttpStatus.OK).json({
2525
statusCode: HttpStatus.OK,
2626
data: result,

src/management/identities/jsonforms/identities.jsonforms.service.ts

Lines changed: 46 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,25 @@ export class IdentitiesJsonformsService extends AbstractService {
1515
//this.validateSchema = this.ajv.compile(validSchema);
1616
}
1717

18-
async generate(schema: string): Promise<any> {
18+
private resolveJsonFormPath(schema: string): string | null {
19+
if (!schema.endsWith('.yml')) schema += '.yml';
20+
const hardConfigPath = `./src/management/identities/jsonforms/_config/${schema}`;
21+
const dynamicConfigPath = `./configs/identities/jsonforms/${schema}`;
22+
if (existsSync(dynamicConfigPath)) {
23+
return dynamicConfigPath;
24+
}
25+
if (existsSync(hardConfigPath)) {
26+
return hardConfigPath;
27+
}
28+
return null;
29+
}
30+
31+
async generate({ schema, path }): Promise<any> {
1932
if (schema) {
2033
console.log(`Generating jsonforms for schema: ${schema}`);
21-
const filePath = `./src/management/identities/validations/_config/${schema}.yml`;
22-
34+
if (!schema.endsWith('.yml')) schema += '.yml';
35+
const filePath = `${path}/${schema}`;
36+
console.log(`File path: ${filePath}`);
2337
if (!existsSync(filePath)) {
2438
console.log(`File not found: ${filePath}`);
2539
const message = `File not found: ${filePath}`;
@@ -71,45 +85,56 @@ export class IdentitiesJsonformsService extends AbstractService {
7185
}, [])
7286
.map((group) => group), // Flatten the structure
7387
};
74-
75-
writeFileSync(`./src/management/identities/jsonforms/_config/${schema}.ui.yml`, stringify(jsonForm));
88+
if (!schema.endsWith('.ui.yml')) schema = schema.replace('.yml', '.ui.yml');
89+
const jsonFormPath = `${path.replace('validations', 'jsonforms')}/${schema}`;
90+
console.log(`Writing jsonform to: ${jsonFormPath}`);
91+
writeFileSync(`${jsonFormPath}`, stringify(jsonForm));
7692
return jsonForm;
7793
}
7894
}
7995

8096
async generateAll(): Promise<any> {
81-
const configPath = './src/management/identities/validations/_config';
82-
const files = readdirSync(configPath);
97+
const hardConfigPath = './src/management/identities/validations/_config';
98+
const dynamicConfigPath = './configs/identities/validations';
99+
const hardConfigFiles = readdirSync(hardConfigPath).map((file) => ({ schema: file, path: hardConfigPath }));
100+
const dynamicConfigFiles = readdirSync(dynamicConfigPath).map((file) => ({
101+
schema: file,
102+
path: dynamicConfigPath,
103+
}));
104+
105+
console.log('Generating jsonforms for all schemas');
106+
console.log('Hard config files:', hardConfigFiles);
107+
console.log('Dynamic config files:', dynamicConfigFiles);
108+
const files = [...hardConfigFiles, ...dynamicConfigFiles].filter((file) => file.schema.endsWith('.yml'));
83109
for (const file of files) {
84110
this.generate(file);
85111
}
86112
return files.length;
87113
}
88114

89115
async findAll(): Promise<any> {
90-
// eslint-disable-next-line prefer-rest-params
91-
this.logger.debug(['findAll', JSON.stringify(Object.values(arguments))].join(' '));
92-
const configPath = './src/management/identities/jsonforms/_config';
93-
const files = readdirSync(configPath);
116+
const hardConfigPath = './src/management/identities/jsonforms/_config';
117+
const dynamicConfigPath = './configs/identities/jsonforms';
118+
const hardConfigFiles = readdirSync(hardConfigPath).map((file) => ({ file, path: hardConfigPath }));
119+
const dynamicConfigFiles = readdirSync(dynamicConfigPath).map((file) => ({ file, path: dynamicConfigPath }));
120+
121+
const files = [...hardConfigFiles, ...dynamicConfigFiles];
94122
const result = [];
95-
for (const file of files) {
96-
const filePath = `${configPath}/${file}`;
123+
for (const fileObj of files) {
124+
const filePath = `${fileObj.path}/${fileObj.file}`;
97125
const data = parse(readFileSync(filePath, 'utf-8'));
98-
const key = file.replace('.ui.yml', '');
126+
const key = fileObj.file.replace('.ui.yml', '');
99127
result.push({ [key]: data });
100128
}
101129
return [result, files.length];
102130
}
103131

104132
async findOne(schema): Promise<any> {
105-
// eslint-disable-next-line prefer-rest-params
106-
this.logger.debug(['findOne', JSON.stringify(Object.values(arguments))].join(' '));
107-
const filePath = `./src/management/identities/jsonforms/_config/${schema}.ui.yml`;
108-
if (!existsSync(filePath)) {
109-
const message = `File not found: ${filePath}`;
110-
throw new ValidationConfigException({ message });
133+
if (schema.endsWith('.yml')) schema = schema.replace('.yml', '');
134+
const filePath = this.resolveJsonFormPath(schema + '.ui');
135+
if (!filePath) {
136+
throw new ValidationConfigException({ message: `File not found: ${schema}.ui.yml` });
111137
}
112-
113138
return parse(readFileSync(filePath, 'utf-8'));
114139
}
115140
}

src/management/identities/validations/identities.validation.service.ts

Lines changed: 36 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,18 @@ export class IdentitiesValidationService {
2525
this.logger = new Logger();
2626
}
2727

28+
private resolveConfigPath(key: string): string | null {
29+
const hardConfigPath = `./src/management/identities/validations/_config/${key}.yml`;
30+
const dynamicConfigPath = `./configs/identities/validations/${key}.yml`;
31+
if (existsSync(dynamicConfigPath)) {
32+
return dynamicConfigPath;
33+
}
34+
if (existsSync(hardConfigPath)) {
35+
return hardConfigPath;
36+
}
37+
return null;
38+
}
39+
2840
/**
2941
* Validates additional fields for identities.
3042
* @param data - The additional fields data to validate.
@@ -55,7 +67,7 @@ export class IdentitiesValidationService {
5567
}
5668

5769
// Check for missing schema files
58-
const path = `./src/management/identities/validations/_config/${key}.yml`;
70+
const path = this.resolveConfigPath(key);
5971
if (!existsSync(path)) {
6072
validations[key] = `Fichier de config '${key}.yml' introuvable`;
6173
reject = true;
@@ -99,7 +111,7 @@ export class IdentitiesValidationService {
99111
* @returns A promise that resolves with an error message if validation fails, otherwise null.
100112
*/
101113
public async validateAttribute(key: string, attribute: any): Promise<string | null> {
102-
const path = `./src/management/identities/validations/_config/${key}.yml`;
114+
const path = this.resolveConfigPath(key);
103115
const schema: ConfigObjectSchemaDTO = parse(readFileSync(path, 'utf8'));
104116

105117
const yupSchema = buildYup(schema, { noSortEdges: true });
@@ -116,21 +128,36 @@ export class IdentitiesValidationService {
116128

117129
async findAll(): Promise<any> {
118130
this.logger.debug(['findAll', JSON.stringify(Object.values(arguments))].join(' '));
119-
const configPath = './src/management/identities/validations/_config';
120-
const files = readdirSync(configPath);
131+
const hardConfigPath = './src/management/identities/validations/_config';
132+
const dynamicConfigPath = './configs/identities/validations';
133+
// Retrieve files from each directory and tag them with their source
134+
const hardConfigFiles = readdirSync(hardConfigPath).map((file) => ({
135+
file,
136+
path: hardConfigPath,
137+
source: 'hardConfig',
138+
}));
139+
const dynamicConfigFiles = readdirSync(dynamicConfigPath).map((file) => ({
140+
file,
141+
path: dynamicConfigPath,
142+
source: 'dynamicConfig',
143+
}));
144+
145+
// Combine the file arrays
146+
const files = [...hardConfigFiles, ...dynamicConfigFiles];
147+
121148
const result = [];
122-
for (const file of files) {
123-
const filePath = `${configPath}/${file}`;
149+
for (const fileObj of files) {
150+
const filePath = `${fileObj.path}/${fileObj.file}`;
124151
const data = parse(readFileSync(filePath, 'utf-8'));
125-
const key = file.replace('.yml', '');
126-
result.push({ [key]: data });
152+
const key = fileObj.file.replace('.yml', '');
153+
result.push({ [key]: data, source: fileObj.source });
127154
}
128155
return [result, files.length];
129156
}
130157

131158
async findOne(schema): Promise<any> {
132159
this.logger.debug(['findOne', JSON.stringify(Object.values(arguments))].join(' '));
133-
const filePath = `./src/management/identities/validations/_config/${schema}.yml`;
160+
const filePath = this.resolveConfigPath(schema);
134161
if (!existsSync(filePath)) {
135162
const message = `File not found: ${filePath}`;
136163
throw new ValidationConfigException({ message });

0 commit comments

Comments
 (0)