import dbGrabUserResource from "@/src/functions/db/grab-user-resource"; import { DSQL_DATASQUIREL_BACKUPS } from "@/package-shared/types/dsql"; import suAddBackup from "@/src/functions/api/su/add-backup"; import grabConfig from "@/package-shared/utils/backend/config/grab-config"; import deleteBackup from "@/src/functions/api/su/add-backup/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 }); }