20240327-3

This commit is contained in:
Александр Бабаев 2024-03-27 22:44:32 +03:00
parent b13c15ea40
commit 84d94a2463
7 changed files with 188 additions and 106 deletions

View File

@ -35,9 +35,7 @@ public class ActionState<T>: ISerializable
// ReSharper disable once MemberCanBeProtected.Global // ReSharper disable once MemberCanBeProtected.Global
public ActionState () public ActionState ()
{ {
Info = []; Messages = [];
Warnings = [];
Errors = [];
Value = default; Value = default;
} }
@ -47,26 +45,14 @@ public class ActionState<T>: ISerializable
/// <param name="defaultValue">Начальное значение <see cref="Value"/></param> /// <param name="defaultValue">Начальное значение <see cref="Value"/></param>
public ActionState (T defaultValue) public ActionState (T defaultValue)
{ {
Info = []; Messages = [];
Warnings = [];
Errors = [];
Value = defaultValue; Value = defaultValue;
} }
/// <summary> /// <summary>
/// Список информации /// Список информации
/// </summary> /// </summary>
public List<ActionStateMessage> Info { get; } public List<ActionStateMessage> Messages { get; }
/// <summary>
/// Список предупреждений
/// </summary>
public List<ActionStateMessage> Warnings { get; }
/// <summary>
/// Список ошибок
/// </summary>
public List<ActionStateMessage> Errors { get; }
/// <summary> /// <summary>
/// Значение /// Значение
@ -114,21 +100,23 @@ public class ActionState<T>: ISerializable
} }
#endregion #endregion
#region Добавление ошибки #region Добавление
/// <summary> /// <summary>
/// Добавление ошибки /// Добавление сообщения
/// </summary> /// </summary>
/// <param name="error">Ошибка</param> /// <param name="message">Сообщение</param>
// ReSharper disable once MemberCanBeMadeStatic.Global // ReSharper disable once MemberCanBeMadeStatic.Global
// ReSharper disable once FunctionRecursiveOnAllPaths // ReSharper disable once FunctionRecursiveOnAllPaths
public void AddError (ActionStateMessage error) => Errors.Add(error); public void Add (ActionStateMessage message) => Messages.Add(message);
/// <summary> /// <summary>
/// Добавляет ошибки в список /// Добавляет список
/// </summary> /// </summary>
/// <param name="errors">Список ошибок</param> /// <param name="messages">Список сообщений</param>
public void AddErrors (IEnumerable<ActionStateMessage> errors) => Errors.AddRange(errors); public void AddRange (IEnumerable<ActionStateMessage> messages) => Messages.AddRange(messages);
#endregion
#region Добавление ошибки
/// <summary> /// <summary>
/// Добавление ошибки /// Добавление ошибки
/// </summary> /// </summary>
@ -136,10 +124,13 @@ public class ActionState<T>: ISerializable
public void AddError (bool critical = true) public void AddError (bool critical = true)
{ {
//Создаю ошибку //Создаю ошибку
ActionStateMessage error = new("", critical); ActionStateMessage error = new("", critical)
{
MessageType = EActionStateMessageType.Error
};
//Добавляю ошибку //Добавляю ошибку
AddError(error); Add(error);
} }
/// <summary> /// <summary>
@ -150,10 +141,13 @@ public class ActionState<T>: ISerializable
public void AddError (string message, bool critical = true) public void AddError (string message, bool critical = true)
{ {
//Создаю ошибку //Создаю ошибку
ActionStateMessage error = new(message, critical); ActionStateMessage error = new(message, critical)
{
MessageType = EActionStateMessageType.Error
};
//Добавляю ошибку //Добавляю ошибку
AddError(error); Add(error);
} }
/// <summary> /// <summary>
@ -165,10 +159,13 @@ public class ActionState<T>: ISerializable
public void AddError (string errorObject, string message, bool critical = true) public void AddError (string errorObject, string message, bool critical = true)
{ {
//Создаю ошибку //Создаю ошибку
ActionStateMessage error = new(errorObject, message, critical); ActionStateMessage error = new(errorObject, message, critical)
{
MessageType = EActionStateMessageType.Error
};
//Добавляю ошибку //Добавляю ошибку
AddError(error); Add(error);
} }
#endregion #endregion
@ -389,6 +386,9 @@ public class ActionState<T>: ISerializable
/// <inheritdoc /> /// <inheritdoc />
public void Deserialize (string json) public void Deserialize (string json)
{ {
// Удаляю лишние символы
json = json.Trim("\"".ToCharArray());
// Десериализую строку // Десериализую строку
ActionStateSerializable itemSerializable = ActionStateSerializable itemSerializable =
new NewtonsoftJsonSerializer().Deserialize<ActionStateSerializable>(json) ?? new(); new NewtonsoftJsonSerializer().Deserialize<ActionStateSerializable>(json) ?? new();

View File

@ -1,5 +1,7 @@
// ReSharper disable MemberCanBeInternal // ReSharper disable MemberCanBeInternal
// ReSharper disable MemberCanBePrivate.Global // ReSharper disable MemberCanBePrivate.Global
using anbs_cp.Enums;
using anbs_cp.Interfaces; using anbs_cp.Interfaces;
namespace anbs_cp.Classes; namespace anbs_cp.Classes;
@ -10,6 +12,11 @@ namespace anbs_cp.Classes;
public sealed class ActionStateMessage: ISerializable public sealed class ActionStateMessage: ISerializable
{ {
#region Свойства #region Свойства
/// <summary>
/// Тип сообщения
/// </summary>
public EActionStateMessageType MessageType { get; set; } = EActionStateMessageType.Information;
/// <summary> /// <summary>
/// Критичность сообщения /// Критичность сообщения
/// </summary> /// </summary>
@ -18,15 +25,17 @@ public sealed class ActionStateMessage: ISerializable
/// <summary> /// <summary>
/// Объект сообщения /// Объект сообщения
/// </summary> /// </summary>
public object Object { get; set; } public string Object { get; set; }
/// <summary> /// <summary>
/// Текст сообщения /// Текст сообщения
/// </summary> /// </summary>
public string Message { get; set; } public string Message { get; set; }
#endregion #endregion
#region Конструкторы #region Конструкторы
/// <summary> /// <summary>
/// Конструктор по умолчанию /// Конструктор по умолчанию
/// </summary> /// </summary>
@ -56,24 +65,72 @@ public sealed class ActionStateMessage: ISerializable
/// <param name="eObject">Объект сообщения</param> /// <param name="eObject">Объект сообщения</param>
/// <param name="message">Сообщение</param> /// <param name="message">Сообщение</param>
/// <param name="isCritical">Критичность сообщения</param> /// <param name="isCritical">Критичность сообщения</param>
public ActionStateMessage (object eObject, string message, bool isCritical = true) public ActionStateMessage (string eObject, string message, bool isCritical = true)
{ {
IsCritical = isCritical; IsCritical = isCritical;
Object = eObject; Object = eObject;
Message = message; Message = message;
} }
#endregion #endregion
#region Методы #region Методы
/// <summary> /// <summary>
/// Вывод сообщения /// Вывод сообщения
/// </summary> /// </summary>
/// <param name="format">Строка-форматирование (например, «[{0}] - {1}»)</param> /// <param name="format">Строка-форматирование (например, «[{0}] - {1}»)</param>
/// <returns>Отформатированную строка</returns> /// <returns>Отформатированную строка</returns>
public string PrintMessage (string format) => string.Format(format, Object, Message); public string PrintMessage (string format) => string.Format(format, Object, Message);
/// <summary>
/// Устанавливает объект
/// </summary>
/// <param name="obj">Объект</param>
/// <typeparam name="T">Тип объекта</typeparam>
public void SetObject<T> (T obj)
{
// Если объект реализует интерфейс ISerializable
if (obj is ISerializable serializable)
{
// - то сериализуем его методами интерфейса
Object = serializable.Serialize();
// - и прерываем
return;
}
// Сериализуем объект с помощью NewtonsoftJson
Object = new NewtonsoftJsonSerializer().Serialize(obj);
}
/// <summary>
/// Получает объект
/// </summary>
/// <typeparam name="T">Класс объекта</typeparam>
/// <returns>Объект или null</returns>
public T? GetObject<T> () => new NewtonsoftJsonSerializer().Deserialize<T>(Object);
/// <summary>
/// Получает объект
/// </summary>
/// <typeparam name="T">Класс объекта, реализующий интерфейс ISerializable</typeparam>
/// <returns>Объект</returns>
public T GetSerializedObject<T> () where T : ISerializable, new()
{
// Создаём результирующую модель
T model = new();
// Десериализуем её методами интерфейса ISerializable
model.Deserialize(Object);
// Возвращаем модель
return model;
}
#endregion #endregion
#region Реализация интерфейса ISerializable #region Реализация интерфейса ISerializable
/// <inheritdoc /> /// <inheritdoc />
public string Serialize () => new NewtonsoftJsonSerializer().Serialize(this); public string Serialize () => new NewtonsoftJsonSerializer().Serialize(this);
@ -84,9 +141,11 @@ public sealed class ActionStateMessage: ISerializable
ActionStateMessage item = new NewtonsoftJsonSerializer().Deserialize<ActionStateMessage>(json) ?? new(); ActionStateMessage item = new NewtonsoftJsonSerializer().Deserialize<ActionStateMessage>(json) ?? new();
// Передаю параметры // Передаю параметры
MessageType = item.MessageType;
IsCritical = item.IsCritical; IsCritical = item.IsCritical;
Object = item.Object; Object = item.Object;
Message = item.Message; Message = item.Message;
} }
#endregion #endregion
} }

