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; templateId?: string; context?: Record; } 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 { await NotificationsManager.sendEmail({ email: requestBody.email, subject: requestBody.subject, message: requestBody.message, templateId: requestBody.templateId, context: requestBody.context, }); 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 { await NotificationsManager.sendWap({ phoneNumber: requestBody.phoneNumber, message: requestBody.message, companyId: requestBody.companyId, sessionUser: requestBody.sessionUser, }); this.setStatus(200); return { message: "Done", success: true, }; } }