mirror of
https://github.com/Litlyx/litlyx
synced 2025-12-09 23:48:36 +01:00
83 lines
2.9 KiB
TypeScript
83 lines
2.9 KiB
TypeScript
import { ProjectModel } from "./shared/schema/project/ProjectSchema";
|
|
import { UserModel } from "./shared/schema/UserSchema";
|
|
import { LimitNotifyModel } from "./shared/schema/broker/LimitNotifySchema";
|
|
import { EmailService } from './shared/services/EmailService';
|
|
import { TProjectLimit } from "./shared/schema/project/ProjectsLimits";
|
|
import { EmailServiceHelper } from "./EmailServiceHelper";
|
|
|
|
|
|
export async function checkLimitsForEmail(projectCounts: TProjectLimit) {
|
|
|
|
const project_id = projectCounts.project_id;
|
|
const hasNotifyEntry = await LimitNotifyModel.findOne({ project_id });
|
|
if (!hasNotifyEntry) {
|
|
await LimitNotifyModel.create({ project_id, limit1: false, limit2: false, limit3: false })
|
|
}
|
|
|
|
if ((projectCounts.visits + projectCounts.events) >= (projectCounts.limit)) {
|
|
|
|
if (hasNotifyEntry.limit3 === true) return;
|
|
|
|
const project = await ProjectModel.findById(project_id);
|
|
if (!project) return;
|
|
|
|
const owner = await UserModel.findById(project.owner);
|
|
if (!owner) return;
|
|
|
|
setImmediate(() => {
|
|
const emailData = EmailService.getEmailServerInfo('limit_max', {
|
|
target: owner.email,
|
|
projectName: project.name
|
|
});
|
|
EmailServiceHelper.sendEmail(emailData);
|
|
});
|
|
|
|
await LimitNotifyModel.updateOne({ project_id: projectCounts.project_id }, { limit1: true, limit2: true, limit3: true });
|
|
|
|
} else if ((projectCounts.visits + projectCounts.events) >= (projectCounts.limit * 0.9)) {
|
|
|
|
if (hasNotifyEntry.limit2 === true) return;
|
|
|
|
const project = await ProjectModel.findById(project_id);
|
|
if (!project) return;
|
|
|
|
const owner = await UserModel.findById(project.owner);
|
|
if (!owner) return;
|
|
|
|
setImmediate(() => {
|
|
const emailData = EmailService.getEmailServerInfo('limit_90', {
|
|
target: owner.email,
|
|
projectName: project.name
|
|
});
|
|
EmailServiceHelper.sendEmail(emailData);
|
|
});
|
|
|
|
await LimitNotifyModel.updateOne({ project_id: projectCounts.project_id }, { limit1: true, limit2: true, limit3: false });
|
|
|
|
} else if ((projectCounts.visits + projectCounts.events) >= (projectCounts.limit * 0.5)) {
|
|
|
|
if (hasNotifyEntry.limit1 === true) return;
|
|
|
|
const project = await ProjectModel.findById(project_id);
|
|
if (!project) return;
|
|
|
|
const owner = await UserModel.findById(project.owner);
|
|
if (!owner) return;
|
|
|
|
setImmediate(() => {
|
|
const emailData = EmailService.getEmailServerInfo('limit_50', {
|
|
target: owner.email,
|
|
projectName: project.name
|
|
});
|
|
EmailServiceHelper.sendEmail(emailData);
|
|
});
|
|
|
|
await LimitNotifyModel.updateOne({ project_id: projectCounts.project_id }, { limit1: true, limit2: false, limit3: false });
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|