using ModuleTools.BusinessLogics; using ModuleTools.Enums; using ModuleTools.Extensions; using ModuleTools.Interfaces; using ModuleTools.Models; using SecurityBusinessLogic.BindingModels; using SecurityBusinessLogic.Interfaces; using System; using System.Collections.Generic; using System.IO; namespace SecurityBusinessLogic.BusinessLogics { /// /// Логика работы с бекапом /// public class BackupBusinessLogic { /// /// Серивс для работы с бекапом /// private readonly IBackupService _service; /// /// Менеджер безопасности /// private readonly ISecurityManager _security; /// /// Перечень ошибок при выполнении операции /// public List<(string Title, string Message)> Errors { get; protected set; } /// /// Логика работы с бекапом /// /// public BackupBusinessLogic(IBackupService service) { _service = service; _security = DependencyManager.Instance.Resolve(); Errors = new(); } /// /// Создание бекапа с данными /// /// /// public bool CreateBackUp(BackupBindingModel model) { if (model.FolderName.IsEmpty()) { Errors.Add(("Ошибка", "Путь до папки не указан")); return false; } try { if (NoAccess()) { return false; } var result = _service.CreateBackUp(model); if (!result.IsSucceeded) { Errors.AddRange(result.Errors); return false; } return true; } catch (Exception ex) { Errors.Add(("Ошибка", ex.Message)); return false; } } /// /// Восстанволение данных через бекап /// /// /// public bool RestoreBackUp(BackupBindingModel model) { if (model.FolderName.IsEmpty() && model.ArchiveFileName.IsEmpty()) { Errors.Add(("Ошибка", "Путь до папки/архива не указан")); return false; } if (model.ArchiveFileName.IsNotEmpty() && !File.Exists(model.ArchiveFileName)) { Errors.Add(("Ошибка", "Файл с архивом не найден")); return false; } if (model.ArchiveFileName.IsEmpty() && !Directory.Exists(model.FolderName)) { Errors.Add(("Ошибка", "Папка с даными не найдена")); return false; } try { if (NoAccess()) { return false; } var result = _service.RestoreBackUp(model); if (!result.IsSucceeded) { Errors.AddRange(result.Errors); return false; } return true; } catch (Exception ex) { Errors.Add(("Ошибка", ex.Message)); return false; } } /// /// Проверка доступности операции для пользователя /// /// private bool NoAccess() { if (_security.CheckAccess(new SecurityManagerCheckAccessModel(null, AccessOperation.РаботасБекапом, AccessType.Delete, "бекап"))) { return false; } Errors.Add(("Ошибка безопасности", _security.ErrorMessage)); return true; } } }