datasquirel/package-shared/functions/backend/handle-backup.ts
Benjamin Toby 20a390e4a8 Updates
2025-07-18 18:34:04 +01:00

69 lines
2.2 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 || 4;
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) {
console.log(`Backups exceed Limit ...`);
const { batch: oldestAppBackups } =
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: "DESC",
},
},
});
if (oldestAppBackups) {
for (let i = 0; i < oldestAppBackups.length; i++) {
const backup = oldestAppBackups[i];
console.log(`Handling Backup ${backup.uuid} ...`);
if (i < maxBackups - 1) continue;
console.log(`Deleting Backup ${backup.uuid} ...`);
await deleteBackup({ backup: backup });
}
}
}
await suAddBackup({ targetUserId: userId });
}