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({ 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({ 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 }); }