using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; using Roadie.Library; using Roadie.Library.Caching; using Roadie.Library.Configuration; using Roadie.Library.Data.Context; using Roadie.Library.Encoding; using Roadie.Library.Enums; using Roadie.Library.Models; using Roadie.Library.Utility; using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Threading.Tasks; using data = Roadie.Library.Data; namespace Roadie.Api.Services { /// /// Returns lookups (or dictionaries) of various allowable values for a given Type /// public class LookupService : ServiceBase, ILookupService { public const string CreditCategoriesCacheKey = "urn:creditCategories"; public LookupService(IRoadieSettings configuration, IHttpEncoder httpEncoder, IHttpContext httpContext, IRoadieDbContext dbContext, ICacheManager cacheManager, ILogger logger) : base(configuration, httpEncoder, dbContext, cacheManager, logger, httpContext) { } public Task>> ArtistTypesAsync() { var sw = Stopwatch.StartNew(); return Task.FromResult(new OperationResult> { Data = EnumToDataTokens(typeof(ArtistType)), IsSuccess = true, OperationTime = sw.ElapsedMilliseconds }); } public Task>> BandStatusAsync() { var sw = Stopwatch.StartNew(); return Task.FromResult(new OperationResult> { Data = EnumToDataTokens(typeof(BandStatus)), IsSuccess = true, OperationTime = sw.ElapsedMilliseconds }); } public Task>> BookmarkTypesAsync() { var sw = Stopwatch.StartNew(); return Task.FromResult(new OperationResult> { Data = EnumToDataTokens(typeof(BookmarkType)), IsSuccess = true, OperationTime = sw.ElapsedMilliseconds }); } public Task>> CollectionTypesAsync() { var sw = Stopwatch.StartNew(); return Task.FromResult(new OperationResult> { Data = EnumToDataTokens(typeof(CollectionType)), IsSuccess = true, OperationTime = sw.ElapsedMilliseconds }); } public Task>> LibraryStatusAsync() { var sw = Stopwatch.StartNew(); return Task.FromResult(new OperationResult> { Data = EnumToDataTokens(typeof(LibraryStatus)), IsSuccess = true, OperationTime = sw.ElapsedMilliseconds }); } public Task>> QueMessageTypesAsync() { var sw = Stopwatch.StartNew(); return Task.FromResult(new OperationResult> { Data = EnumToDataTokens(typeof(QueMessageType)), IsSuccess = true, OperationTime = sw.ElapsedMilliseconds }); } public Task>> ReleaseTypesAsync() { var sw = Stopwatch.StartNew(); return Task.FromResult(new OperationResult> { Data = EnumToDataTokens(typeof(ReleaseType)), IsSuccess = true, OperationTime = sw.ElapsedMilliseconds }); } public Task>> RequestStatusAsync() { var sw = Stopwatch.StartNew(); return Task.FromResult(new OperationResult> { Data = EnumToDataTokens(typeof(RequestStatus)), IsSuccess = true, OperationTime = sw.ElapsedMilliseconds }); } public async Task>> CreditCategoriesAsync() { var sw = Stopwatch.StartNew(); var data = await CacheManager.GetAsync(CreditCategoriesCacheKey, async () => { return (await DbContext.CreditCategory.ToListAsync().ConfigureAwait(false)).Select(x => new DataToken { Value = x.RoadieId.ToString(), Text = x.Name }).ToArray(); }, CacheManagerBase.SystemCacheRegionUrn).ConfigureAwait(false); return new OperationResult> { Data = data, IsSuccess = true, OperationTime = sw.ElapsedMilliseconds }; } public Task>> StatusAsync() { var sw = Stopwatch.StartNew(); return Task.FromResult(new OperationResult> { Data = EnumToDataTokens(typeof(Statuses)), IsSuccess = true, OperationTime = sw.ElapsedMilliseconds }); } private IEnumerable EnumToDataTokens(Type ee) { var result = new List(); foreach (var ls in Enum.GetValues(ee)) result.Add(new DataToken { Text = ls.ToString(), Value = ((short)ls).ToString() }); return result.OrderBy(x => x.Text); } } }