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 { DomainsModule } from "./modules/domains/domains.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 { MailboxModule } from "./modules/mailbox/mailbox.module";
|
||||
import { NotificationModule } from "./modules/notifications/notifications.module";
|
||||
@@ -52,6 +54,8 @@ import { UtilsModule } from "./modules/utils/utils.module";
|
||||
SettingModule,
|
||||
NotificationModule,
|
||||
UploaderModule,
|
||||
EmailUtilsModule,
|
||||
EmailGatewayModule,
|
||||
],
|
||||
})
|
||||
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";
|
||||
import { Server, Socket } from "socket.io";
|
||||
|
||||
import { WebSocketMessage } from "../../../common/enums/message.enum";
|
||||
import { WsExceptionFilter } from "../../../core/filters/ws-exception.filter";
|
||||
import { WEBSOCKET_EVENTS, WEBSOCKET_NAMESPACES, WEBSOCKET_ROOMS, WebSocketEvent } from "../constants/email-events.constant";
|
||||
import { WebSocketAuthGuard } from "../guards/websocket-auth.guard";
|
||||
import { WebSocketAuthService } from "./services/websocket-auth.service";
|
||||
import { WebSocketMessage } from "../../common/enums/message.enum";
|
||||
import { WsExceptionFilter } from "../../core/filters/ws-exception.filter";
|
||||
import { WEBSOCKET_EVENTS, WEBSOCKET_NAMESPACES, WEBSOCKET_ROOMS, WebSocketEvent } from "../email/constants/email-events.constant";
|
||||
import { WebSocketAuthGuard } from "../email/guards/websocket-auth.guard";
|
||||
import {
|
||||
EmailDeletePayload,
|
||||
EmailPayload,
|
||||
@@ -21,9 +22,8 @@ import {
|
||||
EmailStatusPayload,
|
||||
MailboxUpdatePayload,
|
||||
UnreadCountPayload,
|
||||
} from "../interfaces/email-events.interface";
|
||||
import { ConnectedUserInfo } from "../interfaces/websocket.interface";
|
||||
import { WebSocketAuthService } from "../services/websocket-auth.service";
|
||||
} from "../email/interfaces/email-events.interface";
|
||||
import { ConnectedUserInfo } from "../email/interfaces/websocket.interface";
|
||||
|
||||
@UsePipes(new ValidationPipe({ transform: true }))
|
||||
@UseFilters(WsExceptionFilter)
|
||||
+2
-2
@@ -4,9 +4,9 @@ import { Socket } from "socket.io";
|
||||
|
||||
import { WebSocketMessage } from "../../../common/enums/message.enum";
|
||||
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 { WEBSOCKET_EVENTS, WebSocketEvent } from "../constants/email-events.constant";
|
||||
import { AuthenticationResult, WebSocketErrorContext } from "../interfaces/websocket.interface";
|
||||
|
||||
@Injectable()
|
||||
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 { Job } from "bullmq";
|
||||
|
||||
import { EMAIL_QUEUE_CONSTANTS } from "../constants/email-events.constant";
|
||||
import { EmailMonitoringJob, EmailSchedulerJob } from "../interfaces/email-events.interface";
|
||||
import { EmailMonitoringService } from "../services/email-monitoring.service";
|
||||
import { EMAIL_QUEUE_CONSTANTS } from "../../email/constants/email-events.constant";
|
||||
import { EmailMonitoringJob, EmailSchedulerJob } from "../../email/interfaces/email-events.interface";
|
||||
import { EmailMonitoringService } from "../../email-utils/services/email-monitoring.service";
|
||||
|
||||
@Processor(EMAIL_QUEUE_CONSTANTS.EMAIL_QUEUE)
|
||||
export class EmailMonitoringProcessor extends WorkerHost {
|
||||
+4
-3
@@ -5,13 +5,13 @@ import { Queue } from "bullmq";
|
||||
import { firstValueFrom } from "rxjs";
|
||||
|
||||
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 { MailboxEnum } from "../../mailbox/enums/mailbox.enum";
|
||||
import { NotificationQueue } from "../../notifications/queue/notification.queue";
|
||||
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()
|
||||
export class EmailMonitoringService implements OnModuleInit {
|
||||
@@ -224,6 +224,7 @@ export class EmailMonitoringService implements OnModuleInit {
|
||||
await this.notificationQueue.addNewEmailNotification(userId, {
|
||||
fromEmail: message.from[0].address,
|
||||
fromName: message.from[0].name,
|
||||
subject: message.subject,
|
||||
});
|
||||
|
||||
await this.emailGateway.notifyNewEmail(userId, emailPayload);
|
||||
+6
-6
@@ -3,11 +3,7 @@ import { Injectable, Logger } from "@nestjs/common";
|
||||
import { firstValueFrom } from "rxjs";
|
||||
|
||||
import { MailboxResolverService } from "./mailbox-resolver.service";
|
||||
import { MailServerService } from "../../mail-server/services/mail-server.service";
|
||||
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 { WebSocketEvent } from "../../email/constants/email-events.constant";
|
||||
import {
|
||||
EmailDeletePayload,
|
||||
EmailSentNotificationParams,
|
||||
@@ -17,7 +13,11 @@ import {
|
||||
MailboxUpdateNotificationParams,
|
||||
MailboxUpdatePayload,
|
||||
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()
|
||||
export class EmailNotificationService {
|
||||
+1
-1
@@ -1,10 +1,10 @@
|
||||
import { Injectable, Logger, NotFoundException } from "@nestjs/common";
|
||||
import { firstValueFrom } from "rxjs";
|
||||
|
||||
import { UserMailboxIds } from "../../email/interfaces/user-mailbox.interface";
|
||||
import { MailboxInfo } from "../../mail-server/interfaces/mailboxes-response.interface";
|
||||
import { MailServerService } from "../../mail-server/services/mail-server.service";
|
||||
import { MailboxEnum } from "../../mailbox/enums/mailbox.enum";
|
||||
import { UserMailboxIds } from "../interfaces/user-mailbox.interface";
|
||||
|
||||
@Injectable()
|
||||
export class MailboxResolverService {
|
||||
@@ -1,57 +1,19 @@
|
||||
import { MikroOrmModule } from "@mikro-orm/nestjs";
|
||||
import { BullModule } from "@nestjs/bullmq";
|
||||
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 { EmailGateway } from "./gateways/email.gateway";
|
||||
import { EmailMonitoringProcessor } from "./queue/email-monitoring.processor";
|
||||
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 { EmailService } from "./services/email.service";
|
||||
import { MailboxResolverService } from "./services/mailbox-resolver.service";
|
||||
import { jwtConfig } from "../../configs/jwt.config";
|
||||
import { EmailUtilsModule } from "../email-utils/email-utils.module";
|
||||
import { MailServerModule } from "../mail-server/mail-server.module";
|
||||
import { TemplatesModule } from "../templates/templates.module";
|
||||
import { WebSocketAuthService } from "./services/websocket-auth.service";
|
||||
import { User } from "../users/entities/user.entity";
|
||||
import { UsersModule } from "../users/users.module";
|
||||
|
||||
@Module({
|
||||
imports: [
|
||||
MailServerModule,
|
||||
UsersModule,
|
||||
TemplatesModule,
|
||||
JwtModule.registerAsync(jwtConfig()),
|
||||
MikroOrmModule.forFeature([User]),
|
||||
BullModule.registerQueue({
|
||||
name: EMAIL_QUEUE_CONSTANTS.EMAIL_QUEUE,
|
||||
}),
|
||||
],
|
||||
imports: [MailServerModule, TemplatesModule, EmailUtilsModule, MikroOrmModule.forFeature([User])],
|
||||
controllers: [EmailController],
|
||||
providers: [
|
||||
EmailService,
|
||||
EmailSpamService,
|
||||
MailboxResolverService,
|
||||
EmailHeadersService,
|
||||
EmailGateway,
|
||||
EmailMonitoringService,
|
||||
EmailNotificationService,
|
||||
EmailMonitoringProcessor,
|
||||
WebSocketAuthService,
|
||||
],
|
||||
exports: [
|
||||
EmailService,
|
||||
EmailSpamService,
|
||||
MailboxResolverService,
|
||||
EmailHeadersService,
|
||||
EmailGateway,
|
||||
EmailMonitoringService,
|
||||
EmailNotificationService,
|
||||
],
|
||||
providers: [EmailService, EmailSpamService, EmailHeadersService],
|
||||
exports: [EmailService, EmailSpamService, EmailHeadersService],
|
||||
})
|
||||
export class EmailModule {}
|
||||
|
||||
@@ -3,10 +3,10 @@ import { FastifyReply } from "fastify";
|
||||
import { firstValueFrom } from "rxjs";
|
||||
|
||||
import { EmailHeadersService } from "./email-headers.service";
|
||||
import { EmailNotificationService } from "./email-notification.service";
|
||||
import { EmailSpamService } from "./email-spam.service";
|
||||
import { MailboxResolverService } from "./mailbox-resolver.service";
|
||||
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 { MailServerService } from "../../mail-server/services/mail-server.service";
|
||||
import { TemplateProcessorService } from "../../templates/services/template-processor.service";
|
||||
|
||||
@@ -15,4 +15,5 @@ export interface IGenericNotificationData extends IBaseNotificationData {
|
||||
export interface INewEmailNotificationData extends IBaseNotificationData {
|
||||
fromEmail: string;
|
||||
fromName: string;
|
||||
subject: string;
|
||||
}
|
||||
|
||||
@@ -124,7 +124,7 @@ export class NotificationsService {
|
||||
//************************ */
|
||||
|
||||
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);
|
||||
if (isActive) {
|
||||
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 { DomainAutomationService } from "../../domains/services/domain-automation.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 { MailServerService } from "../../mail-server/services/mail-server.service";
|
||||
import { NotificationQueue } from "../../notifications/queue/notification.queue";
|
||||
import { PushNotificationService } from "../../notifications/services/push-notification.service";
|
||||
import { QuotaSyncService } from "../../quota-sync/services/quota-sync.service";
|
||||
import { UserSettingsService } from "../../settings/services/user-settings.service";
|
||||
@@ -53,8 +51,6 @@ export class UsersService {
|
||||
private readonly domainAutomationService: DomainAutomationService,
|
||||
private readonly quotaSyncService: QuotaSyncService,
|
||||
private readonly userSettingsService: UserSettingsService,
|
||||
private readonly mailboxResolver: MailboxResolverService,
|
||||
private readonly notificationQueue: NotificationQueue,
|
||||
private readonly pushNotificationService: PushNotificationService,
|
||||
) {}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user