diff --git a/src/modules/invoices/providers/invoices.service.ts b/src/modules/invoices/providers/invoices.service.ts index e804c7b..7aa5719 100755 --- a/src/modules/invoices/providers/invoices.service.ts +++ b/src/modules/invoices/providers/invoices.service.ts @@ -1476,8 +1476,7 @@ export class InvoicesService { async findInvoicesByCustomerIds(custmerIds: string[], query: SearchResellerInvoicesQueryDto) { - const [data, count] = await this.invoiceRepository.findPaginatedListByUserIds(query, custmerIds) + return this.invoiceRepository.findPaginatedListByUserIds(query, custmerIds) - return { data, count, paginate: true }; } } diff --git a/src/modules/referrals/providers/referrals.service.ts b/src/modules/referrals/providers/referrals.service.ts index 8b710b2..6d58b93 100755 --- a/src/modules/referrals/providers/referrals.service.ts +++ b/src/modules/referrals/providers/referrals.service.ts @@ -124,9 +124,9 @@ export class ReferralsService { async findPaginatedReferedUsers(userIds: string[], query: SearchCustomersDto) { - const [data, count] = await this.referralsRepository.findPaginatedList(userIds, query) + const [customers, count] = await this.referralsRepository.findPaginatedList(userIds, query) - return { data, count, paginate: true }; + return { customers, count, paginate: true }; } async findReferedUsersIds(userIds: string[]) { diff --git a/src/modules/reseller/dto/create-withdraw-request.dto.ts b/src/modules/reseller/dto/create-withdraw-request.dto.ts new file mode 100755 index 0000000..86a2b0a --- /dev/null +++ b/src/modules/reseller/dto/create-withdraw-request.dto.ts @@ -0,0 +1,10 @@ +import { ApiProperty } from "@nestjs/swagger"; +import { IsInt, IsNotEmpty } from "class-validator"; + +export class CreateWithdrawRequestDto { + @IsNotEmpty() + @IsInt() + @ApiProperty() + amount: number; + +} diff --git a/src/modules/reseller/reseller.controller.ts b/src/modules/reseller/reseller.controller.ts index ba411d4..7b551f3 100644 --- a/src/modules/reseller/reseller.controller.ts +++ b/src/modules/reseller/reseller.controller.ts @@ -12,12 +12,16 @@ import { CreateResellerAgentDto } from './dto/create-reseller-agent.dto'; import { SearchRewardsRequestQueryDto } from './dto/search-reward-requests.dto'; import { SearchCustomersDto } from '../users/DTO/search-customers.dto'; import { SearchResellerInvoicesQueryDto } from './dto/search-reseller-invoices.dto'; +import { PaginationDto } from '../../common/DTO/pagination.dto'; +import { WalletsService } from '../wallets/providers/wallets.service'; +import { CreateWithdrawRequestDto } from './dto/create-withdraw-request.dto'; @Controller('reseller') @AuthGuards() export class ResellerController { constructor( private readonly resellerService: ResellerService, + private readonly walletsService: WalletsService, ) { } @@ -94,4 +98,37 @@ export class ResellerController { return this.resellerService.findResellerAgentsRewards(userId, query) } + // ============ Wallet Transactions ============= + @ApiOperation({ summary: "get Reseller/Agent Wallet Transactions ==> reseller route" }) + @ResellerRoute() + @Get('wallet/transaction') + getWalletTransactionss(@UserDec("id") userId: string, @Query() query: PaginationDto) { + return this.walletsService.getTransaction(userId, query); + } + + // ============ Wallet Balance ============= + + @ApiOperation({ summary: "get Reseller/Agent Wallet Balance ==> reseller route" }) + @ResellerRoute() + @Get('wallet/balance') + getWalletBalance(@UserDec("id") userId: string) { + return this.walletsService.getBalance(userId) + } + + // ============ WithDraw Request ============= + @ApiOperation({ summary: "Create Reseller/Agent withdraw request ==> reseller route" }) + @ResellerRoute() + @Post('wallet/withdraw') + withdrawRequest(@UserDec("id") userId: string, @Body() dto: CreateWithdrawRequestDto) { + return this.resellerService.createWithdrawRequest(userId, dto.amount) + } + + // ============ Remove WithDraw Request ============= + @ApiOperation({ summary: "remove Reseller/Agent withdraw request ==> reseller route" }) + @ResellerRoute() + @Delete('wallet/withdraw/:id') + removeWithdrawRequest(@UserDec("id") userId: string) { + return this.walletsService.getBalance(userId) + } + } diff --git a/src/modules/reseller/reseller.module.ts b/src/modules/reseller/reseller.module.ts index ef041ce..3f8815a 100644 --- a/src/modules/reseller/reseller.module.ts +++ b/src/modules/reseller/reseller.module.ts @@ -9,12 +9,15 @@ import { ReferralsModule } from '../referrals/referrals.module'; import { InvoicesModule } from '../invoices/invoices.module'; import { RewardWithdrawRequest } from "../reseller/entities/rewards-withdraw-request.entity"; import { WithdrawRequestRepository } from './repositories/withdraw-request.repository'; +import { WalletsModule } from '../wallets/wallets.module'; @Module({ imports: [TypeOrmModule.forFeature([Reseller, RewardWithdrawRequest]), UsersModule, ReferralsModule, - InvoicesModule], + InvoicesModule, + WalletsModule + ], controllers: [ResellerController], providers: [ResellerService, ResellerRepository, WithdrawRequestRepository], }) diff --git a/src/modules/reseller/reseller.service.ts b/src/modules/reseller/reseller.service.ts index 11821a2..34576e4 100644 --- a/src/modules/reseller/reseller.service.ts +++ b/src/modules/reseller/reseller.service.ts @@ -110,7 +110,10 @@ export class ResellerService { const customerIds = await this.referralService.findReferedUsersIds(agentIds) - return this.invoicesService.findInvoicesByCustomerIds(customerIds, query) + const [invoices, count] = await this.invoicesService.findInvoicesByCustomerIds(customerIds, query) + + return { invoices, count, paginate: true }; + } async findResellerAgentsRewards(userId: string, query: SearchRewardsRequestQueryDto) { @@ -127,4 +130,38 @@ export class ResellerService { return { requests, count, paginate: true }; } + + async createWithdrawRequest(userId: string, requestedAmount: number) { + const user = await this.usersService.findOneWithPhone(userId) + + if (!user) { + throw new NotFoundException(AuthMessage.USER_NOT_FOUND) + } + + const request = this.withdrawRequestRepository.create({ + requestedAmount, + user + }) + + return this.withdrawRequestRepository.save(request) + } + + async removeWithdrawRequest(userId: string, withdrawRequestId: string) { + + const request =await this.withdrawRequestRepository.findOne({ + where: { + id: withdrawRequestId, + user: { id: userId } + } + }) + + if(!request){ + throw new NotFoundException() + } + if(request.paidAt){ + throw new BadRequestException("درخواست پرداخت شده قابل حذف نیست") + } + + return this.withdrawRequestRepository.remove(request) + } }