This commit is contained in:
@@ -149,6 +149,8 @@ export class RestaurantWalletService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async finishChargeRequest(dto: FinishChargeRequestDto): Promise<RestaurantCreditRequest> {
|
async finishChargeRequest(dto: FinishChargeRequestDto): Promise<RestaurantCreditRequest> {
|
||||||
|
this.logger.log(`Processing finish charge request for invoice ${dto.invoiceId}`);
|
||||||
|
|
||||||
return this.defaultEm.transactional(async (em) => {
|
return this.defaultEm.transactional(async (em) => {
|
||||||
const creditRequest = await em.findOne(
|
const creditRequest = await em.findOne(
|
||||||
RestaurantCreditRequest,
|
RestaurantCreditRequest,
|
||||||
@@ -157,17 +159,30 @@ export class RestaurantWalletService {
|
|||||||
);
|
);
|
||||||
|
|
||||||
if (!creditRequest) {
|
if (!creditRequest) {
|
||||||
|
this.logger.warn(`Credit request not found for invoice ${dto.invoiceId}`);
|
||||||
throw new NotFoundException(RestMessage.NOT_FOUND);
|
throw new NotFoundException(RestMessage.NOT_FOUND);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const restaurantId = creditRequest.restaurant.id;
|
||||||
|
|
||||||
if (creditRequest.status === RestaurantCreditRequestStatus.PAID) {
|
if (creditRequest.status === RestaurantCreditRequestStatus.PAID) {
|
||||||
|
this.logger.warn(
|
||||||
|
`Duplicate finish charge callback for invoice ${dto.invoiceId} (restaurant: ${restaurantId}, already PAID)`,
|
||||||
|
);
|
||||||
return creditRequest;
|
return creditRequest;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (creditRequest.status !== RestaurantCreditRequestStatus.PENDING) {
|
if (creditRequest.status !== RestaurantCreditRequestStatus.PENDING) {
|
||||||
|
this.logger.warn(
|
||||||
|
`Cannot finish charge for invoice ${dto.invoiceId} (restaurant: ${restaurantId}, status: ${creditRequest.status})`,
|
||||||
|
);
|
||||||
throw new BadRequestException('درخواست شارژ کیف پول قابل پردازش نیست');
|
throw new BadRequestException('درخواست شارژ کیف پول قابل پردازش نیست');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.logger.log(
|
||||||
|
`Crediting wallet for restaurant ${restaurantId}: amount=${creditRequest.amount}, invoice=${dto.invoiceId}`,
|
||||||
|
);
|
||||||
|
|
||||||
await this.createTransaction({
|
await this.createTransaction({
|
||||||
restaurant: creditRequest.restaurant,
|
restaurant: creditRequest.restaurant,
|
||||||
amount: Number(creditRequest.amount),
|
amount: Number(creditRequest.amount),
|
||||||
@@ -179,6 +194,11 @@ export class RestaurantWalletService {
|
|||||||
creditRequest.status = RestaurantCreditRequestStatus.PAID;
|
creditRequest.status = RestaurantCreditRequestStatus.PAID;
|
||||||
await em.flush();
|
await em.flush();
|
||||||
|
|
||||||
|
const newBalance = await this.getCurrentBalance(restaurantId, em);
|
||||||
|
this.logger.log(
|
||||||
|
`Charge request completed for invoice ${dto.invoiceId} (restaurant: ${restaurantId}, credited: ${creditRequest.amount}, new balance: ${newBalance})`,
|
||||||
|
);
|
||||||
|
|
||||||
return creditRequest;
|
return creditRequest;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { BadRequestException, Injectable, NotFoundException } from '@nestjs/common';
|
import { BadRequestException, Injectable, Logger, NotFoundException } from '@nestjs/common';
|
||||||
import { SetupRestaurantDto } from '../dto/setup-restaurant.dto';
|
import { SetupRestaurantDto } from '../dto/setup-restaurant.dto';
|
||||||
import { UpdateRestaurantDto } from '../dto/update-restaurant.dto';
|
import { UpdateRestaurantDto } from '../dto/update-restaurant.dto';
|
||||||
import { UpdateRestaurantBgDto } from '../dto/update-restaurant-bg.dto';
|
import { UpdateRestaurantBgDto } from '../dto/update-restaurant-bg.dto';
|
||||||
@@ -41,6 +41,8 @@ import { FindRestaurantCreditRequestsDto } from '../dto/find-restaurant-credit-r
|
|||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class RestaurantsService {
|
export class RestaurantsService {
|
||||||
|
private readonly logger = new Logger(RestaurantsService.name);
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private readonly em: EntityManager,
|
private readonly em: EntityManager,
|
||||||
private readonly restRepository: RestRepository,
|
private readonly restRepository: RestRepository,
|
||||||
@@ -349,8 +351,16 @@ export class RestaurantsService {
|
|||||||
return this.restaurantWalletService.chargeRequest(restId, dto);
|
return this.restaurantWalletService.chargeRequest(restId, dto);
|
||||||
}
|
}
|
||||||
|
|
||||||
finishChargeRequest(dto: FinishChargeRequestDto) {
|
async finishChargeRequest(dto: FinishChargeRequestDto) {
|
||||||
return this.restaurantWalletService.finishChargeRequest(dto);
|
this.logger.log(`Finishing charge request for invoice ${dto.invoiceId}`);
|
||||||
|
|
||||||
|
const creditRequest = await this.restaurantWalletService.finishChargeRequest(dto);
|
||||||
|
|
||||||
|
this.logger.log(
|
||||||
|
`Charge request finished for invoice ${dto.invoiceId} (restaurant: ${creditRequest.restaurant.id}, amount: ${creditRequest.amount}, status: ${creditRequest.status})`,
|
||||||
|
);
|
||||||
|
|
||||||
|
return creditRequest;
|
||||||
}
|
}
|
||||||
|
|
||||||
async updateBackground(id: string, dto: UpdateRestaurantBgDto): Promise<Restaurant> {
|
async updateBackground(id: string, dto: UpdateRestaurantBgDto): Promise<Restaurant> {
|
||||||
|
|||||||
Reference in New Issue
Block a user