Skip to content

Commit fb50bbe

Browse files
committed
Refactor lifecycle management: update lifecycle enums, DTOs, and schemas; add custom states and rules configuration
1 parent 149fab4 commit fb50bbe

File tree

14 files changed

+318
-47
lines changed

14 files changed

+318
-47
lines changed

configs/lifecycle/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
*
2+
!rules/
23
!.gitignore

configs/lifecycle/rules/.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
*
2+
!.gitignore

defaults/lifecycle/01-etd.yml renamed to defaults/lifecycle/rules/example.yml.template

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@ identities:
44
# 'inetOrgPerson.employeeType': 'etd',
55
# lastSyncBackup: { $ne : null }
66
# }
7-
# trigger: null
7+
# trigger: 30d
88
target: D

defaults/lifecycle/states.yml

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
states:
2+
# En Attente -> supannRessourceEtat : {COMPTE} A SupannAnticipe
3+
- key: A
4+
label: "En Attente"
5+
description: "supannRessourceEtat : {COMPTE} A SupannAnticipe"
6+
7+
# PROV -> supannResourceEtat : {COMTE} A SupannSursis et supannRessourceEtatDate: Date de passage en PROV
8+
- key: P
9+
label: "PROV"
10+
description: "supannResourceEtat : {COMTE} A SupannSursis et supannRessourceEtatDate: Date de passage en PROV"
11+
12+
# A Détruire -> supannRessourceEtat : {COMPTE} I SupannSupprCompte
13+
- key: D
14+
label: "A Détruire"
15+
description: "supannRessourceEtat : {COMPTE} I SupannSupprCompte"
16+
17+
# Verrouillé -> supannRessourceEtat : {COMPTE} S SupannVerrouille
18+
- key: V
19+
label: "Verrouillé"
20+
description: "supannRessourceEtat : {COMPTE} S SupannVerrouille"

