using System.Collections.Concurrent; using Microsoft.Extensions.DependencyInjection; using Seyounth.Hyosung.Data.Entities; using Seyounth.Hyosung.Data.Models; using Seyounth.Hyosung.Data.Repositories; namespace Seyounth.Hyosung.Data.Services; public class VarietyService : IVarietyService { private readonly IRepository _varietyRepository; private readonly IRepository _palletRepository; private readonly ConcurrentBag _varietiesCache; private readonly ConcurrentBag _palletsCache; public VarietyService(IServiceProvider provider) { try { _varietyRepository = provider.CreateScope().ServiceProvider.GetRequiredService>(); _palletRepository = provider.CreateScope().ServiceProvider.GetRequiredService>(); _varietiesCache = new ConcurrentBag(_varietyRepository.GetList()); _palletsCache = new ConcurrentBag(_palletRepository.GetList()); }catch(Exception e) { Console.WriteLine(e.Message); } } public async Task GetVarietyByCodeAsync(string code, int? layers = null) { var entity = layers != null ? _varietiesCache.FirstOrDefault(p => p.Code == code && p.StackingLayers == layers) : _varietiesCache.FirstOrDefault(v => v.Code == code); return entity is null ? null : Variety.Create(entity, _palletsCache.ToList()); } public Task GetById(int id) { var entity = _varietiesCache.FirstOrDefault(p => p.Id == id); return Task.FromResult(Variety.Create(entity, _palletsCache.ToList())); } public async Task AddVarietyAsync(Variety variety) { var entity = await _varietyRepository.InsertReturnEntityAsync(variety.ToEntity()); _varietiesCache.Add(entity); } public async Task> GetPalletsAsync() { return _palletsCache.Select(p =>Pallet.FromEntity(p)).ToList(); } public async Task AddPalletAsync(Pallet pallet) { var entity = await _palletRepository.InsertReturnEntityAsync(pallet); _palletsCache.Add(entity); } public List GetAll() { return _varietiesCache.Select(v=>Variety.Create(v, _palletsCache.ToList())).ToList(); } }