summary refs log tree commit diff
path: root/src/util/dtos/DmChannelDTO.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/util/dtos/DmChannelDTO.ts')
-rw-r--r--src/util/dtos/DmChannelDTO.ts41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/util/dtos/DmChannelDTO.ts b/src/util/dtos/DmChannelDTO.ts
new file mode 100644
index 00000000..226b2f9d
--- /dev/null
+++ b/src/util/dtos/DmChannelDTO.ts
@@ -0,0 +1,41 @@
+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)),
+		};
+	}
+}