diff --git a/src/models/Template.ts b/src/models/Template.ts
new file mode 100644
index 00000000..e057edd7
--- /dev/null
+++ b/src/models/Template.ts
@@ -0,0 +1,61 @@
+import {
+ Schema,
+ model,
+ Types,
+ Document
+} from "mongoose";
+import db from "../util/Database";
+import {
+ PublicUser,
+ User,
+ UserModel,
+ PublicUserProjection
+} from "./User";
+import {
+ Guild, GuildModel
+} from "./Guild";
+
+export interface Template extends Document {
+ code: string;
+ name: string;
+ description ? : string;
+ usage_count ? : number;
+ cretor_id: string;
+ creator: User;
+ created_at: Date;
+ updated_at: Date;
+ source_guild_id: String;
+ serialized_source_guild: Guild;
+}
+
+export const TemplateSchema = new Schema({
+ code: String,
+ name: String,
+ description: String,
+ usage_count: Number,
+ cretor_id: String,
+ created_at: Date,
+ updated_at: Date,
+ source_guild_id: String,
+});
+
+TemplateSchema.virtual("creator", {
+ ref: UserModel,
+ localField: "creator_id",
+ foreignField: "id",
+ justOne: false,
+ autopopulate: {
+ select: PublicUserProjection
+ },
+});
+
+TemplateSchema.virtual("serialized_source_guild", {
+ ref: GuildModel,
+ localField: "source_guild_id",
+ foreignField: "id",
+ justOne: false,
+ autopopulate: true,
+});
+
+// @ts-ignore
+export const TemplateModel = db.model < Template > ("Template", TemplateSchema, "templates");
\ No newline at end of file
diff --git a/src/models/index.ts b/src/models/index.ts
index 5752e60d..004095db 100644
--- a/src/models/index.ts
+++ b/src/models/index.ts
@@ -25,6 +25,7 @@ export * from "./Ban";
export * from "./Channel";
export * from "./Emoji";
export * from "./Event";
+export * from "./Template";
export * from "./Guild";
export * from "./Invite";
export * from "./Interaction";
|