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 , excluded_recipients = [ ] , origin_channel_id ? ) { 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 ) { return { ... this , recipients : this . recipients . filter ( ( r ) => ! excluded_recipients . includes ( r . id ) ) , } ; } }