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