From a6d82b466f61c1b60b1058d75b0647f2c0ac91a0 Mon Sep 17 00:00:00 2001 From: Flam3rboy <34555296+Flam3rboy@users.noreply.github.com> Date: Wed, 7 Apr 2021 20:26:19 +0200 Subject: [PATCH] :zap: use mongoose autopopulate --- package-lock.json | Bin 70751 -> 72203 bytes package.json | 4 +++- src/models/Guild.ts | 4 +++- src/models/Member.ts | 17 ++++++++++++++++- src/models/Message.ts | 16 ++++++++++++++-- src/models/Role.ts | 1 + src/models/User.ts | 7 +++++++ src/models/index.ts | 3 +++ 8 files changed, 47 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 902566edbd6800c95315a17f4b57583fe8d5f14e..17d70c4a9eebcb4125b85cd49c63b47ba814bf49 100644 GIT binary patch delta 855 zcmcb=f~9*4%Z4&WB^@qKAW+K9&r8qGFHY4>EG@||$S)|(Ni0cKvQkirGnib!7%zz_ ztY>JTXQ-qznQ@-z=5vgzSh)~NCMSLrV+P7jDlwcqVHS@Ly1Dwg`dIDL1?risxLR)V z0YR2fA2V}bM^9JdaM%2hk`nVobN%9ipvY`(bF-ZE0yA?r#{e@=V~a>jzhq~_?7-5h z^1{5*?2tsSs{E9+Bnv|egYpWGC|{Gp5;KcZvkJ3sN(HH@MUw*~#3n0*u?hl%5)>;YdKC&aH43JB6_XD($xQNN-7FEi z-yY3FgER^f=U4!vKzy?GES|}y8AUdCu=6oauAU()@c}}$aWc}E`lfAa^Y;JsdPY(b!RV~N> delta 87 zcmeC)!g7BF%Z4(>$@3T^C&w)m*lfl$lXY|4LOI6G30!R { - console.log("get", member, this); return member.joined_at; }); diff --git a/src/models/Member.ts b/src/models/Member.ts index fc9d5b99..52151235 100644 --- a/src/models/Member.ts +++ b/src/models/Member.ts @@ -1,7 +1,19 @@ -import { PublicUser, User, UserModel } from "./User"; +import { PublicUser, PublicUserProjection, User, UserModel } from "./User"; import { Schema, Types, Document } from "mongoose"; import db from "../util/Database"; +export const PublicMemberProjection = { + id: true, + guild_id: true, + nick: true, + roles: true, + joined_at: true, + pending: true, + deaf: true, + mute: true, + premium_since: true, +}; + export interface Member { id: string; guild_id: string; @@ -80,6 +92,9 @@ MemberSchema.virtual("user", { localField: "id", foreignField: "id", justOne: true, + autopopulate: { + select: PublicUserProjection, + }, }); // @ts-ignore diff --git a/src/models/Message.ts b/src/models/Message.ts index ee038f97..15ff57d3 100644 --- a/src/models/Message.ts +++ b/src/models/Message.ts @@ -1,7 +1,7 @@ import { Schema, Types, Document } from "mongoose"; import db from "../util/Database"; -import { PublicUser, UserModel } from "./User"; -import { MemberModel, PublicMember } from "./Member"; +import { PublicUser, PublicUserProjection, UserModel } from "./User"; +import { MemberModel, PublicMember, PublicMemberProjection } from "./Member"; import { Role, RoleModel } from "./Role"; import { Channel } from "./Channel"; @@ -229,6 +229,14 @@ export const MessageSchema = new Schema({ channel_id: String, guild_id: String, }, + // virtual: + // author: { + // ref: UserModel, + // localField: "author_id", + // foreignField: "id", + // justOne: true, + // autopopulate: { select: { id: true, user_data: false } }, + // }, }); MessageSchema.virtual("author", { @@ -236,6 +244,7 @@ MessageSchema.virtual("author", { localField: "author_id", foreignField: "id", justOne: true, + autopopulate: { select: PublicUserProjection }, }); MessageSchema.virtual("member", { @@ -250,6 +259,7 @@ MessageSchema.virtual("mentions", { localField: "mention_user_ids", foreignField: "id", justOne: false, + autopopulate: { select: PublicUserProjection }, }); MessageSchema.virtual("mention_roles", { @@ -257,6 +267,7 @@ MessageSchema.virtual("mention_roles", { localField: "mention_role_ids", foreignField: "id", justOne: false, + autopopulate: true, }); MessageSchema.virtual("mention_channels", { @@ -264,6 +275,7 @@ MessageSchema.virtual("mention_channels", { localField: "mention_channel_ids", foreignField: "id", justOne: false, + autopopulate: { select: { id: true, guild_id: true, type: true, name: true } }, }); MessageSchema.set("removeResponse", ["mention_channel_ids", "mention_role_ids", "mention_user_ids", "author_id"]); diff --git a/src/models/Role.ts b/src/models/Role.ts index adb75b0a..84ad55d0 100644 --- a/src/models/Role.ts +++ b/src/models/Role.ts @@ -34,6 +34,7 @@ export const RoleSchema = new Schema({ bot_id: String, }, }); +RoleSchema.set("removeResponse", ["guild_id"]); // @ts-ignore export const RoleModel = db.model("Role", RoleSchema, "roles"); diff --git a/src/models/User.ts b/src/models/User.ts index 76251e09..1f01e837 100644 --- a/src/models/User.ts +++ b/src/models/User.ts @@ -3,6 +3,13 @@ import { ClientStatus, Status } from "./Status"; import { Schema, Types, Document } from "mongoose"; import db from "../util/Database"; +export const PublicUserProjection = { + username: true, + discriminator: true, + id: true, + public_flags: true, + avatar: true, +}; export interface User { id: string; username: string; // username max length 32, min 2 diff --git a/src/models/index.ts b/src/models/index.ts index 03b9fe70..876e5984 100644 --- a/src/models/index.ts +++ b/src/models/index.ts @@ -1,5 +1,8 @@ import mongoose from "mongoose"; import { Schema } from "mongoose"; +import mongooseAutoPopulate from "mongoose-autopopulate"; + +mongoose.plugin(mongooseAutoPopulate); mongoose.plugin((schema: Schema, opts: any) => { schema.set("toObject", {