summary refs log tree commit diff
path: root/src/api/routes/read-states/ack-bulk.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/api/routes/read-states/ack-bulk.ts')
-rw-r--r--src/api/routes/read-states/ack-bulk.ts41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/api/routes/read-states/ack-bulk.ts b/src/api/routes/read-states/ack-bulk.ts
new file mode 100644
index 00000000..f77ecedf
--- /dev/null
+++ b/src/api/routes/read-states/ack-bulk.ts
@@ -0,0 +1,41 @@
+import { Router, Request, Response } from "express";
+import { route } from "@fosscord/api";
+import { AckBulkSchema, ReadState } from "@fosscord/util";
+const router = Router();
+
+router.post(
+	"/",
+	route({ body: "AckBulkSchema" }),
+	async (req: Request, res: Response) => {
+		const body = req.body as AckBulkSchema;
+
+		// TODO: what is read_state_type ?
+
+		await Promise.all([
+			// for every new state
+			...body.read_states.map(async (x) => {
+				// find an existing one
+				const ret =
+					(await ReadState.findOne({
+						where: {
+							user_id: req.user_id,
+							channel_id: x.channel_id,
+						},
+					})) ??
+					// if it doesn't exist, create it (not a promise)
+					ReadState.create({
+						user_id: req.user_id,
+						channel_id: x.channel_id,
+					});
+
+				ret.last_message_id = x.message_id;
+
+				return ret.save();
+			}),
+		]);
+
+		return res.status(204);
+	},
+);
+
+export default router;