Files
Deal/src/core/Deal.Modules.Tenants/Application/Models/AuditDetails.cs
T
stepan 482b345438 Вынести коды параметров аудита и ключи JSON в константы
Магические строки кодов деталей аудита заменены каталогом AuditFields (68 мест), ключи элемента изменения и разбора JSON — константами, ключи хранилища ключей Telegram и геометрия маски — именованными константами.
2026-09-13 20:32:11 +03:00

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(),
};
}