Common tools
This commit is contained in:
parent
ec174f4996
commit
4acf81d087
@ -0,0 +1,39 @@
|
||||
using System;
|
||||
|
||||
namespace CommonTools.Attributes
|
||||
{
|
||||
/// <summary>
|
||||
/// Описание зависимости сущности от другой сущности (требуется для сохранения и загрузки данных)
|
||||
/// </summary>
|
||||
[AttributeUsage(AttributeTargets.Class, AllowMultiple = true)]
|
||||
public class EntityDependencyAttribute : Attribute
|
||||
{
|
||||
/// <summary>
|
||||
/// Название класса от котрого зависит этот класс
|
||||
/// </summary>
|
||||
public string ClassName { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Название поле в этом классе, которое ссылает на другой класс (идентификатор)
|
||||
/// </summary>
|
||||
public string ColumnName { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Описание зависимости
|
||||
/// </summary>
|
||||
public string Description { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Конструктор
|
||||
/// </summary>
|
||||
/// <param name="className">Название класса от котрого зависит этот класс</param>
|
||||
/// <param name="columnName">Название поле в этом классе, которое ссылает на другой класс (идентификатор)</param>
|
||||
/// <param name="description">Описание зависимости</param>
|
||||
public EntityDependencyAttribute(string className, string columnName, string description)
|
||||
{
|
||||
ClassName = className;
|
||||
ColumnName = columnName;
|
||||
Description = description;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,32 @@
|
||||
using System;
|
||||
|
||||
namespace CommonTools.Attributes
|
||||
{
|
||||
/// <summary>
|
||||
/// Описание класса из базы данных, его назначение
|
||||
/// </summary>
|
||||
[AttributeUsage(AttributeTargets.Class, AllowMultiple = true)]
|
||||
public class EntityDescriptionAttribute : Attribute
|
||||
{
|
||||
/// <summary>
|
||||
/// Название сущности, которую описывает класс
|
||||
/// </summary>
|
||||
public string EntityName { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Описание назначения сущности
|
||||
/// </summary>
|
||||
public string Description { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Конструктор
|
||||
/// </summary>
|
||||
/// <param name="entityName">Название сущности, которую описывает класс</param>
|
||||
/// <param name="description">Описание назначения сущности</param>
|
||||
public EntityDescriptionAttribute(string entityName, string description)
|
||||
{
|
||||
EntityName = entityName;
|
||||
Description = description;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
using System;
|
||||
|
||||
namespace CommonTools.BindingModels
|
||||
{
|
||||
/// <summary>
|
||||
/// Информация для доступа к выполнению операций
|
||||
/// </summary>
|
||||
public class AccessBindingModel
|
||||
{
|
||||
/// <summary>
|
||||
/// Пропускать проверку (работает только для получения данных)
|
||||
/// </summary>
|
||||
public bool SkipCheck { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Идентификатор пользователя, который запрашивает выполнение операции
|
||||
/// </summary>
|
||||
public Guid? UserId { get; set; }
|
||||
}
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
using System;
|
||||
|
||||
namespace CommonTools.BindingModels
|
||||
{
|
||||
/// <summary>
|
||||
/// Получение записи по идентификатору
|
||||
/// </summary>
|
||||
public class GetBinidingModel : AccessBindingModel
|
||||
{
|
||||
/// <summary>
|
||||
/// Идентификатор получаемой записи
|
||||
/// </summary>
|
||||
public Guid? Id { get; set; }
|
||||
}
|
||||
}
|
@ -0,0 +1,23 @@
|
||||
namespace CommonTools.BindingModels
|
||||
{
|
||||
/// <summary>
|
||||
/// Пагинация для получения записей
|
||||
/// </summary>
|
||||
public class PageSettingBinidingModel : AccessBindingModel
|
||||
{
|
||||
/// <summary>
|
||||
/// Номер страницы, которую получаем
|
||||
/// </summary>
|
||||
public int? PageNumber { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Количество записей возвращаемых
|
||||
/// </summary>
|
||||
public int? PageSize { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Иной признак, по которму отбираем записи
|
||||
/// </summary>
|
||||
public string PageName { get; set; }
|
||||
}
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
using System;
|
||||
|
||||
namespace CommonTools.BindingModels
|
||||
{
|
||||
/// <summary>
|
||||
/// Сохранение записи по идентификатору
|
||||
/// </summary>
|
||||
public class SetBinidingModel : AccessBindingModel
|
||||
{
|
||||
/// <summary>
|
||||
/// Идентификатор записи
|
||||
/// </summary>
|
||||
public Guid Id { get; set; }
|
||||
}
|
||||
}
|
7
DepartmentPortal/Common/CommonTools/CommonTools.csproj
Normal file
7
DepartmentPortal/Common/CommonTools/CommonTools.csproj
Normal file
@ -0,0 +1,7 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net5.0</TargetFramework>
|
||||
</PropertyGroup>
|
||||
|
||||
</Project>
|
@ -0,0 +1,38 @@
|
||||
namespace CommonTools.Enums
|
||||
{
|
||||
/// <summary>
|
||||
/// Статус результата операции
|
||||
/// </summary>
|
||||
public enum ResultServiceStatusCode
|
||||
{
|
||||
/// <summary>
|
||||
/// Успешно
|
||||
/// </summary>
|
||||
Success = 200,
|
||||
|
||||
/// <summary>
|
||||
/// Ошибка общая
|
||||
/// </summary>
|
||||
Error = 400,
|
||||
|
||||
/// <summary>
|
||||
/// Элемент уже сущствует
|
||||
/// </summary>
|
||||
ExsistItem = 401,
|
||||
|
||||
/// <summary>
|
||||
/// Запись удалена
|
||||
/// </summary>
|
||||
WasDelete = 402,
|
||||
|
||||
/// <summary>
|
||||
/// Не найдено
|
||||
/// </summary>
|
||||
NotFound = 404,
|
||||
|
||||
/// <summary>
|
||||
/// Не найден файл
|
||||
/// </summary>
|
||||
FileNotFound = 405
|
||||
}
|
||||
}
|
@ -0,0 +1,66 @@
|
||||
using CommonTools.Enums;
|
||||
using CommonTools.OperationResultModels;
|
||||
using System;
|
||||
|
||||
namespace CommonTools.Extensions
|
||||
{
|
||||
/// <summary>
|
||||
/// Расширения для результата операции
|
||||
/// </summary>
|
||||
public static class OperationResultExtensions
|
||||
{
|
||||
/// <summary>
|
||||
/// Добавление простой ошибки
|
||||
/// </summary>
|
||||
/// <param name="model"></param>
|
||||
/// <param name="key"></param>
|
||||
/// <param name="value"></param>
|
||||
public static void AddError(this OperationResultModel model, string key, string value) => model.AddError(key, value, ResultServiceStatusCode.Error);
|
||||
|
||||
/// <summary>
|
||||
/// Добавление простой ошибки со сменой статуса
|
||||
/// </summary>
|
||||
/// <param name="model"></param>
|
||||
/// <param name="key"></param>
|
||||
/// <param name="error"></param>
|
||||
/// <param name="statusCode"></param>
|
||||
public static void AddError(this OperationResultModel model, string key, string error, ResultServiceStatusCode statusCode)
|
||||
{
|
||||
model.Errors.Add((key, error));
|
||||
model.StatusCode = statusCode;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Добавление ошибки
|
||||
/// </summary>
|
||||
/// <param name="model"></param>
|
||||
/// <param name="error"></param>
|
||||
public static void AddError(this OperationResultModel model, Exception error) => model.AddError(error, ResultServiceStatusCode.Error);
|
||||
|
||||
/// <summary>
|
||||
/// Добавление ошибки
|
||||
/// </summary>
|
||||
/// <param name="model"></param>
|
||||
/// <param name="error"></param>
|
||||
/// <param name="statusCode"></param>
|
||||
public static void AddError(this OperationResultModel model, Exception error, ResultServiceStatusCode statusCode) => model.AddError("Ошибка", error, statusCode);
|
||||
|
||||
/// <summary>
|
||||
/// Добавление ошибки (включая вложеннные)
|
||||
/// </summary>
|
||||
/// <param name="model"></param>
|
||||
/// <param name="key"></param>
|
||||
/// <param name="error"></param>
|
||||
/// <param name="statusCode"></param>
|
||||
public static void AddError(this OperationResultModel model, string key, Exception error, ResultServiceStatusCode statusCode)
|
||||
{
|
||||
model.Errors.Add((key, error.Message));
|
||||
while (error.InnerException != null)
|
||||
{
|
||||
error = error.InnerException;
|
||||
model.Errors.Add(("Inner error:", error.Message));
|
||||
}
|
||||
model.StatusCode = statusCode;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,79 @@
|
||||
using CommonTools.Enums;
|
||||
using CommonTools.ViewModels;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace CommonTools.OperationResultModels
|
||||
{
|
||||
/// <summary>
|
||||
/// Результат любой операции
|
||||
/// </summary>
|
||||
public class OperationResultModel
|
||||
{
|
||||
/// <summary>
|
||||
/// Успешность операции (количество ошибок = 0)
|
||||
/// </summary>
|
||||
public bool IsSucceeded => Errors.Count == 0;
|
||||
|
||||
/// <summary>
|
||||
/// Статус операции
|
||||
/// </summary>
|
||||
public ResultServiceStatusCode StatusCode { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Спсиок ошибок
|
||||
/// </summary>
|
||||
public List<(string Title, string Message)> Errors { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Какой-то объект, получаемый по результатам операции (например, id)
|
||||
/// </summary>
|
||||
public object Result { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Конструктор по умолчанию
|
||||
/// </summary>
|
||||
public OperationResultModel()
|
||||
{
|
||||
Errors = new List<(string Title, string Message)>();
|
||||
StatusCode = ResultServiceStatusCode.Success;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Результат любой операции
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
public class OperationResultModel<T>
|
||||
where T : ElementViewModel
|
||||
{
|
||||
/// <summary>
|
||||
/// Успешность операции
|
||||
/// </summary>
|
||||
public bool IsSucceeded { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Статус операции
|
||||
/// </summary>
|
||||
public ResultServiceStatusCode StatusCode { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Спсиок ошибок
|
||||
/// </summary>
|
||||
public List<KeyValuePair<string, string>> Errors { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Какой-то объект, получаемый по результатам операции (например, id)
|
||||
/// </summary>
|
||||
public T Result { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Конструктор по умолчанию
|
||||
/// </summary>
|
||||
public OperationResultModel()
|
||||
{
|
||||
Errors = new List<KeyValuePair<string, string>>();
|
||||
IsSucceeded = true;
|
||||
StatusCode = 0;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
using System;
|
||||
|
||||
namespace CommonTools.ViewModels
|
||||
{
|
||||
/// <summary>
|
||||
/// Возвращаемая запись
|
||||
/// </summary>
|
||||
public class ElementViewModel
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
}
|
||||
}
|
@ -0,0 +1,16 @@
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace CommonTools.ViewModels
|
||||
{
|
||||
/// <summary>
|
||||
/// Список возвращаемых значений
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
public class ListViewModel<T>
|
||||
where T : ElementViewModel
|
||||
{
|
||||
public int MaxCount { get; set; }
|
||||
|
||||
public List<T> List { get; set; }
|
||||
}
|
||||
}
|
30
DepartmentPortal/DepartmentPortal.sln
Normal file
30
DepartmentPortal/DepartmentPortal.sln
Normal file
@ -0,0 +1,30 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 16
|
||||
VisualStudioVersion = 16.0.31112.23
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Common", "Common", "{6F154F8D-3437-45EE-9D89-02B96BDF3E8E}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CommonTools", "Common\CommonTools\CommonTools.csproj", "{9E533D43-452A-40D6-852B-01E8391BBFF9}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{9E533D43-452A-40D6-852B-01E8391BBFF9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{9E533D43-452A-40D6-852B-01E8391BBFF9}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{9E533D43-452A-40D6-852B-01E8391BBFF9}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{9E533D43-452A-40D6-852B-01E8391BBFF9}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(NestedProjects) = preSolution
|
||||
{9E533D43-452A-40D6-852B-01E8391BBFF9} = {6F154F8D-3437-45EE-9D89-02B96BDF3E8E}
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {FBA0CB49-EF2D-4538-9D00-FCEDA24879A9}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
Loading…
Reference in New Issue
Block a user