import { MinimalPublicUserDTO } from "./UserDTO"; import { Channel, PublicUserProjection, User } from "../entities"; export class DmChannelDTO { icon: string | null; id: string; last_message_id: string | null; name: string | null; origin_channel_id: string | null; owner_id?: string; recipients: MinimalPublicUserDTO[]; type: number; static async from(channel: Channel, excluded_recipients: string[] = [], origin_channel_id?: string) { const obj = new DmChannelDTO() obj.icon = channel.icon || null obj.id = channel.id obj.last_message_id = channel.last_message_id || null obj.name = channel.name || null obj.origin_channel_id = origin_channel_id || null obj.owner_id = channel.owner_id obj.type = channel.type obj.recipients = (await Promise.all(channel.recipients!.filter(r => !excluded_recipients.includes(r.user_id)).map(async r => { return await User.findOneOrFail({ where: { id: r.user_id }, select: PublicUserProjection }) }))).map(u => new MinimalPublicUserDTO(u)) return obj } excludedRecipients(excluded_recipients: string[]): DmChannelDTO { return { ...this, recipients: this.recipients.filter(r => !excluded_recipients.includes(r.id)) } } }