3 files changed, 60 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)),
+ };
+ }
+}
diff --git a/src/util/dtos/UserDTO.ts b/src/util/dtos/UserDTO.ts
new file mode 100644
index 00000000..ee2752a4
--- /dev/null
+++ b/src/util/dtos/UserDTO.ts
@@ -0,0 +1,17 @@
+import { User } from "../entities";
+
+export class MinimalPublicUserDTO {
+ avatar?: string | null;
+ discriminator: string;
+ id: string;
+ public_flags: number;
+ username: string;
+
+ constructor(user: User) {
+ this.avatar = user.avatar;
+ this.discriminator = user.discriminator;
+ this.id = user.id;
+ this.public_flags = user.public_flags;
+ this.username = user.username;
+ }
+}
diff --git a/src/util/dtos/index.ts b/src/util/dtos/index.ts
new file mode 100644
index 00000000..0e8f8459
--- /dev/null
+++ b/src/util/dtos/index.ts
@@ -0,0 +1,2 @@
+export * from "./DmChannelDTO";
+export * from "./UserDTO";
|