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") @Controller("discounts") @AuthGuards() export class DiscountsController { constructor(private readonly discountsService: DiscountsService) {} @ApiOperation({ summary: "Create a new discount" }) @AdminRoute() @PermissionsDec(PermissionEnum.DISCOUNTS) @Post() @ApiResponse({ status: 201, description: "Discount created successfully" }) create(@Body() createDiscountDto: CreateDiscountDto) { return this.discountsService.create(createDiscountDto); } @ApiOperation({ summary: "Get all discounts for admin" }) @AdminRoute() @PermissionsDec(PermissionEnum.DISCOUNTS) @Get() @ApiResponse({ status: 200, description: "Discounts fetched successfully" }) 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); } @ApiOperation({ summary: "Get discount list for user" }) @Get("user-discounts") getDiscountListForUser(@Query() queryDto: SearchDiscountQueryDto) { return this.discountsService.getDiscountListForUser(queryDto); } }