Files
IdP/apps/api-gateway/src/dto/chat.dto.ts
2026-06-24 23:17:24 +03:00

86 lines
1.4 KiB
TypeScript

import { IsArray, IsBoolean, IsIn, IsOptional, IsString, MinLength } from 'class-validator';
export class CreateChatRoomDto {
@IsString()
@MinLength(1)
name!: string;
@IsOptional()
@IsArray()
@IsString({ each: true })
memberUserIds?: string[];
}
export class UpdateChatRoomDto {
@IsOptional()
@IsString()
@MinLength(1)
name?: string;
@IsOptional()
@IsBoolean()
notificationsMuted?: boolean;
}
export class SendChatMessageDto {
@IsString()
@IsIn(['TEXT', 'IMAGE', 'AUDIO', 'VOICE', 'FILE', 'EMOJI', 'POLL'])
type!: string;
@IsOptional()
@IsString()
content?: string;
@IsOptional()
@IsString()
replyToId?: string;
@IsOptional()
@IsString()
storageKey?: string;
@IsOptional()
@IsString()
mimeType?: string;
@IsOptional()
@IsString()
metadataJson?: string;
@IsOptional()
poll?: {
question: string;
options: string[];
allowsMultiple?: boolean;
isAnonymous?: boolean;
};
}
export class VotePollDto {
@IsArray()
@IsString({ each: true })
optionIds!: string[];
}
export class SetRoomNotificationsMutedDto {
@IsBoolean()
muted!: boolean;
}
export class AddChatRoomMemberDto {
@IsString()
memberUserId!: string;
}
export class EditChatMessageDto {
@IsString()
@MinLength(1)
content!: string;
}
export class MarkRoomReadDto {
@IsOptional()
@IsString()
lastMessageId?: string;
}