using ModuleTools.BindingModels; using ModuleTools.Enums; using ModuleTools.Interfaces; using ModuleTools.ViewModels; using System; using System.Threading.Tasks; namespace ModuleTools.BusinessLogics { /// /// Базовый класс для логики сущности /// /// /// /// /// public class GenericBusinessLogic : CoreBusinessLogic where G : GetBindingModel where S : SetBindingModel where L : ListViewModel where E : ElementViewModel { /// /// Сервис с хранилищем данных /// protected IGenerticEntityService Service { get; set; } /// /// Возможен ли просмотр без авторизации /// protected bool _allowSimpleView = true; public GenericBusinessLogic(IGenerticEntityService service, string entity, AccessOperation serviceOperation) { Service = service; _entity = entity; _serviceOperation = serviceOperation; } /// /// Получение списка записей /// /// /// public async Task GetListAsync(G model) { Errors.Clear(); try { model.HaveRight = !NoAccess(model, AccessType.View); if (model.HaveRight && !_allowSimpleView) { throw new MethodAccessException("Нет прав на получение списка"); } var result = await Service.ReadAsync(model); if (!result.IsSucceeded) { Errors.AddRange(result.Errors); return null; } return result.Result as L; } catch (Exception ex) { Errors.Add(("Ошибка получения", ex.Message)); } return null; } /// /// Получение записи /// /// /// public async Task GetElementAsync(G model) { Errors.Clear(); try { model.HaveRight = !NoAccess(model, AccessType.View); if (model.HaveRight && !_allowSimpleView) { throw new MethodAccessException("Нет прав на получение списка"); } var result = await Service.ReadAsync(model); if (!result.IsSucceeded) { Errors.AddRange(result.Errors); return null; } return result.Result as E; } catch (Exception ex) { Errors.Add(("Ошибка получения", ex.Message)); } return null; } /// /// Создание записи /// /// /// public virtual async Task CreateAsync(S model) { Errors.Clear(); try { if (NoAccess(model, AccessType.Change)) { return null; } var result = await Service.CreateAsync(model); if (!result.IsSucceeded) { Errors.AddRange(result.Errors); return null; } return result.Result as E; } catch (Exception ex) { Errors.Add(("Ошибка создания", ex.Message)); } return null; } /// /// Изменение записи /// /// /// public virtual async Task UpdateAsync(S model) { Errors.Clear(); try { if (NoAccess(model, AccessType.Change)) { return null; } var result = await Service.UpdateAsync(model); if (!result.IsSucceeded) { Errors.AddRange(result.Errors); return null; } return result.Result as E; } catch (Exception ex) { Errors.Add(("Ошибка изменения", ex.Message)); } return null; } /// /// Удаление записи /// /// /// public virtual async Task DeleteAsync(G model) { Errors.Clear(); try { if (NoAccess(model, AccessType.Delete)) { return false; } var result = await Service.DeleteAsync(model); if (!result.IsSucceeded) { Errors.AddRange(result.Errors); return false; } return true; } catch (Exception ex) { Errors.Add(("Ошибка удаления", ex.Message)); } return false; } /// /// Восстанолвение записи /// /// /// public virtual async Task RestoreAsync(G model) { Errors.Clear(); try { if (NoAccess(model, AccessType.Change)) { return null; } var result = await Service.RestoreAsync(model); if (!result.IsSucceeded) { Errors.AddRange(result.Errors); return null; } return result.Result as E; } catch (Exception ex) { Errors.Add(("Ошибка удаления", ex.Message)); } return null; } } }