import { Body, Controller, Get, HttpCode, HttpStatus, Param, Patch, Post, Query } from "@nestjs/common"; import { ApiOperation, ApiTags } from "@nestjs/swagger"; import { CreateTicketCategoryDto } from "./DTO/create-ticket-category.dto"; import { CreateTicketMessageDto } from "./DTO/create-ticket-message.dto"; import { CreateTicketByAdminDto, CreateTicketDto } from "./DTO/create-ticket.dto"; import { SearchTicketCategoryDto } from "./DTO/search-ticket-category.dto"; import { SearchTicketQueryDto } from "./DTO/search-ticket-query.dto"; import { TicketsService } from "./providers/tickets.service"; import { ParamDto } from "../../common/DTO/param.dto"; @Controller("tickets") @ApiTags("Tickets") export class TicketsController { constructor(private readonly ticketsService: TicketsService) {} //----------------- ticket categories ------------------- // @ApiOperation({ summary: "Create ticket category => admin route" }) // @PermissionsDec(PermissionEnum.TICKETS) // @Post("category") // createTicketCategory(@Body() createDto: CreateTicketCategoryDto, @UserIpAndHeaders() userIpAndHeaders: IUserIpAndHeaders) { // return this.ticketsService.createTicketCategory(createDto, userIpAndHeaders); // } // @ApiOperation({ summary: "Update ticket category => admin route" }) // @PermissionsDec(PermissionEnum.TICKETS) // @Patch("category/:id") // updateCategory( // @Param() paramDto: ParamDto, // @Body() updateCategoryDto: UpdateTicketCategoryDto, // @UserIpAndHeaders() userIpAndHeaders: IUserIpAndHeaders, // ) { // return this.ticketsService.updateCategory(paramDto, updateCategoryDto, userIpAndHeaders); // } // @ApiOperation({ summary: "Get ticket categories " }) // @Get("categories") // getTicketCategories() { // return this.ticketsService.getTicketCategories(); // } // @ApiOperation({ summary: "Get ticket categories list => admin route" }) // @AdminRoute() // @PermissionsDec(PermissionEnum.TICKETS) // @Get("categories-list") // getCategoriesList(@Query() queryDto: SearchTicketCategoryDto) { // return this.ticketsService.getCategoriesList(queryDto); // } // @ApiOperation({ summary: "toggle status of categories => admin route" }) // @AdminRoute() // @HttpCode(HttpStatus.OK) // @PermissionsDec(PermissionEnum.TICKETS) // @Post("category/toggle-status/:id") // toggleCategoryStatus(@Param() paramDto: ParamDto, @UserIpAndHeaders() userIpAndHeaders: IUserIpAndHeaders) { // return this.ticketsService.toggleCategoryStatus(paramDto, userIpAndHeaders); // } //----------------- ticket and ticket messages ------------------- // @ApiOperation({ summary: "create ticket ==> user route" }) // @Post() // createTicket(@Body() createDto: CreateTicketDto, @UserDec("id") userId: string) { // return this.ticketsService.createTicket(createDto, userId); // } // @ApiOperation({ summary: "create ticket by admin" }) // @AdminRoute() // @PermissionsDec(PermissionEnum.TICKETS) // @Post("admin") // createTicketByAdmin(@Body() createDto: CreateTicketByAdminDto, @UserIpAndHeaders() userIpAndHeaders: IUserIpAndHeaders) { // return this.ticketsService.createTicketByAdmin(createDto, userIpAndHeaders); // } // @ApiOperation({ summary: "Get all tickets of user ==> user route" }) // @Get() // getTickets(@Query() queryDto: SearchTicketQueryDto, @UserDec("id") userId: string) { // return this.ticketsService.getTickets(queryDto, userId); // } // @ApiOperation({ summary: "Get all tickets ==> admin route" }) // @AdminRoute() // @PermissionsDec(PermissionEnum.TICKETS) // @Get("admin") // getAllTickets(@Query() queryDto: SearchTicketQueryDto, @UserDec("id") adminId: string) { // return this.ticketsService.getTicketForAdmin(queryDto, adminId); // } // @ApiOperation({ summary: "create ticket messages" }) // @Post(":id/messages") // createTicketMessage( // @Param() paramDto: ParamDto, // @Body() createDto: CreateTicketMessageDto, // @UserDec("id") userId: string, // @UserDec("isAdmin") isAdmin: boolean, // ) { // return this.ticketsService.createTicketMessage(paramDto.id, createDto, userId, isAdmin); // } // @ApiOperation({ summary: "Get all ticket messages of user" }) // @Get(":id/messages") // getTicketMessages(@Param() paramDto: ParamDto, @UserDec("id") userId: string, @UserDec("isAdmin") isAdmin: boolean) { // return this.ticketsService.getTicketMessages(paramDto.id, userId, isAdmin); // } // @ApiOperation({ summary: "close ticket by user or admin" }) // @HttpCode(HttpStatus.OK) // @Post(":id/close") // closedTicketByUser( // @Param() paramDto: ParamDto, // @UserDec("isAdmin") isAdmin: boolean, // @UserIpAndHeaders() userIpAndHeaders: IUserIpAndHeaders, // ) { // return this.ticketsService.closeTicketByUser(paramDto.id, isAdmin, userIpAndHeaders); // } // @ApiOperation({ summary: "open ticket by admin" }) // @AdminRoute() // @PermissionsDec(PermissionEnum.TICKETS) // @Post(":id/open") // openTicketByAdmin(@Param() paramDto: ParamDto, @UserIpAndHeaders() userIpAndHeaders: IUserIpAndHeaders) { // return this.ticketsService.openTicketByAdmin(paramDto.id, userIpAndHeaders); // } // @ApiOperation({ summary: "referer ticket ==> admin route" }) // @AdminRoute() // @PermissionsDec(PermissionEnum.TICKETS) // @Post(":id/refer") // referTicket(@Param() paramDto: ParamDto, @Body() referDto: ReferTicketDto, @UserIpAndHeaders() userIpAndHeaders: IUserIpAndHeaders) { // return this.ticketsService.referTicket(paramDto.id, referDto, userIpAndHeaders); // } }