Реализовано отправка и принятие изделий магазина на клиенте и сервере
Достаточно костыльно но пофиг
This commit is contained in:
parent
3735eb81b8
commit
fde6a6b5c4
@ -96,5 +96,7 @@ namespace ConfectioneryDatabaseImplement.Models
|
||||
}
|
||||
_pastryComponents = null;
|
||||
}
|
||||
|
||||
public static implicit operator ConfectioneryContracts.ViewModels.PastryViewModel(ConfectioneryDatabaseImplement.Models.Pastry model) => model.GetViewModel;
|
||||
}
|
||||
}
|
||||
|
@ -2,6 +2,7 @@
|
||||
using ConfectioneryContracts.BusinessLogicsContracts;
|
||||
using ConfectioneryContracts.SearchModels;
|
||||
using ConfectioneryContracts.ViewModels;
|
||||
using ConfectioneryDatabaseImplement.Models;
|
||||
using ConfectioneryDataModels.Models;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using System.Text.Json;
|
||||
@ -36,13 +37,41 @@ namespace ConfectioneryRestApi.Controllers
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Получает на вход айди магазина и по нему возвращает магазин
|
||||
/// </summary>
|
||||
/// <param name="id">The identifier.</param>
|
||||
/// <returns>
|
||||
/// Кортеж из магазина, итератора с изделиями которые находятся в магазине и итератора с количеством этих изделий.
|
||||
/// </returns>
|
||||
/// Почему изделия и их количество не находятся в одном кортеже? потому что тогда он их не сериализует
|
||||
/// и я не знаю почему.
|
||||
/// Также, к сожалению, приходится явно присваивать каждое поле из IPastyModel в PastyViewModel, поскольку
|
||||
/// нельзя сериализовать интерфейс, и при это нельзя его неявно кастануть к PastryViewModel, даже если в
|
||||
/// истинном типе ConfectioneryDatabaseImplement.Pastry такой каст есть.
|
||||
/// Сделать же каст в PastryViewModel из IPastryModel нельзя, потому что запрещен каст с интерфейсами.
|
||||
/// Единственный нормальный вариант создать отдельную сущность, где объединить изделия и их количество,
|
||||
/// и уже ее хранить в магазине и соответственно ее передавать. Но поскольку для этого нужно перелопатить пол-проекта
|
||||
/// и получить минус баллы на pr я откажусь от подобной идеи.
|
||||
[HttpGet]
|
||||
public ShopViewModel? GetJsonShop(int id)
|
||||
public Tuple<ShopViewModel, IEnumerable<PastryViewModel>, IEnumerable<int>>? GetShopWithPastries(int id)
|
||||
{
|
||||
try
|
||||
{
|
||||
|
||||
return _logic.ReadElement(new() { Id = id });
|
||||
var shop = _logic.ReadElement(new() { Id = id });
|
||||
if (shop == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
return Tuple.Create(shop,
|
||||
shop.Pastries.Select(x => new PastryViewModel ()
|
||||
{
|
||||
Id = x.Value.Item1.Id,
|
||||
Price = x.Value.Item1.Price,
|
||||
PastryName = x.Value.Item1.PastryName,
|
||||
}),
|
||||
shop.Pastries.Select(x => x.Value.Item2));
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@ -73,7 +102,7 @@ namespace ConfectioneryRestApi.Controllers
|
||||
public void DeleteShop(ShopBindingModel model) => CRUDShop(() => _logic.Delete(model));
|
||||
|
||||
[HttpPost]
|
||||
public void AddPastryInShop(Tuple<ShopSearchModel, IPastryModel, int> countPastryForShop)
|
||||
public void AddPastryInShop(Tuple<ShopSearchModel, PastryViewModel, int> countPastryForShop)
|
||||
{
|
||||
CRUDShop(() => _logic.AddPastry(countPastryForShop.Item1, countPastryForShop.Item2, countPastryForShop.Item3));
|
||||
}
|
||||
|
@ -98,13 +98,16 @@ namespace ConfectioneryShopApp.Controllers
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
public Tuple<string, ShopViewModel?> GetTablePastriesFromShop(int shop)
|
||||
public Tuple<string, ShopViewModel>? GetTablePastriesFromShop(int shop)
|
||||
{
|
||||
var sh = APIClient.GetRequest<ShopViewModel>($"api/shop/getjsonshop?id={shop}");
|
||||
var result = APIClient.GetRequest<Tuple<ShopViewModel, IEnumerable<PastryViewModel>, IEnumerable<int>>?>($"api/shop/getshopwithpastries?id={shop}");
|
||||
if (result == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
var shopModel = result.Item1;
|
||||
var resultHtml = "";
|
||||
if (sh != null)
|
||||
{
|
||||
foreach (var (item, count) in sh.Pastries.Values)
|
||||
foreach (var (item, count) in result.Item2.Zip(result.Item3))
|
||||
{
|
||||
resultHtml += "<tr>";
|
||||
resultHtml += $"<td>{item?.PastryName ?? string.Empty}</td>";
|
||||
@ -112,8 +115,7 @@ namespace ConfectioneryShopApp.Controllers
|
||||
resultHtml += $"<td>{count}</td>";
|
||||
resultHtml += "</tr>";
|
||||
}
|
||||
}
|
||||
return Tuple.Create(resultHtml, sh);
|
||||
return Tuple.Create(resultHtml, shopModel);
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
@ -189,7 +191,7 @@ namespace ConfectioneryShopApp.Controllers
|
||||
}
|
||||
APIClient.PostRequest("api/shop/addpastryinshop", Tuple.Create(
|
||||
new ShopSearchModel() { Id = shop },
|
||||
new PastryBindingModel() { Id = pastry },
|
||||
new PastryViewModel() { Id = pastry },
|
||||
count
|
||||
));
|
||||
Response.Redirect("Index");
|
||||
|
@ -7,7 +7,7 @@
|
||||
}
|
||||
|
||||
<div class="text-center">
|
||||
<h1 class="display-4">Заказы</h1>
|
||||
<h1 class="display-4">Магазины</h1>
|
||||
</div>
|
||||
|
||||
|
||||
|
@ -58,10 +58,13 @@
|
||||
url: "/Home/GetTablePastriesFromShop",
|
||||
data: { shop: shop },
|
||||
success: function (result) {
|
||||
if (result != null)
|
||||
{
|
||||
$('#name').val(result.item2.name);
|
||||
$('#address').val(result.item2.address);
|
||||
$('#table-pastries').html(result.item1);
|
||||
}
|
||||
}
|
||||
});
|
||||
};
|
||||
}
|
||||
|
@ -23,7 +23,7 @@
|
||||
<div class="navbar-collapse collapse d-sm-inline-flex flex-sm-row-reverse">
|
||||
<ul class="navbar-nav flex-grow-1">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Index">Заказы</a>
|
||||
<a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Index">Магазины</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
Loading…
Reference in New Issue
Block a user