import { IsBoolean, IsHexColor, IsIn, IsNotEmpty, IsOptional, IsString, IsUrl, } from 'class-validator'; /** * DTO for updating an existing calendar source. * All fields are optional — only provided fields are updated. * * Security: * - T-05-11: URL restricted to https only if provided * - CAL-02: isVisible toggle for widget source visibility */ export class UpdateCalendarSourceDto { @IsOptional() @IsString() @IsNotEmpty() name?: string; @IsOptional() @IsIn(['caldav', 'ics', 'exchange']) type?: string; @IsOptional() @IsUrl( { protocols: ['https'], require_protocol: true }, { message: 'URL must use HTTPS protocol' }, ) url?: string; @IsOptional() @IsString() username?: string; @IsOptional() @IsString() password?: string; @IsOptional() @IsIn(['ews', 'graph']) exchangeMode?: string; @IsOptional() @IsString() domain?: string; @IsOptional() @IsHexColor() color?: string; @IsOptional() @IsBoolean() isVisible?: boolean; }