mirror of
https://github.com/alkimake/paperclip.git
synced 2026-06-17 03:10:38 +09:00
31 lines
919 B
TypeScript
31 lines
919 B
TypeScript
|
|
import { Router } from "express";
|
||
|
|
import type { BackupRetentionPolicy, RunDatabaseBackupResult } from "@paperclipai/db";
|
||
|
|
import { assertInstanceAdmin } from "./authz.js";
|
||
|
|
|
||
|
|
export type InstanceDatabaseBackupTrigger = "manual" | "scheduled";
|
||
|
|
|
||
|
|
export type InstanceDatabaseBackupRunResult = RunDatabaseBackupResult & {
|
||
|
|
trigger: InstanceDatabaseBackupTrigger;
|
||
|
|
backupDir: string;
|
||
|
|
retention: BackupRetentionPolicy;
|
||
|
|
startedAt: string;
|
||
|
|
finishedAt: string;
|
||
|
|
durationMs: number;
|
||
|
|
};
|
||
|
|
|
||
|
|
export type InstanceDatabaseBackupService = {
|
||
|
|
runManualBackup(): Promise<InstanceDatabaseBackupRunResult>;
|
||
|
|
};
|
||
|
|
|
||
|
|
export function instanceDatabaseBackupRoutes(service: InstanceDatabaseBackupService) {
|
||
|
|
const router = Router();
|
||
|
|
|
||
|
|
router.post("/instance/database-backups", async (req, res) => {
|
||
|
|
assertInstanceAdmin(req);
|
||
|
|
const result = await service.runManualBackup();
|
||
|
|
res.status(201).json(result);
|
||
|
|
});
|
||
|
|
|
||
|
|
return router;
|
||
|
|
}
|