chore: create ticket with select service
This commit is contained in:
@@ -220,6 +220,7 @@ export const enum TicketMessageEnum {
|
||||
CLOSED = "تیکت با موفقیت بسته شد",
|
||||
TICKET_CLOSED = "تیکت قبلا بسته شده است",
|
||||
ERROR_IN_TICKET_MSG_CREATION = "خطا در ایجاد پیام تیکت",
|
||||
SERVICE_NOT_FOUND = "سرویس مورد نظر یافت نشد",
|
||||
}
|
||||
|
||||
export const enum WalletMessage {
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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],
|
||||
|
||||
Reference in New Issue
Block a user