View File

@ -0,0 +1,21 @@
namespace anbs_cp.Enums;
/// <summary>
/// Тип сообщения о состоянии
/// </summary>
public enum EActionStateMessageType
{ /// <summary>
/// Информация
/// </summary>
Information = 0,
/// <summary>
/// Предупреждение
/// </summary>
Warning = 1,
/// <summary>
/// Ошибка
/// </summary>
Error = 2
}

View File

@ -2,7 +2,7 @@
<PropertyGroup> <PropertyGroup>
<TargetFramework>net8.0</TargetFramework> <TargetFramework>net8.0</TargetFramework>
<Version>2024.3.26.2</Version> <Version>2024.3.27.2</Version>
<Authors>Александр Бабаев</Authors> <Authors>Александр Бабаев</Authors>
<Product>Набор компонентов ANB Software</Product> <Product>Набор компонентов ANB Software</Product>
<Description>Библиотека полезных методов языка C#</Description> <Description>Библиотека полезных методов языка C#</Description>
@ -38,7 +38,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="MimeTypes" Version="2.4.1"> <PackageReference Include="MimeTypes" Version="2.5.2">
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference> </PackageReference>

View File

@ -8,7 +8,7 @@
<RootNamespace>anbs_cp.Database</RootNamespace> <RootNamespace>anbs_cp.Database</RootNamespace>
<GeneratePackageOnBuild>True</GeneratePackageOnBuild> <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
<PackageId>ANBSoftware.ComponentsPack.Database</PackageId> <PackageId>ANBSoftware.ComponentsPack.Database</PackageId>
<Version>2024.3.25</Version> <Version>2024.3.27</Version>
<Company>Александр Бабаев</Company> <Company>Александр Бабаев</Company>
<Product>Набор компонентов ANB Software для работы с БД</Product> <Product>Набор компонентов ANB Software для работы с БД</Product>
<Description>Библиотека полезных методов языка C# для работы с базами данных</Description> <Description>Библиотека полезных методов языка C# для работы с базами данных</Description>
@ -21,7 +21,7 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="Dapper" Version="2.1.35" /> <PackageReference Include="Dapper" Version="2.1.35" />
<PackageReference Include="MySqlConnector" Version="2.3.5" /> <PackageReference Include="MySqlConnector" Version="2.3.6" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -6,7 +6,7 @@
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<GeneratePackageOnBuild>True</GeneratePackageOnBuild> <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
<PackageId>ANBSoftware.ComponentsPackForNet</PackageId> <PackageId>ANBSoftware.ComponentsPackForNet</PackageId>
<Version>2024.3.26</Version> <Version>2024.3.27</Version>
<Authors>Александр Бабаев</Authors> <Authors>Александр Бабаев</Authors>
<Product>Набор компонентов ANB Software для ASP.NET Core</Product> <Product>Набор компонентов ANB Software для ASP.NET Core</Product>
<Description>Библиотека полезных методов языка C# для ASP.NET Core</Description> <Description>Библиотека полезных методов языка C# для ASP.NET Core</Description>
@ -21,11 +21,11 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="HtmlSanitizer" Version="8.0.843" /> <PackageReference Include="HtmlSanitizer" Version="8.0.843" />
<PackageReference Include="Microsoft.AspNetCore.Cryptography.KeyDerivation" Version="8.0.2" /> <PackageReference Include="Microsoft.AspNetCore.Cryptography.KeyDerivation" Version="8.0.3" />
<PackageReference Include="Microsoft.AspNetCore.Html.Abstractions" Version="2.2.0" /> <PackageReference Include="Microsoft.AspNetCore.Html.Abstractions" Version="2.2.0" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.Abstractions" Version="2.2.0" /> <PackageReference Include="Microsoft.AspNetCore.Mvc.Abstractions" Version="2.2.0" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.TagHelpers" Version="2.2.0" /> <PackageReference Include="Microsoft.AspNetCore.Mvc.TagHelpers" Version="2.2.0" />
<PackageReference Include="Microsoft.AspNetCore.WebUtilities" Version="8.0.2" /> <PackageReference Include="Microsoft.AspNetCore.WebUtilities" Version="8.0.3" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View File

