mirror of
https://gitlab.com/mobicoop/v3/service/matcher.git
synced 2026-01-01 14:02:39 +00:00
publish errors for invalid ads
This commit is contained in:
@@ -6,6 +6,8 @@ import { CreateAdRequest } from '../../domain/dtos/create-ad.request';
|
||||
import { validateOrReject } from 'class-validator';
|
||||
import { Messager } from '../secondaries/messager';
|
||||
import { plainToInstance } from 'class-transformer';
|
||||
import { DatabaseException } from 'src/modules/database/exceptions/database.exception';
|
||||
import { ExceptionCode } from 'src/modules/utils/exception-code.enum';
|
||||
|
||||
@Controller()
|
||||
export class AdMessagerController {
|
||||
@@ -18,12 +20,10 @@ export class AdMessagerController {
|
||||
name: 'adCreated',
|
||||
})
|
||||
async adCreatedHandler(message: string): Promise<void> {
|
||||
let createAdRequest: CreateAdRequest;
|
||||
// parse message to request instance
|
||||
try {
|
||||
// parse message to request instance
|
||||
const createAdRequest: CreateAdRequest = plainToInstance(
|
||||
CreateAdRequest,
|
||||
JSON.parse(message),
|
||||
);
|
||||
createAdRequest = plainToInstance(CreateAdRequest, JSON.parse(message));
|
||||
// validate instance
|
||||
await validateOrReject(createAdRequest);
|
||||
// validate nested objects (fixes direct nested validation bug)
|
||||
@@ -34,8 +34,40 @@ export class AdMessagerController {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
this.messager.publish(
|
||||
'matcher.ad.crit',
|
||||
JSON.stringify({
|
||||
message: `Can't validate message : ${message}`,
|
||||
error: e,
|
||||
}),
|
||||
);
|
||||
}
|
||||
try {
|
||||
await this.commandBus.execute(new CreateAdCommand(createAdRequest));
|
||||
} catch (e) {
|
||||
if (e instanceof DatabaseException) {
|
||||
if (e.message.includes('already exists')) {
|
||||
this.messager.publish(
|
||||
'matcher.ad.crit',
|
||||
JSON.stringify({
|
||||
code: ExceptionCode.ALREADY_EXISTS,
|
||||
message: 'Already exists',
|
||||
uuid: createAdRequest.uuid,
|
||||
}),
|
||||
);
|
||||
}
|
||||
if (e.message.includes("Can't reach database server")) {
|
||||
this.messager.publish(
|
||||
'matcher.ad.crit',
|
||||
JSON.stringify({
|
||||
code: ExceptionCode.UNAVAILABLE,
|
||||
message: 'Database server unavailable',
|
||||
uuid: createAdRequest.uuid,
|
||||
}),
|
||||
);
|
||||
}
|
||||
}
|
||||
this.messager.publish(
|
||||
'logging.matcher.ad.crit',
|
||||
JSON.stringify({
|
||||
|
||||
Reference in New Issue
Block a user