191 lines
4.3 KiB
C#
191 lines
4.3 KiB
C#
using ModuleTools.BindingModels;
|
||
using ModuleTools.Enums;
|
||
using ModuleTools.Interfaces;
|
||
using ModuleTools.ViewModels;
|
||
using System;
|
||
using System.Threading.Tasks;
|
||
|
||
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 async Task<L> 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;
|
||
}
|
||
|
||
/// <summary>
|
||
/// Получение записи
|
||
/// </summary>
|
||
/// <param name="model"></param>
|
||
/// <returns></returns>
|
||
public async Task<E> 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;
|
||
}
|
||
|
||
/// <summary>
|
||
/// Создание записи
|
||
/// </summary>
|
||
/// <param name="model"></param>
|
||
/// <returns></returns>
|
||
public async Task<E> 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;
|
||
}
|
||
|
||
/// <summary>
|
||
/// Изменение записи
|
||
/// </summary>
|
||
/// <param name="model"></param>
|
||
/// <returns></returns>
|
||
public async Task<E> 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;
|
||
}
|
||
|
||
/// <summary>
|
||
/// Удаление записи
|
||
/// </summary>
|
||
/// <param name="model"></param>
|
||
/// <returns></returns>
|
||
public async Task<bool> 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;
|
||
}
|
||
}
|
||
} |