chore: create ticket with select service

This commit is contained in:
Matin
2025-02-20 12:35:37 +03:30
parent e0a267bf2b
commit 5ff6b396cb
4 changed files with 40 additions and 8 deletions
+1
View File
@@ -220,6 +220,7 @@ export const enum TicketMessageEnum {
CLOSED = "تیکت با موفقیت بسته شد",
TICKET_CLOSED = "تیکت قبلا بسته شده است",
ERROR_IN_TICKET_MSG_CREATION = "خطا در ایجاد پیام تیکت",
SERVICE_NOT_FOUND = "سرویس مورد نظر یافت نشد",
}
export const enum WalletMessage {
+5 -5
View File
@@ -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 })
@@ -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<TicketMessage> = { 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,
+2 -1
View File
@@ -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],