notification
This commit is contained in:
@@ -4,7 +4,7 @@ import { CommonMessage, CriticismMessage } from '../../../common/enums/message.e
|
||||
import { NotificationQueueService } from '../../notification/services/notification-queue.service';
|
||||
import { AdminRepository } from '../../admin/repositories/admin.repository';
|
||||
import { PermissionEnum } from '../../../common/enums/permission.enum';
|
||||
import { NotifEvent } from '../../notification/interfaces/notification.interface';
|
||||
import { NotifTitle } from '../../notification/interfaces/notification.interface';
|
||||
import { Notification } from '../../notification/entities/notification.entity';
|
||||
import { CreateCriticismDto } from '../DTO/create-criticism.dto';
|
||||
import { SearchCriticismQueryDto } from '../DTO/search-criticism-query.dto';
|
||||
@@ -21,7 +21,7 @@ export class CriticismsService {
|
||||
private readonly em: EntityManager,
|
||||
private readonly adminRepository: AdminRepository,
|
||||
private readonly notificationQueueService: NotificationQueueService,
|
||||
) {}
|
||||
) { }
|
||||
|
||||
async create(createDto: CreateCriticismDto, userId: string) {
|
||||
return this.em.transactional(async (em) => {
|
||||
@@ -119,7 +119,7 @@ export class CriticismsService {
|
||||
const notifications = admins.map((admin) =>
|
||||
em.create(Notification, {
|
||||
admin,
|
||||
title: NotifEvent.NEW_CRITICISM,
|
||||
title: NotifTitle.NEW_CRITICISM,
|
||||
content: body,
|
||||
}),
|
||||
);
|
||||
@@ -129,7 +129,7 @@ export class CriticismsService {
|
||||
await this.notificationQueueService.addBulkInAppNotifications(
|
||||
notifications.map((n) => ({
|
||||
recipient: { adminId: n.admin!.id },
|
||||
subject: NotifEvent.NEW_CRITICISM,
|
||||
subject: NotifTitle.NEW_CRITICISM,
|
||||
body,
|
||||
notificationId: n.id,
|
||||
})),
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { Entity, Property, ManyToOne, Enum, PrimaryKey, OptionalProps } from '@mikro-orm/core';
|
||||
import { BaseEntity } from '../../../common/entities/base.entity';
|
||||
import { User } from '../../user/entities/user.entity';
|
||||
import { NotifEvent } from '../interfaces/notification.interface';
|
||||
import { NotifTitle } from '../interfaces/notification.interface';
|
||||
import { Admin } from 'src/modules/admin/entities/admin.entity';
|
||||
|
||||
@Entity({ tableName: 'notifications' })
|
||||
@@ -14,8 +14,8 @@ export class Notification extends BaseEntity {
|
||||
@ManyToOne(() => Admin, { nullable: true })
|
||||
admin?: Admin;
|
||||
|
||||
@Enum(() => NotifEvent)
|
||||
title!: NotifEvent;
|
||||
@Enum(() => NotifTitle)
|
||||
title!: NotifTitle;
|
||||
|
||||
@Property()
|
||||
content!: string;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import type { NotifEvent, recipientType } from './notification.interface';
|
||||
import type { NotifTitle, recipientType } from './notification.interface';
|
||||
|
||||
export interface SmsNotificationQueueJob {
|
||||
recipient: recipientType;
|
||||
@@ -18,7 +18,7 @@ export interface PushNotificationQueueJob {
|
||||
}
|
||||
export interface InAppNotificationQueueJob {
|
||||
recipient: { adminId: string; };
|
||||
subject: NotifEvent;
|
||||
subject: NotifTitle;
|
||||
body: string;
|
||||
notificationId: string;
|
||||
}
|
||||
|
||||
@@ -4,18 +4,22 @@ export enum NotifChannelEnum {
|
||||
PUSH = 'push',
|
||||
}
|
||||
|
||||
export enum NotifEvent {
|
||||
export enum NotifTitle {
|
||||
NEW_REQUEST = 'newRequest',
|
||||
INVOICED = 'invoiced',
|
||||
NEW_ORDER = 'newOrder', // for chapkhane sms bere
|
||||
DESIGNER_ASSIGN = 'designerAssign',
|
||||
PAYMENT_SUCCESS = 'paymentSuccess',
|
||||
NEW_INVOICE = 'newInvoice',
|
||||
NEW_PAYMENT = 'newPayment',
|
||||
NEW_ORDER = 'newOrder',
|
||||
NEW_CRITICISM = 'newCriticism',
|
||||
NEW_TICKET = 'newTicket',
|
||||
NEW_ORDER_MESSAGE = 'newOrderMessage',
|
||||
NEW_REQUEST_MESSAGE = 'newRequestMessage',
|
||||
NEW_REQUEST_COMMENT = 'newRequestComment',
|
||||
NEW_REQUEST_LIKE = 'newRequestLike',
|
||||
}
|
||||
export type recipientType = { userId: string } | { adminId: string };
|
||||
|
||||
export interface NotifRequestMessage {
|
||||
title: NotifEvent;
|
||||
title: NotifTitle;
|
||||
content: string;
|
||||
sms: {
|
||||
templateId: string;
|
||||
@@ -35,23 +39,23 @@ interface INotifySmsPayload {
|
||||
}
|
||||
interface INotifySms {
|
||||
phone: string;
|
||||
subject: NotifEvent;
|
||||
subject: NotifTitle;
|
||||
}
|
||||
export interface IInAppNotificationPayload {
|
||||
notificationId: string;
|
||||
subject: NotifEvent;
|
||||
subject: NotifTitle;
|
||||
body: string;
|
||||
}
|
||||
|
||||
// 2. Payment Success
|
||||
interface IPaymentSuccessSmsNotifyPayload extends INotifySmsPayload {
|
||||
amount: number;
|
||||
date: Date;
|
||||
}
|
||||
// // 2. Payment Success
|
||||
// interface IPaymentSuccessSmsNotifyPayload extends INotifySmsPayload {
|
||||
// amount: number;
|
||||
// date: Date;
|
||||
// }
|
||||
|
||||
interface IPaymentSuccessSmsNotify extends INotifySms {
|
||||
subject: NotifEvent.PAYMENT_SUCCESS;
|
||||
payload: IPaymentSuccessSmsNotifyPayload;
|
||||
}
|
||||
// interface IPaymentSuccessSmsNotify extends INotifySms {
|
||||
// subject: NotifEvent.PAYMENT_SUCCESS;
|
||||
// payload: IPaymentSuccessSmsNotifyPayload;
|
||||
// }
|
||||
|
||||
export type ISmsNotifyPayload = IPaymentSuccessSmsNotify;
|
||||
// export type ISmsNotifyPayload = IPaymentSuccessSmsNotify;
|
||||
|
||||
@@ -3,7 +3,7 @@ import { EntityManager, FilterQuery } from '@mikro-orm/postgresql';
|
||||
import { Notification } from '../entities/notification.entity';
|
||||
import { NotificationQueueService } from './notification-queue.service';
|
||||
import { NotificationsGateway } from '../notifications.gateway';
|
||||
import { NotifChannelEnum, NotifRequest, NotifEvent } from '../interfaces/notification.interface';
|
||||
import { NotifChannelEnum, NotifRequest, NotifTitle } from '../interfaces/notification.interface';
|
||||
import { SmsLogRepository } from '../repositories/sms-log.repository';
|
||||
import { Admin } from '../../admin/entities/admin.entity';
|
||||
import { User } from '../../user/entities/user.entity';
|
||||
@@ -41,13 +41,13 @@ export class NotificationService {
|
||||
if (channels.includes(NotifChannelEnum.IN_APP)) {
|
||||
|
||||
const adminNotifications = notifications
|
||||
.filter(n => n.admin?.id)
|
||||
.map(notification => ({
|
||||
recipient: { adminId: notification.admin!.id },
|
||||
subject: message.title,
|
||||
body: message.content,
|
||||
notificationId: notification.id,
|
||||
}))
|
||||
.filter(n => n.admin?.id)
|
||||
.map(notification => ({
|
||||
recipient: { adminId: notification.admin!.id },
|
||||
subject: message.title,
|
||||
body: message.content,
|
||||
notificationId: notification.id,
|
||||
}))
|
||||
|
||||
if (adminNotifications.length > 0) {
|
||||
await this.queueService.addBulkInAppNotifications(adminNotifications);
|
||||
@@ -71,7 +71,7 @@ export class NotificationService {
|
||||
|
||||
async createAdminBulkNotifications(
|
||||
params: {
|
||||
title: NotifEvent;
|
||||
title: NotifTitle;
|
||||
content: string;
|
||||
adminId: string | null;
|
||||
userId: string | null;
|
||||
|
||||
@@ -3,7 +3,7 @@ import { OnEvent } from '@nestjs/event-emitter';
|
||||
import { AdminRepository } from 'src/modules/admin/repositories/admin.repository';
|
||||
import { OrderCreatedEvent, OrderStatusChangedEvent } from '../events/order.events';
|
||||
import { PermissionEnum } from 'src/common/enums/permission.enum';
|
||||
import { NotifEvent } from 'src/modules/notification/interfaces/notification.interface';
|
||||
import { NotifTitle } from 'src/modules/notification/interfaces/notification.interface';
|
||||
import { NotificationService } from 'src/modules/notification/services/notification.service';
|
||||
import { ConfigService } from '@nestjs/config';
|
||||
import { OrderRepository } from '../repositories/order.repository';
|
||||
|
||||
@@ -4,7 +4,7 @@ import { EntityManager } from '@mikro-orm/postgresql';
|
||||
import { AdminRepository } from 'src/modules/admin/repositories/admin.repository';
|
||||
import { onlinePaymentSucceedEvent } from '../events/payment.events';
|
||||
import { PermissionEnum } from 'src/common/enums/permission.enum';
|
||||
import { NotifEvent } from 'src/modules/notification/interfaces/notification.interface';
|
||||
import { NotifTitle } from 'src/modules/notification/interfaces/notification.interface';
|
||||
import { Notification } from 'src/modules/notification/entities/notification.entity';
|
||||
import { NotificationQueueService } from 'src/modules/notification/services/notification-queue.service';
|
||||
|
||||
@@ -16,7 +16,7 @@ export class PaymentListeners {
|
||||
private readonly adminRepository: AdminRepository,
|
||||
private readonly em: EntityManager,
|
||||
private readonly notificationQueueService: NotificationQueueService,
|
||||
) {}
|
||||
) { }
|
||||
|
||||
@OnEvent(onlinePaymentSucceedEvent.name)
|
||||
async handleOnlinePaymentVerified(event: InstanceType<typeof onlinePaymentSucceedEvent>) {
|
||||
@@ -39,7 +39,7 @@ export class PaymentListeners {
|
||||
const notifications = admins.map((admin) =>
|
||||
this.em.create(Notification, {
|
||||
admin,
|
||||
title: NotifEvent.PAYMENT_SUCCESS,
|
||||
title: NotifTitle.NEW_PAYMENT,
|
||||
content: body,
|
||||
}),
|
||||
);
|
||||
@@ -49,7 +49,7 @@ export class PaymentListeners {
|
||||
await this.notificationQueueService.addBulkInAppNotifications(
|
||||
notifications.map((n) => ({
|
||||
recipient: { adminId: n.admin!.id },
|
||||
subject: NotifEvent.PAYMENT_SUCCESS,
|
||||
subject: NotifTitle.NEW_PAYMENT,
|
||||
body,
|
||||
notificationId: n.id,
|
||||
})),
|
||||
|
||||
Reference in New Issue
Block a user