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