diff --git a/src/routes/guilds/#guild_id/templates.ts b/src/routes/guilds/#guild_id/templates.ts
index 61b2f9d0..03435c35 100644
--- a/src/routes/guilds/#guild_id/templates.ts
+++ b/src/routes/guilds/#guild_id/templates.ts
@@ -2,135 +2,96 @@ import { Request, Response, Router } from "express";
import { TemplateModel, GuildModel, getPermission, toObject, UserModel, Snowflake } from "@fosscord/server-util";
import { HTTPError } from "lambert-server";
import { TemplateCreateSchema, TemplateModifySchema } from "../../../schema/Template";
-import { emitEvent } from "../../../util/Event";
import { check } from "../../../util/instanceOf";
-import { getPublicUser } from "../../../util/User";
+import { generateCode } from "../../../util/String";
const router: Router = Router();
-router.get("/", async (req: Request, res: Response) => {
- const guild_id = req.params.id;
+const TemplateGuildProjection = {
+ name: true,
+ description: true,
+ region: true,
+ verification_level: true,
+ default_message_notifications: true,
+ explicit_content_filter: true,
+ preferred_locale: true,
+ afk_timeout: true,
+ roles: true,
+ channels: true,
+ afk_channel_id: true,
+ system_channel_id: true,
+ system_channel_flags: true,
+ icon_hash: true,
+};
- const guild = await GuildModel.exists({ id: guild_id });
- if (!guild) throw new HTTPError("Guild not found", 404);
+router.get("/", async (req: Request, res: Response) => {
+ const { guild_id } = req.params;
var templates = await TemplateModel.find({ source_guild_id: guild_id }).exec();
return res.json(toObject(templates));
});
router.post("/", check(TemplateCreateSchema), async (req: Request, res: Response) => {
+ const guild_id = req.params.guild_id;
- const guild_id = req.params.guild_id;
- const { name } = req.body;
-
- const guild = await GuildModel.findOne({ id: guild_id }, { id: true }).exec();
+ const guild = await GuildModel.findOne({ id: guild_id }, TemplateGuildProjection).exec();
if (!guild) throw new HTTPError("Guild not found", 404);
- if (!name) throw new HTTPError("Unknown name", 404);
-
- const user = await UserModel.findOne({ id: req.user_id }).exec();
- if (!user) throw new HTTPError("User not found", 404);
const perms = await getPermission(req.user_id, guild_id);
+ perms.hasThrow("MANAGE_GUILD");
- if (!perms.has("MANAGE_GUILD"))
- throw new HTTPError("You missing the MANAGE_GUILD permission", 401);
-
- const template_id = Snowflake.generate();
-
- var template = {
+ const template = await new TemplateModel({
...req.body,
- id: template_id,
+ code: generateCode(),
creator_id: req.user_id,
- creator: user,
created_at: new Date(),
updated_at: new Date(),
source_guild_id: guild_id,
- serialized_source_guild: guild
- }
-
- const templatenew = await new TemplateModel(template).save();
+ serialized_source_guild: guild,
+ }).save();
- res.json(toObject(templatenew)).send();
+ res.json(toObject(template)).send();
});
-router.delete("/:template_id", async (req: Request, res: Response) => {
-
- const guild_id = req.params.guild_id;
- const { template_id } = req.params;
-
- const guild = await GuildModel.findOne({ id: guild_id }, { id: true }).exec();
- if (!guild) throw new HTTPError("Guild not found", 404);
- if (!template_id) throw new HTTPError("Unknown template_id", 404);
-
- const user = await UserModel.findOne({ id: req.user_id }).exec();
- if (!user) throw new HTTPError("User not found", 404);
+router.delete("/:code", async (req: Request, res: Response) => {
+ const guild_id = req.params.guild_id;
+ const { code } = req.params;
const perms = await getPermission(req.user_id, guild_id);
+ perms.hasThrow("MANAGE_GUILD");
- if (!perms.has("MANAGE_GUILD"))
- throw new HTTPError("You missing the MANAGE_GUILD permission", 401);
-
- await TemplateModel.findOneAndDelete({
- id: template_id,
- source_guild_id: guild_id
+ const template = await TemplateModel.findOneAndDelete({
+ code,
}).exec();
- res.send("Deleted");
+ res.send(toObject(template));
});
-router.put("/:template_id", async (req: Request, res: Response) => {
-
- const guild_id = req.params.guild_id;
- const { template_id } = req.params;
+router.put("/:code", async (req: Request, res: Response) => {
+ const guild_id = req.params.guild_id;
+ const { code } = req.params;
- const guild = await GuildModel.findOne({ id: guild_id }, { id: true }).exec();
+ const guild = await GuildModel.findOne({ id: guild_id }, TemplateGuildProjection).exec();
if (!guild) throw new HTTPError("Guild not found", 404);
- if (!template_id) throw new HTTPError("Unknown template_id", 404);
-
- const user = await UserModel.findOne({ id: req.user_id }).exec();
- if (!user) throw new HTTPError("User not found", 404);
-
- const template = await TemplateModel.findOneAndDelete({ id: template_id }).exec();
- if (!template) throw new HTTPError("template not found", 404);
const perms = await getPermission(req.user_id, guild_id);
+ perms.hasThrow("MANAGE_GUILD");
- if (!perms.has("MANAGE_GUILD"))
- throw new HTTPError("You missing the MANAGE_GUILD permission", 401);
-
- var templateobj = await TemplateModel.findOneAndUpdate({
- id: template_id,
- serialized_source_guild: guild
- }).exec();
+ const template = await TemplateModel.findOneAndUpdate({ code }, { serialized_source_guild: guild }).exec();
- res.json(toObject(templateobj)).send();
+ res.json(toObject(template)).send();
});
-router.patch("/:template_id", check(TemplateModifySchema), async (req: Request, res: Response) => {
- const guild_id = req.params.guild_id;
- const { template_id } = req.params;
-
- const guild = await GuildModel.findOne({ id: guild_id }, { id: true }).exec();
- if (!guild) throw new HTTPError("Guild not found", 404);
- if (!template_id) throw new HTTPError("Unknown template_id", 404);
-
- const user = await UserModel.findOne({ id: req.user_id }).exec();
- if (!user) throw new HTTPError("User not found", 404);
-
- const template = await TemplateModel.findOne({ id: template_id }).exec();
- if (!template) throw new HTTPError("template not found", 404);
+router.patch("/:code", check(TemplateModifySchema), async (req: Request, res: Response) => {
+ const { guild_id } = req.params;
+ const { code } = req.params;
const perms = await getPermission(req.user_id, guild_id);
+ perms.hasThrow("MANAGE_GUILD");
- if (!perms.has("MANAGE_GUILD"))
- throw new HTTPError("You missing the MANAGE_GUILD permission", 401);
-
- var templateobj = await TemplateModel.findOneAndUpdate({
- id: template_id
- }, {name: req.body.name,
- description: req.body.description || "No description"}).exec();
+ const template = await TemplateModel.findOneAndUpdate({ code }, { name: req.body.name, description: req.body.description }).exec();
- res.json(toObject(templateobj)).send();
+ res.json(toObject(template)).send();
});
export default router;
diff --git a/src/routes/guilds/templates/index.ts b/src/routes/guilds/templates/index.ts
index 80dbe5f8..2d8cdf0e 100644
--- a/src/routes/guilds/templates/index.ts
+++ b/src/routes/guilds/templates/index.ts
@@ -8,23 +8,17 @@ import { check } from "../../../util/instanceOf";
import Config from "../../../util/Config";
import { addMember } from "../../../util/Member";
-router.get("/:template_id", async (req: Request, res: Response) => {
+router.get("/:code", async (req: Request, res: Response) => {
+ const { code } = req.params;
- const guild_id = req.params.guild_id;
- const { template_id } = req.params;
-
- const guild = await GuildModel.findOne({ id: guild_id }, { id: true }).exec();
- if (!guild) throw new HTTPError("Guild not found", 404);
- if (!template_id) throw new HTTPError("Unknown template_id", 404);
-
- const template = await TemplateModel.findOne({ id: template_id }).exec();
+ const template = await TemplateModel.findOne({ id: code }).exec();
if (!template) throw new HTTPError("template not found", 404);
res.json(toObject(template)).send();
});
-router.post("/:template_id", check(GuildTemplateCreateSchema), async (req: Request, res: Response) => {
- const { template_id } = req.params;
+router.post("/:code", check(GuildTemplateCreateSchema), async (req: Request, res: Response) => {
+ const { code } = req.params;
const body = req.body as GuildTemplateCreateSchema;
const { maxGuilds } = Config.get().limits.user;
@@ -34,9 +28,7 @@ router.post("/:template_id", check(GuildTemplateCreateSchema), async (req: Reque
throw new HTTPError(`Maximum number of guilds reached ${maxGuilds}`, 403);
}
- if (!template_id) throw new HTTPError("Unknown template_id", 404);
-
- const template = await TemplateModel.findOne({ id: template_id }).exec();
+ const template = await TemplateModel.findOne({ code: code }).exec();
if (!template) throw new HTTPError("template not found", 404);
const guild_id = Snowflake.generate();
@@ -45,7 +37,7 @@ router.post("/:template_id", check(GuildTemplateCreateSchema), async (req: Reque
...body,
...template.serialized_source_guild,
id: guild_id,
- owner_id: req.user_id
+ owner_id: req.user_id,
};
await Promise.all([
@@ -68,5 +60,4 @@ router.post("/:template_id", check(GuildTemplateCreateSchema), async (req: Reque
res.status(201).json({ id: guild.id });
});
-
export default router;
|