datasquirel/package-shared/functions/backend/handle-backup.ts
Benjamin Toby 382da38bb0 Updates
2025-07-09 20:42:01 +01:00

62 lines
1.9 KiB
TypeScript

import { DSQL_DATASQUIREL_BACKUPS } from "../../types/dsql";
import grabConfig from "../../utils/backend/config/grab-config";
import dbGrabUserResource from "../web-app/db/grab-user-resource";
import suAddBackup from "./backups/su/add-backup";
import deleteBackup from "./backups/su/delete-backup";
type HandleBackupParams = {
appBackup?: boolean;
userId?: string | number;
};
export default async function handleBackup({
appBackup,
userId,
}: HandleBackupParams) {
const { appConfig } = grabConfig();
const maxBackups = appConfig.main.max_backups?.value || 20;
const { count: existingAppBackupsCount } =
await dbGrabUserResource<DSQL_DATASQUIREL_BACKUPS>({
tableName: "backups",
isSuperUser: true,
query: {
query: {
user_id: {
nullValue: appBackup ? true : undefined,
value: appBackup ? undefined : String(userId),
},
},
},
countOnly: true,
});
if (existingAppBackupsCount && existingAppBackupsCount >= maxBackups) {
const { single: oldestAppBackup } =
await dbGrabUserResource<DSQL_DATASQUIREL_BACKUPS>({
tableName: "backups",
isSuperUser: true,
query: {
query: {
user_id: {
nullValue: appBackup ? true : undefined,
value: appBackup ? undefined : String(userId),
},
},
order: {
field: "id",
strategy: "ASC",
},
limit: 1,
},
});
if (oldestAppBackup?.id) {
await deleteBackup({ backup: oldestAppBackup });
}
}
await suAddBackup({ targetUserId: userId });
}