|
1 | 1 | import { HttpException } from '@nestjs/common'; |
| 2 | +import { ValidationExceptionPayload } from '~/_common/types/validation-exception-payload.type'; |
| 3 | + |
| 4 | +const DEFAULT_STATUS_CODE = 400; |
| 5 | +const DEFAULT_MESSAGE = 'Validation failed'; |
| 6 | +const DEFAULT_VALIDATIONS: Record<string, string> = {}; |
2 | 7 |
|
3 | 8 | export class ValidationException extends HttpException { |
4 | | - constructor(message, statusCode = 400) { |
5 | | - super(message, statusCode); |
| 9 | + private readonly validations: Record<string, string>; |
| 10 | + |
| 11 | + constructor(payload: ValidationExceptionPayload) { |
| 12 | + const { message, validations, statusCode } = payload; |
| 13 | + super(message || DEFAULT_MESSAGE, statusCode || DEFAULT_STATUS_CODE); |
6 | 14 | this.name = this.constructor.name; |
7 | | - this.getStatus = () => statusCode; |
| 15 | + this.validations = validations || DEFAULT_VALIDATIONS; |
| 16 | + } |
| 17 | + |
| 18 | + getValidations(): Record<string, string> { |
| 19 | + return this.validations; |
| 20 | + } |
| 21 | + |
| 22 | + getPayload(): ValidationExceptionPayload { |
| 23 | + return { |
| 24 | + message: this.message, |
| 25 | + statusCode: this.getStatus(), |
| 26 | + validations: this.validations, |
| 27 | + }; |
8 | 28 | } |
9 | 29 | } |
10 | 30 |
|
11 | | -export class ValidationSchemaException extends ValidationException {} |
| 31 | +export class ValidationSchemaException extends ValidationException { |
| 32 | + constructor(payload: ValidationExceptionPayload) { |
| 33 | + payload.message = payload.message || 'Wrong schema validation'; |
| 34 | + super(payload); |
| 35 | + } |
| 36 | +} |
12 | 37 |
|
13 | | -export class ValidationConfigException extends ValidationException {} |
| 38 | +export class ValidationConfigException extends ValidationException { |
| 39 | + constructor(payload: ValidationExceptionPayload) { |
| 40 | + payload.message = payload.message || 'Wrong config validation'; |
| 41 | + super(payload); |
| 42 | + } |
| 43 | +} |
0 commit comments