chore: add new logic for the quota

This commit is contained in:
mahyargdz
2025-07-12 09:45:07 +03:30
parent a350f8af5a
commit 344bf1de0a
12 changed files with 169 additions and 39 deletions
+16 -4
View File
@@ -11,6 +11,7 @@ import {
DANAK_SMTPS_SERVER,
} from "../../../common/constants";
import { BusinessMessage, DomainMessage, MailServerMessage, RoleMessage, UserMessage } from "../../../common/enums/message.enum";
import { QUOTA_CONSTANTS } from "../../businesses/constant";
import { Business } from "../../businesses/entities/business.entity";
import { DomainStatus } from "../../domains/enums/domain-status.enum";
import { DomainAutomationService } from "../../domains/services/domain-automation.service";
@@ -75,6 +76,12 @@ export class UsersService {
const business = await this.em.findOne(Business, { id: businessId });
if (!business) throw new BadRequestException(BusinessMessage.NOT_FOUND);
// Check if business has enough quota
const remainingQuota = business.remainingQuota || 0;
if (remainingQuota < QUOTA_CONSTANTS.USER_QUOTA_DEDUCTION) {
throw new BadRequestException("Insufficient quota to create user. Please upgrade your plan.");
}
const domain = await this.domainsService.getDomainById(domainId, businessId);
if (domain.business.id !== businessId) throw new BadRequestException(DomainMessage.NOT_BELONG_TO_BUSINESS);
@@ -92,14 +99,15 @@ export class UsersService {
if (!userRole) throw new BadRequestException(RoleMessage.NOT_FOUND);
try {
const userQuota = quota || QUOTA_CONSTANTS.DEFAULT_EMAIL_QUOTA_BYTES;
const mailServerUser = await firstValueFrom(
this.mailServerService.users.createUser({
username: `${username}-${domain.name}`,
password,
address: emailAddress,
name: displayName || username,
quota: quota || 1073741824,
// language: "fa",
quota: userQuota,
}),
);
@@ -111,7 +119,7 @@ export class UsersService {
password: hashedPassword,
emailAddress,
emailEnabled: true,
emailQuota: quota || 1073741824,
emailQuota: userQuota,
wildduckUserId: mailServerUser.id,
displayName: displayName || username,
isActive: true,
@@ -120,7 +128,11 @@ export class UsersService {
role: userRole,
});
await this.em.persistAndFlush(user);
// Update business quota after successful user creation
business.usedQuota = business.usedQuota + QUOTA_CONSTANTS.USER_QUOTA_DEDUCTION;
business.remainingQuota = business.quota - business.usedQuota;
await this.em.persistAndFlush([user, business]);
if (aliases && aliases.length > 0) {
for (const alias of aliases) {