diff --git a/src/models/Invite.ts b/src/models/Invite.ts index 590a4598..41f33a02 100644 --- a/src/models/Invite.ts +++ b/src/models/Invite.ts @@ -1,5 +1,8 @@ import { Schema, Document, Types } from "mongoose"; import db from "../util/Database"; +import { ChannelModel } from "./Channel"; +import { UserModel } from "./User"; +import { GuildModel } from "./Guild"; export interface Invite extends Document { code: string; @@ -33,5 +36,62 @@ export const InviteSchema = new Schema({ target_user_type: Number, }); +InviteSchema.virtual("channel", { + ref: ChannelModel, + localField: "channel_id", + foreignField: "id", + justOne: true, + autopopulate: { + select: { + id: true, + name: true, + type: true, + }, + }, +}); + +InviteSchema.virtual("inviter", { + ref: UserModel, + localField: "inviter_id", + foreignField: "id", + justOne: true, + autopopulate: { + select: { + id: true, + username: true, + avatar: true, + discriminater: true, + public_flags: true, + }, + }, +}); + +InviteSchema.virtual("guild", { + ref: GuildModel, + localField: "guild_id", + foreignField: "id", + justOne: true, + autopopulate: { + select: { + id: true, + name: true, + splash: true, + banner: true, + description: true, + icon: true, + features: true, + verification_level: true, + vanity_url_code: true, + welcome_screen: true, + nsfw: true, + + // TODO: hide the following entries: + // channels: false, + // roles: false, + // emojis: false, + }, + }, +}); + // @ts-ignore export const InviteModel = db.model("Invite", InviteSchema, "invites");