using System.Globalization; namespace Deal.Modules.Tenants.Application.Models; /// /// Конструктор деталей события аудита /// public static class AuditDetails { // Строковые представления булевых значений (как в JSON). private const string TrueLiteral = "true"; private const string FalseLiteral = "false"; /// /// Задаёт параметр события /// /// Код параметра. /// Значение параметра. /// Изменение «параметр задан». public static AuditChangeDto Set(string field, object? value) => new(field, null, Format(value)); /// /// Задаёт изменение параметра «было → стало» /// /// Код параметра. /// Значение до изменения. /// Значение после изменения. /// Изменение «было → стало». 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(), }; }