Переход к работе над формами
This commit is contained in:
parent
0bfe8b692c
commit
383838aaeb
@ -0,0 +1,176 @@
|
|||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
using SofrwareInstallationContracts.BindingModels;
|
||||||
|
using SofrwareInstallationContracts.BusinessLogicsContracts;
|
||||||
|
using SofrwareInstallationContracts.SearchModels;
|
||||||
|
using SofrwareInstallationContracts.StoragesContracts;
|
||||||
|
using SofrwareInstallationContracts.ViewModels;
|
||||||
|
using SoftwareInstallationDataModels.Models;
|
||||||
|
|
||||||
|
namespace SoftwareInstallationBusinessLogic.BusinessLogic
|
||||||
|
{
|
||||||
|
public class StoreLogic : IStoreLogic
|
||||||
|
{
|
||||||
|
private readonly ILogger _logger;
|
||||||
|
private readonly IStoreStorage _storeStorage;
|
||||||
|
public StoreLogic(ILogger<StoreLogic> logger, IStoreStorage storeStorage)
|
||||||
|
{
|
||||||
|
_logger = logger;
|
||||||
|
_storeStorage = storeStorage;
|
||||||
|
}
|
||||||
|
public bool AddPackage(StoreSearchModel model, IPackageModel package, int quantity)
|
||||||
|
{
|
||||||
|
if (model == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(model));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (quantity <= 0)
|
||||||
|
{
|
||||||
|
throw new ArgumentException("Количество добавляемого изделия должно быть больше 0", nameof(quantity));
|
||||||
|
}
|
||||||
|
|
||||||
|
_logger.LogInformation("AddPackageInStore. StoreName:{StoreName}.Id:{ Id}", model.StoreName, model.Id);
|
||||||
|
var element = _storeStorage.GetElement(model);
|
||||||
|
|
||||||
|
if (element == null)
|
||||||
|
{
|
||||||
|
_logger.LogWarning("AddPackageInStore element not found");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
_logger.LogInformation("AddPackageInStore find. Id:{Id}", element.Id);
|
||||||
|
|
||||||
|
if (element.Packages.TryGetValue(package.Id, out var pair))
|
||||||
|
{
|
||||||
|
element.Packages[package.Id] = (package, quantity + pair.Item2);
|
||||||
|
_logger.LogInformation("AddPackageInStore. Has been added {quantity} {package} in {StoreName}", quantity, package.PackageName, element.StoreName);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
element.Packages[package.Id] = (package, quantity);
|
||||||
|
_logger.LogInformation("AddPastryInShop. Has been added {quantity} new Package {package} in {StoreName}", quantity, package.PackageName, element.StoreName);
|
||||||
|
}
|
||||||
|
|
||||||
|
_storeStorage.Update(new()
|
||||||
|
{
|
||||||
|
Id = element.Id,
|
||||||
|
StoreAdress = element.StoreAdress,
|
||||||
|
StoreName = element.StoreName,
|
||||||
|
OpeningDate = element.OpeningDate,
|
||||||
|
Packages = element.Packages
|
||||||
|
});
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool Create(StoreBindingModel model)
|
||||||
|
{
|
||||||
|
CheckModel(model);
|
||||||
|
model.Packages = new();
|
||||||
|
|
||||||
|
if (_storeStorage.Insert(model) == null)
|
||||||
|
{
|
||||||
|
_logger.LogWarning("Insert operation failed");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool Delete(StoreBindingModel model)
|
||||||
|
{
|
||||||
|
CheckModel(model, false);
|
||||||
|
_logger.LogInformation("Delete. Id:{Id}", model.Id);
|
||||||
|
|
||||||
|
if (_storeStorage.Delete(model) == null)
|
||||||
|
{
|
||||||
|
_logger.LogWarning("Delete operation failed");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public StoreViewModel? ReadElement(StoreSearchModel model)
|
||||||
|
{
|
||||||
|
if (model == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(model));
|
||||||
|
}
|
||||||
|
|
||||||
|
_logger.LogInformation("ReadElement. StoreName:{StoreName}.Id:{ Id}", model.StoreName, model.Id);
|
||||||
|
var element = _storeStorage.GetElement(model);
|
||||||
|
|
||||||
|
if (element == null)
|
||||||
|
{
|
||||||
|
_logger.LogWarning("ReadElement element not found");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
_logger.LogInformation("ReadElement find. Id:{Id}", element.Id);
|
||||||
|
return element;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<StoreViewModel>? ReadList(StoreSearchModel? model)
|
||||||
|
{
|
||||||
|
_logger.LogInformation("ReadList. StoreName:{StoreName}.Id:{ Id} ", model?.StoreName, model?.Id);
|
||||||
|
|
||||||
|
var list = (model == null) ? _storeStorage.GetFullList() : _storeStorage.GetFilteredList(model);
|
||||||
|
|
||||||
|
if (list == null)
|
||||||
|
{
|
||||||
|
_logger.LogWarning("ReadList return null list");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
_logger.LogInformation("ReadList. Count:{Count}", list.Count);
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool Update(StoreBindingModel model)
|
||||||
|
{
|
||||||
|
CheckModel(model, false);
|
||||||
|
|
||||||
|
if (string.IsNullOrEmpty(model.StoreName))
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("Нет названия магазина", nameof(model.StoreName));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_storeStorage.Update(model) == null)
|
||||||
|
{
|
||||||
|
_logger.LogWarning("Update operation failed");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void CheckModel(StoreBindingModel model, bool withParams = true)
|
||||||
|
{
|
||||||
|
if (model == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(model));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!withParams)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (string.IsNullOrEmpty(model.StoreName))
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("Нет названия магазина", nameof(model.StoreName));
|
||||||
|
}
|
||||||
|
|
||||||
|
_logger.LogInformation("Store. StoreName:{0}.StoreAdress:{1}. Id: {2}", model.StoreName, model.StoreAdress, model.Id);
|
||||||
|
var element = _storeStorage.GetElement(new StoreSearchModel
|
||||||
|
{
|
||||||
|
StoreName = model.StoreName
|
||||||
|
});
|
||||||
|
|
||||||
|
if (element != null && element.Id != model.Id && element.StoreName == model.StoreName)
|
||||||
|
{
|
||||||
|
throw new InvalidOperationException("Магазин с таким названием уже есть");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -2,8 +2,8 @@
|
|||||||
{
|
{
|
||||||
public interface IStoreModel : IId
|
public interface IStoreModel : IId
|
||||||
{
|
{
|
||||||
public string StoreName { get; set; }
|
public string StoreName { get; }
|
||||||
public string StoreAdress { get; set; }
|
public string StoreAdress { get; }
|
||||||
DateTime OpeningDate { get; }
|
DateTime OpeningDate { get; }
|
||||||
Dictionary<int, (IPackageModel, int)> Packages { get; }
|
Dictionary<int, (IPackageModel, int)> Packages { get; }
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
using SoftwareInstallationListImplement.Models;
|
using SoftwareInstallationListImplement.Models;
|
||||||
|
using static System.Formats.Asn1.AsnWriter;
|
||||||
|
|
||||||
namespace SoftwareInstallationListImplement
|
namespace SoftwareInstallationListImplement
|
||||||
{
|
{
|
||||||
@ -8,12 +9,14 @@ namespace SoftwareInstallationListImplement
|
|||||||
public List<Component> Components { get; set; }
|
public List<Component> Components { get; set; }
|
||||||
public List<Order> Orders { get; set; }
|
public List<Order> Orders { get; set; }
|
||||||
public List<Package> Packages { get; set; }
|
public List<Package> Packages { get; set; }
|
||||||
|
public List<Store> Stores { get; set; }
|
||||||
|
|
||||||
private DataListSingleton()
|
private DataListSingleton()
|
||||||
{
|
{
|
||||||
Components = new List<Component>();
|
Components = new List<Component>();
|
||||||
Orders = new List<Order>();
|
Orders = new List<Order>();
|
||||||
Packages = new List<Package>();
|
Packages = new List<Package>();
|
||||||
|
Stores = new List<Store>();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static DataListSingleton GetInstance()
|
public static DataListSingleton GetInstance()
|
||||||
|
@ -0,0 +1,118 @@
|
|||||||
|
using SofrwareInstallationContracts.BindingModels;
|
||||||
|
using SofrwareInstallationContracts.SearchModels;
|
||||||
|
using SofrwareInstallationContracts.StoragesContracts;
|
||||||
|
using SofrwareInstallationContracts.ViewModels;
|
||||||
|
using SoftwareInstallationListImplement.Models;
|
||||||
|
|
||||||
|
namespace SoftwareInstallationListImplement.Implements
|
||||||
|
{
|
||||||
|
public class StoreStorage : IStoreStorage
|
||||||
|
{
|
||||||
|
private readonly DataListSingleton _source;
|
||||||
|
public StoreStorage()
|
||||||
|
{
|
||||||
|
_source=DataListSingleton.GetInstance();
|
||||||
|
}
|
||||||
|
public StoreViewModel? Delete(StoreBindingModel model)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < _source.Stores.Count; ++i)
|
||||||
|
{
|
||||||
|
if (_source.Stores[i].Id == model.Id)
|
||||||
|
{
|
||||||
|
var element = _source.Stores[i];
|
||||||
|
_source.Stores.RemoveAt(i);
|
||||||
|
return element.GetViewModel;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public StoreViewModel? GetElement(StoreSearchModel model)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(model.StoreName) && !model.Id.HasValue)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var store in _source.Stores)
|
||||||
|
{
|
||||||
|
if ((!string.IsNullOrEmpty(model.StoreName) && store.StoreName == model.StoreName) || (model.Id.HasValue && store.Id == model.Id))
|
||||||
|
{
|
||||||
|
return store.GetViewModel;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<StoreViewModel> GetFilteredList(StoreSearchModel model)
|
||||||
|
{
|
||||||
|
var result = new List<StoreViewModel>();
|
||||||
|
|
||||||
|
if (string.IsNullOrEmpty(model.StoreName))
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var store in _source.Stores)
|
||||||
|
{
|
||||||
|
if (store.StoreName.Contains(model.StoreName))
|
||||||
|
{
|
||||||
|
result.Add(store.GetViewModel);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<StoreViewModel> GetFullList()
|
||||||
|
{
|
||||||
|
var result = new List<StoreViewModel>();
|
||||||
|
|
||||||
|
foreach (var store in _source.Stores)
|
||||||
|
{
|
||||||
|
result.Add(store.GetViewModel);
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public StoreViewModel? Insert(StoreBindingModel model)
|
||||||
|
{
|
||||||
|
model.Id = 1;
|
||||||
|
|
||||||
|
foreach (var store in _source.Stores)
|
||||||
|
{
|
||||||
|
if (model.Id <= store.Id)
|
||||||
|
{
|
||||||
|
model.Id = store.Id + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var newStore = Store.Create(model);
|
||||||
|
|
||||||
|
if (newStore == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
_source.Stores.Add(newStore);
|
||||||
|
|
||||||
|
return newStore.GetViewModel;
|
||||||
|
}
|
||||||
|
|
||||||
|
public StoreViewModel? Update(StoreBindingModel model)
|
||||||
|
{
|
||||||
|
foreach (var store in _source.Stores)
|
||||||
|
{
|
||||||
|
if (store.Id == model.Id)
|
||||||
|
{
|
||||||
|
store.Update(model);
|
||||||
|
return store.GetViewModel;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,57 @@
|
|||||||
|
using SofrwareInstallationContracts.BindingModels;
|
||||||
|
using SofrwareInstallationContracts.ViewModels;
|
||||||
|
using SoftwareInstallationDataModels.Models;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Reflection;
|
||||||
|
|
||||||
|
namespace SoftwareInstallationListImplement.Models
|
||||||
|
{
|
||||||
|
public class Store : IStoreModel
|
||||||
|
{
|
||||||
|
public string StoreName { get; private set; } = string.Empty;
|
||||||
|
public string StoreAdress { get; private set; } = string.Empty;
|
||||||
|
|
||||||
|
public DateTime OpeningDate { get; private set; }
|
||||||
|
|
||||||
|
public Dictionary<int, (IPackageModel, int)> Packages { get; private set; } = new();
|
||||||
|
|
||||||
|
public int Id { get; private set; }
|
||||||
|
|
||||||
|
public static Store? Create(StoreBindingModel? model)
|
||||||
|
{
|
||||||
|
if (model == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return new Store()
|
||||||
|
{
|
||||||
|
Id = model.Id,
|
||||||
|
StoreName = model.StoreName,
|
||||||
|
StoreAdress = model.StoreAdress,
|
||||||
|
OpeningDate = model.OpeningDate,
|
||||||
|
Packages=new()
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Update(StoreBindingModel? model)
|
||||||
|
{
|
||||||
|
if (model == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
StoreName = model.StoreName;
|
||||||
|
StoreAdress = model.StoreAdress;
|
||||||
|
OpeningDate = model.OpeningDate;
|
||||||
|
Packages = model.Packages;
|
||||||
|
}
|
||||||
|
|
||||||
|
public StoreViewModel GetViewModel => new()
|
||||||
|
{
|
||||||
|
Id = Id,
|
||||||
|
StoreName = StoreName,
|
||||||
|
StoreAdress = StoreAdress,
|
||||||
|
OpeningDate = OpeningDate,
|
||||||
|
Packages = Packages
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user