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') @Post('admin/orders/:orderId/item/:itemId/designer')
@UseGuards(AdminAuthGuard) @UseGuards(AdminAuthGuard)
@ApiOperation({ summary: 'Assign Order Designer ' }) @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); return this.orderService.assignDesigner(orderId, +itemId, body.designerId);
} }
@@ -173,11 +174,4 @@ export class OrderController {
return this.orderService.updateOrderItemAsAdmin(orderId, +itemId, body); 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') @Post('public/ticket/order/item/:id')
@UseGuards(AuthGuard) @UseGuards(AuthGuard)
@ApiOperation({ summary: "create ticket ==> user route" }) @ApiOperation({ summary: "create ticket ==> user route" })
createTicket(@Param('id') itemId: string, @Body() createDto: CreateTicketDto, @UserId() userId: string) { createTicket(@Param('id') id: string, @Body() createDto: CreateTicketDto, @UserId() userId: string) {
return this.ticketsService.createTicketAsUser(itemId, createDto, userId); return this.ticketsService.createTicketAsUser(+id, createDto, userId);
} }
@Get('public/ticket/order/:orderId') @Get('public/ticket/order/item/:id')
@UseGuards(AuthGuard) @UseGuards(AuthGuard)
@ApiOperation({ summary: "Get all order tickets ==> user route" }) @ApiOperation({ summary: "Get all order item tickets ==> user route" })
getTickets(@Query() queryDto: FindTicketQueryDto, @Param('orderId') orderId: string, @UserId() userId: string) { getTickets(@Query() queryDto: FindTicketQueryDto, @Param('id') id: string, @UserId() userId: string) {
return this.ticketsService.getTickets(orderId, queryDto, userId); 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) @UseGuards(AuthGuard)
@ApiOperation({ summary: "Delete Ticket ==> admin route" }) @ApiOperation({ summary: "Delete Ticket ==> admin route" })
updateTicket(@Param('ticketId') ticketId: string, @UserId() userId: string, @Body() body: UpdateTicketDto) { updateTicket(@Param('id') id: string, @UserId() userId: string, @Body() body: UpdateTicketDto) {
return this.ticketsService.updateTicketAsUser(+ticketId, userId, body); 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 ============================== */ /*=========================== 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') @Post('admin/ticket/order/item/:id')
@UseGuards(AdminAuthGuard) @UseGuards(AdminAuthGuard)
@ApiOperation({ summary: "create ticket ==> admin route" }) @ApiOperation({ summary: "create ticket ==> admin route" })
createTicketAsAdmin(@Param('id') orderItemId: string, @Body() createDto: CreateTicketDto, @AdminId() adminId: string) { createTicketAsAdmin(@Param('id') itemId: string, @Body() createDto: CreateTicketDto, @AdminId() adminId: string) {
return this.ticketsService.createTicketAsAdmin(orderItemId, createDto, adminId); return this.ticketsService.createTicketAsAdmin(+itemId, createDto, adminId);
} }
@Get('admin/ticket/order/:orderId') @Get('admin/ticket/order/item/:id')
@UseGuards(AdminAuthGuard) @UseGuards(AdminAuthGuard)
@ApiOperation({ summary: "Get all order tickets ==> admin route" }) @ApiOperation({ summary: "Get all order item tickets ==> admin route" })
getTicketsAsAdmin(@Query() queryDto: FindTicketQueryDto, @Param('orderId') orderId: string) { getTicketsAsAdmin(@Query() queryDto: FindTicketQueryDto, @Param('id') itemId: string) {
return this.ticketsService.getTickets(orderId, queryDto); 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) @UseGuards(AdminAuthGuard)
@ApiOperation({ summary: "Delete Ticket ==> admin route" }) @ApiOperation({ summary: "Delete Ticket ==> admin route" })
updateTicketAsAdmin(@Param('ticketId') ticketId: string, @AdminId() adminId: string, @Body() body: UpdateTicketDto) { deleteTicketAsAdmin(@Param('id') id: string, @AdminId() adminId: string) {
return this.ticketsService.updateTicketAsAdmin(+ticketId, adminId, body); 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 { AdminService } from "src/modules/admin/providers/admin.service";
import { UserService } from "src/modules/user/providers/user.service"; import { UserService } from "src/modules/user/providers/user.service";
@Injectable() @Injectable()
export class TicketService { export class TicketService {
constructor( constructor(
private readonly ticketsRepository: TicketRepository, private readonly ticketsRepository: TicketRepository,
private readonly orderItemRepository: OrderItemRepository, private readonly orderItemRepository: OrderItemRepository,
private readonly userRepository: UserRepository,
private readonly adminRepository: AdminRepository,
private readonly adminService: AdminService, private readonly adminService: AdminService,
private readonly userService: UserService, private readonly userService: UserService,
private readonly em: EntityManager, 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 }) const orderItem = await this.findOrderItemOrFail(orderItemId)
if (!orderItem) {
throw new BadRequestException("orderItem not found")
}
let admin: null | Admin = null 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 }) const orderItem = await this.findOrderItemOrFail(orderItemId)
if (!orderItem) {
throw new BadRequestException("orderItem not found")
}
const user = await this.userService.findOrFail(userId) const user = await this.userService.findOrFail(userId)
@@ -104,11 +94,6 @@ export class TicketService {
return { message: 'success' } return { message: 'success' }
} }
// //******************************** */
//******************************** */
async deleteTicketAsUSer(ticketId: number, userId: string) { async deleteTicketAsUSer(ticketId: number, userId: string) {
const ticket = await this.findOneOrFail(ticketId) const ticket = await this.findOneOrFail(ticketId)
@@ -122,18 +107,16 @@ export class TicketService {
} }
// ================ Core Logic ============ // ================ Core Logic ============
async getTickets(orderItemId: string, queryDto: FindTicketQueryDto, userId?: string) {
const orderItem = await this.orderItemRepository.findOne({ id: orderItemId })
if (!orderItem) { async getTickets(orderItemId: number, queryDto: FindTicketQueryDto, userId?: string) {
throw new BadRequestException("orderItem not found!") const orderItem = await this.findOrderItemOrFail(orderItemId)
}
if (userId) { if (userId) {
if (orderItem.order.user.id !== userId) { if (orderItem.order.user.id !== userId) {
throw new BadRequestException("This ticket doenst belongs to You !") throw new BadRequestException("This ticket doenst belongs to You !")
} }
} }
const data = await this.ticketsRepository.findAllPaginated({ ...queryDto, orderItemId }); const data = await this.ticketsRepository.findAllPaginated({ ...queryDto, orderItemId });
return data 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'; import { PaginatedResult } from 'src/common/interfaces/pagination.interface';
class FindOrdersOpts extends FindTicketQueryDto { class FindOrdersOpts extends FindTicketQueryDto {
orderItemId: string; orderItemId: number;
}; };
@Injectable() @Injectable()