@@ -1,162 +0,0 @@
|
||||
using AutoMapper;
|
||||
using SquirrelContract.DataModels;
|
||||
using SquirrelContract.Exceptions;
|
||||
using SquirrelContract.StoragesContracts;
|
||||
using SquirrelDatabase.Models;
|
||||
|
||||
namespace SquirrelDatabase.Implementations;
|
||||
|
||||
public class WarehouseStorageContract : IWarehouseStorageContract
|
||||
{
|
||||
private readonly SquirrelDbContext _dbContext;
|
||||
private readonly Mapper _mapper;
|
||||
|
||||
public WarehouseStorageContract(SquirrelDbContext dbContext)
|
||||
{
|
||||
_dbContext = dbContext;
|
||||
var config = new MapperConfiguration(cfg =>
|
||||
{
|
||||
cfg.AddMaps(typeof(Warehouse));
|
||||
});
|
||||
_mapper = new Mapper(config);
|
||||
}
|
||||
|
||||
public List<WarehouseDataModel> GetList()
|
||||
{
|
||||
try
|
||||
{
|
||||
return [.. _dbContext.Warehouses.Select(x => _mapper.Map<WarehouseDataModel>(x))];
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_dbContext.ChangeTracker.Clear();
|
||||
throw new StorageException(ex);
|
||||
}
|
||||
}
|
||||
|
||||
public WarehouseDataModel GetElementById(string id)
|
||||
{
|
||||
try
|
||||
{
|
||||
return _mapper.Map<WarehouseDataModel>(GetWarehouseById(id));
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_dbContext.ChangeTracker.Clear();
|
||||
throw new StorageException(ex);
|
||||
}
|
||||
}
|
||||
|
||||
public void AddElement(WarehouseDataModel warehouseDataModel)
|
||||
{
|
||||
try
|
||||
{
|
||||
_dbContext.Warehouses.Add(_mapper.Map<Warehouse>(warehouseDataModel));
|
||||
_dbContext.SaveChanges();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_dbContext.ChangeTracker.Clear();
|
||||
throw new StorageException(ex);
|
||||
}
|
||||
}
|
||||
|
||||
public void UpdElement(WarehouseDataModel warehouseDataModel)
|
||||
{
|
||||
try
|
||||
{
|
||||
var element = GetWarehouseById(warehouseDataModel.Id) ?? throw new ElementNotFoundException(warehouseDataModel.Id);
|
||||
_dbContext.Warehouses.Update(_mapper.Map(warehouseDataModel, element));
|
||||
_dbContext.SaveChanges();
|
||||
}
|
||||
catch (ElementNotFoundException)
|
||||
{
|
||||
_dbContext.ChangeTracker.Clear();
|
||||
throw;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_dbContext.ChangeTracker.Clear();
|
||||
throw new StorageException(ex);
|
||||
}
|
||||
}
|
||||
|
||||
public void DelElement(string id)
|
||||
{
|
||||
try
|
||||
{
|
||||
var element = GetWarehouseById(id) ?? throw new ElementNotFoundException(id);
|
||||
_dbContext.Warehouses.Remove(element);
|
||||
_dbContext.SaveChanges();
|
||||
}
|
||||
catch (ElementNotFoundException)
|
||||
{
|
||||
_dbContext.ChangeTracker.Clear();
|
||||
throw;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_dbContext.ChangeTracker.Clear();
|
||||
throw new StorageException(ex);
|
||||
}
|
||||
}
|
||||
public void UpdWarehouseOnSupply(SupplyDataModel supplyDataModel)
|
||||
{
|
||||
foreach (var supplyCocktail in supplyDataModel.Cocktails)
|
||||
{
|
||||
var warehouse = _warehouseStorageContract.GetList()
|
||||
.FirstOrDefault(w => w.Cocktails.Any(c => c.CocktailId == supplyCocktail.CocktailId));
|
||||
|
||||
if (warehouse == null)
|
||||
{
|
||||
throw new ElementNotFoundException($"No warehouse found for cocktail {supplyCocktail.CocktailId}");
|
||||
}
|
||||
|
||||
var warehouseCocktail = warehouse.Cocktails.FirstOrDefault(c => c.CocktailId == supplyCocktail.CocktailId);
|
||||
|
||||
if (warehouseCocktail != null)
|
||||
{
|
||||
warehouseCocktail.Count += supplyCocktail.Count; // Увеличиваем количество
|
||||
}
|
||||
else
|
||||
{
|
||||
warehouse.Cocktails.Add(new WarehouseCocktailDataModel(warehouse.Id, supplyCocktail.CocktailId, supplyCocktail.Count));
|
||||
}
|
||||
|
||||
_warehouseStorageContract.UpdElement(warehouse);
|
||||
}
|
||||
}
|
||||
|
||||
public bool CheckCocktails(SaleDataModel saleDataModel)
|
||||
{
|
||||
try
|
||||
{
|
||||
foreach (var saleCocktail in saleDataModel.Cocktails)
|
||||
{
|
||||
var warehouse = _dbContext.Warehouses
|
||||
.FirstOrDefault(w => w.Cocktails.Any(c => c.CocktailId == saleCocktail.CocktailId));
|
||||
|
||||
if (warehouse == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
var warehouseCocktail = warehouse.Cocktails
|
||||
.FirstOrDefault(c => c.CocktailId == saleCocktail.CocktailId);
|
||||
|
||||
if (warehouseCocktail == null || warehouseCocktail.Count < saleCocktail.Count)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
throw new StorageException(ex);
|
||||
}
|
||||
}
|
||||
|
||||
private Warehouse? GetWarehouseById(string id) => _dbContext.Warehouses.FirstOrDefault(x => x.Id == id);
|
||||
}
|
||||
@@ -1,15 +0,0 @@
|
||||
using AutoMapper;
|
||||
using SquirrelContract.DataModels;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace SquirrelDatabase.Models;
|
||||
|
||||
[AutoMap(typeof(SupplyDataModel), ReverseMap = true)]
|
||||
public class Supply
|
||||
{
|
||||
public required string Id { get; set; }
|
||||
public DateTime SupplyDate { get; set; }
|
||||
|
||||
[ForeignKey("SupplyId")]
|
||||
public List<SupplyCocktail>? Cocktails { get; set; }
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
using AutoMapper;
|
||||
using SquirrelContract.DataModels;
|
||||
|
||||
namespace SquirrelDatabase.Models;
|
||||
|
||||
[AutoMap(typeof(SupplyCocktailDataModel), ReverseMap = true)]
|
||||
public class SupplyCocktail
|
||||
{
|
||||
public required string SuppliesId { get; set; }
|
||||
public required string CocktailId { get; set; }
|
||||
public int Count { get; set; }
|
||||
public Supply? Supply { get; set; }
|
||||
public Cocktail? Cocktails { get; set; }
|
||||
}
|
||||
@@ -1,15 +0,0 @@
|
||||
using AutoMapper;
|
||||
using SquirrelContract.DataModels;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace SquirrelDatabase.Models;
|
||||
|
||||
[AutoMap(typeof(WarehouseDataModel), ReverseMap = true)]
|
||||
public class Warehouse
|
||||
{
|
||||
public required string Id { get; set; }
|
||||
public required string Name { get; set; }
|
||||
|
||||
[ForeignKey("WarehouseId")]
|
||||
public List<WarehouseCocktail>? Cocktails { get; set; }
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
namespace SquirrelDatabase.Models;
|
||||
|
||||
public class WarehouseCocktail
|
||||
{
|
||||
public required string WarehouseId { get; set; }
|
||||
public required string CocktailId { get; set; }
|
||||
public int Count { get; set; }
|
||||
public Warehouse? Warehouse { get; set; }
|
||||
public Cocktail? Cocktails { get; set; }
|
||||
}
|
||||
Reference in New Issue
Block a user