import { Body, Controller, Delete, Get, Param, Patch, Post, Query } from "@nestjs/common"; import { ApiOperation, ApiTags } from "@nestjs/swagger"; import { CreateTicketDto } from "../DTO/create-ticket.dto"; import { FindTicketQueryDto } from "../DTO/search-ticket-query.dto"; import { TicketService } from "../providers/tickets.service"; import { UserId } from "src/common/decorators"; import { AdminId } from "src/common/decorators/admin-id.decorator"; import { UpdateTicketDto } from "../DTO/update-ticket.dto"; @Controller() @ApiTags("Tickets") export class TicketController { constructor(private readonly ticketsService: TicketService) { } @Post('public/ticket/order/:orderId') @ApiOperation({ summary: "create ticket ==> user route" }) createTicket(@Param('orderId') orderId: string, @Body() createDto: CreateTicketDto, @UserId() userId: string) { return this.ticketsService.createTicket(orderId, createDto, userId); } @ApiOperation({ summary: "Get all order tickets ==> user route" }) @Get('public/ticket/order/:orderId') getTickets(@Query() queryDto: FindTicketQueryDto, @Param('orderId') orderId: string, @UserId() userId: string) { return this.ticketsService.getTickets(orderId, queryDto, userId); } @ApiOperation({ summary: "Delete Ticket ==> admin route" }) @Delete('public/ticket/:ticketId') deleteTicket(@Param('ticketId') ticketId: string, @UserId() userId: string) { return this.ticketsService.deleteTicket(ticketId, userId); } @ApiOperation({ summary: "Delete Ticket ==> admin route" }) @Patch('public/ticket/:ticketId') updateTicket(@Param('ticketId') ticketId: string, @UserId() userId: string, @Body() body: UpdateTicketDto) { return this.ticketsService.updateTicket(ticketId, body, userId,); } /*=========================== Admin ============================== */ @ApiOperation({ summary: "Delete Ticket ==> admin route" }) @Delete('admin/ticket/:ticketId') deleteTicketAsAdmin(@Param('ticketId') ticketId: string) { return this.ticketsService.deleteTicket(ticketId); } @Post('admin/ticket/order/:orderId') @ApiOperation({ summary: "create ticket ==> admin route" }) createTicketAsAdmin(@Param('orderId') orderId: string, @Body() createDto: CreateTicketDto, @AdminId() adminId: string) { return this.ticketsService.createTicket(orderId, createDto, undefined, adminId); } @ApiOperation({ summary: "Get all order tickets ==> admin route" }) @Get('admin/ticket/order/:orderId') getTicketsAsAdmin(@Query() queryDto: FindTicketQueryDto, @Param('orderId') orderId: string) { return this.ticketsService.getTickets(orderId, queryDto); } @ApiOperation({ summary: "Delete Ticket ==> admin route" }) @Patch('admin/ticket/:ticketId') updateTicketAsAdmin(@Param('ticketId') ticketId: string, @Body() body: UpdateTicketDto) { return this.ticketsService.updateTicket(ticketId, body); } }