"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = suRestoreBackup; const fs_1 = __importDefault(require("fs")); const path_1 = __importDefault(require("path")); const grab_dir_names_1 = __importDefault(require("../../../../../utils/backend/names/grab-dir-names")); const import_mariadb_database_1 = __importDefault(require("../../../../../utils/backend/import-mariadb-database")); function suRestoreBackup(_a) { return __awaiter(this, arguments, void 0, function* ({ user, backup, }) { try { const { mainBackupDir, userBackupDir, sqlBackupDirName, schemasBackupDirName, targetUserPrivateDir, oldSchemasDir, } = (0, grab_dir_names_1.default)({ userId: backup.user_id, }); if (backup.user_id && !userBackupDir) { return { success: false, msg: `Error grabbing user backup directory`, }; } if (!backup.uuid) { return { success: false, msg: `No UUID found for backup`, }; } const existingBackupDir = path_1.default.join(backup.user_id && userBackupDir ? userBackupDir : mainBackupDir, backup.uuid); const userDatabases = fs_1.default.readdirSync(path_1.default.join(existingBackupDir, sqlBackupDirName)); const databasesToRestore = (userDatabases === null || userDatabases === void 0 ? void 0 : userDatabases.map((db) => db.split(".")[0])) || [process.env.DSQL_DB_NAME || "datasquirel"]; for (let i = 0; i < databasesToRestore.length; i++) { const dbToBackup = databasesToRestore[i]; if (!dbToBackup) continue; const dbFileName = `${dbToBackup}.sql`; const dbFilePath = path_1.default.join(existingBackupDir, sqlBackupDirName, dbFileName); (0, import_mariadb_database_1.default)({ dbFullName: dbToBackup, targetFilePath: dbFilePath, }); } const userSchemaDirFiles = targetUserPrivateDir ? fs_1.default .readdirSync(targetUserPrivateDir) .filter((dirName) => dirName.match(/^\d+\.json$/)) : undefined; const appSchemaDirFiles = fs_1.default .readdirSync(oldSchemasDir) .filter((dirName) => dirName.match(/^\d+\.json$/)); const schemaFilesToWrite = backup.user_id && userSchemaDirFiles ? userSchemaDirFiles : appSchemaDirFiles; for (let i = 0; i < schemaFilesToWrite.length; i++) { const schemaFileName = schemaFilesToWrite[i]; const originSchemaFilePath = path_1.default.join(existingBackupDir, schemasBackupDirName, schemaFileName); const destinationSchemaFilePath = path_1.default.join(backup.user_id && targetUserPrivateDir ? targetUserPrivateDir : oldSchemasDir, schemaFileName); fs_1.default.copyFileSync(originSchemaFilePath, destinationSchemaFilePath); } return { success: true }; } catch (error) { return { success: false, msg: `Failed to write backup files`, error: error.message, }; } }); }