src/management/identities/_dto/identities.dto.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { ApiProperty, IntersectionType, PartialType } from '@nestjs/swagger';
22
import { IsOptional, IsObject, IsEnum, IsNumber, ValidateNested, IsString } from 'class-validator';
33
import { inetOrgPersonDto } from './_parts/inetOrgPerson.dto';
44
import { IdentityState } from '../_enums/states.enum';
5-
import { IdentityLifecycle } from '../_enums/lifecycle.enum';
5+
import { IdentityLifecycleDefault } from '../_enums/lifecycle.enum';
66
import { Type } from 'class-transformer';
77
import { additionalFieldsPartDto } from './_parts/additionalFields.dto';
88
import { MetadataDto } from '~/_common/abstracts/dto/metadata.dto';
@@ -31,8 +31,7 @@ export class IdentitiesCreateDto extends IntersectionType(CustomFieldsDto, Metad
3131

3232
@IsString()
3333
@IsOptional()
34-
@IsEnum(IdentityLifecycle)
35-
@ApiProperty({ enum: IdentityLifecycle })
34+
@ApiProperty({ enum: IdentityLifecycleDefault })
3635
public lifecycle: string;
3736

3837
@IsObject()

src/management/identities/_enums/lifecycle.enum.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
export enum IdentityLifecycle {
1+
export enum IdentityLifecycleDefault {
22
OFFICIAL = "O",
33
INACTIVE = "I",
44
MANUAL = "M",

src/management/identities/_schemas/identities.schema.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { IdentityLifecycle } from './../_enums/lifecycle.enum';
1+
import { IdentityLifecycleDefault } from './../_enums/lifecycle.enum';
22
import { inetOrgPerson, inetOrgPersonSchema } from './_parts/inetOrgPerson.part';
33
import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
44
import { Document, Types } from 'mongoose';
@@ -20,8 +20,8 @@ export class Identities extends AbstractSchema {
2020
@Prop({ type: Number, enum: IdentityState, default: IdentityState.TO_CREATE })
2121
public state: IdentityState;
2222

23-
@Prop({ type: String, enum: IdentityLifecycle, default: IdentityLifecycle.OFFICIAL })
24-
public lifecycle: IdentityLifecycle;
23+
@Prop({ type: String, default: IdentityLifecycleDefault.OFFICIAL })
24+
public lifecycle: IdentityLifecycleDefault | string;
2525

2626
@Prop({ type: Number, enum: DataStatusEnum, default: DataStatusEnum.NOTINITIALIZED })
2727
public dataStatus: DataStatusEnum;

src/management/identities/_stubs/identities.dto.stub.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { IdentitiesUpdateDto } from './../_dto/identities.dto';
22
import { IdentitiesDto } from '~/management/identities/_dto/identities.dto';
3-
import { IdentityLifecycle } from '~/management/identities/_enums/lifecycle.enum';
3+
import { IdentityLifecycleDefault } from '~/management/identities/_enums/lifecycle.enum';
44
import { IdentityState } from '~/management/identities/_enums/states.enum';
55
import { additionalFieldsPartDtoStub } from './_parts/addtionalFields.dto.stub';
66
import { inetOrgPersonDtoStub } from './_parts/inetOrgPerson.dto.stub';
@@ -10,7 +10,7 @@ import { DataStatusEnum } from '~/management/identities/_enums/data-status';
1010
export const IdentitiesDtoStub = (): IdentitiesDto => {
1111
return {
1212
state: IdentityState.TO_CREATE,
13-
lifecycle: IdentityLifecycle.INACTIVE,
13+
lifecycle: IdentityLifecycleDefault.INACTIVE,
1414
inetOrgPerson: inetOrgPersonDtoStub(),
1515
additionalFields: additionalFieldsPartDtoStub(),
1616
initState: InitStatesEnum.NOSENT,
@@ -23,7 +23,7 @@ export const IdentitiesUpdateDtoStub = (): IdentitiesUpdateDto => {
2323
inetOrgPerson.cn = 'updated-cn';
2424
return {
2525
state: IdentityState.TO_COMPLETE,
26-
lifecycle: IdentityLifecycle.INACTIVE,
26+
lifecycle: IdentityLifecycleDefault.INACTIVE,
2727
initState: InitStatesEnum.NOSENT,
2828
dataStatus: DataStatusEnum.ACTIVE,
2929
inetOrgPerson,

src/management/lifecycle/_dto/config.dto.ts renamed to src/management/lifecycle/_dto/config-rules.dto.ts

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { ApiProperty } from '@nestjs/swagger';
22
import { Type, Transform } from 'class-transformer';
3-
import { IsArray, IsEnum, IsNegative, IsNotEmpty, IsNumber, IsObject, IsOptional, ValidateNested, registerDecorator, ValidationOptions, ValidationArguments, isString, isNumber, IsString } from 'class-validator';
4-
import { IdentityLifecycle } from '~/management/identities/_enums/lifecycle.enum';
3+
import { IsArray, IsNotEmpty, IsNumber, IsObject, IsOptional, ValidateNested, registerDecorator, ValidationOptions, ValidationArguments, isString, isNumber, IsString } from 'class-validator';
4+
import { IdentityLifecycleDefault } from '~/management/identities/_enums/lifecycle.enum';
55

66
/**
77
* Transform trigger values to seconds.
@@ -102,7 +102,7 @@ function ValidateRulesOrTrigger(validationOptions?: ValidationOptions) {
102102
options: validationOptions,
103103
validator: {
104104
validate(_: any, args: ValidationArguments) {
105-
const obj = args.object as ConfigObjectIdentitiesDTO;
105+
const obj = args.object as ConfigRulesObjectIdentitiesDTO;
106106

107107
/**
108108
* Check if either 'rules' or 'trigger' is defined and not empty.
@@ -122,16 +122,15 @@ function ValidateRulesOrTrigger(validationOptions?: ValidationOptions) {
122122
}
123123

124124
@ValidateRulesOrTrigger({ message: 'Either rules or trigger must be provided' })
125-
export class ConfigObjectIdentitiesDTO {
126-
@IsEnum(IdentityLifecycle, { each: true })
125+
export class ConfigRulesObjectIdentitiesDTO {
127126
@ApiProperty({
128127
type: String,
129-
enum: IdentityLifecycle,
128+
enum: IdentityLifecycleDefault,
130129
description: 'Lifecycle state of the identity',
131-
example: IdentityLifecycle.OFFICIAL,
130+
example: IdentityLifecycleDefault.OFFICIAL,
132131
required: true,
133132
})
134-
public sources: IdentityLifecycle[];
133+
public sources: IdentityLifecycleDefault[];
135134

136135
@IsOptional()
137136
@IsString()
@@ -160,25 +159,24 @@ export class ConfigObjectIdentitiesDTO {
160159
public trigger: number;
161160

162161
@IsNotEmpty()
163-
@IsEnum(IdentityLifecycle)
164162
@ApiProperty({
165163
type: String,
166-
enum: IdentityLifecycle,
164+
enum: IdentityLifecycleDefault,
167165
description: 'Target lifecycle state for the identity',
168-
example: IdentityLifecycle.MANUAL,
166+
example: IdentityLifecycleDefault.MANUAL,
169167
required: true,
170168
})
171-
public target: IdentityLifecycle;
169+
public target: IdentityLifecycleDefault;
172170
}
173171

174-
export class ConfigObjectSchemaDTO {
172+
export class ConfigRulesObjectSchemaDTO {
175173
@IsOptional()
176174
@IsArray()
177175
@ApiProperty({
178-
type: ConfigObjectIdentitiesDTO,
176+
type: ConfigRulesObjectIdentitiesDTO,
179177
required: false,
180178
})
181179
@ValidateNested({ each: true })
182-
@Type(() => ConfigObjectIdentitiesDTO)
183-
public identities: ConfigObjectIdentitiesDTO[]
180+
@Type(() => ConfigRulesObjectIdentitiesDTO)
181+
public identities: ConfigRulesObjectIdentitiesDTO[]
184182
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
import { ApiProperty } from '@nestjs/swagger';
2+
import { IsArray, IsNotEmpty, IsString, ValidateNested } from 'class-validator';
3+
import { Type } from 'class-transformer';
4+
5+
/**
6+
* DTO pour un état de cycle de vie individuel
7+
* Basé sur la structure du fichier states.yml
8+
*/
9+
export class LifecycleStateDTO {
10+
@IsNotEmpty()
11+
@IsString()
12+
@ApiProperty({
13+
type: String,
14+
description: 'Clé unique de l\'état (une seule lettre)',
15+
example: 'A',
16+
maxLength: 1,
17+
required: true,
18+
})
19+
public key: string;
20+
21+
@IsNotEmpty()
22+
@IsString()
23+
@ApiProperty({
24+
type: String,
25+
description: 'Label/nom de l\'état',
26+
example: 'En Attente',
27+
required: true,
28+
})
29+
public label: string;
30+
31+
@IsNotEmpty()
32+
@IsString()
33+
@ApiProperty({
34+
type: String,
35+
description: 'Description détaillée de l\'état avec correspondances supann',
36+
example: 'supannRessourceEtat : {COMPTE} A SupannAnticipe',
37+
required: true,
38+
})
39+
public description: string;
40+
}
41+
42+
/**
43+
* DTO pour la configuration des états de cycle de vie
44+
* Correspond à la structure du fichier configs/lifecycle/states.yml
45+
*/
46+
export class ConfigStatesDTO {
47+
@IsArray()
48+
@ValidateNested({ each: true })
49+
@Type(() => LifecycleStateDTO)
50+
@ApiProperty({
51+
type: [LifecycleStateDTO],
52+
description: 'Liste des états de cycle de vie disponibles',
53+
required: true,
54+
})
55+
public states: LifecycleStateDTO[];
56+
}

0 commit comments

Comments
 (0)