update users service
This commit is contained in:
@@ -23,6 +23,7 @@ import { PaymentsRepository } from "./repositories/payments.repository";
|
||||
import { zarinpalConfig } from "../../configs/zarinpal.config";
|
||||
import { NotificationModule } from "../notifications/notifications.module";
|
||||
import { ReferralsModule } from "../referrals/referrals.module";
|
||||
import { UsersModule } from "../users/users.module";
|
||||
|
||||
@Module({
|
||||
imports: [
|
||||
@@ -49,6 +50,7 @@ import { ReferralsModule } from "../referrals/referrals.module";
|
||||
WalletsModule,
|
||||
NotificationModule,
|
||||
ReferralsModule,
|
||||
UsersModule
|
||||
],
|
||||
controllers: [PaymentsController],
|
||||
providers: [
|
||||
|
||||
@@ -39,6 +39,7 @@ import { DepositRequestsRepository } from "../repositories/deposit-requests.repo
|
||||
import { PaymentGatewaysRepository } from "../repositories/payment-gateway.repository";
|
||||
import { PaymentsRepository } from "../repositories/payments.repository";
|
||||
import { GatewayType } from "../types/gateway.type";
|
||||
import { UsersService } from "../../users/providers/users.service";
|
||||
@Injectable()
|
||||
export class PaymentsService {
|
||||
private readonly logger = new Logger(PaymentsService.name);
|
||||
@@ -53,8 +54,9 @@ export class PaymentsService {
|
||||
private readonly walletsService: WalletsService,
|
||||
private readonly depositRequestsRepository: DepositRequestsRepository,
|
||||
private readonly referralsService: ReferralsService,
|
||||
private readonly usersService: UsersService,
|
||||
private dataSource: DataSource,
|
||||
) {}
|
||||
) { }
|
||||
|
||||
//===============================================
|
||||
async chargeWalletWithGateway(chargeDto: GatewayDepositDto, userId: string) {
|
||||
@@ -453,34 +455,42 @@ export class PaymentsService {
|
||||
return frontUrl;
|
||||
}
|
||||
|
||||
private async isFirstPurchase(userId: string, queryRunner: QueryRunner) {
|
||||
const paymentCount = await queryRunner.manager.count(Payment, {
|
||||
where: { user: { id: userId }, status: PaymentStatus.COMPLETED },
|
||||
});
|
||||
return paymentCount === 0;
|
||||
}
|
||||
// private async isFirstPurchase(userId: string, queryRunner: QueryRunner) {
|
||||
// const paymentCount = await queryRunner.manager.count(Payment, {
|
||||
// where: { user: { id: userId }, status: PaymentStatus.COMPLETED },
|
||||
// });
|
||||
// return paymentCount === 0;
|
||||
// }
|
||||
|
||||
//===============================================
|
||||
|
||||
private async handleReferralReward(payment: Payment, queryRunner: QueryRunner) {
|
||||
const isFirstPurchase = await this.isFirstPurchase(payment.user.id, queryRunner);
|
||||
if (!isFirstPurchase) return;
|
||||
|
||||
// const isFirstPurchase = await this.isFirstPurchase(payment.user.id, queryRunner);
|
||||
// if (!isFirstPurchase) return;
|
||||
////
|
||||
const referral = await this.referralsService.getPendingReferral(payment.user.id, queryRunner);
|
||||
if (!referral) return;
|
||||
|
||||
// 10%
|
||||
const rewardAmount = new Decimal(payment.amount).mul(0.1);
|
||||
const agentId = referral.referrer.id
|
||||
const resellerOwner = await this.usersService.finResellerOwnerByAgentId(agentId)
|
||||
|
||||
const reward = await this.referralsService.createReferralReward(referral.referrer.id, referral.id, rewardAmount, queryRunner);
|
||||
// 8%
|
||||
const agentRewardAmount = new Decimal(payment.amount).mul(0.08);
|
||||
const resellerOwnerRewardAmount = new Decimal(payment.amount).mul(0.02);
|
||||
|
||||
const agentReward = await this.referralsService.createReferralReward(agentId, referral.id, agentRewardAmount, queryRunner);
|
||||
const resellerOwnerReward = await this.referralsService.createReferralReward(agentId, resellerOwner.id, resellerOwnerRewardAmount, queryRunner);
|
||||
|
||||
// Charge referrer's wallet
|
||||
await this.walletsService.createReferralRewardTransaction(referral.referrer.id, rewardAmount, queryRunner);
|
||||
await this.walletsService.createReferralRewardTransaction(agentId, agentRewardAmount, queryRunner);
|
||||
await this.walletsService.createReferralRewardTransaction(resellerOwner.id, resellerOwnerRewardAmount, queryRunner);
|
||||
|
||||
// Update reward status
|
||||
reward.status = ReferralRewardStatus.PAID;
|
||||
reward.paidAt = dayjs().toDate();
|
||||
await queryRunner.manager.save(reward);
|
||||
agentReward.status = ReferralRewardStatus.PAID;
|
||||
agentReward.status = ReferralRewardStatus.PAID;
|
||||
resellerOwnerReward.paidAt = dayjs().toDate();
|
||||
resellerOwnerReward.paidAt = dayjs().toDate();
|
||||
await queryRunner.manager.save([agentReward,resellerOwnerReward]);
|
||||
|
||||
// Update referral status
|
||||
referral.status = ReferralStatus.COMPLETED;
|
||||
|
||||
Reference in New Issue
Block a user