summary refs log tree commit diff
path: root/src/routes/attachments.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/routes/attachments.ts')
-rw-r--r--src/routes/attachments.ts50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/routes/attachments.ts b/src/routes/attachments.ts
new file mode 100644

index 00000000..7d09e402 --- /dev/null +++ b/src/routes/attachments.ts
@@ -0,0 +1,50 @@ +import { Router } from "express"; +import multer from "multer"; +import Snowflake from "../Snowflake"; + +const multer_ = multer(); +const router = Router(); + +type Attachment = { + filename: string; + file: string; + id: string; + type: string; +}; + +router.post("/:filename", multer_.single("attachment"), async (req, res) => { + const { buffer, mimetype } = req.file; + const { filename } = req.params; + const { db } = req.server; + + const File: Attachment = { + filename, + file: buffer.toString("base64"), + id: Snowflake.generate(), + type: mimetype, + }; + + if (!(await db.data.attachments.push(File))) throw new Error("Error uploading file"); + + return res.status(201).send({ success: true, message: "attachment uploaded", id: File.id, filename }); +}); + +router.get("/:hash/:filename", async (req, res) => { + const { db } = req.server; + const { hash, filename } = req.params; + + const File: Attachment = await db.data.attachments({ id: hash, filename: filename }).get(); + + res.set("Content-Type", File.type); + return res.send(Buffer.from(File.file, "base64")); +}); + +router.delete("/:hash/:filename", async (req, res) => { + const { hash, filename } = req.params; + const { db } = req.server; + + await db.data.attachments({ id: hash, filename: filename }).delete(); + return res.send({ success: true, message: "attachment deleted" }); +}); + +export default router;