"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 = writeBackupFiles; 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 app_names_1 = require("../../../../../dict/app-names"); const dbHandler_1 = __importDefault(require("../../../dbHandler")); const export_mariadb_database_1 = __importDefault(require("../../../../../utils/backend/export-mariadb-database")); function writeBackupFiles(_a) { return __awaiter(this, arguments, void 0, function* ({ 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 newBackupDir = path_1.default.join(backup.user_id && userBackupDir ? userBackupDir : mainBackupDir, backup.uuid); fs_1.default.mkdirSync(newBackupDir, { recursive: true }); fs_1.default.mkdirSync(path_1.default.join(newBackupDir, sqlBackupDirName), { recursive: true, }); fs_1.default.mkdirSync(path_1.default.join(newBackupDir, schemasBackupDirName), { recursive: true, }); const userDatabases = backup.user_id ? (yield (0, dbHandler_1.default)({ query: `SHOW DATABASES LIKE '${app_names_1.AppNames["DsqlDbPrefix"]}${backup.user_id}_%'`, })) : undefined; const databasesToBackup = (userDatabases === null || userDatabases === void 0 ? void 0 : userDatabases.map((db) => Object.values(db)[0])) || [process.env.DSQL_DB_NAME || "datasquirel"]; for (let i = 0; i < databasesToBackup.length; i++) { const dbToBackup = databasesToBackup[i]; if (!dbToBackup) continue; const dbFileName = `${dbToBackup}.sql`; const dbFilePath = path_1.default.join(newBackupDir, sqlBackupDirName, dbFileName); (0, export_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(backup.user_id && targetUserPrivateDir ? targetUserPrivateDir : oldSchemasDir, schemaFileName); const destinationSchemaFilePath = path_1.default.join(newBackupDir, schemasBackupDirName, schemaFileName); fs_1.default.copyFileSync(originSchemaFilePath, destinationSchemaFilePath); } return { success: true }; } catch (error) { return { success: false, msg: `Failed to write backup files`, error: error.message, }; } }); }