diff --git a/package.json b/package.json index 2815e2ed..5a993a80 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@fosscord/server-util", - "version": "1.0.3", + "version": "1.0.4", "description": "Utility functions for the all server repositories", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/src/models/Member.ts b/src/models/Member.ts index 52151235..1a775629 100644 --- a/src/models/Member.ts +++ b/src/models/Member.ts @@ -97,6 +97,14 @@ MemberSchema.virtual("user", { }, }); +MemberSchema.virtual("roles", { + ref: UserModel, + localField: "id", + foreignField: "id", + justOne: true, + autopopulate: true, +}); + // @ts-ignore export const MemberModel = db.model("Member", MemberSchema, "members"); diff --git a/src/models/Webhook.ts b/src/models/Webhook.ts new file mode 100644 index 00000000..4660686d --- /dev/null +++ b/src/models/Webhook.ts @@ -0,0 +1,83 @@ +import { Schema, Document, Types } from "mongoose"; +import { transpileModule } from "typescript"; +import db from "../util/Database"; +import { ChannelModel } from "./Channel"; +import { GuildModel } from "./Guild"; + +export interface Webhook {} + +export enum WebhookType { + Incoming = 1, + ChannelFollower = 2, +} + +export interface WebhookDocument extends Document, Webhook { + id: String; + type: number; + guild_id?: string; + channel_id: string; + name?: string; + avatar?: string; + token?: string; + application_id?: string; + user_id?: string; + source_guild_id: string; +} + +export const WebhookSchema = new Schema({ + id: { type: String, required: true }, + type: { type: Number, required: true }, + guild_id: String, + channel_id: String, + name: String, + avatar: String, + token: String, + application_id: String, + user_id: String, + source_guild_id: String, + source_channel_id: String, +}); + +WebhookSchema.virtual("source_guild", { + ref: GuildModel, + localField: "id", + foreignField: "source_guild_id", + justOne: true, + autopopulate: { + select: { + icon: true, + id: true, + name: true, + }, + }, +}); + +WebhookSchema.virtual("source_channel", { + ref: ChannelModel, + localField: "id", + foreignField: "source_channel_id", + justOne: true, + autopopulate: { + select: { + id: true, + name: true, + }, + }, +}); + +WebhookSchema.virtual("source_channel", { + ref: ChannelModel, + localField: "id", + foreignField: "source_channel_id", + justOne: true, + autopopulate: { + select: { + id: true, + name: true, + }, + }, +}); + +WebhookSchema.set("removeResponse", ["source_channel_id", "source_guild_id"]); + +export const WebhookModel = db.model("Webhook", WebhookSchema, "webhooks");