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