Skip to content

Commit 9ebd9ab

Browse files
committed
probleme de synchronisation des jobs resolution partielle
1 parent 07a0aba commit 9ebd9ab

File tree

3 files changed

+35
-19
lines changed

3 files changed

+35
-19
lines changed

src/core/backends/backends.service.ts

Lines changed: 28 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,19 @@ import {
66
RequestTimeoutException,
77
UnprocessableEntityException,
88
} from '@nestjs/common';
9-
import { ModuleRef } from '@nestjs/core';
10-
import { Document, ModifyResult, Query, Types } from 'mongoose';
11-
import { AbstractQueueProcessor } from '~/_common/abstracts/abstract.queue.processor';
12-
import { IdentityState } from '~/management/identities/_enums/states.enum';
13-
import { Identities } from '~/management/identities/_schemas/identities.schema';
14-
import { IdentitiesService } from '~/management/identities/identities.service';
15-
import { JobState } from '../jobs/_enums/state.enum';
16-
import { Jobs } from '../jobs/_schemas/jobs.schema';
17-
import { JobsService } from '../jobs/jobs.service';
18-
import { Tasks } from '../tasks/_schemas/tasks.schema';
19-
import { TasksService } from '../tasks/tasks.service';
20-
import { ActionType } from './_enum/action-type.enum';
21-
import { ExecuteJobOptions } from './_interfaces/execute-job-options.interface';
9+
import {ModuleRef} from '@nestjs/core';
10+
import {Document, ModifyResult, Query, Types} from 'mongoose';
11+
import {AbstractQueueProcessor} from '~/_common/abstracts/abstract.queue.processor';
12+
import {IdentityState} from '~/management/identities/_enums/states.enum';
13+
import {Identities} from '~/management/identities/_schemas/identities.schema';
14+
import {IdentitiesService} from '~/management/identities/identities.service';
15+
import {JobState} from '../jobs/_enums/state.enum';
16+
import {Jobs} from '../jobs/_schemas/jobs.schema';
17+
import {JobsService} from '../jobs/jobs.service';
18+
import {Tasks} from '../tasks/_schemas/tasks.schema';
19+
import {TasksService} from '../tasks/tasks.service';
20+
import {ActionType} from './_enum/action-type.enum';
21+
import {ExecuteJobOptions} from './_interfaces/execute-job-options.interface';
2222

2323
const DEFAULT_SYNC_TIMEOUT = 30_000;
2424

@@ -45,7 +45,7 @@ export class BackendsService extends AbstractQueueProcessor {
4545
const jobsCompleted = await this._queue.getCompleted();
4646
for (const job of jobsCompleted) {
4747
const isSyncedJob = await this.jobsService.model.findOneAndUpdate<Jobs>(
48-
{ jobId: job.id, state: { $ne: JobState.COMPLETED } },
48+
{ jobId: job.id, state: { $nin: [JobState.COMPLETED, JobState.FAILED] } },
4949
{
5050
$set: {
5151
state: JobState.COMPLETED,
@@ -105,11 +105,17 @@ export class BackendsService extends AbstractQueueProcessor {
105105
});
106106

107107
this.queueEvents.on('completed', async (payload) => {
108+
let jState = JobState.COMPLETED;
109+
let iState = IdentityState.SYNCED;
110+
if (payload.returnvalue.status !== 0) {
111+
jState = JobState.FAILED;
112+
iState = IdentityState.ON_ERROR;
113+
}
108114
const completedJob = await this.jobsService.model.findOneAndUpdate<Jobs>(
109-
{ jobId: payload.jobId, state: { $ne: JobState.COMPLETED } },
115+
{ jobId: payload.jobId },
110116
{
111117
$set: {
112-
state: JobState.COMPLETED,
118+
state: jState,
113119
finishedAt: new Date(),
114120
result: payload.returnvalue,
115121
},
@@ -119,10 +125,14 @@ export class BackendsService extends AbstractQueueProcessor {
119125

120126
await this.identitiesService.model.findByIdAndUpdate(completedJob?.concernedTo?.id, {
121127
$set: {
122-
state: IdentityState.SYNCED,
128+
state: iState,
123129
},
124130
});
125-
this.logger.log(`Job completed... Syncing [${payload.jobId}]`);
131+
if (jState === JobState.COMPLETED) {
132+
this.logger.log(`Job completed... Syncing [${payload.jobId}]`);
133+
} else {
134+
this.logger.error(`Job FAILED... Syncing [${payload.jobId}]`);
135+
}
126136
});
127137
}
128138

src/core/jobs/_dto/jobs.dto.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
import { ApiProperty, PartialType } from '@nestjs/swagger';
22
import { Type } from 'class-transformer';
3-
import { IsMongoId, IsNotEmpty, IsObject, IsString, ValidateNested } from 'class-validator';
3+
import {IsMongoId, IsNotEmpty, IsNumber, IsObject, IsString, ValidateNested} from 'class-validator';
44
import { Types } from 'mongoose';
55
import { CustomFieldsDto } from '~/_common/abstracts/dto/custom-fields.dto';
66
import { ConcernedToPartDTO } from './_parts/concerned-to.part.dto';
7+
import {JobState} from "~/core/jobs/_enums/state.enum";
78

89
export class JobsCreateDto extends CustomFieldsDto {
910
@IsString()
@@ -35,6 +36,10 @@ export class JobsCreateDto extends CustomFieldsDto {
3536
@IsObject()
3637
@ApiProperty()
3738
public result: object;
39+
40+
@IsNumber()
41+
@ApiProperty()
42+
public state: number;
3843
}
3944

4045
export class JobsDto extends JobsCreateDto {

src/core/jobs/jobs.controller.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ export class JobsController extends AbstractController {
2727
metadata: 1,
2828
params: 1,
2929
result: 1,
30+
state: 1,
3031
};
3132

3233
public constructor(private readonly _service: JobsService) {

0 commit comments

Comments
 (0)