using Microsoft.OpenApi.Extensions; using NetAdmin.Application.Services; using NetAdmin.Domain.Attributes; using NetAdmin.SysComponent.Application.Services.Sys.Dependency; namespace NetAdmin.SysComponent.Application.Services.Sys; /// public sealed class ConstantService : ServiceBase, IConstantService { /// public IDictionary GetCharsDic() { return typeof(Chars).GetFields(BindingFlags.Public | BindingFlags.Static) .Where(x => x.FieldType == typeof(string)) .ToImmutableSortedDictionary( // x => x.Name, x => x.GetValue(null)?.ToString()); } /// public IDictionary> GetEnums() { var ret = App.EffectiveTypes.Where(x => x.IsEnum && x.GetCustomAttribute(false) != null) .ToDictionary(x => x.Name, x => // x.GetEnumValues().Cast().ToDictionary(y => y.ToString(), GetDicValue)); var httpStatusCodes = Enum.GetNames().ToDictionary(x => x, GetHttpStatusCodeDicValue); httpStatusCodes.Add( // nameof(ErrorCodes.Unhandled) , [ Numbers.HTTP_STATUS_BIZ_FAIL.ToInvString(), nameof(ErrorCodes.Unhandled) , nameof(Indicates.Danger).ToLowerInvariant() ]); ret.Add($"{nameof(HttpStatusCode)}s", httpStatusCodes); return ret; static string[] GetDicValue(Enum y) { var ret = new[] { Convert.ToInt64(y, CultureInfo.InvariantCulture).ToString(CultureInfo.InvariantCulture) , y.ResDesc() }; var indicate = y.GetAttributeOfType()?.Indicate.ToLowerInvariant(); return indicate.NullOrEmpty() ? ret : [..ret, indicate]; } static string[] GetHttpStatusCodeDicValue(string name) { var codeInt = Convert.ToInt64(Enum.Parse(name), CultureInfo.InvariantCulture); return [ codeInt.ToString(CultureInfo.InvariantCulture), name , (codeInt switch { >= 200 and < 300 => nameof(Indicates.Success) , < 400 => nameof(Indicates.Warning) , _ => nameof(Indicates.Danger) }).ToLowerInvariant() ]; } } /// public IDictionary GetLocalizedStrings() { return typeof(Ln).GetProperties(BindingFlags.Public | BindingFlags.Static) .Where(x => x.PropertyType == typeof(string)) .ToImmutableSortedDictionary(x => x.Name, x => x.GetValue(null)?.ToString()); } /// public IDictionary GetNumbersDic() { return typeof(Numbers).GetFields(BindingFlags.Public | BindingFlags.Static) .Where(x => x.FieldType == typeof(int) || x.FieldType == typeof(long)) .ToImmutableSortedDictionary( // x => x.Name, x => Convert.ToInt64(x.GetValue(null), CultureInfo.InvariantCulture)); } }