using System; using System.Reflection; using OpenHarbor.CQRS.Abstractions.Attributes; namespace OpenHarbor.CQRS.Abstractions.Discovery; public class QueryMeta : IQueryMeta { public QueryMeta(Type queryType, Type serviceType, Type queryResultType) { QueryType = queryType; ServiceType = serviceType; QueryResultType = queryResultType; } protected virtual QueryNameAttribute NameAttribute => QueryType.GetCustomAttribute(); public virtual string Name { get { var name = NameAttribute?.Name ?? QueryType.Name.Replace("Query", string.Empty); return name; } } public virtual Type QueryType { get; } public virtual Type ServiceType { get; } public virtual Type QueryResultType { get; } public virtual string Category => "BasicQuery"; public string LowerCamelCaseName { get { if (string.IsNullOrEmpty(Name)) return Name; var name = Name; var firstLetter = char.ToLowerInvariant(name[0]); var ret = $"{firstLetter}{name[1..]}"; return ret; } } }