chore: add new service to add subs to danak services in array
This commit is contained in:
@@ -1,15 +1,17 @@
|
||||
import { BadRequestException, Injectable } from "@nestjs/common";
|
||||
// eslint-disable-next-line import/no-named-as-default
|
||||
import Decimal from "decimal.js";
|
||||
import { DataSource } from "typeorm";
|
||||
import { DataSource, In } from "typeorm";
|
||||
|
||||
import { ServiceMessage, SubscriptionMessage, WalletMessage } from "../../../common/enums/message.enum";
|
||||
import { DanakServicesService } from "../../danak-services/providers/danak-services.service";
|
||||
import { InvoicesService } from "../../invoices/providers/invoices.service";
|
||||
import { UsersService } from "../../users/providers/users.service";
|
||||
import { PaginationUtils } from "../../utils/providers/pagination.utils";
|
||||
import { Wallet } from "../../wallets/entities/wallet.entity";
|
||||
import { WalletsService } from "../../wallets/providers/wallets.service";
|
||||
import { CreateSubscriptionPlanDto } from "../DTO/create-subscription.dto";
|
||||
import { AddSubscriptionsToServiceDto } from "../DTO/create-subscription.dto";
|
||||
import { ServiceSubsQueryDto } from "../DTO/service-subs-query.dto";
|
||||
import { SubscribeServiceDto } from "../DTO/subscribe-service.dto";
|
||||
import { UpdateSubscriptionPlanDto } from "../DTO/update-subscription.dto";
|
||||
import { SubscriptionPlan } from "../entities/subscription.entity";
|
||||
@@ -31,18 +33,29 @@ export class SubscriptionsService {
|
||||
) {}
|
||||
|
||||
//************************************ */
|
||||
async createSubscriptionsPlan(createDto: CreateSubscriptionPlanDto) {
|
||||
async createSubscriptionsPlan(createDto: AddSubscriptionsToServiceDto) {
|
||||
const danakService = await this.danakServices.findServiceById(createDto.serviceId);
|
||||
if (!danakService) throw new BadRequestException(ServiceMessage.SERVICE_NOT_FOUND_BY_ID);
|
||||
|
||||
const existSubscription = await this.subscriptionsPlanRepository.findOneByName(createDto.name);
|
||||
if (existSubscription) throw new BadRequestException(SubscriptionMessage.NAME_EXIST);
|
||||
const subscriptions = createDto.subs.map((sub) => ({ ...sub, service: { id: createDto.serviceId } }));
|
||||
|
||||
const subscriptionNames = createDto.subs.map((sub) => sub.name);
|
||||
const existingSubscriptions = await this.subscriptionsPlanRepository.find({
|
||||
where: {
|
||||
name: In(subscriptionNames),
|
||||
service: { id: createDto.serviceId },
|
||||
},
|
||||
});
|
||||
|
||||
if (existingSubscriptions.length > 0)
|
||||
throw new BadRequestException({ message: [SubscriptionMessage.NAME_EXIST, existingSubscriptions] });
|
||||
|
||||
const createdSubscriptions = this.subscriptionsPlanRepository.create(subscriptions);
|
||||
await this.subscriptionsPlanRepository.save(createdSubscriptions);
|
||||
|
||||
const subscription = this.subscriptionsPlanRepository.create({ ...createDto, service: { id: createDto.serviceId } });
|
||||
await this.subscriptionsPlanRepository.save(subscription);
|
||||
return {
|
||||
message: SubscriptionMessage.CREATED,
|
||||
subscription,
|
||||
subscriptions: createdSubscriptions,
|
||||
};
|
||||
}
|
||||
//************************************ */
|
||||
@@ -82,15 +95,51 @@ export class SubscriptionsService {
|
||||
}
|
||||
//************************************ */
|
||||
|
||||
async getSubscriptionsPlans() {
|
||||
const subscriptions = await this.subscriptionsPlanRepository.find({ relations: ["service"] });
|
||||
async getServiceSubscriptions(serviceId: string, queryDto: ServiceSubsQueryDto) {
|
||||
const service = await this.danakServices.findServiceById(serviceId);
|
||||
|
||||
const { limit, skip } = PaginationUtils(queryDto);
|
||||
|
||||
const queryBuilder = this.subscriptionsPlanRepository
|
||||
.createQueryBuilder("subscription")
|
||||
.leftJoin("subscription.service", "service")
|
||||
.addSelect(["service.id"])
|
||||
.where("service.id = :serviceId", { serviceId });
|
||||
|
||||
if (queryDto.q) {
|
||||
queryBuilder.andWhere("subscription.name ILIKE :query", { query: `%${queryDto.q}%` });
|
||||
}
|
||||
|
||||
if (queryDto.isActive !== undefined) {
|
||||
queryBuilder.andWhere("subscription.isActive = :isActive", { isActive: queryDto.isActive === 1 });
|
||||
}
|
||||
|
||||
const [subscriptions, count] = await queryBuilder.skip(skip).take(limit).getManyAndCount();
|
||||
|
||||
return {
|
||||
service,
|
||||
subscriptions,
|
||||
count,
|
||||
pagination: true,
|
||||
};
|
||||
}
|
||||
|
||||
//************************************ */
|
||||
|
||||
async toggleSubStatus(subId: string) {
|
||||
const subscription = await this.subscriptionsPlanRepository.findOneBy({ id: subId });
|
||||
if (!subscription) throw new BadRequestException(SubscriptionMessage.NOT_FOUND);
|
||||
|
||||
subscription.isActive = !subscription.isActive;
|
||||
|
||||
await this.subscriptionsPlanRepository.save(subscription);
|
||||
return {
|
||||
message: SubscriptionMessage.STATUS_UPDATED,
|
||||
isActive: subscription.isActive,
|
||||
};
|
||||
}
|
||||
//************************************ */
|
||||
|
||||
async subscribeToPlan(serviceId: string, subscribeDto: SubscribeServiceDto, userId: string) {
|
||||
const queryRunner = this.dataSource.createQueryRunner();
|
||||
await queryRunner.connect();
|
||||
|
||||
Reference in New Issue
Block a user