diff --git a/src/modules/discounts/discounts.controller.ts b/src/modules/discounts/discounts.controller.ts index 74f7ad3..7ab635b 100755 --- a/src/modules/discounts/discounts.controller.ts +++ b/src/modules/discounts/discounts.controller.ts @@ -1,12 +1,14 @@ -import { Body, Controller, Get, Post, Query } from "@nestjs/common"; +import { Body, Controller, Delete, Get, Param, Patch, Post, Query } from "@nestjs/common"; import { ApiOperation, ApiResponse, ApiTags } from "@nestjs/swagger"; import { CreateDiscountDto } from "./DTO/create-discount.dto"; import { SearchDiscountQueryDto } from "./DTO/search-discount-query.dto"; +import { UpdateDiscountDto } from "./DTO/update-discount.dto"; import { DiscountsService } from "./providers/discounts.service"; import { AdminRoute } from "../../common/decorators/admin.decorator"; import { AuthGuards } from "../../common/decorators/auth-guard.decorator"; import { PermissionsDec } from "../../common/decorators/permission.decorator"; +import { ParamDto } from "../../common/DTO/param.dto"; import { PermissionEnum } from "../users/enums/permission.enum"; @ApiTags("Discounts") @@ -32,4 +34,37 @@ export class DiscountsController { getDiscountsForAdmin(@Query() queryDto: SearchDiscountQueryDto) { return this.discountsService.getDiscountsForAdmin(queryDto); } + + @ApiOperation({ summary: "Get discount by id" }) + @AdminRoute() + @PermissionsDec(PermissionEnum.DISCOUNTS) + @Get(":id") + @ApiResponse({ status: 200, description: "Discount fetched successfully" }) + getDiscountById(@Param() paramDto: ParamDto) { + return this.discountsService.getDiscountById(paramDto.id); + } + + @ApiOperation({ summary: "Toggle discount status" }) + @AdminRoute() + @PermissionsDec(PermissionEnum.DISCOUNTS) + @Post(":id/toggle-status") + toggleDiscountStatus(@Param() paramDto: ParamDto) { + return this.discountsService.toggleDiscountStatus(paramDto.id); + } + + @ApiOperation({ summary: "Delete discount" }) + @AdminRoute() + @PermissionsDec(PermissionEnum.DISCOUNTS) + @Delete(":id") + deleteDiscount(@Param() paramDto: ParamDto) { + return this.discountsService.softDeleteDiscount(paramDto.id); + } + + @ApiOperation({ summary: "Update discount" }) + @AdminRoute() + @PermissionsDec(PermissionEnum.DISCOUNTS) + @Patch(":id") + updateDiscount(@Param() paramDto: ParamDto, @Body() updateDiscountDto: UpdateDiscountDto) { + return this.discountsService.updateDiscount(paramDto.id, updateDiscountDto); + } } diff --git a/src/modules/discounts/providers/discounts.service.ts b/src/modules/discounts/providers/discounts.service.ts index dc09420..5002ec4 100755 --- a/src/modules/discounts/providers/discounts.service.ts +++ b/src/modules/discounts/providers/discounts.service.ts @@ -70,6 +70,20 @@ export class DiscountsService { return this.discountRepository.findById(id); } //************************************ */ + + async toggleDiscountStatus(id: string) { + const discount = await this.discountRepository.findById(id); + if (!discount) throw new BadRequestException(DiscountMessage.NOT_FOUND); + + discount.isActive = !discount.isActive; + await this.discountRepository.save(discount); + + return { + message: DiscountMessage.UPDATED, + discount, + }; + } + //************************************ */ async updateDiscount(id: string, updateDiscountDto: UpdateDiscountDto) { const queryRunner = this.dataSource.createQueryRunner(); diff --git a/src/modules/discounts/repositories/discounts.repository.ts b/src/modules/discounts/repositories/discounts.repository.ts index 2a58d1e..350aec9 100755 --- a/src/modules/discounts/repositories/discounts.repository.ts +++ b/src/modules/discounts/repositories/discounts.repository.ts @@ -14,7 +14,10 @@ export class DiscountRepository extends Repository { async findById(id: string) { return this.findOne({ - where: { id, isActive: true }, + where: { id }, + relations: { + subscriptionPlans: true, + }, withDeleted: false, }); }