Магические строки кодов деталей аудита заменены каталогом AuditFields (68 мест), ключи элемента изменения и разбора JSON — константами, ключи хранилища ключей Telegram и геометрия маски — именованными константами.
46 lines
2.0 KiB
C#
46 lines
2.0 KiB
C#
using System.Globalization;
|
|
|
|
namespace Deal.Modules.Tenants.Application.Models;
|
|
|
|
/// <summary>
|
|
/// Конструктор деталей события аудита
|
|
/// </summary>
|
|
public static class AuditDetails
|
|
{
|
|
// Строковые представления булевых значений (как в JSON).
|
|
private const string TrueLiteral = "true";
|
|
private const string FalseLiteral = "false";
|
|
|
|
/// <summary>
|
|
/// Задаёт параметр события
|
|
/// </summary>
|
|
/// <param name="field">Код параметра.</param>
|
|
/// <param name="value">Значение параметра.</param>
|
|
/// <returns>Изменение «параметр задан».</returns>
|
|
public static AuditChangeDto Set(string field, object? value) =>
|
|
new(field, null, Format(value));
|
|
|
|
/// <summary>
|
|
/// Задаёт изменение параметра «было → стало»
|
|
/// </summary>
|
|
/// <param name="field">Код параметра.</param>
|
|
/// <param name="from">Значение до изменения.</param>
|
|
/// <param name="to">Значение после изменения.</param>
|
|
/// <returns>Изменение «было → стало».</returns>
|
|
public static AuditChangeDto Change(string field, object? from, object? to) =>
|
|
new(field, Format(from), Format(to));
|
|
|
|
// Приводит значение к строке отображения (инвариантная культура).
|
|
// value: Значение параметра.
|
|
// Возвращает: Строковое представление либо null.
|
|
private static string? Format(object? value) => value switch
|
|
{
|
|
null => null,
|
|
string text => text,
|
|
bool flag => flag ? TrueLiteral : FalseLiteral,
|
|
DateTimeOffset moment => moment.ToString("O", CultureInfo.InvariantCulture),
|
|
IFormattable formattable => formattable.ToString(null, CultureInfo.InvariantCulture),
|
|
_ => value.ToString(),
|
|
};
|
|
}
|