aboutsummaryrefslogtreecommitdiffstats
path: root/packages/api/routes/backups.ts
blob: 949c826fa81793bb6c9de5aa9af3291a528a9508 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import { Hono } from "hono";

import { authMiddleware } from "../middlewares/auth";

const app = new Hono()
  .use(authMiddleware)

  // GET /backups
  .get("/", async (c) => {
    const backups = await c.var.api.backups.list();
    return c.json(backups, 200);
  })

  // POST /backups
  .post("/", async (c) => {
    const backup = await c.var.api.backups.triggerBackup();
    return c.json(backup, 201);
  })

  // GET /backups/[backupId]
  .get("/:backupId", async (c) => {
    const backupId = c.req.param("backupId");
    const backup = await c.var.api.backups.get({ backupId });
    return c.json(backup, 200);
  })

  // GET /backups/[backupId]/download
  .get("/:backupId/download", async (c) => {
    const backupId = c.req.param("backupId");
    const backup = await c.var.api.backups.get({ backupId });
    if (!backup.assetId) {
      return c.json({ error: "Backup not found" }, 404);
    }
    return c.redirect(`/api/assets/${backup.assetId}`);
  })

  // DELETE /backups/[backupId]
  .delete("/:backupId", async (c) => {
    const backupId = c.req.param("backupId");
    await c.var.api.backups.delete({ backupId });
    return c.body(null, 204);
  });

export default app;