From c302ab1c77edc8596c43f3a01aa5dbde3f77a476 Mon Sep 17 00:00:00 2001 From: mahyargdz Date: Mon, 3 Mar 2025 11:39:59 +0330 Subject: [PATCH] fix: add notiftype --- src/common/enums/message.enum.ts | 2 + src/configs/sms.config.ts | 2 + .../interfaces/ISendNotificationData.ts | 1 + .../providers/notifications.service.ts | 19 +++++++++ .../settings/enums/notif-settings.enum.ts | 4 ++ .../tickets/providers/tickets.service.ts | 39 ++++++++++++++++++- src/modules/users/providers/users.service.ts | 18 ++++----- src/modules/utils/interfaces/ISms.ts | 1 + src/modules/utils/providers/sms.service.ts | 31 +++++++++++++++ 9 files changed, 106 insertions(+), 11 deletions(-) diff --git a/src/common/enums/message.enum.ts b/src/common/enums/message.enum.ts index c5a3e0c..c8e6c63 100755 --- a/src/common/enums/message.enum.ts +++ b/src/common/enums/message.enum.ts @@ -357,6 +357,8 @@ export const enum NotificationMessage { ANSWER_TICKET_MESSAGE = "پاسخ جدیدی برای تیکت [ticketId] دریافت کردید", CREATE_TICKET = "ایجاد تیکت", CREATE_TICKET_MESSAGE = "تیکت شما با شماره [ticketId] ثبت شد", + ASSIGN_TICKET_MESSAGE = "یک تیکت به شماره [ticketId] به شما اختصاص یافت", + ASSIGN_TICKET = "اختصاص تیکت", } export const enum SubscriptionMessage { diff --git a/src/configs/sms.config.ts b/src/configs/sms.config.ts index c3f0b38..640111a 100755 --- a/src/configs/sms.config.ts +++ b/src/configs/sms.config.ts @@ -16,6 +16,7 @@ export function smsConfigs() { SMS_PATTERN_WALLET_DEDUCTION: configService.getOrThrow("SMS_PATTERN_WALLET_DEDUCTION"), SMS_PATTERN_TICKET_CREATED: configService.getOrThrow("SMS_PATTERN_TICKET_CREATED"), SMS_PATTERN_TICKET_ANSWERED: configService.getOrThrow("SMS_PATTERN_WALLET_DEDUCTION"), + SMS_PATTERN_TICKET_ASSIGNED_ADMIN: configService.getOrThrow("SMS_PATTERN_TICKET_ASSIGNED_ADMIN"), }; }, }; @@ -33,4 +34,5 @@ export interface ISmsConfigs { SMS_PATTERN_WALLET_DEDUCTION: string; SMS_PATTERN_TICKET_CREATED: string; SMS_PATTERN_TICKET_ANSWERED: string; + SMS_PATTERN_TICKET_ASSIGNED_ADMIN: string; } diff --git a/src/modules/notifications/interfaces/ISendNotificationData.ts b/src/modules/notifications/interfaces/ISendNotificationData.ts index 9b51d32..832c7c2 100644 --- a/src/modules/notifications/interfaces/ISendNotificationData.ts +++ b/src/modules/notifications/interfaces/ISendNotificationData.ts @@ -19,6 +19,7 @@ export interface ITicketNotificationData extends IBaseNotificationData { ticketId: string; subject: string; date: Date; + user?: string; } export interface IWalletNotificationData extends IBaseNotificationData { diff --git a/src/modules/notifications/providers/notifications.service.ts b/src/modules/notifications/providers/notifications.service.ts index 8f6826f..aff80d7 100755 --- a/src/modules/notifications/providers/notifications.service.ts +++ b/src/modules/notifications/providers/notifications.service.ts @@ -247,6 +247,25 @@ export class NotificationsService { } return this.createNotification({ title: NotificationMessage.CREATE_TICKET, type: NotifType.CREATE_TICKET, message, recipientId }); } + //************************ */ + //TODO: fix this cause this for admin + async createAssignTicketNotificationForAdmin(recipientId: string, data: ITicketNotificationData, queryRunner: QueryRunner) { + const message = NotificationMessage.ASSIGN_TICKET_MESSAGE.replace("[ticketId]", data.ticketId); + //sent notification based on the userSettings + // const { isActive } = await this.userSettingsService.getUserNotificationSettingWithType( + // NotifType.ANSWER_TICKET, + // recipientId, + // queryRunner, + // ); + // if (isActive) { + await this.smsService.sendTicketAssignedToAdminSms(data.userPhone, data.ticketId, data.subject, data.user!); + //send email too + // } + return this.createNotification( + { title: NotificationMessage.ASSIGN_TICKET, type: NotifType.ASSIGN_TICKET, message, recipientId }, + queryRunner, + ); + } //************************ */ diff --git a/src/modules/settings/enums/notif-settings.enum.ts b/src/modules/settings/enums/notif-settings.enum.ts index d1d3679..5f5757b 100755 --- a/src/modules/settings/enums/notif-settings.enum.ts +++ b/src/modules/settings/enums/notif-settings.enum.ts @@ -29,6 +29,8 @@ export enum NotifType { // Support category ANSWER_TICKET = "ANSWER_TICKET", CREATE_TICKET = "CREATE_TICKET", + // + ASSIGN_TICKET = "ASSIGN_TICKET", } export const NotifDescriptions: Record = { @@ -53,4 +55,6 @@ export const NotifDescriptions: Record { + 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)); + + return users[0]; + } } diff --git a/src/modules/users/providers/users.service.ts b/src/modules/users/providers/users.service.ts index 3751084..726079e 100755 --- a/src/modules/users/providers/users.service.ts +++ b/src/modules/users/providers/users.service.ts @@ -491,22 +491,20 @@ export class UsersService { async findOneCustomer(userId: string) { const customer = await this.userRepository.findOne({ - where: { - id: userId, - roles: { - name: RoleEnum.USER, - }, - }, - relations: { - legalUser: true, - realUser: true, - }, + where: { id: userId, roles: { name: RoleEnum.USER } }, + relations: { legalUser: true, realUser: true }, }); return { customer }; } /************************************************************ */ + async getUsersByGroup(groupId: string) { + const users = await this.userRepository.find({ where: { groups: { id: groupId } }, relations: { tickets: true } }); + return { users }; + } + /************************************************************ */ + async getAdmins(queryDto: SearchAdminQueryDto) { const { limit, skip } = PaginationUtils(queryDto); const queryBuilder = this.userRepository.createQueryBuilder("user"); diff --git a/src/modules/utils/interfaces/ISms.ts b/src/modules/utils/interfaces/ISms.ts index 89744a3..cdd3e73 100755 --- a/src/modules/utils/interfaces/ISms.ts +++ b/src/modules/utils/interfaces/ISms.ts @@ -40,5 +40,6 @@ export type TemplateParams = | "newBalance" | "reason" | "dueDate" + | "user" | "subject" | "message"; diff --git a/src/modules/utils/providers/sms.service.ts b/src/modules/utils/providers/sms.service.ts index 25bb3ca..13c4d69 100755 --- a/src/modules/utils/providers/sms.service.ts +++ b/src/modules/utils/providers/sms.service.ts @@ -303,6 +303,37 @@ export class SmsService { this.logger.error("error in sending sms", error); } } + //************************************************* */ + + async sendTicketAssignedToAdminSms(mobile: string, ticketId: string, subject: string, user: string) { + const smsData: ISmsVerifyBody = { + Parameters: [ + { name: "ticketId", value: ticketId }, + { name: "subject", value: subject }, + { name: "user", value: user }, + ], + Mobile: mobile, + TemplateId: this.smsConfigs.SMS_PATTERN_TICKET_ASSIGNED_ADMIN, + }; + + try { + const { data } = await firstValueFrom( + this.httpService + .post(`${this.smsConfigs.API_URL}/send/verify`, smsData, { + headers: { "X-API-KEY": this.smsConfigs.API_KEY }, + }) + .pipe( + catchError((err: AxiosError) => { + this.logger.error("error in sending ticket assigned sms", err); + throw new InternalServerErrorException("error in sending ticket assigned sms"); + }), + ), + ); + return data; + } catch (error) { + this.logger.error("error in sending sms", error); + } + } //************************************************* */