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