Skip to content

Commit fe3ac31

Browse files
Mise à jour de la validation des attributs dans IdentitiesValidation.md et ajout de l'endpoint pour la création d'identité dans IdentitiesCreation.md
1 parent e0c7121 commit fe3ac31

File tree

3 files changed

+151
-4
lines changed

3 files changed

+151
-4
lines changed

docs/user/IdentitiesCreation.md

Lines changed: 64 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@
1919
- [Gestion Automatique du `lifecycle`](#gestion-automatique-du-lifecycle)
2020
- [Réponse Attendue](#réponse-attendue)
2121
- [Modification de l'identité](#modification-de-lidentité)
22+
- [Endpoint pour la Création d'Identité](#endpoint-pour-la-création-didentité-1)
23+
- [Corps de la Requête (Body)](#corps-de-la-requête-body-1)
24+
- [Réponse Attendue](#réponse-attendue-1)
2225

2326

2427
## Création d'Identité
@@ -145,4 +148,64 @@ En cas de succès, le système renvoie un statut `201 Created` avec les détails
145148

146149
# Modification de l'identité
147150

148-
A venir.
151+
### Endpoint pour la Création d'Identité
152+
153+
Même procédure pour la validation, mais ici nous avons :
154+
155+
**URL:** `/management/identities/upsert` : Adresse de l'endpoint pour la création d'identité.
156+
157+
**Méthode:** `POST` : Verbe HTTP utilisé pour créer une nouvelle ressource.
158+
159+
**Header Requis** : `Content-Type: application/json` : Indique que le corps de la requête est au format JSON.
160+
161+
### Corps de la Requête (Body)
162+
163+
Lors de la création d'une identité, le corps de la requête doit inclure au moins la données (`inetOrgPerson.uid`), ainsi que tout champ additionnel nécessaire selon l'`objectClass` spécifique. Notez que l'objet `inetOrgPerson` est validé en dur et non via un fichier YAML.
164+
165+
De plus pour une modification, il specifier le state a `-1`
166+
167+
```json
168+
{
169+
"state": -1,
170+
"inetOrgPerson": {
171+
"uid": "Identifiant Unique"
172+
},
173+
"additionalFields": {
174+
"objectClasses": ["supann"],
175+
"attributes": {
176+
"supann": {
177+
"supannEmpId": "123456",
178+
"supannCivilite": "M.",
179+
"supannBirthName": "Dupont",
180+
"supannBirthDate": "1980-12-15"
181+
}
182+
}
183+
}
184+
}
185+
```
186+
187+
```bash
188+
curl -X POST "http://<adresse-du-serveur>/identities/upsert" \
189+
-H "Content-Type: application/json" \
190+
-d '{
191+
"state": -1,
192+
"inetOrgPerson": {
193+
"uid": "Identifiant Unique"
194+
},
195+
"additionalFields": {
196+
"objectClasses": ["supann"],
197+
"attributes": {
198+
"supann": {
199+
"supannEmpId": "123456",
200+
"supannCivilite": "M.",
201+
"supannBirthName": "Dupont",
202+
"supannBirthDate": "1980-12-15"
203+
}
204+
}
205+
}
206+
}'
207+
```
208+
209+
### Réponse Attendue
210+
211+
En cas de succès, le système renvoie un statut `201 Created` avec les détails de l'identité créée. Si des informations supplémentaires sont requises, le statut peut être `202 Accepted` avec un message indiquant que des champs additionnels sont manquants ou invalides.

docs/user/IdentitiesValidation.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -217,12 +217,12 @@ Chaque attribut peut avoir des options supplémentaires pour définir des règle
217217
- **email (format: 'email')**: Définit que la chaîne de caractères doit être un email.
218218
```yaml
219219
type: string
220-
email: true
220+
format: email
221221
```
222222
- **url (format: 'url')**: Définit que la chaîne de caractères doit être une URL.
223223
```yaml
224224
type: string
225-
url: true
225+
format: url
226226
```
227227
- **lowercase**: Convertit la chaîne de caractères en minuscule.
228228
```yaml
@@ -241,7 +241,7 @@ Chaque attribut peut avoir des options supplémentaires pour définir des règle
241241
```
242242
243243
244-
### JSON de Validation
244+
### Corps de la Requête
245245
246246
Pour valider une entrée, un objet JSON doit être fourni avec les champs suivants :
247247

src/management/identities/validations/_config/validSchema.ts

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,90 @@ const validSchema = {
3535
type: 'object',
3636
errorMessage: "Le champ 'required' doit être un booléen.",
3737
},
38+
maxItems: {
39+
type: 'integer',
40+
errorMessage: "Le nombre maximal d'éléments 'maxItems' doit être un entier.",
41+
},
42+
minItems: {
43+
type: 'integer',
44+
errorMessage: "Le nombre minimal d'éléments 'minItems' doit être un entier.",
45+
},
46+
maxLength: {
47+
type: 'integer',
48+
errorMessage: "La longueur maximale 'maxLength' doit être un entier.",
49+
},
50+
minLength: {
51+
type: 'integer',
52+
errorMessage: "La longueur minimale 'minLength' doit être un entier.",
53+
},
54+
maxDate: {
55+
type: 'string',
56+
errorMessage: "La date maximale 'maxDate' doit être une date valide.",
57+
},
58+
minDate: {
59+
type: 'string',
60+
errorMessage: "La date minimale 'minDate' doit être une date valide.",
61+
},
62+
max: {
63+
type: ['number', 'string'],
64+
errorMessage: "La valeur maximale 'max' doit être un nombre ou une date.",
65+
},
66+
min: {
67+
type: ['number', 'string'],
68+
errorMessage: "La valeur minimale 'min' doit être un nombre ou une date.",
69+
},
70+
exclusiveMinimum: {
71+
type: 'number',
72+
errorMessage: "La valeur doit être strictement supérieure à 'exclusiveMinimum'.",
73+
},
74+
exclusiveMaximum: {
75+
type: 'number',
76+
errorMessage: "La valeur doit être strictement inférieure à 'exclusiveMaximum'.",
77+
},
78+
pattern: {
79+
type: 'string',
80+
errorMessage: "Le motif 'pattern' doit correspondre à une expression régulière valide.",
81+
},
82+
noUnknown: {
83+
type: 'boolean',
84+
errorMessage: "L'option 'noUnknown' doit être un booléen.",
85+
},
86+
trim: {
87+
type: 'boolean',
88+
errorMessage: "L'option 'trim' doit être un booléen.",
89+
},
90+
uppercase: {
91+
type: 'boolean',
92+
errorMessage: "L'option 'uppercase' doit être un booléen.",
93+
},
94+
lowercase: {
95+
type: 'boolean',
96+
errorMessage: "L'option 'lowercase' doit être un booléen.",
97+
},
98+
positive: {
99+
type: 'boolean',
100+
errorMessage: "L'option 'positive' doit être un booléen.",
101+
},
102+
negative: {
103+
type: 'boolean',
104+
errorMessage: "L'option 'negative' doit être un booléen.",
105+
},
106+
truncate: {
107+
type: 'boolean',
108+
errorMessage: "L'option 'truncate' doit être un booléen.",
109+
},
110+
round: {
111+
type: 'boolean',
112+
errorMessage: "L'option 'round' doit être un booléen.",
113+
},
114+
constantCase: {
115+
type: 'boolean',
116+
errorMessage: "L'option 'constantCase' doit être un booléen.",
117+
},
118+
camelCase: {
119+
type: 'boolean',
120+
errorMessage: "L'option 'camelCase' doit être un booléen.",
121+
},
38122
},
39123
required: ['type'],
40124
additionalProperties: false,

0 commit comments

Comments
 (0)