66 lines
2.4 KiB
C#
66 lines
2.4 KiB
C#
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<VarietyEntity> _varietyRepository;
|
|
private readonly IRepository<PalletEntity> _palletRepository;
|
|
private readonly ConcurrentBag<VarietyEntity> _varietiesCache;
|
|
private readonly ConcurrentBag<PalletEntity> _palletsCache;
|
|
|
|
public VarietyService(IServiceProvider provider)
|
|
{
|
|
try
|
|
{
|
|
_varietyRepository = provider.CreateScope().ServiceProvider.GetRequiredService<IRepository<VarietyEntity>>();
|
|
_palletRepository = provider.CreateScope().ServiceProvider.GetRequiredService<IRepository<PalletEntity>>();
|
|
_varietiesCache = new ConcurrentBag<VarietyEntity>(_varietyRepository.GetList());
|
|
_palletsCache = new ConcurrentBag<PalletEntity>(_palletRepository.GetList());
|
|
}catch(Exception e)
|
|
{
|
|
Console.WriteLine(e.Message);
|
|
}
|
|
|
|
}
|
|
|
|
public async Task<Variety?> 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<Variety> 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<List<Pallet>> 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<Variety> GetAll()
|
|
{
|
|
return _varietiesCache.Select(v=>Variety.Create(v, _palletsCache.ToList())).ToList();
|
|
}
|
|
} |