summary refs log tree commit diff
diff options
context:
space:
mode:
authorFlam3rboy <34555296+Flam3rboy@users.noreply.github.com>2021-10-14 19:46:45 +0200
committerFlam3rboy <34555296+Flam3rboy@users.noreply.github.com>2021-10-14 19:46:45 +0200
commitded81bcd296d9d11b4c133a71f293cf7d2764bc1 (patch)
tree2f1411824829a14766f288ae99bdc9dfb082ae7e
parent:bug: fix migration + autojoin (diff)
downloadserver-ded81bcd296d9d11b4c133a71f293cf7d2764bc1.tar.xz
:sparkles: stickers
-rw-r--r--api/src/routes/guilds/#guild_id/stickers.ts74
-rw-r--r--api/src/routes/stickers/#sticker_id/index.ts12
2 files changed, 86 insertions, 0 deletions
diff --git a/api/src/routes/guilds/#guild_id/stickers.ts b/api/src/routes/guilds/#guild_id/stickers.ts
new file mode 100644

index 00000000..c122b72d --- /dev/null +++ b/api/src/routes/guilds/#guild_id/stickers.ts
@@ -0,0 +1,74 @@ +import { Member, Sticker } from "@fosscord/util"; +import { Router, Request, Response } from "express"; +import { route } from "@fosscord/api"; +import multer from "multer"; +const router = Router(); + +router.get("/", route({}), async (req: Request, res: Response) => { + const { guild_id } = req.params; + await Member.IsInGuildOrFail(req.user_id, guild_id); + + res.json(await Sticker.find({ guild_id })); +}); + +const bodyParser = multer({ + limits: { + fileSize: 1024 * 1024 * 100, + fields: 10, + files: 1 + }, + storage: multer.memoryStorage() +}).single("file"); + +router.post("/", bodyParser, route({ permission: "MANAGE_EMOJIS_AND_STICKERS" }), async (req: Request, res: Response) => { + const { guild_id } = req.params; + await Member.IsInGuildOrFail(req.user_id, guild_id); + + res.json(await Sticker.find({ guild_id })); +}); + +router.get("/:sticker_id", route({}), async (req: Request, res: Response) => { + const { guild_id, sticker_id } = req.params; + await Member.IsInGuildOrFail(req.user_id, guild_id); + + res.json(await Sticker.findOneOrFail({ guild_id, id: sticker_id })); +}); + +export interface ModifyGuildStickerSchema { + /** + * @minLength 2 + * @maxLength 30 + */ + name: string; + /** + * @minLength 2 + * @maxLength 100 + */ + description?: string; + /** + * @maxLength 200 + */ + tags: string; +} + +router.patch( + "/:sticker_id", + route({ body: "ModifyGuildStickerSchema", permission: "MANAGE_EMOJIS_AND_STICKERS" }), + async (req: Request, res: Response) => { + const { guild_id, sticker_id } = req.params; + const body = req.body as ModifyGuildStickerSchema; + + const sticker = await new Sticker({ ...body, guild_id, id: sticker_id }).save(); + return res.json(sticker); + } +); + +router.delete("/:sticker_id", route({ permission: "MANAGE_EMOJIS_AND_STICKERS" }), async (req: Request, res: Response) => { + const { guild_id, sticker_id } = req.params; + + await Sticker.delete({ guild_id, id: sticker_id }); + + return res.sendStatus(204); +}); + +export default router; diff --git a/api/src/routes/stickers/#sticker_id/index.ts b/api/src/routes/stickers/#sticker_id/index.ts new file mode 100644
index 00000000..293ca089 --- /dev/null +++ b/api/src/routes/stickers/#sticker_id/index.ts
@@ -0,0 +1,12 @@ +import { Sticker } from "@fosscord/util"; +import { Router, Request, Response } from "express"; +import { route } from "@fosscord/api"; +const router = Router(); + +router.get("/", route({}), async (req: Request, res: Response) => { + const { sticker_id } = req.params; + + res.json(await Sticker.find({ id: sticker_id })); +}); + +export default router;