Skip to content

Commit 5041d5c

Browse files
committed
save + activation
1 parent f6d0b25 commit 5041d5c

File tree

9 files changed

+113
-4
lines changed

9 files changed

+113
-4
lines changed

src/core/backends/backends.service.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,7 @@ export class BackendsService extends AbstractQueueProcessor {
287287
if (!identity.lastBackendSync) {
288288
throw new BadRequestException({
289289
status: HttpStatus.BAD_REQUEST,
290-
message: `Identity ${key} is not in state TO_DELETE`,
290+
message: `Identity ${key} has never been synched`,
291291
identity,
292292
});
293293
}
@@ -330,7 +330,7 @@ export class BackendsService extends AbstractQueueProcessor {
330330
if (!identity.lastBackendSync) {
331331
throw new BadRequestException({
332332
status: HttpStatus.BAD_REQUEST,
333-
message: `Identity ${key} is not in state TO_DELETE`,
333+
message: `Identity ${key} has never been synched`,
334334
identity,
335335
});
336336
}
@@ -359,7 +359,15 @@ export class BackendsService extends AbstractQueueProcessor {
359359
}
360360
return result;
361361
}
362-
362+
public async activationIdentity(payload: string, status: boolean, options?: ExecuteJobOptions) {
363+
let result = null;
364+
if (status === true) {
365+
result = await this.enableIdentities([payload], options );
366+
} else {
367+
result = await this.disableIdentities([payload], options);
368+
}
369+
return result[0];
370+
}
363371
public async executeJob(
364372
actionType: ActionType,
365373
concernedTo?: Types.ObjectId,
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { ApiProperty } from '@nestjs/swagger';
2+
import { IsBoolean, IsString } from 'class-validator';
3+
4+
export class ActivationDto {
5+
@IsString()
6+
@ApiProperty({ example: '66d80ab41821baca9bf965b2', description: 'Id of identity', type: String })
7+
public id: string;
8+
9+
@IsBoolean()
10+
@ApiProperty({ example: 'true', description: 'true or false to enable or disable the identity', type: String })
11+
public status: boolean;
12+
}

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { additionalFieldsPartDto } from './_parts/additionalFields.dto';
88
import { MetadataDto } from '~/_common/abstracts/dto/metadata.dto';
99
import { InitStatesEnum } from '~/management/identities/_enums/init-state.enum';
1010
import { CustomFieldsDto } from '~/_common/abstracts/dto/custom-fields.dto';
11+
import {DataStatusEnum} from "~/management/identities/_enums/data-status";
1112

1213
export class IdentitiesCreateDto extends IntersectionType(CustomFieldsDto, MetadataDto) {
1314
@IsNumber()
@@ -20,6 +21,11 @@ export class IdentitiesCreateDto extends IntersectionType(CustomFieldsDto, Metad
2021
@ApiProperty({ enum: InitStatesEnum })
2122
public initState: InitStatesEnum;
2223

24+
@IsNumber()
25+
@IsEnum(DataStatusEnum)
26+
@ApiProperty({ enum: DataStatusEnum })
27+
public dataStatus: DataStatusEnum;
28+
2329
@IsNumber()
2430
@IsOptional()
2531
@IsEnum(IdentityLifecycle)

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { IdentityState } from '~/management/identities/_enums/states.enum';
55
import { additionalFieldsPartDtoStub } from './_parts/addtionalFields.dto.stub';
66
import { inetOrgPersonDtoStub } from './_parts/inetOrgPerson.dto.stub';
77
import { InitStatesEnum } from '~/management/identities/_enums/init-state.enum';
8+
import { DataStatusEnum } from '~/management/identities/_enums/data-status';
89

910
export const IdentitiesDtoStub = (): IdentitiesDto => {
1011
return {
@@ -13,6 +14,7 @@ export const IdentitiesDtoStub = (): IdentitiesDto => {
1314
inetOrgPerson: inetOrgPersonDtoStub(),
1415
additionalFields: additionalFieldsPartDtoStub(),
1516
initState: InitStatesEnum.NOSENT,
17+
dataStatus: DataStatusEnum.ACTIVE,
1618
};
1719
};
1820

@@ -23,6 +25,7 @@ export const IdentitiesUpdateDtoStub = (): IdentitiesUpdateDto => {
2325
state: IdentityState.TO_COMPLETE,
2426
lifecycle: IdentityLifecycle.INACTIVE,
2527
initState: InitStatesEnum.NOSENT,
28+
dataStatus: DataStatusEnum.ACTIVE,
2629
inetOrgPerson,
2730
additionalFields: additionalFieldsPartDtoStub(),
2831
};
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import { AbstractController } from '~/_common/abstracts/abstract.controller';
2+
import { IdentitiesActivationService } from '~/management/identities/identities-activation.service';
3+
import { ApiOperation, ApiResponse, ApiTags} from '@nestjs/swagger';
4+
import { Body, Controller, HttpStatus, Post, Res} from '@nestjs/common';
5+
import { Response } from 'express';
6+
import { ActivationDto } from '~/management/identities/_dto/_parts/activation-dto';
7+
8+
@ApiTags('management/identities')
9+
@Controller('identities')
10+
export class IdentitiesActivationController extends AbstractController {
11+
public constructor(protected readonly _service: IdentitiesActivationService) {
12+
super();
13+
}
14+
15+
@Post('activation')
16+
@ApiOperation({ summary: 'active/desactive l identité' })
17+
@ApiResponse({ status: HttpStatus.OK })
18+
public async activation(@Res() res: Response,@Body() body:ActivationDto): Promise<Response> {
19+
const data = this._service.activation(body.id, body.status)
20+
return res.status(HttpStatus.OK).json({
21+
statusCode: HttpStatus.OK,
22+
data,
23+
});
24+
}
25+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import { AbstractIdentitiesService } from '~/management/identities/abstract-identities.service';
2+
import { Identities } from '~/management/identities/_schemas/identities.schema';
3+
import { BadRequestException } from '@nestjs/common';
4+
import { DataStatusEnum } from '~/management/identities/_enums/data-status';
5+
import { JobState } from '~/core/jobs/_enums/state.enum';
6+
7+
export class IdentitiesActivationService extends AbstractIdentitiesService {
8+
public async activation(id: string, status: boolean) {
9+
//recherche de l'identité
10+
let identity: Identities = null;
11+
let statusChanged = false;
12+
try {
13+
identity = await this.findById<Identities>(id);
14+
} catch (error) {
15+
throw new BadRequestException('Id1 not found');
16+
}
17+
if (identity.dataStatus !== DataStatusEnum.DELETED) {
18+
if (status) {
19+
if (identity.dataStatus !== DataStatusEnum.ACTIVE) {
20+
identity.dataStatus = DataStatusEnum.ACTIVE;
21+
statusChanged = true;
22+
}
23+
} else {
24+
if (identity.dataStatus !== DataStatusEnum.INACTIVE) {
25+
identity.dataStatus = DataStatusEnum.INACTIVE;
26+
statusChanged = true;
27+
}
28+
}
29+
} else {
30+
throw new BadRequestException('Identity is in status deleted');
31+
}
32+
//sauvegarde de l'identité
33+
if (statusChanged) {
34+
// le dataStaus à changé on envoye l info aux backend et on enregistre l identité
35+
const result = await this.backends.activationIdentity(identity._id.toString(), status);
36+
if (result.state === JobState.COMPLETED){
37+
await super.update(identity._id, identity);
38+
} else {
39+
throw new BadRequestException('Backend failed');
40+
}
41+
}
42+
}
43+
}

src/management/identities/identities-crud.controller.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ export class IdentitiesCrudController extends AbstractController {
5454
inetOrgPerson: 1,
5555
additionalFields: 1,
5656
metadata: 1,
57+
dataStatus: 1,
5758
};
5859

5960
@Post()

src/management/identities/identities-doublon.controller.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { IdentitiesDoublonService } from '~/management/identities/identities-dou
99

1010
@ApiTags('management/identities')
1111
@Controller('identities')
12+
1213
export class IdentitiesDoublonController extends AbstractController {
1314
public constructor(protected readonly _service: IdentitiesDoublonService) {
1415
super();

src/management/identities/identities.module.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@ import { IdentitiesDoublonService } from '~/management/identities/identities-dou
1515
import { IdentitiesCrudController } from '~/management/identities/identities-crud.controller';
1616
import { IdentitiesUpsertController } from '~/management/identities/identities-upsert.controller';
1717
import { IdentitiesPhotoController } from '~/management/identities/identities-photo.controller';
18+
import { IdentitiesActivationController } from '~/management/identities/identities-activation.controller';
19+
import { IdentitiesActivationService } from '~/management/identities/identities-activation.service';
20+
import { IdentitiesDoublonController } from '~/management/identities/identities-doublon.controller';
1821

1922
@Module({
2023
imports: [
@@ -34,13 +37,20 @@ import { IdentitiesPhotoController } from '~/management/identities/identities-ph
3437
IdentitiesCrudService,
3538
IdentitiesDoublonService,
3639
IdentitiesValidationService,
40+
IdentitiesActivationService,
3741
{
3842
provide: APP_FILTER,
3943
useClass: IdentitiesValidationFilter,
4044
},
4145
IdentitiesJsonformsService,
4246
],
43-
controllers: [IdentitiesCrudController, IdentitiesUpsertController, IdentitiesPhotoController],
47+
controllers: [
48+
IdentitiesCrudController,
49+
IdentitiesUpsertController,
50+
IdentitiesPhotoController,
51+
IdentitiesDoublonController,
52+
IdentitiesActivationController,
53+
],
4454
exports: [IdentitiesCrudService],
4555
})
4656
export class IdentitiesModule {}

0 commit comments

Comments
 (0)