Files
CRM_Montzar/apps/api/src/org-roles/dto.ts
T

119 lines
2.2 KiB
TypeScript
Raw Normal View History

2026-09-15 17:33:05 +03:30
import { Type } from 'class-transformer';
import {
ArrayUnique,
IsArray,
IsBoolean,
2026-09-15 17:33:05 +03:30
IsIn,
IsObject,
2026-09-15 17:33:05 +03:30
IsOptional,
IsString,
MaxLength,
MinLength,
ValidateIf,
2026-09-15 17:33:05 +03:30
ValidateNested,
} from 'class-validator';
import { ROLE_PERMISSION_ITEMS, type RolePermissionKey } from '@mento/shared';
import { ROLE_COLORS } from './role-defaults';
const PERMISSION_KEYS = ROLE_PERMISSION_ITEMS.map((item) => item.key);
export class CreateOrgRoleDto {
@IsString()
@MinLength(2)
@MaxLength(80)
name!: string;
@IsOptional()
@IsString()
@MaxLength(280)
description?: string;
@IsOptional()
@IsIn([...ROLE_COLORS])
color?: (typeof ROLE_COLORS)[number];
@IsOptional()
@IsArray()
@ArrayUnique()
@IsIn(PERMISSION_KEYS, { each: true })
permissions?: RolePermissionKey[];
@IsOptional()
@IsObject()
dataAccessPolicy?: Record<string, unknown>;
@IsOptional()
@ValidateIf((_, v) => v !== null)
@IsString()
parentId?: string | null;
@IsOptional()
@IsArray()
@ArrayUnique()
@IsString({ each: true })
treasuryAccountIds?: string[];
@IsOptional()
@IsBoolean()
treasuryOwnAccounts?: boolean;
2026-09-15 17:33:05 +03:30
}
export class UpdateOrgRoleDto {
@IsOptional()
@IsString()
@MinLength(2)
@MaxLength(80)
name?: string;
@IsOptional()
@IsString()
@MaxLength(280)
description?: string;
@IsOptional()
@IsIn([...ROLE_COLORS])
color?: (typeof ROLE_COLORS)[number];
@IsOptional()
@IsArray()
@ArrayUnique()
@IsIn(PERMISSION_KEYS, { each: true })
permissions?: RolePermissionKey[];
@IsOptional()
@IsObject()
dataAccessPolicy?: Record<string, unknown>;
@IsOptional()
@ValidateIf((_, v) => v !== null)
@IsString()
parentId?: string | null;
@IsOptional()
@IsArray()
@ArrayUnique()
@IsString({ each: true })
treasuryAccountIds?: string[];
@IsOptional()
@IsBoolean()
treasuryOwnAccounts?: boolean;
2026-09-15 17:33:05 +03:30
}
export class RolePermissionPatchItemDto {
@IsString()
id!: string;
@IsArray()
@ArrayUnique()
@IsIn(PERMISSION_KEYS, { each: true })
permissions!: RolePermissionKey[];
}
export class BulkUpdatePermissionsDto {
@IsArray()
@ValidateNested({ each: true })
@Type(() => RolePermissionPatchItemDto)
items!: RolePermissionPatchItemDto[];
}