summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/models/Guild.ts4
-rw-r--r--src/models/Member.ts17
-rw-r--r--src/models/Message.ts16
-rw-r--r--src/models/Role.ts1
-rw-r--r--src/models/User.ts7
-rw-r--r--src/models/index.ts3
6 files changed, 44 insertions, 4 deletions
diff --git a/src/models/Guild.ts b/src/models/Guild.ts

index d3f098ea..aa520329 100644 --- a/src/models/Guild.ts +++ b/src/models/Guild.ts
@@ -96,12 +96,14 @@ GuildSchema.virtual("channels", { localField: "id", foreignField: "guild_id", justOne: false, + autopopulate: true, }); GuildSchema.virtual("roles", { ref: RoleModel, localField: "id", foreignField: "guild_id", justOne: false, + autopopulate: true, }); // nested populate is needed for member users: https://gist.github.com/yangsu/5312204 @@ -117,6 +119,7 @@ GuildSchema.virtual("emojis", { localField: "id", foreignField: "guild_id", justOne: false, + autopopulate: true, }); GuildSchema.virtual("joined_at", { @@ -125,7 +128,6 @@ GuildSchema.virtual("joined_at", { foreignField: "guild_id", justOne: true, }).get((member: any, virtual: any, doc: any) => { - 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<RoleDocument>("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", {