@ -18,6 +18,7 @@
<s:Boolean x:Key="/Default/UserDictionary/Words/=_0412_0435_0440_043D_0451_043C/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/UserDictionary/Words/=_0412_0435_0440_043D_0451_043C/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=_0412_0438_0434_0435_043E_043A_0430_0440_0442_0430/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/UserDictionary/Words/=_0412_0438_0434_0435_043E_043A_0430_0440_0442_0430/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=_0414_0435_0441_0435_0440_0438_0430_043B_0438_0437_043E_0432_0430_043D_043D_044B_0439/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/UserDictionary/Words/=_0414_0435_0441_0435_0440_0438_0430_043B_0438_0437_043E_0432_0430_043D_043D_044B_0439/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=_0414_0435_0441_0435_0440_0438_0430_043B_0438_0437_0443_0435_043C/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=_0414_0435_0441_0435_0440_0438_0430_043B_0438_0437_0443_044E/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/UserDictionary/Words/=_0414_0435_0441_0435_0440_0438_0430_043B_0438_0437_0443_044E/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=_041F_0430_0440_0441_0435_0440/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/UserDictionary/Words/=_041F_0430_0440_0441_0435_0440/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=_0421_0435_0440_0438_0430_043B_0438_0437_043E_0432_0430_043D_043D_0430_044F/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/UserDictionary/Words/=_0421_0435_0440_0438_0430_043B_0438_0437_043E_0432_0430_043D_043D_0430_044F/@EntryIndexedValue">True</s:Boolean>
@ -43,6 +44,7 @@
<s:Boolean x:Key="/Default/UserDictionary/Words/=_0441_0435_0440_0438_0430_043B_0438_0437_043E_0432_0430_043D_043D_043E_0433_043E/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/UserDictionary/Words/=_0441_0435_0440_0438_0430_043B_0438_0437_043E_0432_0430_043D_043D_043E_0433_043E/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=_0441_0435_0440_0438_0430_043B_0438_0437_043E_0432_0430_043D_043D_043E_0435/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/UserDictionary/Words/=_0441_0435_0440_0438_0430_043B_0438_0437_043E_0432_0430_043D_043D_043E_0435/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=_0441_0435_0440_0438_0430_043B_0438_0437_043E_0432_0430_043D_043D_0443_044E/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/UserDictionary/Words/=_0441_0435_0440_0438_0430_043B_0438_0437_043E_0432_0430_043D_043D_0443_044E/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=_0441_0435_0440_0438_0430_043B_0438_0437_0443_0435_043C/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=_0441_0435_0440_0438_0430_043B_0438_0437_0443_044E/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/UserDictionary/Words/=_0441_0435_0440_0438_0430_043B_0438_0437_0443_044E/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=_0441_0447_0451_0442/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/UserDictionary/Words/=_0441_0447_0451_0442/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=_0441_0447_0451_0442_0447_0438_043A/@EntryIndexedValue">True</s:Boolean> <s:Boolean x:Key="/Default/UserDictionary/Words/=_0441_0447_0451_0442_0447_0438_043A/@EntryIndexedValue">True</s:Boolean>