Include files missed from previous commit: - ZaloOaLinkController (GET /auth/zalo-oa/link, GET /auth/zalo-oa/callback, DELETE) - prisma/schema.prisma — ZaloAccountLink model + User.zaloAccountLink relation - prisma/migrations/20260421010000_add_zalo_account_links/migration.sql - Updated ZaloOaService, webhook controller, notifications module, and specs Co-Authored-By: Paperclip <noreply@paperclip.ing>
107 lines
5.0 KiB
TypeScript
107 lines
5.0 KiB
TypeScript
import { Module } from '@nestjs/common';
|
|
import { CqrsModule } from '@nestjs/cqrs';
|
|
import { AuthModule } from '@modules/auth';
|
|
import { MetricsModule } from '@modules/metrics';
|
|
import { SendNotificationHandler } from './application/commands/send-notification/send-notification.handler';
|
|
import { AgentVerifiedListener } from './application/listeners/agent-verified.listener';
|
|
import { EmailChangeRequestedListener } from './application/listeners/email-change-requested.listener';
|
|
import { InquiryReceivedListener } from './application/listeners/inquiry-received.listener';
|
|
import { ListingApprovedListener } from './application/listeners/listing-approved.listener';
|
|
import { ListingRejectedListener } from './application/listeners/listing-rejected.listener';
|
|
import { ListingSoldListener } from './application/listeners/listing-sold.listener';
|
|
import { PasswordResetRequestedListener } from './application/listeners/password-reset-requested.listener';
|
|
import { PaymentCompletedListener } from './application/listeners/payment-completed.listener';
|
|
import { PaymentFailedListener } from './application/listeners/payment-failed.listener';
|
|
import { PaymentRefundedListener } from './application/listeners/payment-refunded.listener';
|
|
import { PhoneChangeRequestedListener } from './application/listeners/phone-change-requested.listener';
|
|
import { QuotaExceededListener } from './application/listeners/quota-exceeded.listener';
|
|
import {
|
|
ResidentialInquiryReplyListener,
|
|
ResidentialNewListingInProjectListener,
|
|
ResidentialPriceDropListener,
|
|
} from './application/listeners/residential-events.listener';
|
|
import { SubscriptionExpiredListener } from './application/listeners/subscription-expired.listener';
|
|
import { SubscriptionExpiringListener } from './application/listeners/subscription-expiring.listener';
|
|
import { SubscriptionRenewedListener } from './application/listeners/subscription-renewed.listener';
|
|
import { UserKycUpdatedListener } from './application/listeners/user-kyc-updated.listener';
|
|
import { UserRegisteredListener } from './application/listeners/user-registered.listener';
|
|
import { SMS_NOTIFICATION_CHANNEL } from './domain/ports/notification-channel.port';
|
|
import { NOTIFICATION_PREFERENCE_REPOSITORY } from './domain/repositories/notification-preference.repository';
|
|
import { NOTIFICATION_REPOSITORY } from './domain/repositories/notification.repository';
|
|
import { PrismaNotificationPreferenceRepository } from './infrastructure/repositories/prisma-notification-preference.repository';
|
|
import { PrismaNotificationRepository } from './infrastructure/repositories/prisma-notification.repository';
|
|
import { EmailService } from './infrastructure/services/email.service';
|
|
import { FcmService } from './infrastructure/services/fcm.service';
|
|
import { SmsRateLimiterService } from './infrastructure/services/sms-rate-limiter.service';
|
|
import { StringeeSmsService } from './infrastructure/services/stringee-sms.service';
|
|
import { TemplateService } from './infrastructure/services/template.service';
|
|
import { ZaloOaService } from './infrastructure/services/zalo-oa.service';
|
|
import { NotificationsController } from './presentation/controllers/notifications.controller';
|
|
import { ZaloOaLinkController } from './presentation/controllers/zalo-oa-link.controller';
|
|
import { ZaloOaWebhookController } from './presentation/controllers/zalo-oa-webhook.controller';
|
|
import { NotificationsGateway } from './presentation/gateways/notifications.gateway';
|
|
|
|
const CommandHandlers = [SendNotificationHandler];
|
|
|
|
const EventListeners = [
|
|
UserRegisteredListener,
|
|
AgentVerifiedListener,
|
|
QuotaExceededListener,
|
|
ListingApprovedListener,
|
|
ListingRejectedListener,
|
|
PaymentCompletedListener,
|
|
PaymentFailedListener,
|
|
PaymentRefundedListener,
|
|
SubscriptionExpiringListener,
|
|
SubscriptionExpiredListener,
|
|
SubscriptionRenewedListener,
|
|
InquiryReceivedListener,
|
|
ListingSoldListener,
|
|
UserKycUpdatedListener,
|
|
EmailChangeRequestedListener,
|
|
PhoneChangeRequestedListener,
|
|
PasswordResetRequestedListener,
|
|
ResidentialPriceDropListener,
|
|
ResidentialNewListingInProjectListener,
|
|
ResidentialInquiryReplyListener,
|
|
];
|
|
|
|
@Module({
|
|
imports: [CqrsModule, AuthModule, MetricsModule],
|
|
controllers: [NotificationsController, ZaloOaWebhookController, ZaloOaLinkController],
|
|
providers: [
|
|
// Repositories
|
|
{ provide: NOTIFICATION_REPOSITORY, useClass: PrismaNotificationRepository },
|
|
{ provide: NOTIFICATION_PREFERENCE_REPOSITORY, useClass: PrismaNotificationPreferenceRepository },
|
|
|
|
// Services
|
|
EmailService,
|
|
FcmService,
|
|
SmsRateLimiterService,
|
|
StringeeSmsService,
|
|
{ provide: SMS_NOTIFICATION_CHANNEL, useExisting: StringeeSmsService },
|
|
ZaloOaService,
|
|
TemplateService,
|
|
|
|
// WebSocket Gateway
|
|
NotificationsGateway,
|
|
|
|
// CQRS
|
|
...CommandHandlers,
|
|
|
|
// Event Listeners
|
|
...EventListeners,
|
|
],
|
|
exports: [
|
|
EmailService,
|
|
FcmService,
|
|
SmsRateLimiterService,
|
|
StringeeSmsService,
|
|
SMS_NOTIFICATION_CHANNEL,
|
|
ZaloOaService,
|
|
TemplateService,
|
|
NotificationsGateway,
|
|
],
|
|
})
|
|
export class NotificationsModule {}
|