New signups get the core module set with the 7-day demo. Superadmin can apply core, team, organization, or dedicated and the owner's environments take that level's access. Co-authored-by: Cursor <cursoragent@cursor.com>
202 lines
3.4 KiB
TypeScript
202 lines
3.4 KiB
TypeScript
import {
|
|
IsArray,
|
|
IsBoolean,
|
|
IsEmail,
|
|
IsIn,
|
|
IsInt,
|
|
IsNumber,
|
|
IsOptional,
|
|
IsString,
|
|
Max,
|
|
MaxLength,
|
|
Min,
|
|
MinLength,
|
|
ValidateIf,
|
|
} from 'class-validator';
|
|
import { PRODUCT_PLAN_CODES, USER_ROLES, type ProductPlanCode, type UserRole } from '@mento/shared';
|
|
|
|
export class PlatformLoginDto {
|
|
@IsString()
|
|
@MinLength(8)
|
|
@MaxLength(40)
|
|
mobile!: string;
|
|
|
|
@IsString()
|
|
@MinLength(6)
|
|
password!: string;
|
|
}
|
|
|
|
export class CreatePlatformAdminDto {
|
|
@IsString()
|
|
@MinLength(2)
|
|
@MaxLength(120)
|
|
fullName!: string;
|
|
|
|
@IsString()
|
|
@MinLength(8)
|
|
@MaxLength(40)
|
|
mobile!: string;
|
|
|
|
@IsString()
|
|
@MinLength(8)
|
|
@MaxLength(120)
|
|
password!: string;
|
|
|
|
@IsOptional()
|
|
@IsEmail()
|
|
email?: string;
|
|
}
|
|
|
|
export class ResetPlatformAdminPasswordDto {
|
|
@IsString()
|
|
@MinLength(8)
|
|
@MaxLength(120)
|
|
password!: string;
|
|
}
|
|
|
|
export class UpdatePlatformAdminDto {
|
|
@IsString()
|
|
@MinLength(2)
|
|
@MaxLength(120)
|
|
fullName!: string;
|
|
|
|
@IsString()
|
|
@MinLength(8)
|
|
@MaxLength(40)
|
|
mobile!: string;
|
|
|
|
@IsOptional()
|
|
@ValidateIf((_, value) => value !== null && value !== '')
|
|
@IsEmail()
|
|
email?: string | null;
|
|
}
|
|
|
|
export class SetMasterPasswordDto {
|
|
@ValidateIf((_, value) => value !== null)
|
|
@IsString()
|
|
@MinLength(8)
|
|
@MaxLength(120)
|
|
password!: string | null;
|
|
}
|
|
|
|
export class UpdatePlatformStatusDto {
|
|
@IsBoolean()
|
|
isActive!: boolean;
|
|
}
|
|
|
|
export class CreatePlatformOrganizationDto {
|
|
@IsString()
|
|
@MinLength(2)
|
|
@MaxLength(120)
|
|
name!: string;
|
|
|
|
@IsOptional()
|
|
@IsString()
|
|
@MaxLength(64)
|
|
businessField?: string;
|
|
|
|
@IsString()
|
|
@MinLength(2)
|
|
@MaxLength(120)
|
|
ownerFullName!: string;
|
|
|
|
@IsEmail()
|
|
ownerEmail!: string;
|
|
|
|
@IsString()
|
|
@MinLength(8)
|
|
@MaxLength(120)
|
|
ownerPassword!: string;
|
|
|
|
@IsOptional()
|
|
@IsString()
|
|
@MaxLength(40)
|
|
ownerMobile?: string;
|
|
}
|
|
|
|
export class UpdatePlatformOrganizationDto {
|
|
@IsOptional()
|
|
@IsString()
|
|
@MinLength(2)
|
|
@MaxLength(120)
|
|
name?: string;
|
|
|
|
@IsOptional()
|
|
@IsString()
|
|
@MinLength(2)
|
|
@MaxLength(64)
|
|
slug?: string;
|
|
|
|
@IsOptional()
|
|
@ValidateIf((_, v) => v !== null && v !== undefined)
|
|
@IsString()
|
|
@MaxLength(64)
|
|
businessField?: string | null;
|
|
|
|
@IsOptional()
|
|
@IsBoolean()
|
|
isActive?: boolean;
|
|
}
|
|
|
|
export class UpdatePlatformMembershipRoleDto {
|
|
@IsIn(USER_ROLES)
|
|
role!: UserRole;
|
|
}
|
|
|
|
export class ResetPlatformUserPasswordDto {
|
|
@IsString()
|
|
@MinLength(8)
|
|
@MaxLength(120)
|
|
password!: string;
|
|
}
|
|
|
|
export class ApplyBillingPlanDto {
|
|
@IsIn(['trial', 'monthly', 'quarterly', 'semiannual', 'yearly', 'lifetime', 'custom'])
|
|
planCode!: 'trial' | 'monthly' | 'quarterly' | 'semiannual' | 'yearly' | 'lifetime' | 'custom';
|
|
|
|
@IsOptional()
|
|
@IsInt()
|
|
@Min(1)
|
|
maxOrganizations?: number;
|
|
|
|
@IsOptional()
|
|
@IsString()
|
|
expiresAt?: string;
|
|
|
|
@IsOptional()
|
|
@IsString()
|
|
@MaxLength(500)
|
|
notes?: string | null;
|
|
|
|
@IsOptional()
|
|
@IsIn(['active', 'expired', 'suspended'])
|
|
status?: 'active' | 'expired' | 'suspended';
|
|
}
|
|
|
|
export class SetUserCapDto {
|
|
@IsInt()
|
|
@Min(1)
|
|
@Max(100_000)
|
|
maxUsers!: number;
|
|
}
|
|
|
|
export class SetStorageQuotaDto {
|
|
/** گیگابایت؛ null = بدون سقف */
|
|
@IsNumber()
|
|
@Min(0)
|
|
@Max(100_000)
|
|
@ValidateIf((_, value) => value !== null)
|
|
quotaGb!: number | null;
|
|
}
|
|
|
|
export class ApplyProductPlanDto {
|
|
@IsIn(PRODUCT_PLAN_CODES)
|
|
planCode!: ProductPlanCode;
|
|
}
|
|
|
|
export class UpdateOrgModulesDto {
|
|
@IsArray()
|
|
@IsString({ each: true })
|
|
enabledModules!: string[];
|
|
}
|