Files
dsc-api/src/modules/discounts/discounts.controller.ts
T
2025-04-23 15:30:35 +03:30

77 lines
2.9 KiB
TypeScript
Executable File

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);
}
}