77 lines
2.9 KiB
TypeScript
Executable File
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);
|
|
}
|
|
}
|