113 lines
2.4 KiB
TypeScript
113 lines
2.4 KiB
TypeScript
import {
|
|
IsArray,
|
|
IsBoolean,
|
|
IsEnum,
|
|
IsNotEmpty,
|
|
IsOptional,
|
|
IsPhoneNumber,
|
|
IsString,
|
|
ValidateIf,
|
|
} from 'class-validator';
|
|
import {
|
|
OTP_ACTION_TYPE,
|
|
OTP_SOURCE,
|
|
OtpRequestEntity,
|
|
OtpVerifyEntity,
|
|
} from '../../domain/entities/otp-verification.entity';
|
|
import { ApiProperty } from '@nestjs/swagger';
|
|
import { Type } from 'class-transformer';
|
|
|
|
export class OtpRequestDto implements OtpRequestEntity {
|
|
@ApiProperty({
|
|
type: String,
|
|
required: true,
|
|
example: OTP_ACTION_TYPE.CANCEL_TRANSACTION,
|
|
description: 'CANCEL_TRANSACTION || CREATE_DISCOUNT',
|
|
})
|
|
@IsString()
|
|
@IsNotEmpty()
|
|
action_type: OTP_ACTION_TYPE;
|
|
|
|
@ApiProperty({
|
|
type: String,
|
|
required: true,
|
|
example: OTP_SOURCE.POS,
|
|
description: 'POS || WEB',
|
|
})
|
|
@IsString()
|
|
@IsNotEmpty()
|
|
source: OTP_SOURCE;
|
|
|
|
@ApiProperty({
|
|
name: 'target_id',
|
|
example: 'bccc0c6a-51a0-437f-abc8-dc18851604ee',
|
|
})
|
|
@IsString()
|
|
@ValidateIf((body) => body.target_id)
|
|
target_id: string;
|
|
|
|
@ApiProperty({ name: 'reference', example: '0625N21' })
|
|
@IsString()
|
|
@ValidateIf((body) => body.reference)
|
|
reference: string;
|
|
}
|
|
|
|
export class OtpVerifyDto extends OtpRequestDto implements OtpVerifyEntity {
|
|
@ApiProperty({
|
|
name: 'otp_code',
|
|
type: String,
|
|
required: true,
|
|
example: '2345',
|
|
})
|
|
@IsString()
|
|
@IsNotEmpty()
|
|
otp_code: string;
|
|
}
|
|
|
|
export class OtpVerifierCreateDto {
|
|
@ApiProperty({
|
|
example: 'Item Manager',
|
|
description: 'Nama verifier, opsional.',
|
|
})
|
|
@IsOptional()
|
|
@IsString()
|
|
name?: string;
|
|
|
|
@ApiProperty({
|
|
example: '6281234567890',
|
|
description: 'Nomor telepon verifier dalam format internasional (E.164).',
|
|
})
|
|
@IsString()
|
|
@IsPhoneNumber('ID')
|
|
phone_number: string;
|
|
|
|
@ApiProperty({
|
|
example: false,
|
|
description:
|
|
'True jika verifier boleh memverifikasi semua aksi tanpa batas.',
|
|
})
|
|
@IsBoolean()
|
|
is_all_action: boolean;
|
|
|
|
@ApiProperty({
|
|
isArray: true,
|
|
enum: OTP_ACTION_TYPE,
|
|
example: [
|
|
'CREATE_DISCOUNT',
|
|
'CANCEL_TRANSACTION',
|
|
'REJECT_RECONCILIATION',
|
|
'ACTIVATE_ITEM',
|
|
'ACTIVATE_USER',
|
|
'UPDATE_ITEM_PRICE',
|
|
'UPDATE_ITEM_DETAILS',
|
|
'CONFIRM_TRANSACTION',
|
|
],
|
|
description: 'Daftar tipe aksi yang boleh diverifikasi, jika bukan semua.',
|
|
})
|
|
@IsOptional()
|
|
@IsArray()
|
|
@IsEnum(OTP_ACTION_TYPE, { each: true })
|
|
@Type(() => String)
|
|
action_types?: OTP_ACTION_TYPE[];
|
|
}
|