ticket refactor

This commit is contained in:
2026-01-31 14:36:21 +03:30
parent aabe0b5fed
commit 23cc94bb23
4 changed files with 52 additions and 65 deletions
@@ -136,7 +136,8 @@ export class OrderController {
@Post('admin/orders/:orderId/item/:itemId/designer')
@UseGuards(AdminAuthGuard)
@ApiOperation({ summary: 'Assign Order Designer ' })
assignDesigner(@Param('orderId') orderId: string, @Param('itemId') itemId: string, @Body() body: AssignDesignerDto) {
assignDesigner(@Param('orderId') orderId: string, @Param('itemId') itemId: string,
@Body() body: AssignDesignerDto) {
return this.orderService.assignDesigner(orderId, +itemId, body.designerId);
}
@@ -173,11 +174,4 @@ export class OrderController {
return this.orderService.updateOrderItemAsAdmin(orderId, +itemId, body);
}
@Get('admin/prints')
@UseGuards(AdminAuthGuard)
@ApiOperation({ summary: 'Get all orders with pagination and filters' })
findAllPrints(@Query() dto: FindOrdersDto) {
return this.orderService.findOrdersAsAdmin(dto);
}
}
@@ -19,60 +19,60 @@ export class TicketController {
@Post('public/ticket/order/item/:id')
@UseGuards(AuthGuard)
@ApiOperation({ summary: "create ticket ==> user route" })
createTicket(@Param('id') itemId: string, @Body() createDto: CreateTicketDto, @UserId() userId: string) {
return this.ticketsService.createTicketAsUser(itemId, createDto, userId);
createTicket(@Param('id') id: string, @Body() createDto: CreateTicketDto, @UserId() userId: string) {
return this.ticketsService.createTicketAsUser(+id, createDto, userId);
}
@Get('public/ticket/order/:orderId')
@Get('public/ticket/order/item/:id')
@UseGuards(AuthGuard)
@ApiOperation({ summary: "Get all order tickets ==> user route" })
getTickets(@Query() queryDto: FindTicketQueryDto, @Param('orderId') orderId: string, @UserId() userId: string) {
return this.ticketsService.getTickets(orderId, queryDto, userId);
@ApiOperation({ summary: "Get all order item tickets ==> user route" })
getTickets(@Query() queryDto: FindTicketQueryDto, @Param('id') id: string, @UserId() userId: string) {
return this.ticketsService.getTickets(+id, queryDto, userId);
}
@Delete('public/ticket/:ticketId')
@ApiOperation({ summary: "Delete Ticket ==> admin route" })
@UseGuards(AuthGuard)
deleteTicket(@Param('ticketId') ticketId: string, @UserId() userId: string) {
return this.ticketsService.deleteTicketAsUSer(+ticketId, userId);
}
@Patch('public/ticket/:ticketId')
@Patch('public/ticket/:id')
@UseGuards(AuthGuard)
@ApiOperation({ summary: "Delete Ticket ==> admin route" })
updateTicket(@Param('ticketId') ticketId: string, @UserId() userId: string, @Body() body: UpdateTicketDto) {
return this.ticketsService.updateTicketAsUser(+ticketId, userId, body);
updateTicket(@Param('id') id: string, @UserId() userId: string, @Body() body: UpdateTicketDto) {
return this.ticketsService.updateTicketAsUser(+id, userId, body);
}
@Delete('public/ticket/:id')
@ApiOperation({ summary: "Delete Ticket ==> admin route" })
@UseGuards(AuthGuard)
deleteTicket(@Param('id') id: string, @UserId() userId: string) {
return this.ticketsService.deleteTicketAsUSer(+id, userId);
}
/*=========================== Admin ============================== */
@Delete('admin/ticket/:ticketId')
@UseGuards(AdminAuthGuard)
@ApiOperation({ summary: "Delete Ticket ==> admin route" })
deleteTicketAsAdmin(@Param('ticketId') ticketId: string, @AdminId() adminId: string) {
return this.ticketsService.deleteTicketAsAdmin(+ticketId, adminId);
}
@Post('admin/ticket/order/item/:id')
@UseGuards(AdminAuthGuard)
@ApiOperation({ summary: "create ticket ==> admin route" })
createTicketAsAdmin(@Param('id') orderItemId: string, @Body() createDto: CreateTicketDto, @AdminId() adminId: string) {
return this.ticketsService.createTicketAsAdmin(orderItemId, createDto, adminId);
createTicketAsAdmin(@Param('id') itemId: string, @Body() createDto: CreateTicketDto, @AdminId() adminId: string) {
return this.ticketsService.createTicketAsAdmin(+itemId, createDto, adminId);
}
@Get('admin/ticket/order/:orderId')
@Get('admin/ticket/order/item/:id')
@UseGuards(AdminAuthGuard)
@ApiOperation({ summary: "Get all order tickets ==> admin route" })
getTicketsAsAdmin(@Query() queryDto: FindTicketQueryDto, @Param('orderId') orderId: string) {
return this.ticketsService.getTickets(orderId, queryDto);
@ApiOperation({ summary: "Get all order item tickets ==> admin route" })
getTicketsAsAdmin(@Query() queryDto: FindTicketQueryDto, @Param('id') itemId: string) {
return this.ticketsService.getTickets(+itemId, queryDto);
}
@Patch('admin/ticket/:ticketId')
@Patch('admin/ticket/:id')
@UseGuards(AdminAuthGuard)
@ApiOperation({ summary: "Update Ticket ==> admin route" })
updateTicketAsAdmin(@Param('id') id: string, @AdminId() adminId: string, @Body() body: UpdateTicketDto) {
return this.ticketsService.updateTicketAsAdmin(+id, adminId, body);
}
@Delete('admin/ticket/:id')
@UseGuards(AdminAuthGuard)
@ApiOperation({ summary: "Delete Ticket ==> admin route" })
updateTicketAsAdmin(@Param('ticketId') ticketId: string, @AdminId() adminId: string, @Body() body: UpdateTicketDto) {
return this.ticketsService.updateTicketAsAdmin(+ticketId, adminId, body);
deleteTicketAsAdmin(@Param('id') id: string, @AdminId() adminId: string) {
return this.ticketsService.deleteTicketAsAdmin(+id, adminId);
}
}
+18 -25
View File
@@ -14,26 +14,20 @@ import { OrderItem } from "src/modules/order/entities/order-item.entity";
import { AdminService } from "src/modules/admin/providers/admin.service";
import { UserService } from "src/modules/user/providers/user.service";
@Injectable()
export class TicketService {
constructor(
private readonly ticketsRepository: TicketRepository,
private readonly orderItemRepository: OrderItemRepository,
private readonly userRepository: UserRepository,
private readonly adminRepository: AdminRepository,
private readonly adminService: AdminService,
private readonly userService: UserService,
private readonly em: EntityManager,
) { }
async createTicketAsAdmin(itemId: string, dto: CreateTicketDto, adminId: string) {
async createTicketAsAdmin(orderItemId: number, dto: CreateTicketDto, adminId: string) {
const orderItem = await this.orderItemRepository.findOne({ id: itemId })
if (!orderItem) {
throw new BadRequestException("orderItem not found")
}
const orderItem = await this.findOrderItemOrFail(orderItemId)
let admin: null | Admin = null
@@ -45,13 +39,9 @@ export class TicketService {
}
async createTicketAsUser(itemId: string, dto: CreateTicketDto, userId: string) {
async createTicketAsUser(orderItemId: number, dto: CreateTicketDto, userId: string) {
const orderItem = await this.orderItemRepository.findOne({ id: itemId })
if (!orderItem) {
throw new BadRequestException("orderItem not found")
}
const orderItem = await this.findOrderItemOrFail(orderItemId)
const user = await this.userService.findOrFail(userId)
@@ -104,11 +94,6 @@ export class TicketService {
return { message: 'success' }
}
// //******************************** */
//******************************** */
async deleteTicketAsUSer(ticketId: number, userId: string) {
const ticket = await this.findOneOrFail(ticketId)
@@ -122,18 +107,16 @@ export class TicketService {
}
// ================ Core Logic ============
async getTickets(orderItemId: string, queryDto: FindTicketQueryDto, userId?: string) {
const orderItem = await this.orderItemRepository.findOne({ id: orderItemId })
if (!orderItem) {
throw new BadRequestException("orderItem not found!")
}
async getTickets(orderItemId: number, queryDto: FindTicketQueryDto, userId?: string) {
const orderItem = await this.findOrderItemOrFail(orderItemId)
if (userId) {
if (orderItem.order.user.id !== userId) {
throw new BadRequestException("This ticket doenst belongs to You !")
}
}
const data = await this.ticketsRepository.findAllPaginated({ ...queryDto, orderItemId });
return data
@@ -207,4 +190,14 @@ export class TicketService {
}
}
async findOrderItemOrFail(orderItemId: number) {
const orderItem = await this.orderItemRepository.findOne({ id: orderItemId }, { populate: ['order', 'order.user'] })
if (!orderItem) {
throw new BadRequestException("orderItem not found!")
}
return orderItem
}
}
@@ -5,7 +5,7 @@ import { FindTicketQueryDto } from '../DTO/search-ticket-query.dto';
import { PaginatedResult } from 'src/common/interfaces/pagination.interface';
class FindOrdersOpts extends FindTicketQueryDto {
orderItemId: string;
orderItemId: number;
};
@Injectable()