chore: create ticket with select service
This commit is contained in:
@@ -220,6 +220,7 @@ export const enum TicketMessageEnum {
|
|||||||
CLOSED = "تیکت با موفقیت بسته شد",
|
CLOSED = "تیکت با موفقیت بسته شد",
|
||||||
TICKET_CLOSED = "تیکت قبلا بسته شده است",
|
TICKET_CLOSED = "تیکت قبلا بسته شده است",
|
||||||
ERROR_IN_TICKET_MSG_CREATION = "خطا در ایجاد پیام تیکت",
|
ERROR_IN_TICKET_MSG_CREATION = "خطا در ایجاد پیام تیکت",
|
||||||
|
SERVICE_NOT_FOUND = "سرویس مورد نظر یافت نشد",
|
||||||
}
|
}
|
||||||
|
|
||||||
export const enum WalletMessage {
|
export const enum WalletMessage {
|
||||||
|
|||||||
@@ -22,11 +22,11 @@ export class CreateTicketDto {
|
|||||||
@ApiProperty({ enum: TicketPriority, example: TicketPriority.LOW, description: "LOW, MEDIUM, HIGH" })
|
@ApiProperty({ enum: TicketPriority, example: TicketPriority.LOW, description: "LOW, MEDIUM, HIGH" })
|
||||||
priority: TicketPriority;
|
priority: TicketPriority;
|
||||||
|
|
||||||
// @IsOptional()
|
@IsOptional()
|
||||||
// @IsNotEmpty({ message: TicketMessageEnum.DANAK_SERVICE_ID_REQUIRED })
|
@IsNotEmpty({ message: TicketMessageEnum.DANAK_SERVICE_ID_REQUIRED })
|
||||||
// @IsUUID("4", { message: TicketMessageEnum.DANAK_SERVICE_ID_SHOULD_BE_UUID })
|
@IsUUID("4", { message: TicketMessageEnum.DANAK_SERVICE_ID_SHOULD_BE_UUID })
|
||||||
// @ApiProperty({ description: "Service ID related to the ticket", example: "550e8400-e29b-41d4-a716-446655440000" })
|
@ApiProperty({ description: "Service ID related to the ticket", example: "550e8400-e29b-41d4-a716-446655440000" })
|
||||||
// danakServiceId?: string;
|
danakServiceId?: string;
|
||||||
|
|
||||||
@IsNotEmpty({ message: TicketMessageEnum.CATEGORY_ID_REQUIRED })
|
@IsNotEmpty({ message: TicketMessageEnum.CATEGORY_ID_REQUIRED })
|
||||||
@IsUUID("4", { message: TicketMessageEnum.CATEGORY_ID_SHOULD_BE_UUID })
|
@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 { ParamDto } from "../../../common/DTO/param.dto";
|
||||||
import { CommonMessage, TicketMessageEnum, UserMessage } from "../../../common/enums/message.enum";
|
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 { User } from "../../users/entities/user.entity";
|
||||||
import { UsersService } from "../../users/providers/users.service";
|
import { UsersService } from "../../users/providers/users.service";
|
||||||
import { PaginationUtils } from "../../utils/providers/pagination.utils";
|
import { PaginationUtils } from "../../utils/providers/pagination.utils";
|
||||||
@@ -27,6 +28,7 @@ export class TicketsService {
|
|||||||
private readonly ticketsRepository: TicketsRepository,
|
private readonly ticketsRepository: TicketsRepository,
|
||||||
private readonly ticketMessagesRepository: TicketMessagesRepository,
|
private readonly ticketMessagesRepository: TicketMessagesRepository,
|
||||||
private readonly usersService: UsersService,
|
private readonly usersService: UsersService,
|
||||||
|
private readonly danakServicesService: DanakServicesService,
|
||||||
private dataSource: DataSource,
|
private dataSource: DataSource,
|
||||||
) {}
|
) {}
|
||||||
//******************************** */
|
//******************************** */
|
||||||
@@ -107,12 +109,17 @@ export class TicketsService {
|
|||||||
//******************************** */
|
//******************************** */
|
||||||
|
|
||||||
async createTicket(createDto: CreateTicketDto, userId: string) {
|
async createTicket(createDto: CreateTicketDto, userId: string) {
|
||||||
|
let service;
|
||||||
const { user } = await this.usersService.findOneById(userId);
|
const { user } = await this.usersService.findOneById(userId);
|
||||||
const ticketCategory = await this.ticketsCategoryRepository.findCategoryById(createDto.categoryId);
|
const ticketCategory = await this.ticketsCategoryRepository.findCategoryById(createDto.categoryId);
|
||||||
if (!ticketCategory) throw new BadRequestException(TicketMessageEnum.CATEGORY_NOT_FOUND);
|
if (!ticketCategory) throw new BadRequestException(TicketMessageEnum.CATEGORY_NOT_FOUND);
|
||||||
const { attachmentUrls } = createDto;
|
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 };
|
const ticketMessage: Partial<TicketMessage> = { content: createDto.message, author: user };
|
||||||
|
|
||||||
@@ -123,7 +130,13 @@ export class TicketsService {
|
|||||||
return attachment;
|
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);
|
await this.ticketsRepository.save(ticket);
|
||||||
|
|
||||||
@@ -145,7 +158,24 @@ export class TicketsService {
|
|||||||
},
|
},
|
||||||
relations: {
|
relations: {
|
||||||
category: true,
|
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: {
|
order: {
|
||||||
createdAt: "DESC" as const,
|
createdAt: "DESC" as const,
|
||||||
|
|||||||
@@ -12,9 +12,10 @@ import { TicketsController } from "./tickets.controller";
|
|||||||
import { UsersModule } from "../users/users.module";
|
import { UsersModule } from "../users/users.module";
|
||||||
import { TicketMessageAttachment } from "./entities/ticket-message-attachment";
|
import { TicketMessageAttachment } from "./entities/ticket-message-attachment";
|
||||||
import { TicketMessageAttachmentsRepository } from "./repositories/ticket-message-attachment.repository";
|
import { TicketMessageAttachmentsRepository } from "./repositories/ticket-message-attachment.repository";
|
||||||
|
import { DanakServicesModule } from "../danak-services/danak-services.module";
|
||||||
|
|
||||||
@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],
|
providers: [TicketsService, TicketsRepository, TicketCategoryRepository, TicketMessagesRepository, TicketMessageAttachmentsRepository],
|
||||||
controllers: [TicketsController],
|
controllers: [TicketsController],
|
||||||
exports: [TicketsService],
|
exports: [TicketsService],
|
||||||
|
|||||||
Reference in New Issue
Block a user