// src/calendar/dto/create-invite.dto.ts import { IsArray, IsEmail, IsISO8601, IsOptional, IsString, IsInt, MinLength, ValidateNested, } from 'class-validator'; import { Type } from 'class-transformer'; import { BaseEntity } from 'src/module/meta/entity/base-entity.entity'; class IcsMeetingDto extends BaseEntity { @IsString() name: string; @IsEmail() email: string; } export class CreateInviteDto { @IsString() @MinLength(3) title: string; @IsString() @IsOptional() description?: string; @IsISO8601() startsAt: string; // ISO string e.g. "2025-08-30T10:00:00+05:30" @IsInt() durationMinutes: number; @IsString() @IsOptional() meetingUrl?: string; @IsString() @IsOptional() location?: string; @IsString() @IsOptional() organizerName?: string; @IsEmail() @IsOptional() organizerEmail?: string; @IsArray() @ValidateNested({ each: true }) @Type(() => IcsMeetingDto) attendees: IcsMeetingDto[]; }