fix: bug in the ticket message creation from user side

This commit is contained in:
mahyargdz
2025-03-03 14:40:03 +03:30
parent ab72fedfb8
commit 1b722d0e79
@@ -56,7 +56,9 @@ export class TicketsService {
.loadRelationCountAndMap("category.usersCount", "group.users"); .loadRelationCountAndMap("category.usersCount", "group.users");
if (queryDto.isActive !== undefined) { if (queryDto.isActive !== undefined) {
queryBuilder.andWhere("category.isActive = :isActive", { isActive: queryDto.isActive === 1 }); queryBuilder.andWhere("category.isActive = :isActive", {
isActive: queryDto.isActive === 1,
});
} }
if (queryDto.q) { if (queryDto.q) {
@@ -73,7 +75,10 @@ export class TicketsService {
const existCategory = await this.ticketsCategoryRepository.findCategoryByTitle(createDto.title); const existCategory = await this.ticketsCategoryRepository.findCategoryByTitle(createDto.title);
if (existCategory) throw new BadRequestException(TicketMessageEnum.CATEGORY_EXIST); if (existCategory) throw new BadRequestException(TicketMessageEnum.CATEGORY_EXIST);
const ticketCategory = this.ticketsCategoryRepository.create({ ...createDto, group: userGroup }); const ticketCategory = this.ticketsCategoryRepository.create({
...createDto,
group: userGroup,
});
await this.ticketsCategoryRepository.save(ticketCategory); await this.ticketsCategoryRepository.save(ticketCategory);
return { return {
@@ -88,10 +93,16 @@ export class TicketsService {
if (updateCategoryDto.title) { if (updateCategoryDto.title) {
const { title } = updateCategoryDto; const { title } = updateCategoryDto;
const existCategory = await this.ticketsCategoryRepository.findOneBy({ title, id: Not(paramDto.id) }); const existCategory = await this.ticketsCategoryRepository.findOneBy({
title,
id: Not(paramDto.id),
});
if (existCategory) throw new BadRequestException(TicketMessageEnum.CATEGORY_EXIST); if (existCategory) throw new BadRequestException(TicketMessageEnum.CATEGORY_EXIST);
} }
await this.ticketsCategoryRepository.save({ ...category, ...updateCategoryDto }); await this.ticketsCategoryRepository.save({
...category,
...updateCategoryDto,
});
return { return {
message: CommonMessage.UPDATE_SUCCESS, message: CommonMessage.UPDATE_SUCCESS,
@@ -121,14 +132,19 @@ export class TicketsService {
try { try {
const [user, ticketCategory] = await Promise.all([ const [user, ticketCategory] = await Promise.all([
this.usersService.findOneByIdWithQueryRunner(userId, queryRunner), this.usersService.findOneByIdWithQueryRunner(userId, queryRunner),
queryRunner.manager.findOne(TicketCategory, { where: { id: createDto.categoryId }, relations: { group: { users: true } } }), queryRunner.manager.findOne(TicketCategory, {
where: { id: createDto.categoryId },
relations: { group: { users: true } },
}),
]); ]);
if (!ticketCategory) throw new BadRequestException(TicketMessageEnum.CATEGORY_NOT_FOUND); if (!ticketCategory) throw new BadRequestException(TicketMessageEnum.CATEGORY_NOT_FOUND);
let service = null; let service = null;
if (createDto.danakServiceId) { if (createDto.danakServiceId) {
service = await queryRunner.manager.findOneBy(DanakService, { id: createDto.danakServiceId }); service = await queryRunner.manager.findOneBy(DanakService, {
id: createDto.danakServiceId,
});
if (!service) throw new BadRequestException(TicketMessageEnum.SERVICE_NOT_FOUND); if (!service) throw new BadRequestException(TicketMessageEnum.SERVICE_NOT_FOUND);
} }
@@ -200,9 +216,13 @@ export class TicketsService {
.take(limit); .take(limit);
if (queryDto.status) { if (queryDto.status) {
queryBuilder.andWhere("ticket.status = :status", { status: queryDto.status }); queryBuilder.andWhere("ticket.status = :status", {
status: queryDto.status,
});
} else { } else {
queryBuilder.andWhere("ticket.status != :closedStatus", { closedStatus: TicketStatus.CLOSED }); queryBuilder.andWhere("ticket.status != :closedStatus", {
closedStatus: TicketStatus.CLOSED,
});
} }
const [tickets, count] = await queryBuilder.getManyAndCount(); const [tickets, count] = await queryBuilder.getManyAndCount();
@@ -228,7 +248,9 @@ export class TicketsService {
} }
if (queryDto.status) { if (queryDto.status) {
queryBuilder.andWhere("ticket.status = :status", { status: queryDto.status }); queryBuilder.andWhere("ticket.status = :status", {
status: queryDto.status,
});
} }
if (queryDto.userId) { if (queryDto.userId) {
@@ -254,7 +276,8 @@ export class TicketsService {
const isSuperAdmin = await this.usersService.isSuperAdmin(userId); const isSuperAdmin = await this.usersService.isSuperAdmin(userId);
console.log(isSuperAdmin); console.log(isSuperAdmin);
console.log(ticket.assignedTo); console.log(ticket.assignedTo);
if (!isSuperAdmin && ticket.assignedTo?.id !== userId) throw new BadRequestException(TicketMessageEnum.TICKET_NOT_ASSIGNED_TO_USER); if (isAdmin && !isSuperAdmin && ticket.assignedTo?.id !== userId)
throw new BadRequestException(TicketMessageEnum.TICKET_NOT_ASSIGNED_TO_USER);
const user = await queryRunner.manager.findOneBy(User, { id: userId }); const user = await queryRunner.manager.findOneBy(User, { id: userId });
if (!user) throw new BadRequestException(UserMessage.USER_NOT_FOUND); if (!user) throw new BadRequestException(UserMessage.USER_NOT_FOUND);
@@ -334,13 +357,17 @@ export class TicketsService {
//******************************** */ //******************************** */
async getUnreadTickets() { async getUnreadTickets() {
const unreadTickets = await this.ticketsRepository.count({ where: { status: TicketStatus.PENDING } }); const unreadTickets = await this.ticketsRepository.count({
where: { status: TicketStatus.PENDING },
});
return unreadTickets; return unreadTickets;
} }
//******************************** */ //******************************** */
async countUserTickets(userId: string) { async countUserTickets(userId: string) {
const ticketCount = await this.ticketsRepository.count({ where: { user: { id: userId }, status: Not(TicketStatus.CLOSED) } }); const ticketCount = await this.ticketsRepository.count({
where: { user: { id: userId }, status: Not(TicketStatus.CLOSED) },
});
return ticketCount; return ticketCount;
} }
@@ -396,7 +423,10 @@ export class TicketsService {
private async findTicket(queryRunner: QueryRunner, ticketId: string, userId: string, isAdmin: boolean): Promise<Ticket> { private async findTicket(queryRunner: QueryRunner, ticketId: string, userId: string, isAdmin: boolean): Promise<Ticket> {
const ticket = isAdmin const ticket = isAdmin
? await queryRunner.manager.findOne(Ticket, { where: { id: ticketId }, relations: { user: true, assignedTo: true } }) ? await queryRunner.manager.findOne(Ticket, {
where: { id: ticketId },
relations: { user: true, assignedTo: true },
})
: await queryRunner.manager.findOne(Ticket, { : await queryRunner.manager.findOne(Ticket, {
where: { id: ticketId, user: { id: userId } }, where: { id: ticketId, user: { id: userId } },
relations: { user: true, assignedTo: true }, relations: { user: true, assignedTo: true },