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

78 lines
1.5 KiB
TypeScript
Raw Normal View History

2026-09-15 17:33:05 +03:30
import { Type } from 'class-transformer';
import {
ArrayUnique,
IsArray,
IsIn,
IsOptional,
IsString,
MaxLength,
MinLength,
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[];
}
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[];
}
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[];
}