// ReSharper disable NotAccessedPositionalProperty.Global using Foxnouns.Backend.Database; using Foxnouns.Backend.Database.Models; using Foxnouns.Backend.Services.V1; using Newtonsoft.Json; using Newtonsoft.Json.Converters; using Newtonsoft.Json.Serialization; namespace Foxnouns.Backend.Dto.V1; public record UserResponse( string Id, Snowflake IdNew, string Sid, string Name, string? DisplayName, string? Bio, string? MemberTitle, string? Avatar, string[] Links, FieldEntry[] Names, PronounEntry[] Pronouns, ProfileField[] Fields, int? UtcOffset, Dictionary CustomPreferences ); public record CustomPreference( string Icon, string Tooltip, [property: JsonConverter(typeof(StringEnumConverter), typeof(SnakeCaseNamingStrategy))] PreferenceSize Size, bool Muted, bool Favourite ); public record ProfileField(string Name, FieldEntry[] Entries) { public static ProfileField FromField( Field field, Dictionary customPreferences ) => new(field.Name, FieldEntry.FromEntries(field.Entries, customPreferences)); public static ProfileField[] FromFields( IEnumerable fields, Dictionary customPreferences ) => fields.Select(f => FromField(f, customPreferences)).ToArray(); } public record FieldEntry(string Value, string Status) { public static FieldEntry[] FromEntries( IEnumerable entries, Dictionary customPreferences ) => entries .Select(e => new FieldEntry( e.Value, V1Utils.TranslateStatus(e.Status, customPreferences) )) .ToArray(); } public record PronounEntry(string Pronouns, string? DisplayText, string Status) { public static PronounEntry[] FromPronouns( IEnumerable pronouns, Dictionary customPreferences ) => pronouns .Select(p => new PronounEntry( p.Value, p.DisplayText, V1Utils.TranslateStatus(p.Status, customPreferences) )) .ToArray(); }