diff --git a/database/migrations/Migration20260620180000_add_extra_card_fields_to_payment_methods.ts b/database/migrations/Migration20260620180000_add_extra_card_fields_to_payment_methods.ts new file mode 100644 index 0000000..017d550 --- /dev/null +++ b/database/migrations/Migration20260620180000_add_extra_card_fields_to_payment_methods.ts @@ -0,0 +1,13 @@ +import { Migration } from '@mikro-orm/migrations'; + +export class Migration20260620180000_add_extra_card_fields_to_payment_methods extends Migration { + + override async up(): Promise { + this.addSql(`alter table "payment_methods" add column "card_number2" varchar(255) null, add column "card_number3" varchar(255) null, add column "card_owner2" varchar(255) null, add column "card_owner3" varchar(255) null;`); + } + + override async down(): Promise { + this.addSql(`alter table "payment_methods" drop column "card_number2", drop column "card_number3", drop column "card_owner2", drop column "card_owner3";`); + } + +} diff --git a/src/modules/payments/dto/create-payment-method.dto.ts b/src/modules/payments/dto/create-payment-method.dto.ts index ce9b5df..f40c5a2 100644 --- a/src/modules/payments/dto/create-payment-method.dto.ts +++ b/src/modules/payments/dto/create-payment-method.dto.ts @@ -23,12 +23,32 @@ export class CreatePaymentMethodDto { @IsString() cardNumber?: string; + @ApiProperty({ description: 'Second card number for card-to-card payments', required: false }) + @IsOptional() + @IsString() + cardNumber2?: string; + + @ApiProperty({ description: 'Third card number for card-to-card payments', required: false }) + @IsOptional() + @IsString() + cardNumber3?: string; + @ApiProperty({ description: 'Card owner name for card-to-card payments', required: false }) @ValidateIf((dto: CreatePaymentMethodDto) => dto.method === PaymentMethodEnum.CreditCard) @IsNotEmpty() @IsString() cardOwner?: string; + @ApiProperty({ description: 'Second card owner name for card-to-card payments', required: false }) + @IsOptional() + @IsString() + cardOwner2?: string; + + @ApiProperty({ description: 'Third card owner name for card-to-card payments', required: false }) + @IsOptional() + @IsString() + cardOwner3?: string; + @ApiProperty({ description: 'Is payment method enabled', required: false, default: true }) @IsOptional() @IsBoolean() diff --git a/src/modules/payments/entities/payment-method.entity.ts b/src/modules/payments/entities/payment-method.entity.ts index 4b25be5..87e5a24 100644 --- a/src/modules/payments/entities/payment-method.entity.ts +++ b/src/modules/payments/entities/payment-method.entity.ts @@ -23,9 +23,21 @@ export class PaymentMethod extends BaseEntity { @Property({ nullable: true }) cardNumber?: string; + @Property({ nullable: true }) + cardNumber2?: string; + + @Property({ nullable: true }) + cardNumber3?: string; + @Property({ nullable: true }) cardOwner?: string; + @Property({ nullable: true }) + cardOwner2?: string; + + @Property({ nullable: true }) + cardOwner3?: string; + @Property({ default: true }) enabled: boolean = true; diff --git a/src/seeders/data/payment-methods.data.ts b/src/seeders/data/payment-methods.data.ts index 878144c..3a02109 100644 --- a/src/seeders/data/payment-methods.data.ts +++ b/src/seeders/data/payment-methods.data.ts @@ -7,7 +7,11 @@ export interface PaymentMethodData { order: number; gateway: PaymentGatewayEnum | null; cardNumber?: string; + cardNumber2?: string; + cardNumber3?: string; cardOwner?: string; + cardOwner2?: string; + cardOwner3?: string; merchantId?: string; } diff --git a/src/seeders/payment-methods.seeder.ts b/src/seeders/payment-methods.seeder.ts index 278cdd1..d2a5e2c 100644 --- a/src/seeders/payment-methods.seeder.ts +++ b/src/seeders/payment-methods.seeder.ts @@ -23,7 +23,11 @@ export class PaymentMethodsSeeder { order: methodData.order, gateway: methodData.gateway, cardNumber: methodData.cardNumber, + cardNumber2: methodData.cardNumber2, + cardNumber3: methodData.cardNumber3, cardOwner: methodData.cardOwner, + cardOwner2: methodData.cardOwner2, + cardOwner3: methodData.cardOwner3, merchantId: methodData.merchantId, }); em.persist(paymentMethod); @@ -34,7 +38,11 @@ export class PaymentMethodsSeeder { existing.enabled !== methodData.enabled || existing.order !== methodData.order || existing.cardNumber !== methodData.cardNumber || - existing.cardOwner !== methodData.cardOwner + existing.cardNumber2 !== methodData.cardNumber2 || + existing.cardNumber3 !== methodData.cardNumber3 || + existing.cardOwner !== methodData.cardOwner || + existing.cardOwner2 !== methodData.cardOwner2 || + existing.cardOwner3 !== methodData.cardOwner3 ) { existing.description = methodData.description; existing.enabled = methodData.enabled; @@ -45,9 +53,21 @@ export class PaymentMethodsSeeder { if (methodData.cardNumber !== undefined) { existing.cardNumber = methodData.cardNumber; } + if (methodData.cardNumber2 !== undefined) { + existing.cardNumber2 = methodData.cardNumber2; + } + if (methodData.cardNumber3 !== undefined) { + existing.cardNumber3 = methodData.cardNumber3; + } if (methodData.cardOwner !== undefined) { existing.cardOwner = methodData.cardOwner; } + if (methodData.cardOwner2 !== undefined) { + existing.cardOwner2 = methodData.cardOwner2; + } + if (methodData.cardOwner3 !== undefined) { + existing.cardOwner3 = methodData.cardOwner3; + } if (methodData.merchantId !== undefined) { existing.merchantId = methodData.merchantId; }