DepartmentProject/DepartmentPortal/Common/ModuleTools/BusinessLogics/GenericBusinessLogic.cs

220 lines
4.7 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using ModuleTools.BindingModels;
using ModuleTools.Enums;
using ModuleTools.Interfaces;
using ModuleTools.ViewModels;
using System;
namespace ModuleTools.BusinessLogics
{
/// <summary>
/// Базовый класс для логики сущности
/// </summary>
/// <typeparam name="G"></typeparam>
/// <typeparam name="S"></typeparam>
/// <typeparam name="L"></typeparam>
/// <typeparam name="E"></typeparam>
public class GenericBusinessLogic<G, S, L, E> : CoreBusinessLogic
where G : GetBindingModel
where S : SetBindingModel
where L : ListViewModel<E>
where E : ElementViewModel
{
/// <summary>
/// Сервис с хранилищем данных
/// </summary>
protected IGenerticEntityService<G, S> Service { get; set; }
/// <summary>
/// Возможен ли просмотр без авторизации
/// </summary>
protected bool _allowSimpleView = true;
public GenericBusinessLogic(IGenerticEntityService<G, S> service, string entity, AccessOperation serviceOperation)
{
Service = service;
_entity = entity;
_serviceOperation = serviceOperation;
}
/// <summary>
/// Получение списка записей
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
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));
}
return null;
}
/// <summary>
/// Получение записи
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
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));
}
return null;
}
/// <summary>
/// Создание записи
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
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));
}
return null;
}
/// <summary>
/// Изменение записи
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
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));
}
return null;
}
/// <summary>
/// Удаление записи
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
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));
}
return false;
}
/// <summary>
/// Восстанолвение записи
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
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));
}
return null;
}
}
}