diff --git a/src/common/enums/message.enum.ts b/src/common/enums/message.enum.ts index 48c3331..a73edf8 100644 --- a/src/common/enums/message.enum.ts +++ b/src/common/enums/message.enum.ts @@ -220,6 +220,7 @@ export const enum TicketMessageEnum { CLOSED = "تیکت با موفقیت بسته شد", TICKET_CLOSED = "تیکت قبلا بسته شده است", ERROR_IN_TICKET_MSG_CREATION = "خطا در ایجاد پیام تیکت", + SERVICE_NOT_FOUND = "سرویس مورد نظر یافت نشد", } export const enum WalletMessage { diff --git a/src/modules/tickets/DTO/create-ticket.dto.ts b/src/modules/tickets/DTO/create-ticket.dto.ts index 4f60fc2..a80d454 100644 --- a/src/modules/tickets/DTO/create-ticket.dto.ts +++ b/src/modules/tickets/DTO/create-ticket.dto.ts @@ -22,11 +22,11 @@ export class CreateTicketDto { @ApiProperty({ enum: TicketPriority, example: TicketPriority.LOW, description: "LOW, MEDIUM, HIGH" }) priority: TicketPriority; - // @IsOptional() - // @IsNotEmpty({ message: TicketMessageEnum.DANAK_SERVICE_ID_REQUIRED }) - // @IsUUID("4", { message: TicketMessageEnum.DANAK_SERVICE_ID_SHOULD_BE_UUID }) - // @ApiProperty({ description: "Service ID related to the ticket", example: "550e8400-e29b-41d4-a716-446655440000" }) - // danakServiceId?: string; + @IsOptional() + @IsNotEmpty({ message: TicketMessageEnum.DANAK_SERVICE_ID_REQUIRED }) + @IsUUID("4", { message: TicketMessageEnum.DANAK_SERVICE_ID_SHOULD_BE_UUID }) + @ApiProperty({ description: "Service ID related to the ticket", example: "550e8400-e29b-41d4-a716-446655440000" }) + danakServiceId?: string; @IsNotEmpty({ message: TicketMessageEnum.CATEGORY_ID_REQUIRED }) @IsUUID("4", { message: TicketMessageEnum.CATEGORY_ID_SHOULD_BE_UUID }) diff --git a/src/modules/tickets/providers/tickets.service.ts b/src/modules/tickets/providers/tickets.service.ts index ec3a35b..58e928c 100644 --- a/src/modules/tickets/providers/tickets.service.ts +++ b/src/modules/tickets/providers/tickets.service.ts @@ -3,6 +3,7 @@ import { DataSource, Not } from "typeorm"; import { ParamDto } from "../../../common/DTO/param.dto"; import { CommonMessage, TicketMessageEnum, UserMessage } from "../../../common/enums/message.enum"; +import { DanakServicesService } from "../../danak-services/providers/danak-services.service"; import { User } from "../../users/entities/user.entity"; import { UsersService } from "../../users/providers/users.service"; import { PaginationUtils } from "../../utils/providers/pagination.utils"; @@ -27,6 +28,7 @@ export class TicketsService { private readonly ticketsRepository: TicketsRepository, private readonly ticketMessagesRepository: TicketMessagesRepository, private readonly usersService: UsersService, + private readonly danakServicesService: DanakServicesService, private dataSource: DataSource, ) {} //******************************** */ @@ -107,12 +109,17 @@ export class TicketsService { //******************************** */ async createTicket(createDto: CreateTicketDto, userId: string) { + let service; const { user } = await this.usersService.findOneById(userId); const ticketCategory = await this.ticketsCategoryRepository.findCategoryById(createDto.categoryId); if (!ticketCategory) throw new BadRequestException(TicketMessageEnum.CATEGORY_NOT_FOUND); const { attachmentUrls } = createDto; // + if (createDto.danakServiceId) { + service = await this.danakServicesService.findServiceById(createDto.danakServiceId); + if (!service) throw new BadRequestException(TicketMessageEnum.SERVICE_NOT_FOUND); + } const ticketMessage: Partial = { content: createDto.message, author: user }; @@ -123,7 +130,13 @@ export class TicketsService { return attachment; }); } - const ticket = this.ticketsRepository.create({ ...createDto, user, category: ticketCategory, messages: [ticketMessage] }); + const ticket = this.ticketsRepository.create({ + ...createDto, + user, + category: ticketCategory, + messages: [ticketMessage], + danakService: service, + }); await this.ticketsRepository.save(ticket); @@ -145,7 +158,24 @@ export class TicketsService { }, relations: { category: true, - // user: true, + danakService: true, + }, + select: { + id: true, + subject: true, + status: true, + priority: true, + numericId: true, + createdAt: true, + updatedAt: true, + category: { + id: true, + title: true, + }, + danakService: { + id: true, + name: true, + }, }, order: { createdAt: "DESC" as const, diff --git a/src/modules/tickets/tickets.module.ts b/src/modules/tickets/tickets.module.ts index 8862d5e..8f4f8c8 100644 --- a/src/modules/tickets/tickets.module.ts +++ b/src/modules/tickets/tickets.module.ts @@ -12,9 +12,10 @@ import { TicketsController } from "./tickets.controller"; import { UsersModule } from "../users/users.module"; import { TicketMessageAttachment } from "./entities/ticket-message-attachment"; import { TicketMessageAttachmentsRepository } from "./repositories/ticket-message-attachment.repository"; +import { DanakServicesModule } from "../danak-services/danak-services.module"; @Module({ - imports: [TypeOrmModule.forFeature([Ticket, TicketCategory, TicketMessageAttachment, TicketMessage]), UsersModule], + imports: [TypeOrmModule.forFeature([Ticket, TicketCategory, TicketMessageAttachment, TicketMessage]), UsersModule, DanakServicesModule], providers: [TicketsService, TicketsRepository, TicketCategoryRepository, TicketMessagesRepository, TicketMessageAttachmentsRepository], controllers: [TicketsController], exports: [TicketsService],