chore: add new structure for the ticket assinge to admins

This commit is contained in:
mahyargdz
2025-04-04 14:22:35 +03:30
parent 0b62341908
commit 0bc001c66b
10 changed files with 185 additions and 34 deletions
@@ -1,6 +1,7 @@
import { BadRequestException, HttpException, Injectable, InternalServerErrorException, Logger } from "@nestjs/common";
import { DataSource, Not, QueryRunner } from "typeorm";
import { ReferralService } from "./referral.service";
import { ParamDto } from "../../../common/DTO/param.dto";
import { CommonMessage, TicketMessageEnum, UserMessage } from "../../../common/enums/message.enum";
import { DanakService } from "../../danak-services/entities/danak-service.entity";
@@ -32,6 +33,7 @@ export class TicketsService {
private readonly ticketsRepository: TicketsRepository,
private readonly ticketMessagesRepository: TicketMessagesRepository,
private readonly usersService: UsersService,
private readonly referralService: ReferralService,
private dataSource: DataSource,
) {}
//******************************** */
@@ -371,41 +373,26 @@ export class TicketsService {
return ticketCount;
}
//******************************** */
async autoAssignUser(category: TicketCategory): Promise<User | null> {
if (!category.group) return null;
const { users } = await this.usersService.getUsersByGroup(category.group.id);
if (users.length === 0) return null;
users.sort((a, b) => (a.tickets.length || 0) - (b.tickets.length || 0));
console.log(users);
return users[0];
}
//***************************** */
private async assignTicketAndNotify(ticket: Ticket, ticketCategory: TicketCategory, user: User, queryRunner: QueryRunner) {
const assignedUser = await this.autoAssignUser(ticketCategory);
// const assignedUser = await this.autoAssignUser(ticketCategory);
const assignedUser = await this.referralService.assignAdmin(ticketCategory.group);
//
ticket.assignedTo = assignedUser;
await queryRunner.manager.save(Ticket, ticket);
if (assignedUser) {
ticket.assignedTo = assignedUser;
await queryRunner.manager.save(Ticket, ticket);
await this.notificationsService.createAssignTicketNotificationForAdmin(
assignedUser.id,
{
ticketId: ticket.numericId.toString(),
subject: ticket.subject,
date: ticket.createdAt,
userPhone: user.phone,
userEmail: user.email,
user: `${user.firstName} ${user.lastName}`,
},
queryRunner,
);
}
await this.notificationsService.createAssignTicketNotificationForAdmin(
assignedUser.id,
{
ticketId: ticket.numericId.toString(),
subject: ticket.subject,
date: ticket.createdAt,
userPhone: user.phone,
userEmail: user.email,
user: `${user.firstName} ${user.lastName}`,
},
queryRunner,
);
await this.notificationsService.createTicketNotification(
user.id,