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>("Invite", InviteSchema, "invites");
|