using System; using ToolsModule.ManagmentSecurity; namespace ToolsModule.ManagmentEntity { /// /// Базовый класс для логики сущности /// /// /// /// /// public class GenericBusinessLogic : CoreBusinessLogic, IGenericEntityLogic where G : GetBindingModel where S : SetBindingModel where L : ListViewModel where E : ElementViewModel { /// /// Сервис с хранилищем данных /// protected IGenericEntityService Service { get; set; } /// /// Возможен ли просмотр без авторизации /// protected bool _allowSimpleView = true; public GenericBusinessLogic(IGenericEntityService service, string entity, AccessOperation serviceOperation) { Service = service; _entity = entity; _serviceOperation = serviceOperation; } /// /// Получение списка записей /// /// /// public L GetList(G model) { Errors.Clear(); try { model.HaveRight = !NoAccess(model, AccessType.View); if (model.HaveRight && !_allowSimpleView) { throw new MethodAccessException("Нет прав на получение списка"); } var result = Service.Read(model); if (!result.IsSucceeded) { Errors.AddRange(result.Errors); return null; } return result.Result as L; } catch (Exception ex) { Errors.Add(("Ошибка получения", ex.Message)); Errors.Add(("Ошибка получения (Stack)", ex.StackTrace)); } return null; } /// /// Получение записи /// /// /// public E GetElement(G model) { Errors.Clear(); try { model.HaveRight = !NoAccess(model, AccessType.View); if (model.HaveRight && !_allowSimpleView) { throw new MethodAccessException("Нет прав на получение списка"); } var result = Service.Read(model); if (!result.IsSucceeded) { Errors.AddRange(result.Errors); return null; } return result.Result as E; } catch (Exception ex) { Errors.Add(("Ошибка получения", ex.Message)); Errors.Add(("Ошибка получения (Stack)", ex.StackTrace)); } return null; } /// /// Создание записи /// /// /// public virtual E Create(S model) { Errors.Clear(); try { if (NoAccess(model, AccessType.Change)) { return null; } var result = Service.Create(model); if (!result.IsSucceeded) { Errors.AddRange(result.Errors); return null; } return result.Result as E; } catch (Exception ex) { Errors.Add(("Ошибка создания", ex.Message)); Errors.Add(("Ошибка создания (Stack)", ex.StackTrace)); } return null; } /// /// Изменение записи /// /// /// public virtual E Update(S model) { Errors.Clear(); try { if (NoAccess(model, AccessType.Change)) { return null; } var result = Service.Update(model); if (!result.IsSucceeded) { Errors.AddRange(result.Errors); return null; } return result.Result as E; } catch (Exception ex) { Errors.Add(("Ошибка изменения", ex.Message)); Errors.Add(("Ошибка изменения (Stack)", ex.StackTrace)); } return null; } /// /// Удаление записи /// /// /// public virtual bool Delete(G model) { Errors.Clear(); try { if (NoAccess(model, AccessType.Delete)) { return false; } var result = Service.Delete(model); if (!result.IsSucceeded) { Errors.AddRange(result.Errors); return false; } return true; } catch (Exception ex) { Errors.Add(("Ошибка удаления", ex.Message)); Errors.Add(("Ошибка удаления (Stack)", ex.StackTrace)); } return false; } /// /// Восстанолвение записи /// /// /// public virtual E Restore(G model) { Errors.Clear(); try { if (NoAccess(model, AccessType.Change)) { return null; } var result = Service.Restore(model); if (!result.IsSucceeded) { Errors.AddRange(result.Errors); return null; } return result.Result as E; } catch (Exception ex) { Errors.Add(("Ошибка восстановления", ex.Message)); Errors.Add(("Ошибка восстановления (Stack)", ex.StackTrace)); } return null; } } }