66 lines
2.4 KiB
C#
Raw Normal View History

2025-03-16 03:17:36 +08:00
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()
{
2025-03-16 23:38:23 +08:00
return _palletsCache.Select(p =>Pallet.FromEntity(p)).ToList();
2025-03-16 03:17:36 +08:00
}
public async Task AddPalletAsync(Pallet pallet)
{
var entity = await _palletRepository.InsertReturnEntityAsync(pallet);
_palletsCache.Add(entity);
}
2025-03-16 23:38:23 +08:00
public List<Variety> GetAll()
{
return _varietiesCache.Select(v=>Variety.Create(v, _palletsCache.ToList())).ToList();
}
2025-03-16 03:17:36 +08:00
}