62 lines
1.9 KiB
TypeScript
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 });
|
|
}
|