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;
}
}
}