Eliseev E.E. LabWork05_Hard #11

Closed
ElEgEv wants to merge 46 commits from LabWork05_Hard into LabWork05
2 changed files with 183 additions and 23 deletions
Showing only changes of commit d572253caf - Show all commits

View File

@ -55,38 +55,19 @@ namespace BlacksmithWorkshopDatabaseImplement.Implements
using var context = new BlacksmithWorkshopDatabase();
return context.Orders
.Include(x => x.Manufacture)
.Where(x => x.Id == model.Id)
.Select(x => x.GetViewModel)
.ToList();
}
private static OrderViewModel GetViewModel(Order order)
{
var viewModel = order.GetViewModel;
using var context = new BlacksmithWorkshopDatabase();
var element = context.Manufactures
.FirstOrDefault(x => x.Id == order.ManufactureId);
viewModel.ManufactureName = element.ManufactureName;
return viewModel;
}
public List<OrderViewModel> GetFullList()
{
using var context = new BlacksmithWorkshopDatabase();
return context.Orders
.Select(x => new OrderViewModel
{
Id = x.Id,
ManufactureId = x.ManufactureId,
Count = x.Count,
Sum = x.Sum,
Status = x.Status,
DateCreate = x.DateCreate,
DateImplement = x.DateImplement,
ManufactureName = x.Manufacture.ManufactureName
})
.Include(x => x.Manufacture)
.Select(x => x.GetViewModel)
.ToList();
}
@ -103,7 +84,8 @@ namespace BlacksmithWorkshopDatabaseImplement.Implements
context.Orders.Add(newOrder);
context.SaveChanges();
return newOrder.GetViewModel;
return context.Orders.Include(x => x.Manufacture)
.FirstOrDefault(x => x.Id == newOrder.Id)?.GetViewModel;
}
public OrderViewModel? Update(OrderBindingModel model)

View File

@ -0,0 +1,178 @@
using BlacksmithWorkshopContracts.BindingModels;
using BlacksmithWorkshopContracts.SearchModels;
using BlacksmithWorkshopContracts.StoragesContracts;
using BlacksmithWorkshopContracts.ViewModels;
using BlacksmithWorkshopDatabaseImplement.Models;
using BlacksmithWorkshopDataModels.Models;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BlacksmithWorkshopDatabaseImplement.Implements
{
internal class ShopStorage : IShopStorage
{
public List<ShopViewModel> GetFullList()
{
using var context = new ManufactureShopDatabase();
return context.Shops
.Include(x => x.Manufactures)
.ThenInclude(x => x.Manufacture)
.ToList()
.Select(x => x.GetViewModel)
.ToList();
}
public List<ShopViewModel> GetFilteredList(ShopSearchModel model)
{
if (string.IsNullOrEmpty(model.ShopName))
{
return new();
}
using var context = new ManufactureShopDatabase();
return context.Shops
.Include(x => x.Manufactures)
.ThenInclude(x => x.Manufacture)
.Where(x => x.ShopName.Contains(model.ShopName))
.ToList()
.Select(x => x.GetViewModel)
.ToList();
}
public ShopViewModel? GetElement(ShopSearchModel model)
{
if (string.IsNullOrEmpty(model.ShopName) && !model.Id.HasValue)
{
return null;
}
using var context = new ManufactureShopDatabase();
return context.Shops
.Include(x => x.Manufactures)
.ThenInclude(x => x.Manufacture)
.FirstOrDefault(x => (!string.IsNullOrEmpty(model.ShopName) && x.ShopName == model.ShopName) ||
(model.Id.HasValue && x.Id == model.Id))
?.GetViewModel;
}
public ShopViewModel? Insert(ShopBindingModel model)
{
using var context = new ManufactureShopDatabase();
var newShop = Shop.Create(context, model);
if (newShop == null)
{
return null;
}
context.Shops.Add(newShop);
context.SaveChanges();
return newShop.GetViewModel;
}
public ShopViewModel? Update(ShopBindingModel model)
{
using var context = new ManufactureShopDatabase();
using var transaction = context.Database.BeginTransaction();
try
{
var shop = context.Shops.FirstOrDefault(rec => rec.Id == model.Id);
if (shop == null)
{
return null;
}
shop.Update(model);
context.SaveChanges();
shop.UpdateIceCreams(context, model);
transaction.Commit();
return shop.GetViewModel;
}
catch
{
transaction.Rollback();
throw;
}
}
public ShopViewModel? Delete(ShopBindingModel model)
{
using var context = new ManufactureShopDatabase();
var element = context.Shops
.Include(x => x.Manufactures)
.FirstOrDefault(rec => rec.Id == model.Id);
if (element != null)
{
context.Shops.Remove(element);
context.SaveChanges();
return element.GetViewModel;
}
return null;
}
public bool SellManufactures(IManufactureModel model, int count)
{
using var context = new ManufactureShopDatabase();
using var transaction = context.Database.BeginTransaction();
try
{
var shops = context.ShopManufactures
.Include(x => x.Shop)
.ToList()
.Where(rec => rec.ManufactureId == model.Id);
if (shops == null)
{
return false;
}
foreach (var shop in shops)
{
if (shop.Count < count)
{
count -= shop.Count;
shop.Count = 0;
}
else
{
shop.Count = shop.Count - count;
count -= count;
}
if (count == 0)
{
context.SaveChanges();
transaction.Commit();
return true;
}
}
transaction.Rollback();
return false;
}
catch
{
transaction.Rollback();
throw;
}
}
}
}