order confirm after pay
This commit is contained in:
@@ -12,11 +12,14 @@ import { Payment } from './entities/payment.entity';
|
||||
import { ZarinpalGateway } from './gateways/zarinpal.gateway';
|
||||
import { GatewayManager } from './services/gateway.manager';
|
||||
import { PaymentRepository } from './repositories/payment.repository';
|
||||
import { InventoryModule } from '../inventory/inventory.module';
|
||||
|
||||
@Module({
|
||||
imports: [MikroOrmModule.forFeature([PaymentMethod, Payment, Restaurant]), AuthModule, JwtModule],
|
||||
imports: [MikroOrmModule.forFeature([PaymentMethod, Payment, Restaurant]),
|
||||
AuthModule, JwtModule, InventoryModule],
|
||||
controllers: [PaymentsController],
|
||||
providers: [PaymentsService, PaymentMethodService, PaymentMethodRepository, PaymentRepository, ZarinpalGateway, GatewayManager],
|
||||
providers: [PaymentsService, PaymentMethodService, PaymentMethodRepository,
|
||||
PaymentRepository, ZarinpalGateway, GatewayManager],
|
||||
exports: [
|
||||
PaymentMethodRepository,
|
||||
PaymentRepository,
|
||||
|
||||
@@ -1,12 +1,14 @@
|
||||
import { BadRequestException, Injectable, NotFoundException } from '@nestjs/common';
|
||||
import { PaymentGatewayEnum, PaymentMethodEnum, PaymentStatusEnum } from '../interface/payment';
|
||||
import { Payment } from '../entities/payment.entity';
|
||||
import { EntityManager } from '@mikro-orm/core';
|
||||
import { EntityManager } from '@mikro-orm/postgresql';
|
||||
import { Order } from '../../orders/entities/order.entity';
|
||||
import { Logger } from '@nestjs/common';
|
||||
import { GatewayManager } from './gateway.manager';
|
||||
import { UserWallet } from 'src/modules/users/entities/user-wallet.entity';
|
||||
import { OrderPaymentContext } from '../interface/payment';
|
||||
import { InventoryService } from 'src/modules/inventory/inventory.service';
|
||||
import { OrderStatus } from 'src/modules/orders/interface/order.interface';
|
||||
|
||||
@Injectable()
|
||||
export class PaymentsService {
|
||||
@@ -15,6 +17,7 @@ export class PaymentsService {
|
||||
constructor(
|
||||
private readonly em: EntityManager,
|
||||
private readonly gatewayManager: GatewayManager,
|
||||
private readonly inventoryService: InventoryService,
|
||||
) { }
|
||||
|
||||
async payOrder(
|
||||
@@ -201,16 +204,12 @@ export class PaymentsService {
|
||||
payment.verifyResponse = result.raw;
|
||||
|
||||
if (!result.success) {
|
||||
payment.status = PaymentStatusEnum.Failed;
|
||||
payment.failedAt = new Date();
|
||||
payment.order.paymentStatus = PaymentStatusEnum.Failed;
|
||||
} else {
|
||||
payment.status = PaymentStatusEnum.Paid;
|
||||
payment.referenceId = result.referenceId;
|
||||
payment.cardPan = result.cardPan;
|
||||
payment.paidAt = new Date();
|
||||
payment.order.paymentStatus = PaymentStatusEnum.Paid;
|
||||
this.failPayment(payment);
|
||||
return payment;
|
||||
}
|
||||
this.markPaid(payment);
|
||||
this.confirmOrder(payment.order);
|
||||
await this.confirmStock(orderId, em);
|
||||
|
||||
await em.flush();
|
||||
return payment;
|
||||
@@ -225,6 +224,28 @@ export class PaymentsService {
|
||||
);
|
||||
}
|
||||
|
||||
private markPaid(payment: Payment) {
|
||||
payment.status = PaymentStatusEnum.Paid;
|
||||
payment.paidAt = new Date();
|
||||
payment.referenceId = payment.referenceId;
|
||||
payment.order.paymentStatus = PaymentStatusEnum.Paid;
|
||||
}
|
||||
|
||||
private failPayment(payment: Payment) {
|
||||
payment.status = PaymentStatusEnum.Failed;
|
||||
payment.failedAt = new Date();
|
||||
payment.order.paymentStatus = PaymentStatusEnum.Failed;
|
||||
}
|
||||
|
||||
private confirmOrder(order: Order) {
|
||||
order.status = OrderStatus.PAID;
|
||||
}
|
||||
|
||||
private async confirmStock(orderId: string, em: EntityManager) {
|
||||
await this.inventoryService.confirmReservationByOrderId(em, orderId);
|
||||
}
|
||||
|
||||
|
||||
private async getOrCreateLatestPendingPayment(
|
||||
orderId: string,
|
||||
params: {
|
||||
|
||||
Reference in New Issue
Block a user