Skip to content

Commit 999e5cf

Browse files
Mise à jour du code avec des modifications de validation et de configuration
1 parent 6b185e8 commit 999e5cf

File tree

7 files changed

+233
-75
lines changed

7 files changed

+233
-75
lines changed

.prettierrc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
{
22
"singleQuote": true,
3-
"trailingComma": "all"
3+
"trailingComma": "all",
4+
"endOfLine": "auto"
45
}

src/_common/abstracts/abstract.service.schema.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -263,8 +263,6 @@ export abstract class AbstractServiceSchema extends AbstractService implements S
263263
if (beforeEvent?.options) options = { ...options, ...beforeEvent.options };
264264
}
265265
}
266-
const validation = await this._model.validate(update)
267-
console.log('validation', validation)
268266
let result = await this._model
269267
.findOneAndUpdate<Query<T | null, T, any, T>>(
270268
filter,

src/management/identities/identities.service.ts

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { additionalFieldsPartDto } from './_dto/_parts/additionalFields.dto';
1+
import { additionalFieldsPartDto } from '~/management/identities/_dto/_parts/additionalFields.dto';
22
import { HttpException, Injectable, Logger } from '@nestjs/common';
33
import { InjectModel } from '@nestjs/mongoose';
44
import { Identities } from './_schemas/identities.schema';
@@ -8,6 +8,7 @@ import { AbstractSchema } from '~/_common/abstracts/schemas/abstract.schema';
88
import { IdentitiesValidationService } from './validations/identities.validation.service';
99
import { ValidationConfigException, ValidationSchemaException } from '~/_common/errors/ValidationException';
1010
import { IdentityState } from './_enums/states.enum';
11+
import { merge } from 'radash';
1112

1213
@Injectable()
1314
export class IdentitiesService extends AbstractServiceSchema {
@@ -31,15 +32,35 @@ export class IdentitiesService extends AbstractServiceSchema {
3132
data?: any,
3233
options?: QueryOptions<T>,
3334
): Promise<ModifyResult<Query<T, T, any, T>>> {
35+
Logger.log(`Upserting identity: ${JSON.stringify(data)}`);
3436
const logPrefix = `Validation [${data.inetOrgPerson.cn}]:`;
37+
data.additionalFields.validations = {};
3538
try {
3639
Logger.log(`${logPrefix} Starting additionalFields validation.`);
37-
await this._validation.validate(data.additionalFields);
40+
const validations = await this._validation.validate(data.additionalFields);
3841
Logger.log(`${logPrefix} AdditionalFields validation successful.`);
42+
Logger.log(`Validations : ${validations}`);
3943
data.state = IdentityState.TO_VALIDATE;
4044
} catch (error) {
4145
data = this.handleValidationError(error, data, logPrefix);
4246
}
47+
48+
const identity = await this._model.findOne({ 'inetOrgPerson.uid': data.inetOrgPerson.uid });
49+
if (identity) {
50+
Logger.log(`${logPrefix} Identity already exists. Updating.`);
51+
data.additionalFields.objectClasses = [
52+
...new Set([...identity.additionalFields.objectClasses, ...data.additionalFields.objectClasses]),
53+
];
54+
data.additionalFields.attributes = {
55+
...identity.additionalFields.attributes,
56+
...data.additionalFields.attributes,
57+
};
58+
data.additionalFields.validations = {
59+
...identity.additionalFields.validations,
60+
...data.additionalFields.validations,
61+
};
62+
}
63+
4364
const upsert = await super.upsert({ 'inetOrgPerson.uid': data.inetOrgPerson.uid }, data, options);
4465
return upsert;
4566
//TODO: add backends service logic here
@@ -75,10 +96,10 @@ export class IdentitiesService extends AbstractServiceSchema {
7596

7697
if (error instanceof ValidationSchemaException) {
7798
Logger.warn(`${logPrefix} Validation schema error. ${JSON.stringify(error.getValidations())}`);
99+
identity.additionalFields.validations = error.getValidations();
78100
if (identity.state === IdentityState.TO_CREATE) {
79101
Logger.warn(`${logPrefix} State set to TO_COMPLETE.`);
80102
identity.state = IdentityState.TO_COMPLETE;
81-
identity.additionalFields.validations = error.getValidations();
82103
return identity;
83104
} else {
84105
Logger.error(`${logPrefix} Validation schema error. ${JSON.stringify(error.getValidations())}`);
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
$schema: "http://json-schema.org/draft-07/schema#"
2+
type: "object"
3+
properties:
4+
supannEmpId:
5+
type: "string"
6+
description: "Employee ID"
7+
supannCivilite:
8+
type: "string"
9+
description: "Title (Mr, Ms, etc.)"
10+
supannBirthName:
11+
type: "string"
12+
description: "Birth name"
13+
supannBirthDate:
14+
type: "string"
15+
format: "date"
16+
description: "Date of birth"
17+
supannBirthPlace:
18+
type: "string"
19+
description: "Place of birth"
20+
supannMailPerso:
21+
type: "string"
22+
format: "email"
23+
description: "Personal email"
24+
supannMailPro:
25+
type: "string"
26+
format: "email"
27+
description: "Professional email"
28+
supannTelPerso:
29+
type: "string"
30+
description: "Personal phone number"
31+
supannTelPro:
32+
type: "string"
33+
description: "Professional phone number"
34+
supannPostalAddress:
35+
type: "string"
36+
description: "Postal address"
37+
supannRole:
38+
type: "string"
39+
description: "Role in the organization"
40+
supannStatus:
41+
type: "string"
42+
description: "Employment status"
43+
supannEtablissement:
44+
type: "string"
45+
description: "Institution"
46+
supannAffectationPrincipale:
47+
type: "string"
48+
description: "Primary assignment"
49+
supannAffectationSecondaire:
50+
type: "string"
51+
description: "Secondary assignment"
52+
supannCodeINE:
53+
type: "string"
54+
description: "National Education Identifier"
55+
required:
56+
- "supannEmpId"
57+
- "supannCivilite"
58+
- "supannBirthName"
59+
- "supannBirthDate"
60+
- "supannBirthPlace"
61+
- "supannMailPerso"
62+
- "supannMailPro"
63+
- "supannTelPerso"
64+
- "supannTelPro"
65+
- "supannPostalAddress"
66+
- "supannRole"
67+
- "supannStatus"
68+
- "supannEtablissement"
69+
- "supannAffectationPrincipale"
70+
- "supannAffectationSecondaire"
71+
- "supannCodeINE"
Lines changed: 65 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -1,71 +1,68 @@
1-
$schema: "http://json-schema.org/draft-07/schema#"
2-
type: "object"
1+
$schema: http://json-schema.org/draft-07/schema#
2+
type: object
33
properties:
4-
supannEmpId:
5-
type: "string"
6-
description: "Employee ID"
7-
supannCivilite:
8-
type: "string"
9-
description: "Title (Mr, Ms, etc.)"
10-
supannBirthName:
11-
type: "string"
12-
description: "Birth name"
13-
supannBirthDate:
14-
type: "string"
15-
format: "date"
16-
description: "Date of birth"
17-
supannBirthPlace:
18-
type: "string"
19-
description: "Place of birth"
4+
supanncivilite:
5+
type: string
6+
description: Field corresponding to supanncivilite
7+
supannNomdeNaissance:
8+
type: string
9+
description: Field corresponding to supannNomdeNaissance
10+
supannOIDCDatedeNaissance:
11+
type: string
12+
description: Field corresponding to supannOIDCDatedeNaissance
13+
supannOIDCGenre:
14+
type: string
15+
description: Field corresponding to supannOIDCGenre
16+
supannPrenomsEtatCivil:
17+
type: string
18+
description: Field corresponding to supannPrenomsEtatCivil
19+
supannCodeINSEEPaysDeNaissance:
20+
type: string
21+
description: Field corresponding to supannCodeINSEEPaysDeNaissance
22+
supannCodeINSEEVilleDeNaissance:
23+
type: string
24+
description: Field corresponding to supannCodeINSEEVilleDeNaissance
25+
supannAutreMail:
26+
type: string
27+
description: Field corresponding to supannAutreMail
28+
supannListeRouge:
29+
type: string
30+
description: Field corresponding to supannListeRouge
31+
mailForwardingAddress:
32+
type: string
33+
description: Field corresponding to mailForwardingAddress
2034
supannMailPerso:
21-
type: "string"
22-
format: "email"
23-
description: "Personal email"
24-
supannMailPro:
25-
type: "string"
26-
format: "email"
27-
description: "Professional email"
28-
supannTelPerso:
29-
type: "string"
30-
description: "Personal phone number"
31-
supannTelPro:
32-
type: "string"
33-
description: "Professional phone number"
34-
supannPostalAddress:
35-
type: "string"
36-
description: "Postal address"
37-
supannRole:
38-
type: "string"
39-
description: "Role in the organization"
40-
supannStatus:
41-
type: "string"
42-
description: "Employment status"
43-
supannEtablissement:
44-
type: "string"
45-
description: "Institution"
46-
supannAffectationPrincipale:
47-
type: "string"
48-
description: "Primary assignment"
49-
supannAffectationSecondaire:
50-
type: "string"
51-
description: "Secondary assignment"
52-
supannCodeINE:
53-
type: "string"
54-
description: "National Education Identifier"
35+
type: string
36+
description: Field corresponding to supannMailPerso
37+
supannRoleGenerique:
38+
type: string
39+
description: Field corresponding to supannRoleGenerique
40+
supannEmpId:
41+
type: string
42+
description: Field corresponding to supannEmpId
43+
supannParrainDN:
44+
type: string
45+
description: Field corresponding to supannParrainDN
46+
supannTypeEntiteAffectation:
47+
type: string
48+
description: Field corresponding to supannTypeEntiteAffectation
49+
supannActivite:
50+
type: string
51+
description: Field corresponding to supannActivite
52+
supannEmpDateFin:
53+
type: string
54+
description: Field corresponding to supannEmpDateFin
5555
required:
56-
- "supannEmpId"
57-
- "supannCivilite"
58-
- "supannBirthName"
59-
- "supannBirthDate"
60-
- "supannBirthPlace"
61-
- "supannMailPerso"
62-
- "supannMailPro"
63-
- "supannTelPerso"
64-
- "supannTelPro"
65-
- "supannPostalAddress"
66-
- "supannRole"
67-
- "supannStatus"
68-
- "supannEtablissement"
69-
- "supannAffectationPrincipale"
70-
- "supannAffectationSecondaire"
71-
- "supannCodeINE"
56+
- supanncivilite
57+
- supannAutreMail
58+
# - supannListeRouge
59+
- supannOIDCGenre
60+
- supannRessourceEtatDate
61+
# - supannCodeINSEEVilleDeNaissance
62+
# - supannMailPerso
63+
# - supannEntiteAffectationPrincipale
64+
- supannCodeINSEEPaysDeNaissance
65+
- supannRefId
66+
- supannPrenomsEtatCivil
67+
# - mailForwardingAddress
68+
- supannOIDCDatedeNaissance
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
$schema: http://json-schema.org/draft-07/schema#
2+
type: object
3+
properties:
4+
supanncivilite:
5+
type: string
6+
description: Field corresponding to supanncivilite
7+
supannNomdeNaissance:
8+
type: string
9+
description: Field corresponding to supannNomdeNaissance
10+
supannOIDCDatedeNaissance:
11+
type: string
12+
description: Field corresponding to supannOIDCDatedeNaissance
13+
supannOIDCGenre:
14+
type: string
15+
description: Field corresponding to supannOIDCGenre
16+
supannPrenomsEtatCivil:
17+
type: string
18+
description: Field corresponding to supannPrenomsEtatCivil
19+
supannCodeINSEEPaysDeNaissance:
20+
type: string
21+
description: Field corresponding to supannCodeINSEEPaysDeNaissance
22+
supannCodeINSEEVilleDeNaissance:
23+
type: string
24+
description: Field corresponding to supannCodeINSEEVilleDeNaissance
25+
supannAutreMail:
26+
type: string
27+
description: Field corresponding to supannAutreMail
28+
supannListeRouge:
29+
type: string
30+
description: Field corresponding to supannListeRouge
31+
mailForwardingAddress:
32+
type: string
33+
description: Field corresponding to mailForwardingAddress
34+
supannMailPerso:
35+
type: string
36+
description: Field corresponding to supannMailPerso
37+
supannRoleGenerique:
38+
type: string
39+
description: Field corresponding to supannRoleGenerique
40+
supannEmpId:
41+
type: string
42+
description: Field corresponding to supannEmpId
43+
supannParrainDN:
44+
type: string
45+
description: Field corresponding to supannParrainDN
46+
supannTypeEntiteAffectation:
47+
type: string
48+
description: Field corresponding to supannTypeEntiteAffectation
49+
supannActivite:
50+
type: string
51+
description: Field corresponding to supannActivite
52+
supannEmpDateFin:
53+
type: string
54+
description: Field corresponding to supannEmpDateFin
55+
required:
56+
- supanncivilite
57+
- supannAutreMail
58+
# - supannListeRouge
59+
- supannOIDCGenre
60+
- supannRessourceEtatDate
61+
# - supannCodeINSEEVilleDeNaissance
62+
# - supannMailPerso
63+
# - supannEntiteAffectationPrincipale
64+
- supannCodeINSEEPaysDeNaissance
65+
- supannRefId
66+
- supannPrenomsEtatCivil
67+
# - mailForwardingAddress
68+
- supannOIDCDatedeNaissance

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,13 +81,15 @@ export class IdentitiesValidationService {
8181
if (validationError) {
8282
validations[key] = validationError;
8383
reject = true;
84+
} else {
85+
delete validations[key];
8486
}
8587
}
8688

8789
if (reject) {
8890
throw new ValidationSchemaException({ validations });
8991
}
90-
return Promise.resolve({ message: 'Validation succeeded' });
92+
return Promise.resolve({ message: 'Validation succeeded', validations });
9193
}
9294

9395
/**

0 commit comments

Comments
 (0)