feat: implement comprehensive notification engine with policies, preferences, and automated dispatching services

This commit is contained in:
2026-07-21 18:53:11 -03:00
parent 40090cdec5
commit 10ca449f88
82 changed files with 10249 additions and 171 deletions
@@ -0,0 +1,61 @@
import { Body, Controller, Middlewares, Post, Route, SuccessResponse } from "tsoa";
import { rateLimiter } from "../../middleware/ratelimiter";
import { systemTokenMiddleware } from "../../middleware/systemToken";
import { NotificationsManager } from "../../Models/Notifications/Notifications";
import { ApiVoidResult } from "../../Models/Api.VoidResult.type";
interface SendEmailByContentParams {
systemToken: string;
email: string;
subject: string;
message: string;
}
interface SendWapByContentParams {
systemToken: string;
phoneNumber: string;
message: string;
companyId: string;
sessionUser: string;
}
@Route("notifications/send-email")
@Middlewares([rateLimiter, systemTokenMiddleware])
export class SendEmailByContentController extends Controller {
@SuccessResponse(200, "Done")
@Post()
public async sendEmailByContent(@Body() requestBody: SendEmailByContentParams): Promise<ApiVoidResult> {
await NotificationsManager.sendEmail({
email: requestBody.email,
subject: requestBody.subject,
message: requestBody.message,
});
this.setStatus(200);
return {
message: "Done",
success: true,
};
}
}
@Route("notifications/send-wap")
@Middlewares([rateLimiter, systemTokenMiddleware])
export class SendWapByContentController extends Controller {
@SuccessResponse(200, "Done")
@Post()
public async sendWapByContent(@Body() requestBody: SendWapByContentParams): Promise<ApiVoidResult> {
await NotificationsManager.sendWap({
phoneNumber: requestBody.phoneNumber,
message: requestBody.message,
companyId: requestBody.companyId,
sessionUser: requestBody.sessionUser,
});
this.setStatus(200);
return {
message: "Done",
success: true,
};
}
}