diff --git a/SushiBar/SushiBarBusinessLogic/BusinessLogics/ImplementerLogic.cs b/SushiBar/SushiBarBusinessLogic/BusinessLogics/ImplementerLogic.cs
new file mode 100644
index 0000000..eec660a
--- /dev/null
+++ b/SushiBar/SushiBarBusinessLogic/BusinessLogics/ImplementerLogic.cs
@@ -0,0 +1,130 @@
+using Microsoft.Extensions.Logging;
+using SushiBarContracts.BindingModels;
+using SushiBarContracts.BusinessLogicsContracts;
+using SushiBarContracts.SearchModels;
+using SushiBarContracts.StoragesContracts;
+using SushiBarContracts.ViewModels;
+using SushiBarDataModels.Models;
+using SushiBarBusinessLogic.BusinessLogics;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace SushiBarBusinessLogic
+{
+ public class ImplementerLogic : IImplementerLogic
+ {
+ private readonly ILogger _logger;
+ private readonly IImplementerStorage _implementerStorage;
+
+ public ImplementerLogic(ILogger logger, IImplementerStorage implementerStorage)
+ {
+ _logger = logger;
+ _implementerStorage = implementerStorage;
+ }
+
+ public List? ReadList(ImplementerSearchModel? model)
+ {
+ _logger.LogInformation("ReadList. ImplementerFIO:{ImplementerFIO}.Password:{Password}.Id:{ Id}", model?.ImplementerFIO, model?.Password?.Length, model?.Id);
+ var list = model == null ? _implementerStorage.GetFullList() : _implementerStorage.GetFilteredList(model);
+ if (list == null)
+ {
+ _logger.LogWarning("ReadList return null list");
+ return null;
+ }
+ _logger.LogInformation("ReadList. Count:{Count}", list.Count);
+ return list;
+ }
+
+ public ImplementerViewModel? ReadElement(ImplementerSearchModel model)
+ {
+ if (model == null)
+ {
+ throw new ArgumentNullException(nameof(model));
+ }
+ _logger.LogInformation("ReadElement. ImplementerFIO:{ImplementerFIO}.Password:{Password}.Id:{ Id}", model?.ImplementerFIO, model?.Password?.Length, model?.Id);
+ var element = _implementerStorage.GetElement(model);
+ if (element == null)
+ {
+ _logger.LogWarning("ReadElement element not found");
+ return null;
+ }
+ _logger.LogInformation("ReadElement find. Id:{Id}", element.Id);
+ return element;
+ }
+
+ public bool Create(ImplementerBindingModel model)
+ {
+ CheckModel(model);
+ if (_implementerStorage.Insert(model) == null)
+ {
+ _logger.LogWarning("Insert operation failed");
+ return false;
+ }
+ return true;
+ }
+
+ public bool Update(ImplementerBindingModel model)
+ {
+ CheckModel(model);
+ if (_implementerStorage.Update(model) == null)
+ {
+ _logger.LogWarning("Update operation failed");
+ return false;
+ }
+ return true;
+ }
+
+ public bool Delete(ImplementerBindingModel model)
+ {
+ CheckModel(model, false);
+ _logger.LogInformation("Delete. Id:{Id}", model.Id);
+ if (_implementerStorage.Delete(model) == null)
+ {
+ _logger.LogWarning("Delete operation failed");
+ return false;
+ }
+ return true;
+ }
+
+ private void CheckModel(ImplementerBindingModel model, bool withParams = true)
+ {
+ if (model == null)
+ {
+ throw new ArgumentNullException(nameof(model));
+ }
+ if (!withParams)
+ {
+ return;
+ }
+ if (string.IsNullOrEmpty(model.ImplementerFIO))
+ {
+ throw new ArgumentNullException("Нет ФИО исполнителя", nameof(model.ImplementerFIO));
+ }
+ if (string.IsNullOrEmpty(model.Password))
+ {
+ throw new ArgumentNullException("Нет пароля исполнителя", nameof(model.Password));
+ }
+ if (model.WorkExperience < 0)
+ {
+ throw new ArgumentNullException("Стаж должен быть больше 0", nameof(model.WorkExperience));
+ }
+ if (model.Qualification < 0)
+ {
+ throw new ArgumentNullException("Квалификация должна быть положительной", nameof(model.Qualification));
+ }
+ _logger.LogInformation("Implementer. ImplementerFIO:{ImplementerFIO}.Password:{Password}.WorkExperience:{WorkExperience}.Qualification:{Qualification}.Id: { Id}",
+ model.ImplementerFIO, model.Password, model.WorkExperience, model.Qualification, model.Id);
+ var element = _implementerStorage.GetElement(new ImplementerSearchModel
+ {
+ ImplementerFIO = model.ImplementerFIO
+ });
+ if (element != null && element.Id != model.Id)
+ {
+ throw new InvalidOperationException("Исполнитель с таким ФИО уже есть");
+ }
+ }
+ }
+}
diff --git a/SushiBar/SushiBarBusinessLogic/BusinessLogics/OrderLogic.cs b/SushiBar/SushiBarBusinessLogic/BusinessLogics/OrderLogic.cs
index 3baee63..dd229c0 100644
--- a/SushiBar/SushiBarBusinessLogic/BusinessLogics/OrderLogic.cs
+++ b/SushiBar/SushiBarBusinessLogic/BusinessLogics/OrderLogic.cs
@@ -12,7 +12,7 @@ namespace SushiBarBusinessLogic.BusinessLogics
{
private readonly ILogger _logger;
private readonly IOrderStorage _orderStorage;
-
+ static readonly object _locker = new object();
public OrderLogic(ILogger logger, IOrderStorage orderStorage)
{
_logger = logger;
@@ -20,7 +20,8 @@ namespace SushiBarBusinessLogic.BusinessLogics
}
public List? ReadList(OrderSearchModel? model)
{
- _logger.LogInformation("Order. OrderID:{Id}", model?.Id);
+ _logger.LogInformation("ReadList. ClientId:{ClientId}.Status:{Status}.ImplementerId:{ImplementerId}.DateFrom:{DateFrom}.DateTo:{DateTo}OrderId:{Id}",
+ model?.ClientId, model?.Status, model?.ImplementerId, model?.DateFrom, model?.DateTo, model?.Id);
var list = model == null ? _orderStorage.GetFullList() : _orderStorage.GetFilteredList(model);
if (list == null)
{
@@ -30,24 +31,38 @@ namespace SushiBarBusinessLogic.BusinessLogics
_logger.LogInformation("ReadList. Count:{Count}", list.Count);
return list;
}
-
public bool CreateOrder(OrderBindingModel model)
{
CheckModel(model);
if (model.Status != OrderStatus.Неизвестен)
- {
- _logger.LogWarning("Insert operation failed. Order status incorrect.");
return false;
- }
model.Status = OrderStatus.Принят;
if (_orderStorage.Insert(model) == null)
{
- model.Status = OrderStatus.Неизвестен;
_logger.LogWarning("Insert operation failed");
return false;
}
return true;
}
+
+ public bool TakeOrderInWork(OrderBindingModel model)
+ {
+ lock (_locker)
+ {
+ return ChangeStatus(model, OrderStatus.Выполняется);
+ }
+ }
+
+ public bool FinishOrder(OrderBindingModel model)
+ {
+ return ChangeStatus(model, OrderStatus.Готов);
+ }
+
+ public bool DeliveryOrder(OrderBindingModel model)
+ {
+ return ChangeStatus(model, OrderStatus.Выдан);
+ }
+
private void CheckModel(OrderBindingModel model, bool withParams = true)
{
if (model == null)
@@ -58,62 +73,79 @@ namespace SushiBarBusinessLogic.BusinessLogics
{
return;
}
- if (model.SushiId < 0)
- {
- throw new ArgumentNullException("Некорректный идентификатор у суши", nameof(model.SushiId));
- }
if (model.Count <= 0)
{
- throw new ArgumentNullException("Количество суши в заказе должно быть больше 0", nameof(model.Count));
+ throw new ArgumentException("Колличество пиццы в заказе не может быть меньше 1", nameof(model.Count));
}
if (model.Sum <= 0)
{
- throw new ArgumentNullException("Сумма заказа должна быть больше 0", nameof(model.Sum));
+ throw new ArgumentException("Стоимость заказа на может быть меньше 1", nameof(model.Sum));
}
- _logger.LogInformation("Order. OrderID:{Id}. Sum:{ Sum}. SushiId: { SushiId}", model.Id, model.Sum, model.SushiId);
+ if (model.DateImplement.HasValue && model.DateImplement < model.DateCreate)
+ {
+ throw new ArithmeticException($"Дата выдачи заказа {model.DateImplement} не может быть раньше даты его создания {model.DateCreate}");
+ }
+ _logger.LogInformation("Sushi. SushiId:{SushiId}.Count:{Count}.Sum:{Sum}Id:{Id}",
+ model.SushiId, model.Count, model.Sum, model.Id);
}
- public bool StatusUpdate(OrderBindingModel model, OrderStatus newStatus)
+ private bool ChangeStatus(OrderBindingModel model, OrderStatus requiredStatus)
{
- var viewModel = _orderStorage.GetElement(new OrderSearchModel { Id = model.Id });
- if (viewModel == null)
+ CheckModel(model, false);
+ var element = _orderStorage.GetElement(new OrderSearchModel()
+ {
+ Id = model.Id
+ });
+ if (element == null)
+ {
+ throw new InvalidOperationException(nameof(element));
+ }
+ model.DateCreate = element.DateCreate;
+ model.SushiId = element.SushiId;
+ model.DateImplement = element.DateImplement;
+ model.ClientId = element.ClientId;
+ if (!model.ImplementerId.HasValue)
+ {
+ model.ImplementerId = element.ImplementerId;
+ }
+ model.Status = element.Status;
+ model.Count = element.Count;
+ model.Sum = element.Sum;
+ if (requiredStatus - model.Status == 1)
+ {
+ model.Status = requiredStatus;
+ if (model.Status == OrderStatus.Готов)
+ {
+ model.DateImplement = DateTime.Now;
+ }
+ if (_orderStorage.Update(model) == null)
+ {
+ _logger.LogWarning("Update operation failed");
+ return false;
+ }
+ return true;
+ }
+ _logger.LogWarning("Changing status operation faled: Current-{Status}:required-{requiredStatus}.", model.Status, requiredStatus);
+ throw new InvalidOperationException($"Невозможно приствоить статус {requiredStatus} заказу с текущим статусом {model.Status}");
+
+ }
+
+ public OrderViewModel? ReadElement(OrderSearchModel model)
+ {
+ if (model == null)
{
throw new ArgumentNullException(nameof(model));
}
- if (viewModel.Status + 1 != newStatus)
+ _logger.LogInformation("ReadElement. ClientId:{ClientId}.Status:{Status}.ImplementerId:{ImplementerId}.DateFrom:{DateFrom}.DateTo:{DateTo}OrderId:{Id}",
+ model.ClientId, model.Status, model.ImplementerId, model.DateFrom, model.DateTo, model.Id);
+ var element = _orderStorage.GetElement(model);
+ if (element == null)
{
- _logger.LogWarning("Status update to " + newStatus.ToString() + " operation failed. Order status incorrect.");
- return false;
+ _logger.LogWarning("ReadElement element not found");
+ return null;
}
- model.Status = newStatus;
- if (model.Status == OrderStatus.Готов) model.DateImplement = DateTime.Now;
- else
- {
- model.DateImplement = viewModel.DateImplement;
- }
- CheckModel(model, false);
- if (_orderStorage.Update(model) == null)
- {
- model.Status--;
- _logger.LogWarning("Update operation failed");
- return false;
- }
- return true;
- }
-
- public bool TakeOrderInWork(OrderBindingModel model)
- {
- return StatusUpdate(model, OrderStatus.Выполняется);
- }
-
- public bool DeliveryOrder(OrderBindingModel model)
- {
- return StatusUpdate(model, OrderStatus.Выдан);
- }
-
- public bool FinishOrder(OrderBindingModel model)
- {
- return StatusUpdate(model, OrderStatus.Готов);
+ _logger.LogInformation("ReadElement find. Id:{Id}", element.Id);
+ return element;
}
}
}
diff --git a/SushiBar/SushiBarBusinessLogic/BusinessLogics/WorkModeling .cs b/SushiBar/SushiBarBusinessLogic/BusinessLogics/WorkModeling .cs
new file mode 100644
index 0000000..14802a4
--- /dev/null
+++ b/SushiBar/SushiBarBusinessLogic/BusinessLogics/WorkModeling .cs
@@ -0,0 +1,139 @@
+using Microsoft.Extensions.Logging;
+using SushiBarContracts.BindingModels;
+using SushiBarContracts.BusinessLogicsContracts;
+using SushiBarContracts.SearchModels;
+using SushiBarContracts.ViewModels;
+using SushiBarDataModels.Enums;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace SushiBarBusinessLogic
+{
+ public class WorkModeling : IWorkProcess
+ {
+ private readonly ILogger _logger;
+
+ private readonly Random _rnd;
+
+ private IOrderLogic? _orderLogic;
+
+ public WorkModeling(ILogger logger)
+ {
+ _logger = logger;
+ _rnd = new Random(1000);
+ }
+
+ public void DoWork(IImplementerLogic implementerLogic, IOrderLogic orderLogic)
+ {
+ _orderLogic = orderLogic;
+ var implementers = implementerLogic.ReadList(null);
+ if (implementers == null)
+ {
+ _logger.LogWarning("DoWork. Implementers is null");
+ return;
+ }
+ var orders = _orderLogic.ReadList(new OrderSearchModel { Status = OrderStatus.Принят });
+ if (orders == null || orders.Count == 0)
+ {
+ _logger.LogWarning("DoWork. Orders is null or empty");
+ return;
+ }
+ _logger.LogDebug("DoWork for {Count} orders", orders.Count);
+ foreach (var implementer in implementers)
+ {
+ Task.Run(() => WorkerWorkAsync(implementer, orders));
+ }
+ }
+
+ private async Task WorkerWorkAsync(ImplementerViewModel implementer, List orders)
+ {
+ if (_orderLogic == null || implementer == null)
+ {
+ return;
+ }
+ await RunOrderInWork(implementer);
+
+ await Task.Run(() =>
+ {
+ foreach (var order in orders)
+ {
+ try
+ {
+ _logger.LogDebug("DoWork. Worker {Id} try get order {Order}", implementer.Id, order.Id);
+ // пытаемся назначить заказ на исполнителя
+ _orderLogic.TakeOrderInWork(new OrderBindingModel
+ {
+ Id = order.Id,
+ ImplementerId = implementer.Id
+ });
+ // делаем работу
+ Thread.Sleep(implementer.WorkExperience * _rnd.Next(100, 1000) * order.Count);
+ _logger.LogDebug("DoWork. Worker {Id} finish order {Order}", implementer.Id, order.Id);
+ _orderLogic.FinishOrder(new OrderBindingModel
+ {
+ Id = order.Id
+ });
+ }
+ // кто-то мог уже перехватить заказ, игнорируем ошибку
+ catch (InvalidOperationException ex)
+ {
+ _logger.LogWarning(ex, "Error try get work");
+ }
+ // заканчиваем выполнение имитации в случае иной ошибки
+ catch (Exception ex)
+ {
+ _logger.LogError(ex, "Error while do work");
+ throw;
+ }
+ // отдыхаем
+ Thread.Sleep(implementer.Qualification * _rnd.Next(10, 100));
+ }
+ });
+ }
+
+ private async Task RunOrderInWork(ImplementerViewModel implementer)
+ {
+ if (_orderLogic == null || implementer == null)
+ {
+ return;
+ }
+ try
+ {
+ var runOrder = await Task.Run(() => _orderLogic.ReadElement(new OrderSearchModel
+ {
+ ImplementerId = implementer.Id,
+ Status = OrderStatus.Выполняется
+ }));
+ if (runOrder == null)
+ {
+ return;
+ }
+
+ _logger.LogDebug("DoWork. Worker {Id} back to order {Order}", implementer.Id, runOrder.Id);
+ // доделываем работу
+ Thread.Sleep(implementer.WorkExperience * _rnd.Next(100, 300) * runOrder.Count);
+ _logger.LogDebug("DoWork. Worker {Id} finish order {Order}", implementer.Id, runOrder.Id);
+ _orderLogic.FinishOrder(new OrderBindingModel
+ {
+ Id = runOrder.Id
+ });
+ // отдыхаем
+ Thread.Sleep(implementer.Qualification * _rnd.Next(10, 100));
+ }
+ // заказа может не быть, просто игнорируем ошибку
+ catch (InvalidOperationException ex)
+ {
+ _logger.LogWarning(ex, "Error try get work");
+ }
+ // а может возникнуть иная ошибка, тогда просто заканчиваем выполнение имитации
+ catch (Exception ex)
+ {
+ _logger.LogError(ex, "Error while do work");
+ throw;
+ }
+ }
+ }
+}
diff --git a/SushiBar/SushiBarClientApp/APIClient.cs b/SushiBar/SushiBarClientApp/APIClient.cs
index 216a26d..dd4b959 100644
--- a/SushiBar/SushiBarClientApp/APIClient.cs
+++ b/SushiBar/SushiBarClientApp/APIClient.cs
@@ -1,20 +1,21 @@
-using Newtonsoft.Json;
-using SushiBarContracts.ViewModels;
-using System.Net.Http.Headers;
+using System.Net.Http.Headers;
using System.Text;
+using SushiBarContracts.ViewModels;
+using Newtonsoft.Json;
+
namespace SushiBarClientApp
{
- public static class APIClient
+ public class APIClient
{
private static readonly HttpClient _client = new();
public static ClientViewModel? Client { get; set; } = null;
-
public static void Connect(IConfiguration configuration)
{
_client.BaseAddress = new Uri(configuration["IPAddress"]);
_client.DefaultRequestHeaders.Accept.Clear();
- _client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
+ _client.DefaultRequestHeaders.Accept.Add(new
+ MediaTypeWithQualityHeaderValue("application/json"));
}
public static T? GetRequest(string requestUrl)
{
@@ -42,4 +43,5 @@ namespace SushiBarClientApp
}
}
}
-}
\ No newline at end of file
+
+}
diff --git a/SushiBar/SushiBarClientApp/Controllers/HomeController.cs b/SushiBar/SushiBarClientApp/Controllers/HomeController.cs
index 87d5378..05903f2 100644
--- a/SushiBar/SushiBarClientApp/Controllers/HomeController.cs
+++ b/SushiBar/SushiBarClientApp/Controllers/HomeController.cs
@@ -20,7 +20,8 @@ namespace SushiBarClientApp.Controllers
{
return Redirect("~/Home/Enter");
}
- return View(APIClient.GetRequest>($"api/main/getorders?clientId={APIClient.Client.Id}"));
+ return
+ View(APIClient.GetRequest>($"api/main/getorders?clientId={APIClient.Client.Id}"));
}
[HttpGet]
public IActionResult Privacy()
@@ -44,7 +45,7 @@ namespace SushiBarClientApp.Controllers
throw new Exception("Введите логин, пароль и ФИО");
}
APIClient.PostRequest("api/client/updatedata", new
- ClientBindingModel
+ ClientBindingModel
{
Id = APIClient.Client.Id,
ClientFIO = fio,
diff --git a/SushiBar/SushiBarClientApp/Program.cs b/SushiBar/SushiBarClientApp/Program.cs
index 8a8b56e..0f0c47d 100644
--- a/SushiBar/SushiBarClientApp/Program.cs
+++ b/SushiBar/SushiBarClientApp/Program.cs
@@ -8,7 +8,7 @@ APIClient.Connect(builder.Configuration);
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Home/Error");
- // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
+ // The default HSTS value is 30 days. You may want to change this for sushiion scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
diff --git a/SushiBar/SushiBarClientApp/Properties/launchSettings.json b/SushiBar/SushiBarClientApp/Properties/launchSettings.json
index 372c338..c04300b 100644
--- a/SushiBar/SushiBarClientApp/Properties/launchSettings.json
+++ b/SushiBar/SushiBarClientApp/Properties/launchSettings.json
@@ -1,22 +1,21 @@
-{
+{
+ "iisSettings": {
+ "windowsAuthentication": false,
+ "anonymousAuthentication": true,
+ "iisExpress": {
+ "applicationUrl": "http://localhost:22876",
+ "sslPort": 44352
+ }
+ },
"profiles": {
- "http": {
+ "SushiBarClientApp": {
"commandName": "Project",
+ "dotnetRunMessages": true,
"launchBrowser": true,
+ "applicationUrl": "https://localhost:7121;http://localhost:5109",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
- },
- "dotnetRunMessages": true,
- "applicationUrl": "http://localhost:5222"
- },
- "https": {
- "commandName": "Project",
- "launchBrowser": true,
- "environmentVariables": {
- "ASPNETCORE_ENVIRONMENT": "Development"
- },
- "dotnetRunMessages": true,
- "applicationUrl": "https://localhost:7084;http://localhost:5222"
+ }
},
"IIS Express": {
"commandName": "IISExpress",
@@ -25,14 +24,5 @@
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
- },
- "$schema": "http://json.schemastore.org/launchsettings.json",
- "iisSettings": {
- "windowsAuthentication": false,
- "anonymousAuthentication": true,
- "iisExpress": {
- "applicationUrl": "http://localhost:41478",
- "sslPort": 44302
- }
}
-}
\ No newline at end of file
+}
diff --git a/SushiBar/SushiBarClientApp/SushiBarClientApp.csproj b/SushiBar/SushiBarClientApp/SushiBarClientApp.csproj
index c1fd8c5..ea5528c 100644
--- a/SushiBar/SushiBarClientApp/SushiBarClientApp.csproj
+++ b/SushiBar/SushiBarClientApp/SushiBarClientApp.csproj
@@ -1,21 +1,17 @@
-
- net8.0
- enable
- enable
-
+
+ net8.0
+ enable
+ enable
+
+
+
+
-
-
-
-
-
-
-
-
-
-
+
+
+
diff --git a/SushiBar/SushiBarClientApp/Views/Home/Create.cshtml b/SushiBar/SushiBarClientApp/Views/Home/Create.cshtml
index e2d2305..3045f71 100644
--- a/SushiBar/SushiBarClientApp/Views/Home/Create.cshtml
+++ b/SushiBar/SushiBarClientApp/Views/Home/Create.cshtml
@@ -1,60 +1,50 @@
@{
- ViewData["Title"] = "Create";
+ ViewData["Title"] = "Create";
}
-
Создание заказа
+ Создание заказа
+
\ No newline at end of file
diff --git a/SushiBar/SushiBarClientApp/Views/Home/Enter.cshtml b/SushiBar/SushiBarClientApp/Views/Home/Enter.cshtml
index ac6dd7a..106d3d5 100644
--- a/SushiBar/SushiBarClientApp/Views/Home/Enter.cshtml
+++ b/SushiBar/SushiBarClientApp/Views/Home/Enter.cshtml
@@ -1,20 +1,21 @@
@{
- ViewData["Title"] = "Enter";
+ ViewData["Title"] = "Enter";
}
+
-
Вход в приложение
+ Вход в приложение
\ No newline at end of file
diff --git a/SushiBar/SushiBarClientApp/Views/Home/Index.cshtml b/SushiBar/SushiBarClientApp/Views/Home/Index.cshtml
index 5996441..843135f 100644
--- a/SushiBar/SushiBarClientApp/Views/Home/Index.cshtml
+++ b/SushiBar/SushiBarClientApp/Views/Home/Index.cshtml
@@ -1,75 +1,75 @@
@using SushiBarContracts.ViewModels
+
@model List
+
@{
- ViewData["Title"] = "Home Page";
+ ViewData["Title"] = "Home Page";
}
+
-
Заказы
+ Заказы
+
+
- @{
- if (Model == null)
- {
-
Авторизируйтесь
- return;
- }
-
- Создать заказ
-
-
-
-
-
- Номер
-
-
- Суши
-
-
- Дата создания
-
-
- Количество
-
-
- Сумма
-
-
- Статус
-
-
-
-
- @foreach (var item in Model)
- {
-
-
- @Html.DisplayFor(modelItem =>
- item.Id)
-
-
- @Html.DisplayFor(modelItem =>
- item.SushiName)
-
-
- @Html.DisplayFor(modelItem =>
- item.DateCreate)
-
-
- @Html.DisplayFor(modelItem =>
- item.Count)
-
-
- @Html.DisplayFor(modelItem =>
- item.Sum)
-
-
- @Html.DisplayFor(modelItem =>
- item.Status)
-
-
- }
-
-
- }
+ @{
+ if (Model == null)
+ {
+
Авторизируйтесь
+ return;
+ }
+
+
+ Создать заказ
+
+
+
+
+
+ Номер
+
+
+ Суши
+
+
+ Дата создания
+
+
+ Количество
+
+
+ Сумма
+
+
+ Статус
+
+
+
+
+ @foreach (var item in Model)
+ {
+
+
+ @Html.DisplayFor(modelItem => item.Id)
+
+
+ @Html.DisplayFor(modelItem => item.SushiName)
+
+
+ @Html.DisplayFor(modelItem => item.DateCreate)
+
+
+ @Html.DisplayFor(modelItem => item.Count)
+
+
+ @Html.DisplayFor(modelItem => item.Sum)
+
+
+ @Html.DisplayFor(modelItem => item.Status)
+
+
+ }
+
+
+ }
\ No newline at end of file
diff --git a/SushiBar/SushiBarClientApp/Views/Home/Privacy.cshtml b/SushiBar/SushiBarClientApp/Views/Home/Privacy.cshtml
index 7d00fb3..2871d24 100644
--- a/SushiBar/SushiBarClientApp/Views/Home/Privacy.cshtml
+++ b/SushiBar/SushiBarClientApp/Views/Home/Privacy.cshtml
@@ -1,37 +1,27 @@
@using SushiBarContracts.ViewModels
@model ClientViewModel
+
@{
- ViewData["Title"] = "Privacy Policy";
+ ViewData["Title"] = "Privacy Policy";
}
-
Личные данные
+ Личные данные
\ No newline at end of file
diff --git a/SushiBar/SushiBarClientApp/Views/Home/Register.cshtml b/SushiBar/SushiBarClientApp/Views/Home/Register.cshtml
index a2f84ee..398b516 100644
--- a/SushiBar/SushiBarClientApp/Views/Home/Register.cshtml
+++ b/SushiBar/SushiBarClientApp/Views/Home/Register.cshtml
@@ -1,27 +1,25 @@
@{
- ViewData["Title"] = "Register";
+ ViewData["Title"] = "Register";
}
+
-
Регистрация
+ Регистрация
\ No newline at end of file
diff --git a/SushiBar/SushiBarClientApp/Views/Shared/Error.cshtml b/SushiBar/SushiBarClientApp/Views/Shared/Error.cshtml
index a1e0478..4d96f6a 100644
--- a/SushiBar/SushiBarClientApp/Views/Shared/Error.cshtml
+++ b/SushiBar/SushiBarClientApp/Views/Shared/Error.cshtml
@@ -22,4 +22,4 @@
It can result in displaying sensitive information from exceptions to end users.
For local debugging, enable the Development environment by setting the ASPNETCORE_ENVIRONMENT environment variable to Development
and restarting the app.
-
+
\ No newline at end of file
diff --git a/SushiBar/SushiBarClientApp/Views/Shared/_Layout.cshtml b/SushiBar/SushiBarClientApp/Views/Shared/_Layout.cshtml
index a6faae0..386e637 100644
--- a/SushiBar/SushiBarClientApp/Views/Shared/_Layout.cshtml
+++ b/SushiBar/SushiBarClientApp/Views/Shared/_Layout.cshtml
@@ -5,32 +5,33 @@
@ViewData["Title"] - SushiBarClientApp
-
+
+
-
-
-
Суши бар
-
+
+
Суши-Бар
+
-
+
@@ -42,12 +43,15 @@
@RenderBody()
+
+
+
- @RenderSection("Scripts", required: false)
+ @await RenderSectionAsync("Scripts", required: false)