feat: change the email structure into seprate module
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -18,6 +18,8 @@ import { AiAssistantModule } from "./modules/ai-assistant/ai-assistant.module";
|
|||||||
import { AuthModule } from "./modules/auth/auth.module";
|
import { AuthModule } from "./modules/auth/auth.module";
|
||||||
import { DomainsModule } from "./modules/domains/domains.module";
|
import { DomainsModule } from "./modules/domains/domains.module";
|
||||||
import { EmailModule } from "./modules/email/email.module";
|
import { EmailModule } from "./modules/email/email.module";
|
||||||
|
import { EmailGatewayModule } from "./modules/email-gateway/email-gateway.module";
|
||||||
|
import { EmailUtilsModule } from "./modules/email-utils/email-utils.module";
|
||||||
import { MailServerModule } from "./modules/mail-server/mail-server.module";
|
import { MailServerModule } from "./modules/mail-server/mail-server.module";
|
||||||
import { MailboxModule } from "./modules/mailbox/mailbox.module";
|
import { MailboxModule } from "./modules/mailbox/mailbox.module";
|
||||||
import { NotificationModule } from "./modules/notifications/notifications.module";
|
import { NotificationModule } from "./modules/notifications/notifications.module";
|
||||||
@@ -52,6 +54,8 @@ import { UtilsModule } from "./modules/utils/utils.module";
|
|||||||
SettingModule,
|
SettingModule,
|
||||||
NotificationModule,
|
NotificationModule,
|
||||||
UploaderModule,
|
UploaderModule,
|
||||||
|
EmailUtilsModule,
|
||||||
|
EmailGatewayModule,
|
||||||
],
|
],
|
||||||
})
|
})
|
||||||
export class AppModule implements NestModule {
|
export class AppModule implements NestModule {
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
import { Module } from "@nestjs/common";
|
||||||
|
import { JwtModule } from "@nestjs/jwt";
|
||||||
|
|
||||||
|
import { EmailGateway } from "./email.gateway";
|
||||||
|
import { WebSocketAuthService } from "./services/websocket-auth.service";
|
||||||
|
import { jwtConfig } from "../../configs/jwt.config";
|
||||||
|
|
||||||
|
@Module({
|
||||||
|
imports: [JwtModule.registerAsync(jwtConfig())],
|
||||||
|
providers: [EmailGateway, WebSocketAuthService],
|
||||||
|
exports: [EmailGateway],
|
||||||
|
})
|
||||||
|
export class EmailGatewayModule {}
|
||||||
+7
-7
@@ -10,10 +10,11 @@ import {
|
|||||||
} from "@nestjs/websockets";
|
} from "@nestjs/websockets";
|
||||||
import { Server, Socket } from "socket.io";
|
import { Server, Socket } from "socket.io";
|
||||||
|
|
||||||
import { WebSocketMessage } from "../../../common/enums/message.enum";
|
import { WebSocketAuthService } from "./services/websocket-auth.service";
|
||||||
import { WsExceptionFilter } from "../../../core/filters/ws-exception.filter";
|
import { WebSocketMessage } from "../../common/enums/message.enum";
|
||||||
import { WEBSOCKET_EVENTS, WEBSOCKET_NAMESPACES, WEBSOCKET_ROOMS, WebSocketEvent } from "../constants/email-events.constant";
|
import { WsExceptionFilter } from "../../core/filters/ws-exception.filter";
|
||||||
import { WebSocketAuthGuard } from "../guards/websocket-auth.guard";
|
import { WEBSOCKET_EVENTS, WEBSOCKET_NAMESPACES, WEBSOCKET_ROOMS, WebSocketEvent } from "../email/constants/email-events.constant";
|
||||||
|
import { WebSocketAuthGuard } from "../email/guards/websocket-auth.guard";
|
||||||
import {
|
import {
|
||||||
EmailDeletePayload,
|
EmailDeletePayload,
|
||||||
EmailPayload,
|
EmailPayload,
|
||||||
@@ -21,9 +22,8 @@ import {
|
|||||||
EmailStatusPayload,
|
EmailStatusPayload,
|
||||||
MailboxUpdatePayload,
|
MailboxUpdatePayload,
|
||||||
UnreadCountPayload,
|
UnreadCountPayload,
|
||||||
} from "../interfaces/email-events.interface";
|
} from "../email/interfaces/email-events.interface";
|
||||||
import { ConnectedUserInfo } from "../interfaces/websocket.interface";
|
import { ConnectedUserInfo } from "../email/interfaces/websocket.interface";
|
||||||
import { WebSocketAuthService } from "../services/websocket-auth.service";
|
|
||||||
|
|
||||||
@UsePipes(new ValidationPipe({ transform: true }))
|
@UsePipes(new ValidationPipe({ transform: true }))
|
||||||
@UseFilters(WsExceptionFilter)
|
@UseFilters(WsExceptionFilter)
|
||||||
+2
-2
@@ -4,9 +4,9 @@ import { Socket } from "socket.io";
|
|||||||
|
|
||||||
import { WebSocketMessage } from "../../../common/enums/message.enum";
|
import { WebSocketMessage } from "../../../common/enums/message.enum";
|
||||||
import { ITokenPayload } from "../../auth/interfaces/IToken-payload";
|
import { ITokenPayload } from "../../auth/interfaces/IToken-payload";
|
||||||
|
import { WEBSOCKET_EVENTS, WebSocketEvent } from "../../email/constants/email-events.constant";
|
||||||
|
import { AuthenticationResult, WebSocketErrorContext } from "../../email/interfaces/websocket.interface";
|
||||||
import { extractTokenFromClient } from "../../utils/services/extract-token.utils";
|
import { extractTokenFromClient } from "../../utils/services/extract-token.utils";
|
||||||
import { WEBSOCKET_EVENTS, WebSocketEvent } from "../constants/email-events.constant";
|
|
||||||
import { AuthenticationResult, WebSocketErrorContext } from "../interfaces/websocket.interface";
|
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class WebSocketAuthService {
|
export class WebSocketAuthService {
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
import { BullModule } from "@nestjs/bullmq";
|
||||||
|
import { Module } from "@nestjs/common";
|
||||||
|
|
||||||
|
import { EmailMonitoringProcessor } from "./queue/email-monitoring.processor";
|
||||||
|
import { EmailMonitoringService } from "./services/email-monitoring.service";
|
||||||
|
import { EmailNotificationService } from "./services/email-notification.service";
|
||||||
|
import { MailboxResolverService } from "./services/mailbox-resolver.service";
|
||||||
|
import { EMAIL_QUEUE_CONSTANTS } from "../email/constants/email-events.constant";
|
||||||
|
import { EmailGatewayModule } from "../email-gateway/email-gateway.module";
|
||||||
|
import { MailServerModule } from "../mail-server/mail-server.module";
|
||||||
|
import { NotificationModule } from "../notifications/notifications.module";
|
||||||
|
|
||||||
|
@Module({
|
||||||
|
imports: [
|
||||||
|
NotificationModule,
|
||||||
|
MailServerModule,
|
||||||
|
EmailGatewayModule,
|
||||||
|
BullModule.registerQueue({
|
||||||
|
name: EMAIL_QUEUE_CONSTANTS.EMAIL_QUEUE,
|
||||||
|
}),
|
||||||
|
],
|
||||||
|
providers: [EmailMonitoringService, EmailNotificationService, MailboxResolverService, EmailMonitoringProcessor],
|
||||||
|
exports: [EmailMonitoringService, EmailNotificationService, MailboxResolverService],
|
||||||
|
})
|
||||||
|
export class EmailUtilsModule {}
|
||||||
+3
-3
@@ -2,9 +2,9 @@ import { Processor, WorkerHost } from "@nestjs/bullmq";
|
|||||||
import { Logger } from "@nestjs/common";
|
import { Logger } from "@nestjs/common";
|
||||||
import { Job } from "bullmq";
|
import { Job } from "bullmq";
|
||||||
|
|
||||||
import { EMAIL_QUEUE_CONSTANTS } from "../constants/email-events.constant";
|
import { EMAIL_QUEUE_CONSTANTS } from "../../email/constants/email-events.constant";
|
||||||
import { EmailMonitoringJob, EmailSchedulerJob } from "../interfaces/email-events.interface";
|
import { EmailMonitoringJob, EmailSchedulerJob } from "../../email/interfaces/email-events.interface";
|
||||||
import { EmailMonitoringService } from "../services/email-monitoring.service";
|
import { EmailMonitoringService } from "../../email-utils/services/email-monitoring.service";
|
||||||
|
|
||||||
@Processor(EMAIL_QUEUE_CONSTANTS.EMAIL_QUEUE)
|
@Processor(EMAIL_QUEUE_CONSTANTS.EMAIL_QUEUE)
|
||||||
export class EmailMonitoringProcessor extends WorkerHost {
|
export class EmailMonitoringProcessor extends WorkerHost {
|
||||||
+4
-3
@@ -5,13 +5,13 @@ import { Queue } from "bullmq";
|
|||||||
import { firstValueFrom } from "rxjs";
|
import { firstValueFrom } from "rxjs";
|
||||||
|
|
||||||
import { MailboxResolverService } from "./mailbox-resolver.service";
|
import { MailboxResolverService } from "./mailbox-resolver.service";
|
||||||
|
import { EMAIL_QUEUE_CONSTANTS } from "../../email/constants/email-events.constant";
|
||||||
|
import { EmailMonitoringJob, EmailPayload, EmailSchedulerJob } from "../../email/interfaces/email-events.interface";
|
||||||
|
import { EmailGateway } from "../../email-gateway/email.gateway";
|
||||||
import { MailServerService } from "../../mail-server/services/mail-server.service";
|
import { MailServerService } from "../../mail-server/services/mail-server.service";
|
||||||
import { MailboxEnum } from "../../mailbox/enums/mailbox.enum";
|
import { MailboxEnum } from "../../mailbox/enums/mailbox.enum";
|
||||||
import { NotificationQueue } from "../../notifications/queue/notification.queue";
|
import { NotificationQueue } from "../../notifications/queue/notification.queue";
|
||||||
import { User } from "../../users/entities/user.entity";
|
import { User } from "../../users/entities/user.entity";
|
||||||
import { EMAIL_QUEUE_CONSTANTS } from "../constants/email-events.constant";
|
|
||||||
import { EmailGateway } from "../gateways/email.gateway";
|
|
||||||
import { EmailMonitoringJob, EmailPayload, EmailSchedulerJob } from "../interfaces/email-events.interface";
|
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class EmailMonitoringService implements OnModuleInit {
|
export class EmailMonitoringService implements OnModuleInit {
|
||||||
@@ -224,6 +224,7 @@ export class EmailMonitoringService implements OnModuleInit {
|
|||||||
await this.notificationQueue.addNewEmailNotification(userId, {
|
await this.notificationQueue.addNewEmailNotification(userId, {
|
||||||
fromEmail: message.from[0].address,
|
fromEmail: message.from[0].address,
|
||||||
fromName: message.from[0].name,
|
fromName: message.from[0].name,
|
||||||
|
subject: message.subject,
|
||||||
});
|
});
|
||||||
|
|
||||||
await this.emailGateway.notifyNewEmail(userId, emailPayload);
|
await this.emailGateway.notifyNewEmail(userId, emailPayload);
|
||||||
+6
-6
@@ -3,11 +3,7 @@ import { Injectable, Logger } from "@nestjs/common";
|
|||||||
import { firstValueFrom } from "rxjs";
|
import { firstValueFrom } from "rxjs";
|
||||||
|
|
||||||
import { MailboxResolverService } from "./mailbox-resolver.service";
|
import { MailboxResolverService } from "./mailbox-resolver.service";
|
||||||
import { MailServerService } from "../../mail-server/services/mail-server.service";
|
import { WebSocketEvent } from "../../email/constants/email-events.constant";
|
||||||
import { MailboxEnum } from "../../mailbox/enums/mailbox.enum";
|
|
||||||
import { User } from "../../users/entities/user.entity";
|
|
||||||
import { WebSocketEvent } from "../constants/email-events.constant";
|
|
||||||
import { EmailGateway } from "../gateways/email.gateway";
|
|
||||||
import {
|
import {
|
||||||
EmailDeletePayload,
|
EmailDeletePayload,
|
||||||
EmailSentNotificationParams,
|
EmailSentNotificationParams,
|
||||||
@@ -17,7 +13,11 @@ import {
|
|||||||
MailboxUpdateNotificationParams,
|
MailboxUpdateNotificationParams,
|
||||||
MailboxUpdatePayload,
|
MailboxUpdatePayload,
|
||||||
UnreadCountPayload,
|
UnreadCountPayload,
|
||||||
} from "../interfaces/email-events.interface";
|
} from "../../email/interfaces/email-events.interface";
|
||||||
|
import { EmailGateway } from "../../email-gateway/email.gateway";
|
||||||
|
import { MailServerService } from "../../mail-server/services/mail-server.service";
|
||||||
|
import { MailboxEnum } from "../../mailbox/enums/mailbox.enum";
|
||||||
|
import { User } from "../../users/entities/user.entity";
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class EmailNotificationService {
|
export class EmailNotificationService {
|
||||||
+1
-1
@@ -1,10 +1,10 @@
|
|||||||
import { Injectable, Logger, NotFoundException } from "@nestjs/common";
|
import { Injectable, Logger, NotFoundException } from "@nestjs/common";
|
||||||
import { firstValueFrom } from "rxjs";
|
import { firstValueFrom } from "rxjs";
|
||||||
|
|
||||||
|
import { UserMailboxIds } from "../../email/interfaces/user-mailbox.interface";
|
||||||
import { MailboxInfo } from "../../mail-server/interfaces/mailboxes-response.interface";
|
import { MailboxInfo } from "../../mail-server/interfaces/mailboxes-response.interface";
|
||||||
import { MailServerService } from "../../mail-server/services/mail-server.service";
|
import { MailServerService } from "../../mail-server/services/mail-server.service";
|
||||||
import { MailboxEnum } from "../../mailbox/enums/mailbox.enum";
|
import { MailboxEnum } from "../../mailbox/enums/mailbox.enum";
|
||||||
import { UserMailboxIds } from "../interfaces/user-mailbox.interface";
|
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class MailboxResolverService {
|
export class MailboxResolverService {
|
||||||
@@ -1,57 +1,19 @@
|
|||||||
import { MikroOrmModule } from "@mikro-orm/nestjs";
|
import { MikroOrmModule } from "@mikro-orm/nestjs";
|
||||||
import { BullModule } from "@nestjs/bullmq";
|
|
||||||
import { Module } from "@nestjs/common";
|
import { Module } from "@nestjs/common";
|
||||||
import { JwtModule } from "@nestjs/jwt";
|
|
||||||
|
|
||||||
// import { EmailGatewayController } from "./controllers/email-gateway.controller";
|
|
||||||
import { EMAIL_QUEUE_CONSTANTS } from "./constants/email-events.constant";
|
|
||||||
import { EmailController } from "./email.controller";
|
import { EmailController } from "./email.controller";
|
||||||
import { EmailGateway } from "./gateways/email.gateway";
|
|
||||||
import { EmailMonitoringProcessor } from "./queue/email-monitoring.processor";
|
|
||||||
import { EmailHeadersService } from "./services/email-headers.service";
|
import { EmailHeadersService } from "./services/email-headers.service";
|
||||||
import { EmailMonitoringService } from "./services/email-monitoring.service";
|
|
||||||
import { EmailNotificationService } from "./services/email-notification.service";
|
|
||||||
import { EmailSpamService } from "./services/email-spam.service";
|
import { EmailSpamService } from "./services/email-spam.service";
|
||||||
import { EmailService } from "./services/email.service";
|
import { EmailService } from "./services/email.service";
|
||||||
import { MailboxResolverService } from "./services/mailbox-resolver.service";
|
import { EmailUtilsModule } from "../email-utils/email-utils.module";
|
||||||
import { jwtConfig } from "../../configs/jwt.config";
|
|
||||||
import { MailServerModule } from "../mail-server/mail-server.module";
|
import { MailServerModule } from "../mail-server/mail-server.module";
|
||||||
import { TemplatesModule } from "../templates/templates.module";
|
import { TemplatesModule } from "../templates/templates.module";
|
||||||
import { WebSocketAuthService } from "./services/websocket-auth.service";
|
|
||||||
import { User } from "../users/entities/user.entity";
|
import { User } from "../users/entities/user.entity";
|
||||||
import { UsersModule } from "../users/users.module";
|
|
||||||
|
|
||||||
@Module({
|
@Module({
|
||||||
imports: [
|
imports: [MailServerModule, TemplatesModule, EmailUtilsModule, MikroOrmModule.forFeature([User])],
|
||||||
MailServerModule,
|
|
||||||
UsersModule,
|
|
||||||
TemplatesModule,
|
|
||||||
JwtModule.registerAsync(jwtConfig()),
|
|
||||||
MikroOrmModule.forFeature([User]),
|
|
||||||
BullModule.registerQueue({
|
|
||||||
name: EMAIL_QUEUE_CONSTANTS.EMAIL_QUEUE,
|
|
||||||
}),
|
|
||||||
],
|
|
||||||
controllers: [EmailController],
|
controllers: [EmailController],
|
||||||
providers: [
|
providers: [EmailService, EmailSpamService, EmailHeadersService],
|
||||||
EmailService,
|
exports: [EmailService, EmailSpamService, EmailHeadersService],
|
||||||
EmailSpamService,
|
|
||||||
MailboxResolverService,
|
|
||||||
EmailHeadersService,
|
|
||||||
EmailGateway,
|
|
||||||
EmailMonitoringService,
|
|
||||||
EmailNotificationService,
|
|
||||||
EmailMonitoringProcessor,
|
|
||||||
WebSocketAuthService,
|
|
||||||
],
|
|
||||||
exports: [
|
|
||||||
EmailService,
|
|
||||||
EmailSpamService,
|
|
||||||
MailboxResolverService,
|
|
||||||
EmailHeadersService,
|
|
||||||
EmailGateway,
|
|
||||||
EmailMonitoringService,
|
|
||||||
EmailNotificationService,
|
|
||||||
],
|
|
||||||
})
|
})
|
||||||
export class EmailModule {}
|
export class EmailModule {}
|
||||||
|
|||||||
@@ -3,10 +3,10 @@ import { FastifyReply } from "fastify";
|
|||||||
import { firstValueFrom } from "rxjs";
|
import { firstValueFrom } from "rxjs";
|
||||||
|
|
||||||
import { EmailHeadersService } from "./email-headers.service";
|
import { EmailHeadersService } from "./email-headers.service";
|
||||||
import { EmailNotificationService } from "./email-notification.service";
|
|
||||||
import { EmailSpamService } from "./email-spam.service";
|
import { EmailSpamService } from "./email-spam.service";
|
||||||
import { MailboxResolverService } from "./mailbox-resolver.service";
|
|
||||||
import { EmailMessage } from "../../../common/enums/message.enum";
|
import { EmailMessage } from "../../../common/enums/message.enum";
|
||||||
|
import { EmailNotificationService } from "../../email-utils/services/email-notification.service";
|
||||||
|
import { MailboxResolverService } from "../../email-utils/services/mailbox-resolver.service";
|
||||||
import { SearchMessagesMailServerQueryDto } from "../../mail-server/DTO/message.dto";
|
import { SearchMessagesMailServerQueryDto } from "../../mail-server/DTO/message.dto";
|
||||||
import { MailServerService } from "../../mail-server/services/mail-server.service";
|
import { MailServerService } from "../../mail-server/services/mail-server.service";
|
||||||
import { TemplateProcessorService } from "../../templates/services/template-processor.service";
|
import { TemplateProcessorService } from "../../templates/services/template-processor.service";
|
||||||
|
|||||||
@@ -15,4 +15,5 @@ export interface IGenericNotificationData extends IBaseNotificationData {
|
|||||||
export interface INewEmailNotificationData extends IBaseNotificationData {
|
export interface INewEmailNotificationData extends IBaseNotificationData {
|
||||||
fromEmail: string;
|
fromEmail: string;
|
||||||
fromName: string;
|
fromName: string;
|
||||||
|
subject: string;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -124,7 +124,7 @@ export class NotificationsService {
|
|||||||
//************************ */
|
//************************ */
|
||||||
|
|
||||||
async createNewEmailNotification(recipientId: string, data: INewEmailNotificationData, em: EntityManager) {
|
async createNewEmailNotification(recipientId: string, data: INewEmailNotificationData, em: EntityManager) {
|
||||||
const message = NotificationMessage.NEW_EMAIL_MESSAGE.replace("[subject]", data.newEmail);
|
const message = NotificationMessage.NEW_EMAIL_MESSAGE.replace("[subject]", data.subject);
|
||||||
const { isActive } = await this.userSettingsService.getUserNotificationSettingWithType(NotifType.NEW_EMAIL, recipientId);
|
const { isActive } = await this.userSettingsService.getUserNotificationSettingWithType(NotifType.NEW_EMAIL, recipientId);
|
||||||
if (isActive) {
|
if (isActive) {
|
||||||
return this.createNotification({ title: NotificationMessage.NEW_EMAIL, type: NotifType.NEW_EMAIL, message, recipientId }, em);
|
return this.createNotification({ title: NotificationMessage.NEW_EMAIL, type: NotifType.NEW_EMAIL, message, recipientId }, em);
|
||||||
|
|||||||
@@ -16,10 +16,8 @@ import { Business } from "../../businesses/entities/business.entity";
|
|||||||
import { DomainStatus } from "../../domains/enums/domain-status.enum";
|
import { DomainStatus } from "../../domains/enums/domain-status.enum";
|
||||||
import { DomainAutomationService } from "../../domains/services/domain-automation.service";
|
import { DomainAutomationService } from "../../domains/services/domain-automation.service";
|
||||||
import { DomainsService } from "../../domains/services/domains.service";
|
import { DomainsService } from "../../domains/services/domains.service";
|
||||||
import { MailboxResolverService } from "../../email/services/mailbox-resolver.service";
|
|
||||||
import { UpdateUserDto } from "../../mail-server/DTO/update-user.dto";
|
import { UpdateUserDto } from "../../mail-server/DTO/update-user.dto";
|
||||||
import { MailServerService } from "../../mail-server/services/mail-server.service";
|
import { MailServerService } from "../../mail-server/services/mail-server.service";
|
||||||
import { NotificationQueue } from "../../notifications/queue/notification.queue";
|
|
||||||
import { PushNotificationService } from "../../notifications/services/push-notification.service";
|
import { PushNotificationService } from "../../notifications/services/push-notification.service";
|
||||||
import { QuotaSyncService } from "../../quota-sync/services/quota-sync.service";
|
import { QuotaSyncService } from "../../quota-sync/services/quota-sync.service";
|
||||||
import { UserSettingsService } from "../../settings/services/user-settings.service";
|
import { UserSettingsService } from "../../settings/services/user-settings.service";
|
||||||
@@ -53,8 +51,6 @@ export class UsersService {
|
|||||||
private readonly domainAutomationService: DomainAutomationService,
|
private readonly domainAutomationService: DomainAutomationService,
|
||||||
private readonly quotaSyncService: QuotaSyncService,
|
private readonly quotaSyncService: QuotaSyncService,
|
||||||
private readonly userSettingsService: UserSettingsService,
|
private readonly userSettingsService: UserSettingsService,
|
||||||
private readonly mailboxResolver: MailboxResolverService,
|
|
||||||
private readonly notificationQueue: NotificationQueue,
|
|
||||||
private readonly pushNotificationService: PushNotificationService,
|
private readonly pushNotificationService: PushNotificationService,
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user