Merge pull request 'время получать обновки' (#15) from main into registration
Reviewed-on: #15
This commit is contained in:
commit
90f28175a3
125
BusinessLogic/BusinessLogic/ProductLogic.cs
Normal file
125
BusinessLogic/BusinessLogic/ProductLogic.cs
Normal file
@ -0,0 +1,125 @@
|
||||
using Contracts.BindingModels;
|
||||
using Contracts.BusinessLogicContracts;
|
||||
using Contracts.SearchModels;
|
||||
using Contracts.StorageContracts;
|
||||
using Contracts.ViewModels;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BusinessLogic.BusinessLogic
|
||||
{
|
||||
public class ProductLogic : IProductLogic
|
||||
{
|
||||
private readonly IProductStorage _productStorage;
|
||||
private readonly ILogger _logger;
|
||||
public ProductLogic(IProductStorage productStorage, ILogger<ProductLogic> logger)
|
||||
{
|
||||
_productStorage = productStorage;
|
||||
_logger = logger;
|
||||
}
|
||||
public bool Create(ProductBindingModel model)
|
||||
{
|
||||
CheckModel(model);
|
||||
if (_productStorage.Insert(model) == null)
|
||||
{
|
||||
_logger.LogWarning("Insert operation failed");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool Delete(ProductBindingModel model)
|
||||
{
|
||||
CheckModel(model, false);
|
||||
_logger.LogInformation("Delete. Id:{Id}", model.Id);
|
||||
if (_productStorage.Delete(model) == null)
|
||||
{
|
||||
_logger.LogWarning("Delete operation failed");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public ProductViewModel? ReadElement(ProductSearchModel model)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(model));
|
||||
}
|
||||
_logger.LogInformation("ReadElement. Name:{Name}.Id:{ Id}", model.Name, model.Id);
|
||||
var element = _productStorage.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<ProductViewModel>? ReadList(ProductSearchModel? model)
|
||||
{
|
||||
_logger.LogInformation("ReadList. Name:{Name}.Id:{ Id}", model?.Name, model?.Id);
|
||||
var list = model == null ? _productStorage.GetFullList() : _productStorage.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(ProductBindingModel model)
|
||||
{
|
||||
CheckModel(model);
|
||||
if (_productStorage.Update(model) == null)
|
||||
{
|
||||
_logger.LogWarning("Update operation failed");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private void CheckModel(ProductBindingModel model, bool withParams = true)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(model));
|
||||
}
|
||||
if (!withParams)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (string.IsNullOrEmpty(model.Name))
|
||||
{
|
||||
throw new ArgumentNullException("Нет названия продукта", nameof(model.Name));
|
||||
}
|
||||
if (model.Price < 0)
|
||||
{
|
||||
throw new Exception("Цена продукта не может быть ниже нуля");
|
||||
}
|
||||
if (model.Amount < 0)
|
||||
{
|
||||
throw new Exception("Кол-во продуктов не может быть ниже нуля");
|
||||
}
|
||||
if (model.Rate < 0.0 || model.Rate > 5.0)
|
||||
{
|
||||
throw new Exception("Рейтинг продукта должен быть в пределах от 0.0 до 5.0");
|
||||
}
|
||||
_logger.LogInformation("Product. ProductName:{Name}.Price:{ Price}. Id: { Id}", model.Name, model.Price, model.Id);
|
||||
var element = _productStorage.GetElement(new ProductSearchModel
|
||||
{
|
||||
Name = model.Name
|
||||
});
|
||||
if (element != null && element.Id != model.Id)
|
||||
{
|
||||
throw new InvalidOperationException("Продукт с таким названием уже есть");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
114
BusinessLogic/BusinessLogic/SupplierLogic.cs
Normal file
114
BusinessLogic/BusinessLogic/SupplierLogic.cs
Normal file
@ -0,0 +1,114 @@
|
||||
using Contracts.BindingModels;
|
||||
using Contracts.BusinessLogicContracts;
|
||||
using Contracts.SearchModels;
|
||||
using Contracts.StorageContracts;
|
||||
using Contracts.ViewModels;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BusinessLogic.BusinessLogic
|
||||
{
|
||||
public class SupplierLogic : ISupplierLogic
|
||||
{
|
||||
private readonly ISupplierStorage _supplierStorage;
|
||||
private readonly ILogger _logger;
|
||||
public SupplierLogic(ISupplierStorage supplierStorage, ILogger<SupplierLogic> logger)
|
||||
{
|
||||
_supplierStorage = supplierStorage;
|
||||
_logger = logger;
|
||||
}
|
||||
public bool Create(SupplierBindingModel model)
|
||||
{
|
||||
CheckModel(model);
|
||||
if (_supplierStorage.Insert(model) == null)
|
||||
{
|
||||
_logger.LogWarning("Insert operation failed");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool Delete(SupplierBindingModel model)
|
||||
{
|
||||
CheckModel(model, false);
|
||||
_logger.LogInformation("Delete. Id:{Id}", model.Id);
|
||||
if (_supplierStorage.Delete(model) == null)
|
||||
{
|
||||
_logger.LogWarning("Delete operation failed");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public SupplierViewModel? ReadElement(SupplierSearchModel model)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(model));
|
||||
}
|
||||
_logger.LogInformation("ReadElement. Name:{Name}.Id:{ Id}", model.Name, model.Id);
|
||||
var element = _supplierStorage.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<SupplierViewModel>? ReadList(SupplierSearchModel? model)
|
||||
{
|
||||
_logger.LogInformation("ReadList. Name:{Name}.Id:{ Id}", model?.Name, model?.Id);
|
||||
var list = model == null ? _supplierStorage.GetFullList() : _supplierStorage.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(SupplierBindingModel model)
|
||||
{
|
||||
CheckModel(model);
|
||||
if (_supplierStorage.Update(model) == null)
|
||||
{
|
||||
_logger.LogWarning("Update operation failed");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
private void CheckModel(SupplierBindingModel model, bool withParams = true)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(model));
|
||||
}
|
||||
if (!withParams)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (string.IsNullOrEmpty(model.Name))
|
||||
{
|
||||
throw new ArgumentNullException("Нет названия поставщика", nameof(model.Name));
|
||||
}
|
||||
if (model.Deals < 0)
|
||||
{
|
||||
throw new Exception("Кол-во сделок не может быть меньше нуля");
|
||||
}
|
||||
foreach(var item in model.AvailibleProducts.Values)
|
||||
{
|
||||
if (item.Item2 < 0)
|
||||
{
|
||||
throw new Exception("Кол-во доступных продуктов не должно быть отрицательным");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
105
BusinessLogic/BusinessLogic/SupplyLogic.cs
Normal file
105
BusinessLogic/BusinessLogic/SupplyLogic.cs
Normal file
@ -0,0 +1,105 @@
|
||||
using Contracts.BindingModels;
|
||||
using Contracts.BusinessLogicContracts;
|
||||
using Contracts.SearchModels;
|
||||
using Contracts.StorageContracts;
|
||||
using Contracts.ViewModels;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BusinessLogic.BusinessLogic
|
||||
{
|
||||
public class SupplyLogic : ISupplyLogic
|
||||
{
|
||||
private readonly ISupplyStorage _supplyStorage;
|
||||
private readonly ILogger _logger;
|
||||
public SupplyLogic(ISupplyStorage supplyStorage, ILogger<SupplyLogic> logger)
|
||||
{
|
||||
_supplyStorage = supplyStorage;
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
public bool Create(SupplyBindingModel model)
|
||||
{
|
||||
CheckModel(model);
|
||||
if (_supplyStorage.Insert(model) == null)
|
||||
{
|
||||
_logger.LogWarning("Insert operation failed");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool Delete(SupplyBindingModel model)
|
||||
{
|
||||
CheckModel(model, false);
|
||||
_logger.LogInformation("Delete. Id:{Id}", model.Id);
|
||||
if (_supplyStorage.Delete(model) == null)
|
||||
{
|
||||
_logger.LogWarning("Delete operation failed");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public SupplyViewModel? ReadElement(SupplySearchModel model)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(model));
|
||||
}
|
||||
_logger.LogInformation("ReadElement. Name:{Name}.Id:{ Id}", model.Name, model.Id);
|
||||
var element = _supplyStorage.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<SupplyViewModel>? ReadList(SupplySearchModel? model)
|
||||
{
|
||||
_logger.LogInformation("ReadList. Name:{Name}.Id:{ Id}", model?.Name, model?.Id);
|
||||
var list = model == null ? _supplyStorage.GetFullList() : _supplyStorage.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(SupplyBindingModel model)
|
||||
{
|
||||
CheckModel(model);
|
||||
if (_supplyStorage.Update(model) == null)
|
||||
{
|
||||
_logger.LogWarning("Update operation failed");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private void CheckModel(SupplyBindingModel model, bool withParams = true)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(model));
|
||||
}
|
||||
if (!withParams)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (string.IsNullOrEmpty(model.Name))
|
||||
{
|
||||
throw new ArgumentNullException("Нет названия поставки", nameof(model.Name));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
17
Contracts/BindingModels/MediaFileBindingModel.cs
Normal file
17
Contracts/BindingModels/MediaFileBindingModel.cs
Normal file
@ -0,0 +1,17 @@
|
||||
using DataModels.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Contracts.BindingModels
|
||||
{
|
||||
public class MediaFileBindingModel : IMediaFile
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public Guid ProductId { get; set; }
|
||||
public string Name { get; set; } = string.Empty;
|
||||
public string Location { get; set; } = string.Empty;
|
||||
}
|
||||
}
|
19
Contracts/BindingModels/ProductBindingModel.cs
Normal file
19
Contracts/BindingModels/ProductBindingModel.cs
Normal file
@ -0,0 +1,19 @@
|
||||
using DataModels.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Contracts.BindingModels
|
||||
{
|
||||
public class ProductBindingModel : IProduct
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public string Name { get; set; } = string.Empty;
|
||||
public double Price { get; set; }
|
||||
public int Amount { get; set; }
|
||||
public bool IsBeingSold { get; set; }
|
||||
public double Rate { get; set; }
|
||||
}
|
||||
}
|
14
Contracts/BindingModels/PurchaseBindingModel.cs
Normal file
14
Contracts/BindingModels/PurchaseBindingModel.cs
Normal file
@ -0,0 +1,14 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Contracts.BindingModels
|
||||
{
|
||||
public class PurchaseBindingModel
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public DateTime DatePurchase { get; set; }
|
||||
}
|
||||
}
|
14
Contracts/BindingModels/SellBindingModel.cs
Normal file
14
Contracts/BindingModels/SellBindingModel.cs
Normal file
@ -0,0 +1,14 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Contracts.BindingModels
|
||||
{
|
||||
public class SellBindingModel
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public DateTime DateSell { get; set; }
|
||||
}
|
||||
}
|
17
Contracts/BindingModels/SupplierBindingModel.cs
Normal file
17
Contracts/BindingModels/SupplierBindingModel.cs
Normal file
@ -0,0 +1,17 @@
|
||||
using DataModels.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Contracts.BindingModels
|
||||
{
|
||||
public class SupplierBindingModel : ISupplier
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public string Name { get; set; } = string.Empty;
|
||||
public Dictionary<Guid, (IProduct, int)> AvailibleProducts { get; set; } = new();
|
||||
public int Deals { get; set; } = 0;
|
||||
}
|
||||
}
|
21
Contracts/BindingModels/SupplyBindingModel.cs
Normal file
21
Contracts/BindingModels/SupplyBindingModel.cs
Normal file
@ -0,0 +1,21 @@
|
||||
using DataModels.Enums;
|
||||
using DataModels.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Contracts.BindingModels
|
||||
{
|
||||
public class SupplyBindingModel : ISupply
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public string Name { get; set; } = string.Empty;
|
||||
public Guid SupplierId { get; set; }
|
||||
public DateTime Date { get; set; }
|
||||
public double Price { get; set; }
|
||||
public SupplyStatus Status { get; set; }
|
||||
public Dictionary<Guid, (IProduct, int)> SupplyProducts { get; set; } = new();
|
||||
}
|
||||
}
|
17
Contracts/BindingModels/SupplyDocBindingModel.cs
Normal file
17
Contracts/BindingModels/SupplyDocBindingModel.cs
Normal file
@ -0,0 +1,17 @@
|
||||
using DataModels.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Contracts.BindingModels
|
||||
{
|
||||
public class SupplyDocBindingModel : ISupplyDoc
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public string Name { get; set; } = string.Empty;
|
||||
public Guid SupplyId { get; set; }
|
||||
|
||||
}
|
||||
}
|
24
Contracts/BusinessLogicContracts/IEmployeeProductLogic.cs
Normal file
24
Contracts/BusinessLogicContracts/IEmployeeProductLogic.cs
Normal file
@ -0,0 +1,24 @@
|
||||
using Contracts.BindingModels;
|
||||
using Contracts.SearchModels;
|
||||
using Contracts.ViewModels;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Contracts.BusinessLogicContracts
|
||||
{
|
||||
public interface IEmployeeProductLogic
|
||||
{
|
||||
EmployeeProductViewModel Create(ProductBindingModel model);
|
||||
|
||||
EmployeeProductViewModel Update(ProductBindingModel model);
|
||||
|
||||
EmployeeProductViewModel ReadElement(ProductSearchModel model);
|
||||
|
||||
IEnumerable<EmployeeProductViewModel> ReadElements(ProductSearchModel? model);
|
||||
|
||||
EmployeeProductViewModel Delete(ProductSearchModel model);
|
||||
}
|
||||
}
|
20
Contracts/BusinessLogicContracts/IProductLogic.cs
Normal file
20
Contracts/BusinessLogicContracts/IProductLogic.cs
Normal file
@ -0,0 +1,20 @@
|
||||
using Contracts.BindingModels;
|
||||
using Contracts.SearchModels;
|
||||
using Contracts.ViewModels;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Contracts.BusinessLogicContracts
|
||||
{
|
||||
public interface IProductLogic
|
||||
{
|
||||
bool Create(ProductBindingModel model);
|
||||
bool Update(ProductBindingModel model);
|
||||
bool Delete(ProductBindingModel model);
|
||||
List<ProductViewModel>? ReadList(ProductSearchModel? model);
|
||||
ProductViewModel? ReadElement(ProductSearchModel model);
|
||||
}
|
||||
}
|
24
Contracts/BusinessLogicContracts/IPurchaseLogic.cs
Normal file
24
Contracts/BusinessLogicContracts/IPurchaseLogic.cs
Normal file
@ -0,0 +1,24 @@
|
||||
using Contracts.BindingModels;
|
||||
using Contracts.SearchModels;
|
||||
using Contracts.ViewModels;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Contracts.BusinessLogicContracts
|
||||
{
|
||||
public interface IPurchaseLogic
|
||||
{
|
||||
PurchaseViewModel Create(PurchaseBindingModel model);
|
||||
|
||||
PurchaseViewModel Update(PurchaseBindingModel model);
|
||||
|
||||
PurchaseViewModel ReadElement(PurchaseSearchModel model);
|
||||
|
||||
IEnumerable<PurchaseViewModel> ReadElements(PurchaseSearchModel? model);
|
||||
|
||||
PurchaseViewModel Delete(PurchaseSearchModel model);
|
||||
}
|
||||
}
|
24
Contracts/BusinessLogicContracts/ISellLogic.cs
Normal file
24
Contracts/BusinessLogicContracts/ISellLogic.cs
Normal file
@ -0,0 +1,24 @@
|
||||
using Contracts.BindingModels;
|
||||
using Contracts.SearchModels;
|
||||
using Contracts.ViewModels;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Contracts.BusinessLogicContracts
|
||||
{
|
||||
public interface ISellLogic
|
||||
{
|
||||
SellViewModel Create(SellBindingModel model);
|
||||
|
||||
SellViewModel Update(SellBindingModel model);
|
||||
|
||||
SellViewModel ReadElement(SellSearchModel model);
|
||||
|
||||
IEnumerable<SellViewModel> ReadElements(SellSearchModel? model);
|
||||
|
||||
SellViewModel Delete(SellSearchModel model);
|
||||
}
|
||||
}
|
20
Contracts/BusinessLogicContracts/ISupplierLogic.cs
Normal file
20
Contracts/BusinessLogicContracts/ISupplierLogic.cs
Normal file
@ -0,0 +1,20 @@
|
||||
using Contracts.BindingModels;
|
||||
using Contracts.SearchModels;
|
||||
using Contracts.ViewModels;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Contracts.BusinessLogicContracts
|
||||
{
|
||||
public interface ISupplierLogic
|
||||
{
|
||||
List<SupplierViewModel>? ReadList(SupplierSearchModel? model);
|
||||
SupplierViewModel? ReadElement(SupplierSearchModel model);
|
||||
bool Create(SupplierBindingModel model);
|
||||
bool Update(SupplierBindingModel model);
|
||||
bool Delete(SupplierBindingModel model);
|
||||
}
|
||||
}
|
20
Contracts/BusinessLogicContracts/ISupplyDocLogic.cs
Normal file
20
Contracts/BusinessLogicContracts/ISupplyDocLogic.cs
Normal file
@ -0,0 +1,20 @@
|
||||
using Contracts.BindingModels;
|
||||
using Contracts.SearchModels;
|
||||
using Contracts.ViewModels;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Contracts.BusinessLogicContracts
|
||||
{
|
||||
public interface ISupplyDocLogic
|
||||
{
|
||||
List<SupplyDocViewModel>? ReadList(SupplyDocSearchModel? model);
|
||||
SupplyDocViewModel? ReadElement(SupplyDocSearchModel model);
|
||||
bool Create(SupplyDocBindingModel model);
|
||||
bool Update(SupplyDocBindingModel model);
|
||||
bool Delete(SupplyDocBindingModel model);
|
||||
}
|
||||
}
|
20
Contracts/BusinessLogicContracts/ISupplyLogic.cs
Normal file
20
Contracts/BusinessLogicContracts/ISupplyLogic.cs
Normal file
@ -0,0 +1,20 @@
|
||||
using Contracts.BindingModels;
|
||||
using Contracts.SearchModels;
|
||||
using Contracts.ViewModels;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Contracts.BusinessLogicContracts
|
||||
{
|
||||
public interface ISupplyLogic
|
||||
{
|
||||
List<SupplyViewModel>? ReadList(SupplySearchModel? model);
|
||||
SupplyViewModel? ReadElement(SupplySearchModel model);
|
||||
bool Create(SupplyBindingModel model);
|
||||
bool Update(SupplyBindingModel model);
|
||||
bool Delete(SupplyBindingModel model);
|
||||
}
|
||||
}
|
21
Contracts/BusinessLogicContracts/IUserProductLogic.cs
Normal file
21
Contracts/BusinessLogicContracts/IUserProductLogic.cs
Normal file
@ -0,0 +1,21 @@
|
||||
using Contracts.BindingModels;
|
||||
using Contracts.SearchModels;
|
||||
using Contracts.ViewModels;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Contracts.BusinessLogicContracts
|
||||
{
|
||||
public interface IUserProductLogic
|
||||
{
|
||||
|
||||
UserProductViewModel ReadElement(ProductSearchModel model);
|
||||
|
||||
IEnumerable<UserProductViewModel> ReadElements(ProductSearchModel? model);
|
||||
|
||||
UserProductViewModel Delete(ProductSearchModel model);
|
||||
}
|
||||
}
|
@ -6,4 +6,8 @@
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\DataModels\DataModels.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
14
Contracts/SearchModels/MediaFileSearchModel.cs
Normal file
14
Contracts/SearchModels/MediaFileSearchModel.cs
Normal file
@ -0,0 +1,14 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Contracts.SearchModels
|
||||
{
|
||||
public class MediaFileSearchModel
|
||||
{
|
||||
public Guid? Id { get; set; }
|
||||
public Guid? ProductId { get; set; }
|
||||
}
|
||||
}
|
18
Contracts/SearchModels/ProductSearchModel.cs
Normal file
18
Contracts/SearchModels/ProductSearchModel.cs
Normal file
@ -0,0 +1,18 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Contracts.SearchModels
|
||||
{
|
||||
public class ProductSearchModel
|
||||
{
|
||||
public Guid? Id { get; set; }
|
||||
public string? Name { get; set; }
|
||||
public double? Price { get; set; }
|
||||
public double? Rate { get; set; }
|
||||
public int? Amount { get; set; }
|
||||
public bool? IsBeingSold { get; set; }
|
||||
}
|
||||
}
|
20
Contracts/SearchModels/PurchaseSearchModel.cs
Normal file
20
Contracts/SearchModels/PurchaseSearchModel.cs
Normal file
@ -0,0 +1,20 @@
|
||||
using DataModels.Enums;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
|
||||
namespace Contracts.SearchModels
|
||||
{
|
||||
public class PurchaseSearchModel
|
||||
{
|
||||
public Guid? Id { get; set; }
|
||||
public DateTime? DateFrom { get; set; }
|
||||
public DateTime? DateTo { get; set; }
|
||||
public double? PriceFrom { get; set; }
|
||||
public double? PriceTo { get; set; }
|
||||
public PurchaseStatus? Status { get; set; }
|
||||
}
|
||||
}
|
16
Contracts/SearchModels/SellSearchModel.cs
Normal file
16
Contracts/SearchModels/SellSearchModel.cs
Normal file
@ -0,0 +1,16 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Contracts.SearchModels
|
||||
{
|
||||
public class SellSearchModel
|
||||
{
|
||||
public Guid? Id { get; set; }
|
||||
public DateTime? DateFrom { get; set; }
|
||||
public DateTime? DateTo { get; set; }
|
||||
public Guid? SupplyDocId { get; set; }
|
||||
}
|
||||
}
|
16
Contracts/SearchModels/SupplierSearchModel.cs
Normal file
16
Contracts/SearchModels/SupplierSearchModel.cs
Normal file
@ -0,0 +1,16 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Contracts.SearchModels
|
||||
{
|
||||
public class SupplierSearchModel
|
||||
{
|
||||
public Guid? Id { get; set; }
|
||||
public string? Name { get; set; }
|
||||
//public List<ProductSearchModel>? AvailibleProducts { get; set; }
|
||||
public int? Deals { get; set; }
|
||||
}
|
||||
}
|
15
Contracts/SearchModels/SupplyDocSearchModel.cs
Normal file
15
Contracts/SearchModels/SupplyDocSearchModel.cs
Normal file
@ -0,0 +1,15 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Contracts.SearchModels
|
||||
{
|
||||
public class SupplyDocSearchModel
|
||||
{
|
||||
public Guid? Id { get; set; }
|
||||
public string? Name { get; set; }
|
||||
public Guid? SupplyId { get; set; }
|
||||
}
|
||||
}
|
18
Contracts/SearchModels/SupplySearchModel.cs
Normal file
18
Contracts/SearchModels/SupplySearchModel.cs
Normal file
@ -0,0 +1,18 @@
|
||||
using DataModels.Enums;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Contracts.SearchModels
|
||||
{
|
||||
public class SupplySearchModel
|
||||
{
|
||||
public Guid? Id { get; set; }
|
||||
public string Name { get; set; } = string.Empty;
|
||||
public SupplyStatus? Status { get; set; }
|
||||
public DateTime? DateStart { get; set; }
|
||||
public DateTime? DateEnd { get; set; }
|
||||
}
|
||||
}
|
21
Contracts/StorageContracts/IProductStorage.cs
Normal file
21
Contracts/StorageContracts/IProductStorage.cs
Normal file
@ -0,0 +1,21 @@
|
||||
using Contracts.BindingModels;
|
||||
using Contracts.SearchModels;
|
||||
using Contracts.ViewModels;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Contracts.StorageContracts
|
||||
{
|
||||
public interface IProductStorage
|
||||
{
|
||||
List<ProductViewModel> GetFullList();
|
||||
List<ProductViewModel> GetFilteredList(ProductSearchModel model);
|
||||
ProductViewModel? GetElement(ProductSearchModel model);
|
||||
ProductViewModel? Insert(ProductBindingModel model);
|
||||
ProductViewModel? Update(ProductBindingModel model);
|
||||
ProductViewModel? Delete(ProductBindingModel model);
|
||||
}
|
||||
}
|
23
Contracts/StorageContracts/IPurchaseStorage.cs
Normal file
23
Contracts/StorageContracts/IPurchaseStorage.cs
Normal file
@ -0,0 +1,23 @@
|
||||
using Contracts.BindingModels;
|
||||
using Contracts.SearchModels;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Contracts.StorageContracts
|
||||
{
|
||||
public interface IPurchaseStorage
|
||||
{
|
||||
PurchaseBindingModel? Insert(PurchaseBindingModel model);
|
||||
|
||||
IEnumerable<PurchaseBindingModel> GetList(PurchaseSearchModel? model);
|
||||
|
||||
PurchaseBindingModel? GetElement(PurchaseSearchModel model);
|
||||
|
||||
PurchaseBindingModel? Update(PurchaseBindingModel model);
|
||||
|
||||
PurchaseBindingModel? Delete(PurchaseSearchModel model);
|
||||
}
|
||||
}
|
23
Contracts/StorageContracts/ISellStorage.cs
Normal file
23
Contracts/StorageContracts/ISellStorage.cs
Normal file
@ -0,0 +1,23 @@
|
||||
using Contracts.BindingModels;
|
||||
using Contracts.SearchModels;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Contracts.StorageContracts
|
||||
{
|
||||
public interface ISellStorage
|
||||
{
|
||||
SellBindingModel? Insert(SellBindingModel model);
|
||||
|
||||
IEnumerable<SellBindingModel> GetList(SellSearchModel? model);
|
||||
|
||||
SellBindingModel? GetElement(SellSearchModel model);
|
||||
|
||||
SellBindingModel? Update(SellBindingModel model);
|
||||
|
||||
SellBindingModel? Delete(SellSearchModel model);
|
||||
}
|
||||
}
|
21
Contracts/StorageContracts/ISupplierStorage.cs
Normal file
21
Contracts/StorageContracts/ISupplierStorage.cs
Normal file
@ -0,0 +1,21 @@
|
||||
using Contracts.BindingModels;
|
||||
using Contracts.SearchModels;
|
||||
using Contracts.ViewModels;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Contracts.StorageContracts
|
||||
{
|
||||
public interface ISupplierStorage
|
||||
{
|
||||
List<SupplierViewModel> GetFullList();
|
||||
List<SupplierViewModel> GetFilteredList(SupplierSearchModel model);
|
||||
SupplierViewModel? GetElement(SupplierSearchModel model);
|
||||
SupplierViewModel? Insert(SupplierBindingModel model);
|
||||
SupplierViewModel? Update(SupplierBindingModel model);
|
||||
SupplierViewModel? Delete(SupplierBindingModel model);
|
||||
}
|
||||
}
|
21
Contracts/StorageContracts/ISupplyDocStorage.cs
Normal file
21
Contracts/StorageContracts/ISupplyDocStorage.cs
Normal file
@ -0,0 +1,21 @@
|
||||
using Contracts.BindingModels;
|
||||
using Contracts.SearchModels;
|
||||
using Contracts.ViewModels;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Contracts.StorageContracts
|
||||
{
|
||||
public interface ISupplyDocStorage
|
||||
{
|
||||
List<SupplyDocViewModel> GetFullList();
|
||||
List<SupplyDocViewModel> GetFilteredList(SupplyDocSearchModel model);
|
||||
SupplyDocViewModel? GetElement(SupplyDocSearchModel model);
|
||||
SupplyDocViewModel? Insert(SupplyDocBindingModel model);
|
||||
SupplyDocViewModel? Update(SupplyDocBindingModel model);
|
||||
SupplyDocViewModel? Delete(SupplyDocBindingModel model);
|
||||
}
|
||||
}
|
21
Contracts/StorageContracts/ISupplyStorage.cs
Normal file
21
Contracts/StorageContracts/ISupplyStorage.cs
Normal file
@ -0,0 +1,21 @@
|
||||
using Contracts.BindingModels;
|
||||
using Contracts.SearchModels;
|
||||
using Contracts.ViewModels;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Contracts.StorageContracts
|
||||
{
|
||||
public interface ISupplyStorage
|
||||
{
|
||||
List<SupplyViewModel> GetFullList();
|
||||
List<SupplyViewModel> GetFilteredList(SupplySearchModel model);
|
||||
SupplyViewModel? GetElement(SupplySearchModel model);
|
||||
SupplyViewModel? Insert(SupplyBindingModel model);
|
||||
SupplyViewModel? Update(SupplyBindingModel model);
|
||||
SupplyViewModel? Delete(SupplyBindingModel model);
|
||||
}
|
||||
}
|
15
Contracts/ViewModels/EmployeeProductViewModel.cs
Normal file
15
Contracts/ViewModels/EmployeeProductViewModel.cs
Normal file
@ -0,0 +1,15 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Contracts.ViewModels
|
||||
{
|
||||
public class EmployeeProductViewModel
|
||||
{
|
||||
public Guid Guid { get; set; }
|
||||
public string Name { get; set; } = string.Empty;
|
||||
public double Price { get; set; }
|
||||
}
|
||||
}
|
29
Contracts/ViewModels/MediaFileViewModel.cs
Normal file
29
Contracts/ViewModels/MediaFileViewModel.cs
Normal file
@ -0,0 +1,29 @@
|
||||
using Contracts.BindingModels;
|
||||
using DataModels.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Contracts.ViewModels
|
||||
{
|
||||
public class MediaFileViewModel
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public string Location { get; set; } = string.Empty;
|
||||
public string Name { get; set; } = string.Empty;
|
||||
public Guid ProductId { get; set; }
|
||||
public MediaFileBindingModel GetBindingModel()
|
||||
{
|
||||
return new MediaFileBindingModel
|
||||
{
|
||||
Id = Id,
|
||||
Name = Name,
|
||||
Location = Location,
|
||||
ProductId = ProductId
|
||||
};
|
||||
}
|
||||
|
||||
}
|
||||
}
|
20
Contracts/ViewModels/ProductViewModel.cs
Normal file
20
Contracts/ViewModels/ProductViewModel.cs
Normal file
@ -0,0 +1,20 @@
|
||||
using DataModels.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Contracts.ViewModels
|
||||
{
|
||||
public class ProductViewModel
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public string Name { get; set; } = string.Empty;
|
||||
public double Price { get; set; }
|
||||
public double Rating { get; set; }
|
||||
public bool IsBeingSold { get; set; }
|
||||
public int Amount { get; set; }
|
||||
public List<MediaFileViewModel> MediaFiles { get; set; } = new();
|
||||
}
|
||||
}
|
19
Contracts/ViewModels/PurchaseViewModel.cs
Normal file
19
Contracts/ViewModels/PurchaseViewModel.cs
Normal file
@ -0,0 +1,19 @@
|
||||
using DataModels.Enums;
|
||||
using DataModels.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Contracts.ViewModels
|
||||
{
|
||||
public class PurchaseViewModel
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public DateTime DatePurchase { get; set; }
|
||||
public required IUser User { get; set; }
|
||||
public required List<IProduct> Products { get; set; }
|
||||
public PurchaseStatus Status { get; set; }
|
||||
}
|
||||
}
|
16
Contracts/ViewModels/SellViewModel.cs
Normal file
16
Contracts/ViewModels/SellViewModel.cs
Normal file
@ -0,0 +1,16 @@
|
||||
using DataModels.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Contracts.ViewModels
|
||||
{
|
||||
public class SellViewModel
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public DateTime DateSell { get; set; }
|
||||
public ISupplyDoc? SupplyDoc { get; set; }
|
||||
}
|
||||
}
|
16
Contracts/ViewModels/SupplierViewModel.cs
Normal file
16
Contracts/ViewModels/SupplierViewModel.cs
Normal file
@ -0,0 +1,16 @@
|
||||
using DataModels.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Contracts.ViewModels
|
||||
{
|
||||
public class SupplierViewModel
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public string Name { get; set; } = string.Empty;
|
||||
public Dictionary<Guid, (IProduct, int)> AvailibleProducts = new();
|
||||
}
|
||||
}
|
14
Contracts/ViewModels/SupplyDocViewModel.cs
Normal file
14
Contracts/ViewModels/SupplyDocViewModel.cs
Normal file
@ -0,0 +1,14 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Contracts.ViewModels
|
||||
{
|
||||
public class SupplyDocViewModel
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public string Name { get; set; } = string.Empty;
|
||||
}
|
||||
}
|
23
Contracts/ViewModels/SupplyViewModel.cs
Normal file
23
Contracts/ViewModels/SupplyViewModel.cs
Normal file
@ -0,0 +1,23 @@
|
||||
using DataModels.Enums;
|
||||
using DataModels.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Contracts.ViewModels
|
||||
{
|
||||
public class SupplyViewModel
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public string Name { get; set; } = string.Empty;
|
||||
public Guid SupplierId { get; set; }
|
||||
public string SupplierName { get; set; } = string.Empty;
|
||||
public double Price { get; set; }
|
||||
public Dictionary<Guid, (IProduct, int)> Products { get; set; } = new();
|
||||
public DateTime Date { get; set; }
|
||||
public SupplyStatus Status { get; set; }
|
||||
}
|
||||
}
|
15
Contracts/ViewModels/UserProductViewModel.cs
Normal file
15
Contracts/ViewModels/UserProductViewModel.cs
Normal file
@ -0,0 +1,15 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Contracts.ViewModels
|
||||
{
|
||||
public class UserProductViewModel
|
||||
{
|
||||
public string Name { get; set; } = string.Empty;
|
||||
public double Price { get; set; }
|
||||
public double Rate { get; set; }
|
||||
}
|
||||
}
|
15
DataModels/Enums/PurchaseStatus.cs
Normal file
15
DataModels/Enums/PurchaseStatus.cs
Normal file
@ -0,0 +1,15 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace DataModels.Enums
|
||||
{
|
||||
public enum PurchaseStatus
|
||||
{
|
||||
Unknown = -1,
|
||||
Processing = 0,
|
||||
Complited = 1
|
||||
}
|
||||
}
|
15
DataModels/Enums/SupplyStatus.cs
Normal file
15
DataModels/Enums/SupplyStatus.cs
Normal file
@ -0,0 +1,15 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace DataModels.Enums
|
||||
{
|
||||
public enum SupplyStatus
|
||||
{
|
||||
Pending = -1,
|
||||
Arriving = 0,
|
||||
Completed = 1
|
||||
}
|
||||
}
|
15
DataModels/Models/IMediaFile.cs
Normal file
15
DataModels/Models/IMediaFile.cs
Normal file
@ -0,0 +1,15 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace DataModels.Models
|
||||
{
|
||||
public interface IMediaFile : IId
|
||||
{
|
||||
string Name { get; }
|
||||
string Location { get; }
|
||||
Guid ProductId { get; }
|
||||
}
|
||||
}
|
19
DataModels/Models/IProduct.cs
Normal file
19
DataModels/Models/IProduct.cs
Normal file
@ -0,0 +1,19 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace DataModels.Models
|
||||
{
|
||||
public interface IProduct : IId
|
||||
{
|
||||
string Name { get; }
|
||||
double Price { get; }
|
||||
bool IsBeingSold { get; }
|
||||
public double Rate { get; }
|
||||
int Amount { get; }
|
||||
// будут браться через mediafilestorage так что скорее всего это тут не надо
|
||||
// List<IMediaFile> MediaFiles { get; }
|
||||
}
|
||||
}
|
15
DataModels/Models/IPurchase.cs
Normal file
15
DataModels/Models/IPurchase.cs
Normal file
@ -0,0 +1,15 @@
|
||||
using DataModels.Enums;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace DataModels.Models
|
||||
{
|
||||
public interface IPurchase : IId
|
||||
{
|
||||
DateTime DatePurchase { get; }
|
||||
PurchaseStatus Status { get; }
|
||||
}
|
||||
}
|
13
DataModels/Models/ISell.cs
Normal file
13
DataModels/Models/ISell.cs
Normal file
@ -0,0 +1,13 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace DataModels.Models
|
||||
{
|
||||
public interface ISell : IId
|
||||
{
|
||||
DateTime DateSell { get; }
|
||||
}
|
||||
}
|
15
DataModels/Models/ISupplier.cs
Normal file
15
DataModels/Models/ISupplier.cs
Normal file
@ -0,0 +1,15 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace DataModels.Models
|
||||
{
|
||||
public interface ISupplier : IId
|
||||
{
|
||||
string Name { get; }
|
||||
Dictionary<Guid, (IProduct, int)> AvailibleProducts { get; }
|
||||
int Deals { get; }
|
||||
}
|
||||
}
|
19
DataModels/Models/ISupply.cs
Normal file
19
DataModels/Models/ISupply.cs
Normal file
@ -0,0 +1,19 @@
|
||||
using DataModels.Enums;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace DataModels.Models
|
||||
{
|
||||
public interface ISupply: IId
|
||||
{
|
||||
string Name { get; }
|
||||
double Price { get; }
|
||||
Guid SupplierId { get; }
|
||||
DateTime Date { get; }
|
||||
SupplyStatus Status { get; }
|
||||
Dictionary<Guid, (IProduct, int)> SupplyProducts { get; }
|
||||
}
|
||||
}
|
15
DataModels/Models/ISupplyDoc.cs
Normal file
15
DataModels/Models/ISupplyDoc.cs
Normal file
@ -0,0 +1,15 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace DataModels.Models
|
||||
{
|
||||
public interface ISupplyDoc : IId
|
||||
{
|
||||
string Name { get; }
|
||||
|
||||
Guid SupplyId { get; }
|
||||
}
|
||||
}
|
@ -21,5 +21,14 @@ namespace DatabaseImplement
|
||||
|
||||
public virtual DbSet<Role> Roles { get; set; } = null!;
|
||||
public virtual DbSet<User> Users { get; set; } = null!;
|
||||
public virtual DbSet<Sell> Sells { get; set; } = null!;
|
||||
public virtual DbSet<Purchase> Purchases { get; set; } = null!;
|
||||
public virtual DbSet<Product> Products { get; set; } = null!;
|
||||
public virtual DbSet<Supply> Supplies { get; set; } = null!;
|
||||
public virtual DbSet<SupplyProduct> SupplyProducts { get; set; } = null!;
|
||||
public virtual DbSet<Supplier> Suppliers { get; set; } = null!;
|
||||
public virtual DbSet<SupplierProduct> SupplierProducts { get; set; } = null!;
|
||||
|
||||
public virtual DbSet<MediaFile> MediaFiles { get; set; } = null!;
|
||||
}
|
||||
}
|
161
DatabaseImplement/Implements/ProductStorage.cs
Normal file
161
DatabaseImplement/Implements/ProductStorage.cs
Normal file
@ -0,0 +1,161 @@
|
||||
using Contracts.BindingModels;
|
||||
using Contracts.SearchModels;
|
||||
using Contracts.StorageContracts;
|
||||
using Contracts.ViewModels;
|
||||
using DatabaseImplement.Models;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace DatabaseImplement.Implements
|
||||
{
|
||||
public class ProductStorage : IProductStorage
|
||||
{
|
||||
public ProductViewModel? Delete(ProductBindingModel model)
|
||||
{
|
||||
using var context = new Database();
|
||||
var element = context.Products
|
||||
.Include(x => x.Name)
|
||||
.Include(x => x.Price)
|
||||
.Include(x => x.IsBeingSold)
|
||||
.Include(x => x.Rate)
|
||||
.Include(x => x.Amount)
|
||||
.FirstOrDefault(rec => rec.Id == model.Id);
|
||||
if (element != null)
|
||||
{
|
||||
context.Products.Remove(element);
|
||||
context.SaveChanges();
|
||||
return element.GetViewModel;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public ProductViewModel? GetElement(ProductSearchModel model)
|
||||
{
|
||||
if (!model.Id.HasValue)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
using var context = new Database();
|
||||
return context.Products
|
||||
.Include(x => x.Name)
|
||||
.Include(x => x.Price)
|
||||
.Include(x => x.IsBeingSold)
|
||||
.Include(x => x.Rate)
|
||||
.Include(x => x.Amount)
|
||||
.FirstOrDefault(x => (model.Id.HasValue && x.Id == model.Id))?.GetViewModel;
|
||||
}
|
||||
|
||||
public List<ProductViewModel> GetFilteredList(ProductSearchModel model)
|
||||
{
|
||||
if (!model.IsBeingSold.HasValue && !model.Price.HasValue && !model.Rate.HasValue && !model.Amount.HasValue && string.IsNullOrEmpty(model.Name))
|
||||
{
|
||||
return new();
|
||||
}
|
||||
using var context = new Database();
|
||||
if (model.Price.HasValue)
|
||||
{
|
||||
return context.Products
|
||||
.Include(x => x.Name)
|
||||
.Include(x => x.Price)
|
||||
.Include(x => x.IsBeingSold)
|
||||
.Include(x => x.Rate)
|
||||
.Include(x => x.Amount)
|
||||
.Where(x => x.Price <= model.Price)
|
||||
.ToList()
|
||||
.Select(x => x.GetViewModel)
|
||||
.ToList();
|
||||
}
|
||||
if (model.Rate.HasValue)
|
||||
{
|
||||
return context.Products
|
||||
.Include(x => x.Name)
|
||||
.Include(x => x.Price)
|
||||
.Include(x => x.IsBeingSold)
|
||||
.Include(x => x.Rate)
|
||||
.Include(x => x.Amount)
|
||||
.Where(x => x.Rate <= model.Rate)
|
||||
.ToList()
|
||||
.Select(x => x.GetViewModel)
|
||||
.ToList();
|
||||
}
|
||||
if (model.Amount.HasValue && model.IsBeingSold.HasValue)
|
||||
{
|
||||
return context.Products
|
||||
.Include(x => x.Name)
|
||||
.Include(x => x.Price)
|
||||
.Include(x => x.IsBeingSold)
|
||||
.Include(x => x.Rate)
|
||||
.Include(x => x.Amount)
|
||||
.Where(x => x.IsBeingSold == model.IsBeingSold && x.Amount >= model.Amount)
|
||||
.ToList()
|
||||
.Select(x => x.GetViewModel)
|
||||
.ToList();
|
||||
}
|
||||
return context.Products
|
||||
.Include(x => x.Name)
|
||||
.Include(x => x.Price)
|
||||
.Include(x => x.IsBeingSold)
|
||||
.Include(x => x.Rate)
|
||||
.Include(x => x.Amount)
|
||||
.Where(x => x.Name == model.Name)
|
||||
.ToList()
|
||||
.Select(x => x.GetViewModel)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public List<ProductViewModel> GetFullList()
|
||||
{
|
||||
using var context = new Database();
|
||||
return context.Products
|
||||
.Include(x => x.Name)
|
||||
.Include(x => x.Price)
|
||||
.Include(x => x.IsBeingSold)
|
||||
.Include(x => x.Rate)
|
||||
.Include(x => x.Amount)
|
||||
.ToList()
|
||||
.Select(x => x.GetViewModel)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public ProductViewModel? Insert(ProductBindingModel model)
|
||||
{
|
||||
using var context = new Database();
|
||||
var newProduct = Product.Create(context, model);
|
||||
if (newProduct == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
context.Products.Add(newProduct);
|
||||
context.SaveChanges();
|
||||
return newProduct.GetViewModel;
|
||||
}
|
||||
|
||||
public ProductViewModel? Update(ProductBindingModel model)
|
||||
{
|
||||
using var context = new Database();
|
||||
using var transaction = context.Database.BeginTransaction();
|
||||
try
|
||||
{
|
||||
var product = context.Products.FirstOrDefault(rec =>
|
||||
rec.Id == model.Id);
|
||||
if (product == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
product.Update(model);
|
||||
context.SaveChanges();
|
||||
transaction.Commit();
|
||||
return product.GetViewModel;
|
||||
}
|
||||
catch
|
||||
{
|
||||
transaction.Rollback();
|
||||
throw;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
121
DatabaseImplement/Implements/SupplierStorage.cs
Normal file
121
DatabaseImplement/Implements/SupplierStorage.cs
Normal file
@ -0,0 +1,121 @@
|
||||
using Contracts.BindingModels;
|
||||
using Contracts.SearchModels;
|
||||
using Contracts.StorageContracts;
|
||||
using Contracts.ViewModels;
|
||||
using DatabaseImplement.Models;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace DatabaseImplement.Implements
|
||||
{
|
||||
public class SupplierStorage : ISupplierStorage
|
||||
{
|
||||
public SupplierViewModel? Delete(SupplierBindingModel model)
|
||||
{
|
||||
using var context = new Database();
|
||||
var element = context.Suppliers
|
||||
.Include(x => x.Products)
|
||||
.FirstOrDefault(rec => rec.Id == model.Id);
|
||||
if (element != null)
|
||||
{
|
||||
context.Suppliers.Remove(element);
|
||||
context.SaveChanges();
|
||||
return element.GetViewModel;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public SupplierViewModel? GetElement(SupplierSearchModel model)
|
||||
{
|
||||
if (!model.Id.HasValue)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
using var context = new Database();
|
||||
return context.Suppliers
|
||||
.Include(x => x.Name)
|
||||
.Include(x => x.Products)
|
||||
.ThenInclude(x => x.Product)
|
||||
.FirstOrDefault(x => (model.Id.HasValue && x.Id == model.Id))?.GetViewModel;
|
||||
}
|
||||
|
||||
public List<SupplierViewModel> GetFilteredList(SupplierSearchModel model)
|
||||
{
|
||||
if (string.IsNullOrEmpty(model.Name) && !model.Deals.HasValue)
|
||||
{
|
||||
return new();
|
||||
}
|
||||
using var context = new Database();
|
||||
if (!string.IsNullOrEmpty(model.Name))
|
||||
{
|
||||
return context.Suppliers
|
||||
.Include(x => x.Products)
|
||||
.ThenInclude(x => x.Product)
|
||||
.Where(x => model.Name == x.Name)
|
||||
.ToList()
|
||||
.Select(x => x.GetViewModel)
|
||||
.ToList();
|
||||
}
|
||||
return context.Suppliers
|
||||
.Include(x => x.Products)
|
||||
.ThenInclude(x => x.Product)
|
||||
.Where(x => model.Deals <= x.Deals)
|
||||
.ToList()
|
||||
.Select(x => x.GetViewModel)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public List<SupplierViewModel> GetFullList()
|
||||
{
|
||||
using var context = new Database();
|
||||
return context.Suppliers
|
||||
.Include(x => x.Products)
|
||||
.ThenInclude(x => x.Product)
|
||||
.ToList()
|
||||
.Select(x => x.GetViewModel)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public SupplierViewModel? Insert(SupplierBindingModel model)
|
||||
{
|
||||
using var context = new Database();
|
||||
var newProduct = Supplier.Create(context, model);
|
||||
if (newProduct == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
context.Suppliers.Add(newProduct);
|
||||
context.SaveChanges();
|
||||
return newProduct.GetViewModel;
|
||||
}
|
||||
|
||||
public SupplierViewModel? Update(SupplierBindingModel model)
|
||||
{
|
||||
using var context = new Database();
|
||||
using var transaction = context.Database.BeginTransaction();
|
||||
try
|
||||
{
|
||||
var product = context.Suppliers.FirstOrDefault(rec =>
|
||||
rec.Id == model.Id);
|
||||
if (product == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
product.Update(context, model);
|
||||
context.SaveChanges();
|
||||
product.UpdateProducts(context, model);
|
||||
transaction.Commit();
|
||||
return product.GetViewModel;
|
||||
}
|
||||
catch
|
||||
{
|
||||
transaction.Rollback();
|
||||
throw;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
147
DatabaseImplement/Implements/SupplyStorage.cs
Normal file
147
DatabaseImplement/Implements/SupplyStorage.cs
Normal file
@ -0,0 +1,147 @@
|
||||
using Contracts.BindingModels;
|
||||
using Contracts.SearchModels;
|
||||
using Contracts.StorageContracts;
|
||||
using Contracts.ViewModels;
|
||||
using DatabaseImplement.Models;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace DatabaseImplement.Implements
|
||||
{
|
||||
public class SupplyStorage : ISupplyStorage
|
||||
{
|
||||
public SupplyViewModel? Delete(SupplyBindingModel model)
|
||||
{
|
||||
using var context = new Database();
|
||||
var element = context.Supplies
|
||||
.Include(x => x.Products)
|
||||
.FirstOrDefault(rec => rec.Id == model.Id);
|
||||
if (element != null)
|
||||
{
|
||||
context.Supplies.Remove(element);
|
||||
context.SaveChanges();
|
||||
return element.GetViewModel;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public SupplyViewModel? GetElement(SupplySearchModel model)
|
||||
{
|
||||
if (!model.Id.HasValue)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
using var context = new Database();
|
||||
return context.Supplies
|
||||
.Include(x => x.Supplier)
|
||||
.Include(x => x.Products)
|
||||
.ThenInclude(x => x.Product)
|
||||
.FirstOrDefault(x => (model.Id.HasValue && x.Id == model.Id))?.GetViewModel;
|
||||
}
|
||||
|
||||
public List<SupplyViewModel> GetFilteredList(SupplySearchModel model)
|
||||
{
|
||||
if (!model.DateStart.HasValue && !model.DateEnd.HasValue && model.Status == null)
|
||||
{
|
||||
return new();
|
||||
}
|
||||
using var context = new Database();
|
||||
if (model.DateStart.HasValue && model.DateEnd.HasValue)
|
||||
{
|
||||
return context.Supplies
|
||||
.Include(x => x.Supplier)
|
||||
.Include(x => x.Products)
|
||||
.ThenInclude(x => x.Product)
|
||||
.Where(x => x.Id == model.Id || model.DateStart <= x.Date && x.Date <= model.DateEnd)
|
||||
.ToList()
|
||||
.Select(x => x.GetViewModel)
|
||||
.ToList();
|
||||
}
|
||||
if (model.DateEnd.HasValue)
|
||||
{
|
||||
return context.Supplies
|
||||
.Include(x => x.Supplier)
|
||||
.Include(x => x.Products)
|
||||
.ThenInclude(x => x.Product)
|
||||
.Where(x => x.Id == model.Id || x.Date <= model.DateEnd)
|
||||
.ToList()
|
||||
.Select(x => x.GetViewModel)
|
||||
.ToList();
|
||||
}
|
||||
if (model.DateStart.HasValue)
|
||||
{
|
||||
return context.Supplies
|
||||
.Include(x => x.Supplier)
|
||||
.Include(x => x.Products)
|
||||
.ThenInclude(x => x.Product)
|
||||
.Where(x => x.Id == model.Id || model.DateStart <= x.Date)
|
||||
.ToList()
|
||||
.Select(x => x.GetViewModel)
|
||||
.ToList();
|
||||
}
|
||||
return context.Supplies
|
||||
.Include(x => x.Supplier)
|
||||
.Include(x => x.Products)
|
||||
.ThenInclude(x => x.Product)
|
||||
.Where(x => model.Status.Equals(x.Status))
|
||||
.ToList()
|
||||
.Select(x => x.GetViewModel)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public List<SupplyViewModel> GetFullList()
|
||||
{
|
||||
using var context = new Database();
|
||||
return context.Supplies
|
||||
.Include(x => x.Supplier)
|
||||
.Include(x => x.Products)
|
||||
.ThenInclude(x => x.Product)
|
||||
.ToList()
|
||||
.Select(x => x.GetViewModel)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public SupplyViewModel? Insert(SupplyBindingModel model)
|
||||
{
|
||||
using var context = new Database();
|
||||
var newProduct = Supply.Create(context, model);
|
||||
if (newProduct == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
context.Supplies.Add(newProduct);
|
||||
context.SaveChanges();
|
||||
return newProduct.GetViewModel;
|
||||
}
|
||||
|
||||
public SupplyViewModel? Update(SupplyBindingModel model)
|
||||
{
|
||||
using var context = new Database();
|
||||
using var transaction = context.Database.BeginTransaction();
|
||||
try
|
||||
{
|
||||
var product = context.Supplies.FirstOrDefault(rec =>
|
||||
rec.Id == model.Id);
|
||||
if (product == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
product.Update(model);
|
||||
context.SaveChanges();
|
||||
product.UpdateProducts(context, model);
|
||||
transaction.Commit();
|
||||
return product.GetViewModel;
|
||||
}
|
||||
catch
|
||||
{
|
||||
transaction.Rollback();
|
||||
throw;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
70
DatabaseImplement/Models/MediaFile.cs
Normal file
70
DatabaseImplement/Models/MediaFile.cs
Normal file
@ -0,0 +1,70 @@
|
||||
using Contracts.BindingModels;
|
||||
using Contracts.ViewModels;
|
||||
using DataModels.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace DatabaseImplement.Models
|
||||
{
|
||||
public class MediaFile : IMediaFile
|
||||
{
|
||||
[Required]
|
||||
public Guid Id { get; set; }
|
||||
[Required]
|
||||
public string Name { get; set; } = string.Empty;
|
||||
[Required]
|
||||
public string Location { get; set; } = string.Empty;
|
||||
[Required]
|
||||
public Guid ProductId { get; set; }
|
||||
|
||||
public MediaFileBindingModel GetBindingModel()
|
||||
{
|
||||
return new MediaFileBindingModel
|
||||
{
|
||||
Id = Id,
|
||||
Name = Name,
|
||||
Location = Location,
|
||||
ProductId = ProductId
|
||||
};
|
||||
}
|
||||
|
||||
public static MediaFile ToMediaFileFromView(MediaFileViewModel model, MediaFile mediaFile)
|
||||
{
|
||||
return new MediaFile
|
||||
{
|
||||
Id = model.Id,
|
||||
Name = model.Name,
|
||||
Location = model.Location,
|
||||
ProductId = model.ProductId
|
||||
};
|
||||
}
|
||||
|
||||
public static MediaFile ToMediaFileFromBinding(MediaFileBindingModel model, MediaFile mediaFile)
|
||||
{
|
||||
return new MediaFile
|
||||
{
|
||||
Id = model.Id,
|
||||
Name = model.Name,
|
||||
Location = model.Location,
|
||||
ProductId = model.ProductId
|
||||
};
|
||||
}
|
||||
|
||||
public void Update(MediaFileBindingModel model)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(model));
|
||||
}
|
||||
|
||||
// Обновление свойств на основе модели привязки
|
||||
Name = model.Name;
|
||||
Location = model.Location;
|
||||
ProductId = model.ProductId;
|
||||
}
|
||||
}
|
||||
}
|
104
DatabaseImplement/Models/Product.cs
Normal file
104
DatabaseImplement/Models/Product.cs
Normal file
@ -0,0 +1,104 @@
|
||||
using Contracts.BindingModels;
|
||||
using Contracts.ViewModels;
|
||||
using DataModels.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using static System.Runtime.InteropServices.JavaScript.JSType;
|
||||
|
||||
namespace DatabaseImplement.Models
|
||||
{
|
||||
public class Product : IProduct
|
||||
{
|
||||
[Required]
|
||||
public Guid Id { get; set; }
|
||||
[Required]
|
||||
public string Name { get; set; } = string.Empty;
|
||||
[Required]
|
||||
public double Price { get; set; }
|
||||
[Required]
|
||||
public double Rate { get; set; }
|
||||
[Required]
|
||||
public bool IsBeingSold { get; set; }
|
||||
[Required]
|
||||
public int Amount { get; set; }
|
||||
|
||||
public ProductBindingModel GetBindingModel() => new()
|
||||
{
|
||||
Id = Id,
|
||||
Name = Name,
|
||||
Price = Price,
|
||||
Rate = Rate,
|
||||
IsBeingSold = IsBeingSold,
|
||||
Amount = Amount
|
||||
};
|
||||
|
||||
public static Product ToProductFromView(ProductViewModel model, Product product) => new()
|
||||
{
|
||||
Id = model.Id,
|
||||
Name = model.Name,
|
||||
Price = model.Price,
|
||||
Rate = model.Rating,
|
||||
IsBeingSold = model.IsBeingSold,
|
||||
Amount = model.Amount
|
||||
};
|
||||
|
||||
public static Product ToProductFromBinding(ProductBindingModel model, Product product) => new()
|
||||
{
|
||||
Id = model.Id,
|
||||
Name = model.Name,
|
||||
Price = model.Price,
|
||||
Rate = model.Rate,
|
||||
IsBeingSold = model.IsBeingSold,
|
||||
Amount = model.Amount
|
||||
};
|
||||
|
||||
public static Product Create(Database context, ProductBindingModel model)
|
||||
{
|
||||
return new Product()
|
||||
{
|
||||
Id = model.Id,
|
||||
Name = model.Name,
|
||||
Price = model.Price,
|
||||
Rate = model.Rate,
|
||||
IsBeingSold = model.IsBeingSold,
|
||||
Amount = model.Amount
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
public void Update(ProductBindingModel model)
|
||||
{
|
||||
if (model is null)
|
||||
{
|
||||
throw new ArgumentNullException("Update product: binding model is null");
|
||||
}
|
||||
|
||||
Name = model.Name;
|
||||
Price = model.Price;
|
||||
Rate = model.Rate;
|
||||
IsBeingSold = model.IsBeingSold;
|
||||
Amount = model.Amount;
|
||||
}
|
||||
|
||||
public ProductViewModel GetViewModel
|
||||
{
|
||||
get
|
||||
{
|
||||
var context = new Database();
|
||||
return new()
|
||||
{
|
||||
Id = Id,
|
||||
Name = Name,
|
||||
Price = Price,
|
||||
IsBeingSold = IsBeingSold,
|
||||
Rating = Rate,
|
||||
Amount = Amount
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
49
DatabaseImplement/Models/Purchase.cs
Normal file
49
DatabaseImplement/Models/Purchase.cs
Normal file
@ -0,0 +1,49 @@
|
||||
using Contracts.BindingModels;
|
||||
using Contracts.ViewModels;
|
||||
using DataModels.Enums;
|
||||
using DataModels.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace DatabaseImplement.Models
|
||||
{
|
||||
public class Purchase : IPurchase
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
[Required]
|
||||
public DateTime DatePurchase { get; set; }
|
||||
[Required]
|
||||
public PurchaseStatus Status { get; private set; } = PurchaseStatus.Unknown;
|
||||
public PurchaseBindingModel GetBindingModel() => new()
|
||||
{
|
||||
Id = Id,
|
||||
DatePurchase = DatePurchase
|
||||
};
|
||||
|
||||
public static Purchase ToPurchaseFromView(PurchaseViewModel model, Purchase purchase) => new()
|
||||
{
|
||||
Id = model.Id,
|
||||
DatePurchase = model.DatePurchase
|
||||
};
|
||||
|
||||
public static Purchase ToPurchaseFromBinding(PurchaseBindingModel model, Purchase purchase) => new()
|
||||
{
|
||||
Id = model.Id,
|
||||
DatePurchase = model.DatePurchase,
|
||||
};
|
||||
|
||||
public void Update(PurchaseBindingModel model, Purchase purchase)
|
||||
{
|
||||
if (model is null)
|
||||
{
|
||||
throw new ArgumentNullException("Update purchase: binding model is null");
|
||||
}
|
||||
|
||||
DatePurchase = purchase.DatePurchase;
|
||||
}
|
||||
}
|
||||
}
|
44
DatabaseImplement/Models/Sell.cs
Normal file
44
DatabaseImplement/Models/Sell.cs
Normal file
@ -0,0 +1,44 @@
|
||||
using Contracts.BindingModels;
|
||||
using Contracts.ViewModels;
|
||||
using DataModels.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace DatabaseImplement.Models
|
||||
{
|
||||
public class Sell : ISell
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public DateTime DateSell { get; set; }
|
||||
|
||||
public SellBindingModel GetBindingModel() => new()
|
||||
{
|
||||
Id = Id,
|
||||
DateSell = DateSell
|
||||
};
|
||||
public static Sell ToSellFromView(SellViewModel model, Sell sell) => new()
|
||||
{
|
||||
Id = model.Id,
|
||||
DateSell = model.DateSell
|
||||
};
|
||||
|
||||
public static Sell ToSellFromBinding(SellBindingModel model, Sell sell) => new()
|
||||
{
|
||||
Id = model.Id,
|
||||
DateSell = model.DateSell,
|
||||
};
|
||||
|
||||
public void Update(SellBindingModel model, Sell sell)
|
||||
{
|
||||
if (model is null)
|
||||
{
|
||||
throw new ArgumentNullException("Update user: binding model is null");
|
||||
}
|
||||
|
||||
DateSell = sell.DateSell;
|
||||
}
|
||||
}
|
||||
}
|
109
DatabaseImplement/Models/Supplier.cs
Normal file
109
DatabaseImplement/Models/Supplier.cs
Normal file
@ -0,0 +1,109 @@
|
||||
using Contracts.BindingModels;
|
||||
using Contracts.ViewModels;
|
||||
using DataModels.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using static System.Runtime.InteropServices.JavaScript.JSType;
|
||||
|
||||
namespace DatabaseImplement.Models
|
||||
{
|
||||
public class Supplier : ISupplier
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
[Required]
|
||||
public string Name { get; set; } = string.Empty;
|
||||
[Required]
|
||||
public int Deals { get; set; }
|
||||
private Dictionary<Guid, (IProduct, int)>? _availibleProducts = null;
|
||||
[NotMapped]
|
||||
public Dictionary<Guid, (IProduct, int)> AvailibleProducts
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_availibleProducts == null)
|
||||
{
|
||||
_availibleProducts = Products
|
||||
.ToDictionary(recPC => recPC.Id, recPC =>
|
||||
(recPC.Product as IProduct, recPC.Count));
|
||||
}
|
||||
return _availibleProducts;
|
||||
}
|
||||
}
|
||||
[ForeignKey("SupplierId")]
|
||||
public virtual List<SupplierProduct> Products { get; set; } = new();
|
||||
|
||||
public static Supplier Create(Database context, SupplierBindingModel model)
|
||||
{
|
||||
return new Supplier()
|
||||
{
|
||||
Id = model.Id,
|
||||
Name = model.Name,
|
||||
Products = model.AvailibleProducts.Select(x => new
|
||||
SupplierProduct
|
||||
{
|
||||
Product = context.Products.First(y => y.Id == x.Key),
|
||||
Count = x.Value.Item2
|
||||
}).ToList()
|
||||
};
|
||||
}
|
||||
public void Update(Database context, SupplierBindingModel model)
|
||||
{
|
||||
Name = model.Name;
|
||||
Products = model.AvailibleProducts.Select(x => new
|
||||
SupplierProduct
|
||||
{
|
||||
Product = context.Products.First(y => y.Id == x.Key),
|
||||
Count = x.Value.Item2
|
||||
}).ToList();
|
||||
}
|
||||
public SupplierViewModel GetViewModel
|
||||
{
|
||||
get
|
||||
{
|
||||
var context = new Database();
|
||||
return new()
|
||||
{
|
||||
Id = Id,
|
||||
Name = Name,
|
||||
AvailibleProducts = AvailibleProducts
|
||||
};
|
||||
}
|
||||
}
|
||||
public void UpdateProducts(Database context, SupplierBindingModel model)
|
||||
{
|
||||
var supplierProducts = context.SupplierProducts.Where(rec =>
|
||||
rec.Id == model.Id).ToList();
|
||||
if (supplierProducts != null && supplierProducts.Count > 0)
|
||||
{ // удалили те, которых нет в модели
|
||||
context.SupplierProducts.RemoveRange(supplierProducts.Where(rec
|
||||
=> !model.AvailibleProducts.ContainsKey(rec.ProductId)));
|
||||
context.SaveChanges();
|
||||
// обновили количество у существующих записей
|
||||
foreach (var updateProduct in supplierProducts)
|
||||
{
|
||||
updateProduct.Count = model.AvailibleProducts[updateProduct.ProductId].Item2;
|
||||
model.AvailibleProducts.Remove(updateProduct.ProductId);
|
||||
}
|
||||
context.SaveChanges();
|
||||
}
|
||||
var supplier = context.Suppliers.First(x => x.Id == Id);
|
||||
foreach (var pc in model.AvailibleProducts)
|
||||
{
|
||||
context.SupplierProducts.Add(new SupplierProduct
|
||||
{
|
||||
Supplier = supplier,
|
||||
Product = context.Products.First(x => x.Id == pc.Key),
|
||||
Count = pc.Value.Item2
|
||||
});
|
||||
context.SaveChanges();
|
||||
}
|
||||
_availibleProducts = null;
|
||||
}
|
||||
}
|
||||
}
|
22
DatabaseImplement/Models/SupplierProduct.cs
Normal file
22
DatabaseImplement/Models/SupplierProduct.cs
Normal file
@ -0,0 +1,22 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace DatabaseImplement.Models
|
||||
{
|
||||
public class SupplierProduct
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
[Required]
|
||||
public Guid SupplierId { get; set; }
|
||||
[Required]
|
||||
public Guid ProductId { get; set; }
|
||||
[Required]
|
||||
public int Count { get; set; }
|
||||
public virtual Supplier Supplier { get; set; } = new();
|
||||
public virtual Product Product { get; set; } = new();
|
||||
}
|
||||
}
|
118
DatabaseImplement/Models/Supply.cs
Normal file
118
DatabaseImplement/Models/Supply.cs
Normal file
@ -0,0 +1,118 @@
|
||||
using Contracts.BindingModels;
|
||||
using Contracts.ViewModels;
|
||||
using DataModels.Enums;
|
||||
using DataModels.Models;
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using System.Linq;
|
||||
using System.Runtime.Serialization;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace DatabaseImplement.Models
|
||||
{
|
||||
public class Supply : ISupply
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
[Required]
|
||||
public string Name { get; set; } = string.Empty;
|
||||
[Required]
|
||||
public double Price { get; set; }
|
||||
[Required]
|
||||
public Guid SupplierId { get; set; }
|
||||
[Required]
|
||||
public DateTime Date { get; set; }
|
||||
[Required]
|
||||
public SupplyStatus Status { get; set; } = SupplyStatus.Pending;
|
||||
private Dictionary<Guid, (IProduct, int)>? _supplyProducts = null;
|
||||
[NotMapped]
|
||||
public Dictionary<Guid, (IProduct, int)> SupplyProducts
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_supplyProducts == null)
|
||||
{
|
||||
_supplyProducts = Products
|
||||
.ToDictionary(recPC => recPC.Id, recPC =>
|
||||
(recPC.Product as IProduct, recPC.Count));
|
||||
}
|
||||
return _supplyProducts;
|
||||
}
|
||||
}
|
||||
[ForeignKey("SupplyId")]
|
||||
public virtual List<SupplyProduct> Products { get; set; } = new();
|
||||
public virtual Supplier Supplier { get; set; }
|
||||
public static Supply Create(Database context, SupplyBindingModel model)
|
||||
{
|
||||
return new Supply()
|
||||
{
|
||||
Id = model.Id,
|
||||
Name = model.Name,
|
||||
Price = model.Price,
|
||||
Date = model.Date,
|
||||
SupplierId = model.SupplierId,
|
||||
Products = model.SupplyProducts.Select(x => new
|
||||
SupplyProduct
|
||||
{
|
||||
Product = context.Products.First(y => y.Id == x.Key),
|
||||
Count = x.Value.Item2
|
||||
}).ToList()
|
||||
};
|
||||
}
|
||||
public void Update(SupplyBindingModel model)
|
||||
{
|
||||
Name = model.Name;
|
||||
Price = model.Price;
|
||||
}
|
||||
public SupplyViewModel GetViewModel
|
||||
{
|
||||
get
|
||||
{
|
||||
var context = new Database();
|
||||
return new()
|
||||
{
|
||||
Id = Id,
|
||||
Name = Name,
|
||||
Price = Price,
|
||||
Products = SupplyProducts,
|
||||
Date = Date,
|
||||
Status = Status,
|
||||
SupplierName = context.Suppliers.FirstOrDefault(x => x.Id == Id)?.Name ?? string.Empty,
|
||||
};
|
||||
}
|
||||
}
|
||||
public void UpdateProducts(Database context, SupplyBindingModel model)
|
||||
{
|
||||
var supplyProducts = context.SupplyProducts.Where(rec =>
|
||||
rec.Id == model.Id).ToList();
|
||||
if (supplyProducts != null && supplyProducts.Count > 0)
|
||||
{ // удалили те, которых нет в модели
|
||||
context.SupplyProducts.RemoveRange(supplyProducts.Where(rec
|
||||
=> !model.SupplyProducts.ContainsKey(rec.ProductId)));
|
||||
context.SaveChanges();
|
||||
// обновили количество у существующих записей
|
||||
foreach (var updateProduct in supplyProducts)
|
||||
{
|
||||
updateProduct.Count = model.SupplyProducts[updateProduct.ProductId].Item2;
|
||||
model.SupplyProducts.Remove(updateProduct.ProductId);
|
||||
}
|
||||
context.SaveChanges();
|
||||
}
|
||||
var supply = context.Supplies.First(x => x.Id == Id);
|
||||
foreach (var pc in model.SupplyProducts)
|
||||
{
|
||||
context.SupplyProducts.Add(new SupplyProduct
|
||||
{
|
||||
Supply = supply,
|
||||
Product = context.Products.First(x => x.Id == pc.Key),
|
||||
Count = pc.Value.Item2
|
||||
});
|
||||
context.SaveChanges();
|
||||
}
|
||||
_supplyProducts = null;
|
||||
}
|
||||
}
|
||||
}
|
24
DatabaseImplement/Models/SupplyProduct.cs
Normal file
24
DatabaseImplement/Models/SupplyProduct.cs
Normal file
@ -0,0 +1,24 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace DatabaseImplement.Models
|
||||
{
|
||||
public class SupplyProduct
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
[Required]
|
||||
public Guid SupplyId { get; set; }
|
||||
[Required]
|
||||
public Guid ProductId { get; set; }
|
||||
[Required]
|
||||
public int Count { get; set; }
|
||||
public virtual Supply Supply { get; set; } = new();
|
||||
public virtual Product Product { get; set; } = new();
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user