add contracts, business logic & data models
This commit is contained in:
parent
21fb1c9f98
commit
80e8ff165c
@ -3,7 +3,9 @@ Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.5.33530.505
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BookShop", "BookShop\BookShop.csproj", "{946EC661-9CF9-43DA-9C97-A2CE481406D2}"
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BookShopView", "BookShopView\BookShopView.csproj", "{1455C2BC-5C22-4B93-8954-ACC01353BD24}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BookShopDataModels", "BookShopDataModels\BookShopDataModels.csproj", "{032BDFC0-6AAF-4A75-A9AE-B24C85A4679C}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
@ -11,15 +13,19 @@ Global
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{946EC661-9CF9-43DA-9C97-A2CE481406D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{946EC661-9CF9-43DA-9C97-A2CE481406D2}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{946EC661-9CF9-43DA-9C97-A2CE481406D2}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{946EC661-9CF9-43DA-9C97-A2CE481406D2}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{1455C2BC-5C22-4B93-8954-ACC01353BD24}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{1455C2BC-5C22-4B93-8954-ACC01353BD24}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{1455C2BC-5C22-4B93-8954-ACC01353BD24}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{1455C2BC-5C22-4B93-8954-ACC01353BD24}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{032BDFC0-6AAF-4A75-A9AE-B24C85A4679C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{032BDFC0-6AAF-4A75-A9AE-B24C85A4679C}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{032BDFC0-6AAF-4A75-A9AE-B24C85A4679C}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{032BDFC0-6AAF-4A75-A9AE-B24C85A4679C}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {F2A3B3D2-EC41-4B24-B6F1-95D5692C7561}
|
||||
SolutionGuid = {CC21F821-D99C-4781-AD62-0FA7B3BA0F82}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
|
@ -0,0 +1,9 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
</Project>
|
116
BookShop/BookShopBusinessLogic/BusinessLogics/AuthorLogic.cs
Normal file
116
BookShop/BookShopBusinessLogic/BusinessLogics/AuthorLogic.cs
Normal file
@ -0,0 +1,116 @@
|
||||
using BookShopContracts.BindingModels;
|
||||
using BookShopContracts.BusinessLogicsContracts;
|
||||
using BookShopContracts.SearchModels;
|
||||
using BookShopContracts.StoragesContracts;
|
||||
using BookShopContracts.ViewModels;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
namespace BookShopBusinessLogic.BusinessLogics
|
||||
{
|
||||
public class AuthorLogic : IAuthorLogic
|
||||
{
|
||||
private readonly ILogger _logger;
|
||||
|
||||
private readonly IAuthorStorage _authorStorage;
|
||||
|
||||
public AuthorLogic(ILogger<AuthorLogic> logger, IAuthorStorage authorStorage)
|
||||
{
|
||||
_logger = logger;
|
||||
_authorStorage = authorStorage;
|
||||
}
|
||||
|
||||
public bool Create(AuthorBindingModel model)
|
||||
{
|
||||
CheckModel(model);
|
||||
if (_authorStorage.Insert(model) == null)
|
||||
{
|
||||
_logger.LogWarning("Insert operation failed");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool Delete(AuthorBindingModel model)
|
||||
{
|
||||
CheckModel(model, false);
|
||||
_logger.LogInformation("Delete. Id: {Id}", model.Id);
|
||||
if (_authorStorage.Delete(model) == null)
|
||||
{
|
||||
_logger.LogWarning("Delete operation failed");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public AuthorViewModel? ReadElement(AuthorSearchModel model)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(model));
|
||||
}
|
||||
_logger.LogInformation("ReadElement. AuthorSurname: {AuthorSurname}. AuthorName: {AuthorName}. Id: {Id}.", model.AuthorSurname, model.AuthorName, model.Id);
|
||||
var element = _authorStorage.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<AuthorViewModel>? ReadList(AuthorSearchModel? model)
|
||||
{
|
||||
_logger.LogInformation("ReadList. AuthorSurname: {AuthorSurname}. AuthorName: {AuthorName}. Id: {Id}.", model?.AuthorSurname, model?.AuthorName, model?.Id);
|
||||
var list = model == null ? _authorStorage.GetFullList() : _authorStorage.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(AuthorBindingModel model)
|
||||
{
|
||||
CheckModel(model);
|
||||
if (_authorStorage.Update(model) == null)
|
||||
{
|
||||
_logger.LogWarning("Update operation failed");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private void CheckModel(AuthorBindingModel model, bool withParams = true)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(model));
|
||||
}
|
||||
if (!withParams)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (string.IsNullOrEmpty(model.AuthorSurname))
|
||||
{
|
||||
throw new ArgumentNullException("Нет фамилии клиента", nameof(model.AuthorSurname));
|
||||
}
|
||||
if (string.IsNullOrEmpty(model.AuthorName))
|
||||
{
|
||||
throw new ArgumentNullException("Нет имени клиента", nameof(model.AuthorName));
|
||||
}
|
||||
_logger.LogInformation("Author. AuthorSurname: {AuthorSurname}. AuthorName: {AuthorName}. AuthorPatronymic: {AuthorPatronymic}. Id: {Id}.", model.AuthorSurname, model.AuthorName, model.AuthorPatronymic, model.Id);
|
||||
var element = _authorStorage.GetElement(new AuthorSearchModel
|
||||
{
|
||||
AuthorSurname = model.AuthorSurname,
|
||||
AuthorName = model.AuthorName
|
||||
});
|
||||
if (element != null && element.Id != model.Id)
|
||||
{
|
||||
throw new InvalidOperationException("Автор с таким ФИО уже есть");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
129
BookShop/BookShopBusinessLogic/BusinessLogics/BookLogic.cs
Normal file
129
BookShop/BookShopBusinessLogic/BusinessLogics/BookLogic.cs
Normal file
@ -0,0 +1,129 @@
|
||||
using BookShopContracts.BindingModels;
|
||||
using BookShopContracts.BusinessLogicsContracts;
|
||||
using BookShopContracts.SearchModels;
|
||||
using BookShopContracts.StoragesContracts;
|
||||
using BookShopContracts.ViewModels;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
namespace BookShopBusinessLogic.BusinessLogics
|
||||
{
|
||||
public class BookLogic : IBookLogic
|
||||
{
|
||||
private readonly ILogger _logger;
|
||||
|
||||
private readonly IBookStorage _bookStorage;
|
||||
|
||||
public BookLogic(ILogger<BookLogic> logger, IBookStorage bookStorage)
|
||||
{
|
||||
_logger = logger;
|
||||
_bookStorage = bookStorage;
|
||||
}
|
||||
|
||||
public bool Create(BookBindingModel model)
|
||||
{
|
||||
CheckModel(model);
|
||||
if (_bookStorage.Insert(model) == null)
|
||||
{
|
||||
_logger.LogWarning("Insert operation failed");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool Delete(BookBindingModel model)
|
||||
{
|
||||
CheckModel(model, false);
|
||||
_logger.LogInformation("Delete. Id: {Id}", model.Id);
|
||||
if (_bookStorage.Delete(model) == null)
|
||||
{
|
||||
_logger.LogWarning("Delete operation failed");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public BookViewModel? ReadElement(BookSearchModel model)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(model));
|
||||
}
|
||||
_logger.LogInformation("ReadElement. BookName: {BookName}. Id: {Id}.", model.BookName, model.Id);
|
||||
var element = _bookStorage.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<BookViewModel>? ReadList(BookSearchModel? model)
|
||||
{
|
||||
_logger.LogInformation("ReadList. BookName: {BookName}. Id: {Id}.", model?.BookName, model?.Id);
|
||||
var list = model == null ? _bookStorage.GetFullList() : _bookStorage.GetFilteredList(model);
|
||||
if (list == null)
|
||||
{
|
||||
_logger.LogWarning("ReadList return null list");
|
||||
return null;
|
||||
}
|
||||
_logger.LogInformation("ReadList. Count: {Count}", list.Count);
|
||||
return list;
|
||||
}
|
||||
|
||||
public string TestInsertList(int num)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public string TestReadList(int num)
|
||||
{
|
||||
return _bookStorage.TestReadList(num);
|
||||
}
|
||||
|
||||
public bool Update(BookBindingModel model)
|
||||
{
|
||||
CheckModel(model);
|
||||
if (_bookStorage.Update(model) == null)
|
||||
{
|
||||
_logger.LogWarning("Update operation failed");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private void CheckModel(BookBindingModel model, bool withParams = true)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(model));
|
||||
}
|
||||
if (!withParams)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (string.IsNullOrEmpty(model.BookName))
|
||||
{
|
||||
throw new ArgumentNullException("Нет названия книги", nameof(model.BookName));
|
||||
}
|
||||
if (model.Count < 0)
|
||||
{
|
||||
throw new ArgumentNullException("Количество не может быть меньше 0", nameof(model.BookName));
|
||||
}
|
||||
if (model.Cost <= 0)
|
||||
{
|
||||
throw new ArgumentNullException("Стоимость не может быть меньше 0", nameof(model.BookName));
|
||||
}
|
||||
_logger.LogInformation("Book. BookName: {BookName}. Cost: {Cost}. Id: {Id}.", model.BookName, model.Cost, model.Id);
|
||||
var element = _bookStorage.GetElement(new BookSearchModel
|
||||
{
|
||||
BookName = model.BookName
|
||||
});
|
||||
if (element != null && element.Id != model.Id)
|
||||
{
|
||||
throw new InvalidOperationException("Книга с таким названием уже есть");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
119
BookShop/BookShopBusinessLogic/BusinessLogics/ClientLogic.cs
Normal file
119
BookShop/BookShopBusinessLogic/BusinessLogics/ClientLogic.cs
Normal file
@ -0,0 +1,119 @@
|
||||
using BookShopContracts.BindingModels;
|
||||
using BookShopContracts.BusinessLogicsContracts;
|
||||
using BookShopContracts.SearchModels;
|
||||
using BookShopContracts.StoragesContracts;
|
||||
using BookShopContracts.ViewModels;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
namespace BookShopBusinessLogic.BusinessLogics
|
||||
{
|
||||
public class ClientLogic : IClientLogic
|
||||
{
|
||||
private readonly ILogger _logger;
|
||||
|
||||
private readonly IClientStorage _clientStorage;
|
||||
|
||||
public ClientLogic(ILogger<ClientLogic> logger, IClientStorage clientStorage)
|
||||
{
|
||||
_logger = logger;
|
||||
_clientStorage = clientStorage;
|
||||
}
|
||||
|
||||
public bool Create(ClientBindingModel model)
|
||||
{
|
||||
CheckModel(model);
|
||||
if (_clientStorage.Insert(model) == null)
|
||||
{
|
||||
_logger.LogWarning("Insert operation failed");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool Delete(ClientBindingModel model)
|
||||
{
|
||||
CheckModel(model, false);
|
||||
_logger.LogInformation("Delete. Id: {Id}", model.Id);
|
||||
if (_clientStorage.Delete(model) == null)
|
||||
{
|
||||
_logger.LogWarning("Delete operation failed");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public ClientViewModel? ReadElement(ClientSearchModel model)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(model));
|
||||
}
|
||||
_logger.LogInformation("ReadElement. ClientSurname: {ClientSurname}. ClientName: {ClientName}. ClientPatronymic: {ClientPatronymic}. Email: {Email}. Id: {Id}.", model.ClientSurname, model.ClientName, model.ClientPatronymic, model.Email, model.Id);
|
||||
var element = _clientStorage.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<ClientViewModel>? ReadList(ClientSearchModel? model)
|
||||
{
|
||||
_logger.LogInformation("ReadList. ClientSurname: {ClientSurname}. ClientName: {ClientName}. ClientPatronymic: {ClientPatronymic}. Email: {Email}. Id: {Id}.", model?.ClientSurname, model?.ClientName, model?.ClientPatronymic, model?.Email, model?.Id);
|
||||
var list = model == null ? _clientStorage.GetFullList() : _clientStorage.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(ClientBindingModel model)
|
||||
{
|
||||
CheckModel(model);
|
||||
if (_clientStorage.Update(model) == null)
|
||||
{
|
||||
_logger.LogWarning("Update operation failed");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private void CheckModel(ClientBindingModel model, bool withParams = true)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(model));
|
||||
}
|
||||
if (!withParams)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (string.IsNullOrEmpty(model.ClientSurname))
|
||||
{
|
||||
throw new ArgumentNullException("Нет фамилии клиента", nameof(model.ClientSurname));
|
||||
}
|
||||
if (string.IsNullOrEmpty(model.ClientName))
|
||||
{
|
||||
throw new ArgumentNullException("Нет имени клиента", nameof(model.ClientName));
|
||||
}
|
||||
if (string.IsNullOrEmpty(model.Email))
|
||||
{
|
||||
throw new ArgumentNullException("Нет почты клиента", nameof(model.Email));
|
||||
}
|
||||
_logger.LogInformation("Client. ClientSurname: {ClientSurname}. ClientName: {ClientName}. ClientPatronymic: {ClientPatronymic}. Email: {Email}. Id: {Id}.", model.ClientSurname, model.ClientName, model.ClientPatronymic, model.Email, model.Id);
|
||||
var element = _clientStorage.GetElement(new ClientSearchModel
|
||||
{
|
||||
Email = model.Email
|
||||
});
|
||||
if (element != null && element.Id != model.Id)
|
||||
{
|
||||
throw new InvalidOperationException("Клиент с такой почтой уже есть");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
111
BookShop/BookShopBusinessLogic/BusinessLogics/GenreLogic.cs
Normal file
111
BookShop/BookShopBusinessLogic/BusinessLogics/GenreLogic.cs
Normal file
@ -0,0 +1,111 @@
|
||||
using BookShopContracts.BindingModels;
|
||||
using BookShopContracts.BusinessLogicsContracts;
|
||||
using BookShopContracts.SearchModels;
|
||||
using BookShopContracts.StoragesContracts;
|
||||
using BookShopContracts.ViewModels;
|
||||
using BookShopDataModels.Models;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
namespace BookShopBusinessLogic.BusinessLogics
|
||||
{
|
||||
public class GenreLogic : IGenreLogic
|
||||
{
|
||||
private readonly ILogger _logger;
|
||||
|
||||
private readonly IGenreStorage _genreStorage;
|
||||
public GenreLogic(ILogger<GenreLogic> logger, IGenreStorage genreStorage)
|
||||
{
|
||||
_logger = logger;
|
||||
_genreStorage = genreStorage;
|
||||
}
|
||||
|
||||
public bool Create(GenreBindingModel model)
|
||||
{
|
||||
CheckModel(model);
|
||||
if (_genreStorage.Insert(model) == null)
|
||||
{
|
||||
_logger.LogWarning("Insert operation failed");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool Delete(GenreBindingModel model)
|
||||
{
|
||||
CheckModel(model, false);
|
||||
_logger.LogInformation("Delete. Id: {Id}", model.Id);
|
||||
if (_genreStorage.Delete(model) == null)
|
||||
{
|
||||
_logger.LogWarning("Delete operation failed");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public GenreViewModel? ReadElement(GenreSearchModel model)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(model));
|
||||
}
|
||||
_logger.LogInformation("ReadElement. GenreName: {GenreName}. Id: {Id}.", model.GenreName, model.Id);
|
||||
var element = _genreStorage.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<GenreViewModel>? ReadList(GenreSearchModel? model)
|
||||
{
|
||||
_logger.LogInformation("ReadList. GenreName: {GenreName}. Id: {Id}.", model?.GenreName, model?.Id);
|
||||
var list = model == null ? _genreStorage.GetFullList() : _genreStorage.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(GenreBindingModel model)
|
||||
{
|
||||
CheckModel(model);
|
||||
if (_genreStorage.Update(model) == null)
|
||||
{
|
||||
_logger.LogWarning("Update operation failed");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private void CheckModel(GenreBindingModel model, bool withParams = true)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(model));
|
||||
}
|
||||
if (!withParams)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (string.IsNullOrEmpty(model.GenreName))
|
||||
{
|
||||
throw new ArgumentNullException("Нет названия жанра", nameof(model.GenreName));
|
||||
}
|
||||
_logger.LogInformation("Genre. GenreName: {GenreName}. Id: {Id}.", model.GenreName, model.Id);
|
||||
var element = _genreStorage.GetElement(new GenreSearchModel
|
||||
{
|
||||
GenreName = model.GenreName
|
||||
});
|
||||
if (element != null && element.Id != model.Id)
|
||||
{
|
||||
throw new InvalidOperationException("Такой жанр уже есть");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
102
BookShop/BookShopBusinessLogic/BusinessLogics/OrderLogic.cs
Normal file
102
BookShop/BookShopBusinessLogic/BusinessLogics/OrderLogic.cs
Normal file
@ -0,0 +1,102 @@
|
||||
using BookShopContracts.BindingModels;
|
||||
using BookShopContracts.BusinessLogicsContracts;
|
||||
using BookShopContracts.SearchModels;
|
||||
using BookShopContracts.StoragesContracts;
|
||||
using BookShopContracts.ViewModels;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
namespace BookShopBusinessLogic.BusinessLogics
|
||||
{
|
||||
public class OrderLogic : IOrderLogic
|
||||
{
|
||||
private readonly ILogger _logger;
|
||||
|
||||
private readonly IOrderStorage _orderStorage;
|
||||
|
||||
public OrderLogic(ILogger<OrderLogic> logger, IOrderStorage orderStorage)
|
||||
{
|
||||
_logger = logger;
|
||||
_orderStorage = orderStorage;
|
||||
}
|
||||
|
||||
public bool Create(OrderBindingModel model)
|
||||
{
|
||||
CheckModel(model);
|
||||
|
||||
if (_orderStorage.Insert(model) == null)
|
||||
{
|
||||
_logger.LogWarning("Insert operation failed");
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public List<OrderViewModel>? ReadList(OrderSearchModel? model)
|
||||
{
|
||||
_logger.LogInformation("Order. OrderId:{Id}", model?.Id);
|
||||
|
||||
var list = model == null ? _orderStorage.GetFullList() : _orderStorage.GetFilteredList(model);
|
||||
|
||||
if (list == null)
|
||||
{
|
||||
_logger.LogWarning("ReadList return null list");
|
||||
return null;
|
||||
}
|
||||
|
||||
_logger.LogInformation("ReadList. Count:{Count}", list.Count);
|
||||
return list;
|
||||
}
|
||||
|
||||
private void CheckModel(OrderBindingModel model, bool withParams = true)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(model));
|
||||
}
|
||||
if (!withParams)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (model.BookId < 0)
|
||||
{
|
||||
throw new ArgumentNullException("Некорректный идентификатор книги", nameof(model.BookId));
|
||||
}
|
||||
|
||||
if (model.Count <= 0)
|
||||
{
|
||||
throw new ArgumentNullException("Количество книг в заказе должно быть больше 0", nameof(model.Count));
|
||||
}
|
||||
if (model.Sum <= 0)
|
||||
{
|
||||
throw new ArgumentNullException("Сумма заказа должна быть больше 0", nameof(model.Sum));
|
||||
}
|
||||
|
||||
_logger.LogInformation("Order. OrderId:{Id}.Sum:{ Sum}. Id: { BookId}", model.Id, model.Sum, model.BookId);
|
||||
}
|
||||
|
||||
public OrderViewModel? ReadElement(OrderSearchModel model)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(model));
|
||||
}
|
||||
|
||||
_logger.LogInformation("ReadElement. Id:{ Id}", model.Id);
|
||||
|
||||
var element = _orderStorage.GetElement(model);
|
||||
|
||||
if (element == null)
|
||||
{
|
||||
_logger.LogWarning("ReadElement element not found");
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
_logger.LogInformation("ReadElement find. Id:{Id}", element.Id);
|
||||
|
||||
return element;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
using BookShopDataModels.Models;
|
||||
|
||||
namespace BookShopContracts.BindingModels
|
||||
{
|
||||
public class AuthorBindingModel : IAuthorModel
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
public string AuthorSurname { get; set; } = string.Empty;
|
||||
|
||||
public string AuthorName { get; set; } = string.Empty;
|
||||
|
||||
public string AuthorPatronymic { get; set; } = string.Empty;
|
||||
}
|
||||
}
|
28
BookShop/BookShopContracts/BindingModels/BookBindingModel.cs
Normal file
28
BookShop/BookShopContracts/BindingModels/BookBindingModel.cs
Normal file
@ -0,0 +1,28 @@
|
||||
using BookShopDataModels.Models;
|
||||
using System.ComponentModel;
|
||||
|
||||
namespace BookShopContracts.BindingModels
|
||||
{
|
||||
public class BookBindingModel : IBookModel
|
||||
{
|
||||
public int Id { get; set; }
|
||||
[DisplayName("Название")]
|
||||
|
||||
public string BookName { get; set; } = string.Empty;
|
||||
[DisplayName("Стоимость")]
|
||||
|
||||
public double Cost { get; set; }
|
||||
[DisplayName("Количество")]
|
||||
|
||||
public int Count { get; set; }
|
||||
[DisplayName("Жанр")]
|
||||
|
||||
public int GenreId { get; set; }
|
||||
|
||||
public Dictionary<int, IAuthorModel> BookAuthors
|
||||
{
|
||||
get;
|
||||
set;
|
||||
} = new();
|
||||
}
|
||||
}
|
@ -0,0 +1,18 @@
|
||||
using BookShopDataModels.Models;
|
||||
|
||||
namespace BookShopContracts.BindingModels
|
||||
{
|
||||
public class ClientBindingModel : IClientModel
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
public string ClientSurname { get; set; } = string.Empty;
|
||||
|
||||
public string ClientName { get; set; } = string.Empty;
|
||||
|
||||
public string ClientPatronymic { get; set; } = string.Empty;
|
||||
|
||||
public string Email { get; set; } = string.Empty;
|
||||
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
using BookShopDataModels.Models;
|
||||
|
||||
namespace BookShopContracts.BindingModels
|
||||
{
|
||||
public class GenreBindingModel : IGenreModel
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
public string GenreName { get; set; } = string.Empty;
|
||||
}
|
||||
}
|
@ -0,0 +1,23 @@
|
||||
using BookShopDataModels.Models;
|
||||
|
||||
namespace BookShopContracts.BindingModels
|
||||
{
|
||||
public class OrderBindingModel : IOrderModel
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
public int BookId { get; set; }
|
||||
|
||||
public string BookName { get; set; } = string.Empty;
|
||||
|
||||
public int ClientId { get; set; }
|
||||
|
||||
public string ClientName { get; set; } = string.Empty;
|
||||
|
||||
public int Count { get; set; }
|
||||
|
||||
public double Sum { get; set; }
|
||||
|
||||
public DateTime DateCreate { get; set; } = DateTime.Now;
|
||||
}
|
||||
}
|
9
BookShop/BookShopContracts/BookShopContracts.csproj
Normal file
9
BookShop/BookShopContracts/BookShopContracts.csproj
Normal file
@ -0,0 +1,9 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
</Project>
|
@ -0,0 +1,19 @@
|
||||
using BookShopContracts.BindingModels;
|
||||
using BookShopContracts.SearchModels;
|
||||
using BookShopContracts.ViewModels;
|
||||
|
||||
namespace BookShopContracts.BusinessLogicsContracts
|
||||
{
|
||||
public interface IAuthorLogic
|
||||
{
|
||||
List<AuthorViewModel>? ReadList(AuthorSearchModel? model);
|
||||
|
||||
AuthorViewModel? ReadElement(AuthorSearchModel model);
|
||||
|
||||
bool Create(AuthorBindingModel model);
|
||||
|
||||
bool Update(AuthorBindingModel model);
|
||||
|
||||
bool Delete(AuthorBindingModel model);
|
||||
}
|
||||
}
|
@ -0,0 +1,23 @@
|
||||
using BookShopContracts.BindingModels;
|
||||
using BookShopContracts.SearchModels;
|
||||
using BookShopContracts.ViewModels;
|
||||
|
||||
namespace BookShopContracts.BusinessLogicsContracts
|
||||
{
|
||||
public interface IBookLogic
|
||||
{
|
||||
List<BookViewModel>? ReadList(BookSearchModel? model);
|
||||
|
||||
BookViewModel? ReadElement(BookSearchModel model);
|
||||
|
||||
bool Create(BookBindingModel model);
|
||||
|
||||
bool Update(BookBindingModel model);
|
||||
|
||||
bool Delete(BookBindingModel model);
|
||||
|
||||
string TestInsertList(int num);
|
||||
|
||||
string TestReadList(int num);
|
||||
}
|
||||
}
|
@ -0,0 +1,19 @@
|
||||
using BookShopContracts.BindingModels;
|
||||
using BookShopContracts.SearchModels;
|
||||
using BookShopContracts.ViewModels;
|
||||
|
||||
namespace BookShopContracts.BusinessLogicsContracts
|
||||
{
|
||||
public interface IClientLogic
|
||||
{
|
||||
List<ClientViewModel>? ReadList(ClientSearchModel? model);
|
||||
|
||||
ClientViewModel? ReadElement(ClientSearchModel model);
|
||||
|
||||
bool Create(ClientBindingModel model);
|
||||
|
||||
bool Update(ClientBindingModel model);
|
||||
|
||||
bool Delete(ClientBindingModel model);
|
||||
}
|
||||
}
|
@ -0,0 +1,19 @@
|
||||
using BookShopContracts.BindingModels;
|
||||
using BookShopContracts.SearchModels;
|
||||
using BookShopContracts.ViewModels;
|
||||
|
||||
namespace BookShopContracts.BusinessLogicsContracts
|
||||
{
|
||||
public interface IGenreLogic
|
||||
{
|
||||
List<GenreViewModel>? ReadList(GenreSearchModel? model);
|
||||
|
||||
GenreViewModel? ReadElement(GenreSearchModel model);
|
||||
|
||||
bool Create(GenreBindingModel model);
|
||||
|
||||
bool Update(GenreBindingModel model);
|
||||
|
||||
bool Delete(GenreBindingModel model);
|
||||
}
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
using BookShopContracts.BindingModels;
|
||||
using BookShopContracts.SearchModels;
|
||||
using BookShopContracts.ViewModels;
|
||||
|
||||
namespace BookShopContracts.BusinessLogicsContracts
|
||||
{
|
||||
public interface IOrderLogic
|
||||
{
|
||||
List<OrderViewModel>? ReadList(OrderSearchModel? model);
|
||||
|
||||
OrderViewModel? ReadElement(OrderSearchModel model);
|
||||
|
||||
bool Create(OrderBindingModel model);
|
||||
}
|
||||
}
|
11
BookShop/BookShopContracts/SearchModels/AuthorSearchModel.cs
Normal file
11
BookShop/BookShopContracts/SearchModels/AuthorSearchModel.cs
Normal file
@ -0,0 +1,11 @@
|
||||
namespace BookShopContracts.SearchModels
|
||||
{
|
||||
public class AuthorSearchModel
|
||||
{
|
||||
public int? Id { get; set; }
|
||||
|
||||
public string? AuthorSurname { get; set; }
|
||||
|
||||
public string? AuthorName { get; set; }
|
||||
}
|
||||
}
|
@ -0,0 +1,9 @@
|
||||
namespace BookShopContracts.SearchModels
|
||||
{
|
||||
public class BookSearchModel
|
||||
{
|
||||
public int? Id { get; set; }
|
||||
|
||||
public string? BookName { get; set; }
|
||||
}
|
||||
}
|
15
BookShop/BookShopContracts/SearchModels/ClientSearchModel.cs
Normal file
15
BookShop/BookShopContracts/SearchModels/ClientSearchModel.cs
Normal file
@ -0,0 +1,15 @@
|
||||
namespace BookShopContracts.SearchModels
|
||||
{
|
||||
public class ClientSearchModel
|
||||
{
|
||||
public int? Id { get; set; }
|
||||
|
||||
public string? ClientSurname { get; set; }
|
||||
|
||||
public string? ClientName { get; set; }
|
||||
|
||||
public string? ClientPatronymic { get; set; }
|
||||
|
||||
public string? Email { get; set; }
|
||||
}
|
||||
}
|
@ -0,0 +1,9 @@
|
||||
namespace BookShopContracts.SearchModels
|
||||
{
|
||||
public class GenreSearchModel
|
||||
{
|
||||
public int? Id { get; set; }
|
||||
|
||||
public string? GenreName { get; set; }
|
||||
}
|
||||
}
|
11
BookShop/BookShopContracts/SearchModels/OrderSearchModel.cs
Normal file
11
BookShop/BookShopContracts/SearchModels/OrderSearchModel.cs
Normal file
@ -0,0 +1,11 @@
|
||||
namespace BookShopContracts.SearchModels
|
||||
{
|
||||
public class OrderSearchModel
|
||||
{
|
||||
public int? Id { get; set; }
|
||||
|
||||
public int? ClientId { get; set; }
|
||||
|
||||
public DateTime? DateCreate { get; set; }
|
||||
}
|
||||
}
|
@ -0,0 +1,21 @@
|
||||
using BookShopContracts.BindingModels;
|
||||
using BookShopContracts.SearchModels;
|
||||
using BookShopContracts.ViewModels;
|
||||
|
||||
namespace BookShopContracts.StoragesContracts
|
||||
{
|
||||
public interface IAuthorStorage
|
||||
{
|
||||
List<AuthorViewModel> GetFullList();
|
||||
|
||||
List<AuthorViewModel> GetFilteredList(AuthorSearchModel model);
|
||||
|
||||
AuthorViewModel? GetElement(AuthorSearchModel model);
|
||||
|
||||
AuthorViewModel? Insert(AuthorBindingModel model);
|
||||
|
||||
AuthorViewModel? Update(AuthorBindingModel model);
|
||||
|
||||
AuthorViewModel? Delete(AuthorBindingModel model);
|
||||
}
|
||||
}
|
25
BookShop/BookShopContracts/StoragesContracts/IBookStorage.cs
Normal file
25
BookShop/BookShopContracts/StoragesContracts/IBookStorage.cs
Normal file
@ -0,0 +1,25 @@
|
||||
using BookShopContracts.BindingModels;
|
||||
using BookShopContracts.SearchModels;
|
||||
using BookShopContracts.ViewModels;
|
||||
|
||||
namespace BookShopContracts.StoragesContracts
|
||||
{
|
||||
public interface IBookStorage
|
||||
{
|
||||
List<BookViewModel> GetFullList();
|
||||
|
||||
List<BookViewModel> GetFilteredList(BookSearchModel model);
|
||||
|
||||
BookViewModel? GetElement(BookSearchModel model);
|
||||
|
||||
BookViewModel? Insert(BookBindingModel model);
|
||||
|
||||
BookViewModel? Update(BookBindingModel model);
|
||||
|
||||
BookViewModel? Delete(BookBindingModel model);
|
||||
|
||||
string TestInsertList(int num);
|
||||
|
||||
string TestReadList(int num);
|
||||
}
|
||||
}
|
@ -0,0 +1,21 @@
|
||||
using BookShopContracts.BindingModels;
|
||||
using BookShopContracts.SearchModels;
|
||||
using BookShopContracts.ViewModels;
|
||||
|
||||
namespace BookShopContracts.StoragesContracts
|
||||
{
|
||||
public interface IClientStorage
|
||||
{
|
||||
List<ClientViewModel> GetFullList();
|
||||
|
||||
List<ClientViewModel> GetFilteredList(ClientSearchModel model);
|
||||
|
||||
ClientViewModel? GetElement(ClientSearchModel model);
|
||||
|
||||
ClientViewModel? Insert(ClientBindingModel model);
|
||||
|
||||
ClientViewModel? Update(ClientBindingModel model);
|
||||
|
||||
ClientViewModel? Delete(ClientBindingModel model);
|
||||
}
|
||||
}
|
@ -0,0 +1,21 @@
|
||||
using BookShopContracts.BindingModels;
|
||||
using BookShopContracts.SearchModels;
|
||||
using BookShopContracts.ViewModels;
|
||||
|
||||
namespace BookShopContracts.StoragesContracts
|
||||
{
|
||||
public interface IGenreStorage
|
||||
{
|
||||
List<GenreViewModel> GetFullList();
|
||||
|
||||
List<GenreViewModel> GetFilteredList(GenreSearchModel model);
|
||||
|
||||
GenreViewModel? GetElement(GenreSearchModel model);
|
||||
|
||||
GenreViewModel? Insert(GenreBindingModel model);
|
||||
|
||||
GenreViewModel? Update(GenreBindingModel model);
|
||||
|
||||
GenreViewModel? Delete(GenreBindingModel model);
|
||||
}
|
||||
}
|
@ -0,0 +1,17 @@
|
||||
using BookShopContracts.BindingModels;
|
||||
using BookShopContracts.SearchModels;
|
||||
using BookShopContracts.ViewModels;
|
||||
|
||||
namespace BookShopContracts.StoragesContracts
|
||||
{
|
||||
public interface IOrderStorage
|
||||
{
|
||||
List<OrderViewModel> GetFullList();
|
||||
|
||||
List<OrderViewModel> GetFilteredList(OrderSearchModel model);
|
||||
|
||||
OrderViewModel? GetElement(OrderSearchModel model);
|
||||
|
||||
OrderViewModel? Insert(OrderBindingModel model);
|
||||
}
|
||||
}
|
19
BookShop/BookShopContracts/ViewModels/AuthorViewModel.cs
Normal file
19
BookShop/BookShopContracts/ViewModels/AuthorViewModel.cs
Normal file
@ -0,0 +1,19 @@
|
||||
using BookShopDataModels.Models;
|
||||
using System.ComponentModel;
|
||||
|
||||
namespace BookShopContracts.ViewModels
|
||||
{
|
||||
public class AuthorViewModel: IAuthorModel
|
||||
{
|
||||
public int Id { get; set; }
|
||||
[DisplayName("Фамилия автора")]
|
||||
|
||||
public string AuthorSurname { get; set; } = string.Empty;
|
||||
[DisplayName("Имя автора")]
|
||||
|
||||
public string AuthorName { get; set; } = string.Empty;
|
||||
[DisplayName("Отчество автора")]
|
||||
|
||||
public string AuthorPatronymic { get; set; } = string.Empty;
|
||||
}
|
||||
}
|
24
BookShop/BookShopContracts/ViewModels/BookViewModel.cs
Normal file
24
BookShop/BookShopContracts/ViewModels/BookViewModel.cs
Normal file
@ -0,0 +1,24 @@
|
||||
using BookShopDataModels.Models;
|
||||
using System.ComponentModel;
|
||||
|
||||
namespace BookShopContracts.ViewModels
|
||||
{
|
||||
public class BookViewModel: IBookModel
|
||||
{
|
||||
public int Id { get; set; }
|
||||
[DisplayName("Название")]
|
||||
|
||||
public string BookName { get; set; } = string.Empty;
|
||||
[DisplayName("Стоимость")]
|
||||
|
||||
public double Cost { get; set; }
|
||||
|
||||
public int Count { get; set; }
|
||||
|
||||
public int GenreId { get; set; }
|
||||
|
||||
public string GenreName { get; set; } = string.Empty;
|
||||
|
||||
public Dictionary<int, IAuthorModel> BookAuthors { get; set; } = new();
|
||||
}
|
||||
}
|
23
BookShop/BookShopContracts/ViewModels/ClientViewModel.cs
Normal file
23
BookShop/BookShopContracts/ViewModels/ClientViewModel.cs
Normal file
@ -0,0 +1,23 @@
|
||||
using BookShopContracts.BusinessLogicsContracts;
|
||||
using BookShopDataModels.Models;
|
||||
using System.ComponentModel;
|
||||
|
||||
namespace BookShopContracts.ViewModels
|
||||
{
|
||||
public class ClientViewModel: IClientModel
|
||||
{
|
||||
public int Id { get; set; }
|
||||
[DisplayName("Фамилия клиента")]
|
||||
|
||||
public string ClientSurname { get; set; } = string.Empty;
|
||||
[DisplayName("Имя клиента")]
|
||||
|
||||
public string ClientName { get; set; } = string.Empty;
|
||||
[DisplayName("Отчество клиента")]
|
||||
|
||||
public string ClientPatronymic { get; set; } = string.Empty;
|
||||
[DisplayName("Электронная почта клиента")]
|
||||
|
||||
public string Email { get; set; } = string.Empty;
|
||||
}
|
||||
}
|
13
BookShop/BookShopContracts/ViewModels/GenreViewModel.cs
Normal file
13
BookShop/BookShopContracts/ViewModels/GenreViewModel.cs
Normal file
@ -0,0 +1,13 @@
|
||||
using BookShopDataModels.Models;
|
||||
using System.ComponentModel;
|
||||
|
||||
namespace BookShopContracts.ViewModels
|
||||
{
|
||||
public class GenreViewModel: IGenreModel
|
||||
{
|
||||
public int Id { get; set; }
|
||||
[DisplayName("Жанр")]
|
||||
|
||||
public string GenreName { get; set; } = string.Empty;
|
||||
}
|
||||
}
|
29
BookShop/BookShopContracts/ViewModels/OrderViewModel.cs
Normal file
29
BookShop/BookShopContracts/ViewModels/OrderViewModel.cs
Normal file
@ -0,0 +1,29 @@
|
||||
using BookShopDataModels.Models;
|
||||
using System.ComponentModel;
|
||||
|
||||
namespace BookShopContracts.ViewModels
|
||||
{
|
||||
public class OrderViewModel: IOrderModel
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
public int BookId { get; set; }
|
||||
[DisplayName("Название книги")]
|
||||
|
||||
public string BookName { get; set; } = string.Empty;
|
||||
|
||||
public int ClientId { get; set; }
|
||||
[DisplayName("Фамилия клиента")]
|
||||
|
||||
public string ClientSurname {get; set; } = string.Empty;
|
||||
[DisplayName("Количество")]
|
||||
|
||||
public int Count { get; set; }
|
||||
[DisplayName("Сумма")]
|
||||
|
||||
public double Sum { get; set; }
|
||||
[DisplayName("Дата заказа")]
|
||||
|
||||
public DateTime DateCreate { get; set; } = DateTime.Now;
|
||||
}
|
||||
}
|
9
BookShop/BookShopDataModels/BookShopDataModels.csproj
Normal file
9
BookShop/BookShopDataModels/BookShopDataModels.csproj
Normal file
@ -0,0 +1,9 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
</Project>
|
7
BookShop/BookShopDataModels/IId.cs
Normal file
7
BookShop/BookShopDataModels/IId.cs
Normal file
@ -0,0 +1,7 @@
|
||||
namespace BookShopDataModels
|
||||
{
|
||||
public interface IId
|
||||
{
|
||||
int Id { get; }
|
||||
}
|
||||
}
|
11
BookShop/BookShopDataModels/Models/IAuthorModel.cs
Normal file
11
BookShop/BookShopDataModels/Models/IAuthorModel.cs
Normal file
@ -0,0 +1,11 @@
|
||||
namespace BookShopDataModels.Models
|
||||
{
|
||||
public interface IAuthorModel: IId
|
||||
{
|
||||
string AuthorSurname { get; }
|
||||
|
||||
string AuthorName { get; }
|
||||
|
||||
string AuthorPatronymic { get; }
|
||||
}
|
||||
}
|
15
BookShop/BookShopDataModels/Models/IBookModel.cs
Normal file
15
BookShop/BookShopDataModels/Models/IBookModel.cs
Normal file
@ -0,0 +1,15 @@
|
||||
namespace BookShopDataModels.Models
|
||||
{
|
||||
public interface IBookModel: IId
|
||||
{
|
||||
string BookName { get; }
|
||||
|
||||
double Cost { get; }
|
||||
|
||||
int Count { get; }
|
||||
|
||||
int GenreId { get; }
|
||||
|
||||
Dictionary<int, IAuthorModel> BookAuthors { get; }
|
||||
}
|
||||
}
|
13
BookShop/BookShopDataModels/Models/IClientModel.cs
Normal file
13
BookShop/BookShopDataModels/Models/IClientModel.cs
Normal file
@ -0,0 +1,13 @@
|
||||
namespace BookShopDataModels.Models
|
||||
{
|
||||
public interface IClientModel: IId
|
||||
{
|
||||
string ClientSurname { get; }
|
||||
|
||||
string ClientName { get; }
|
||||
|
||||
string ClientPatronymic { get; }
|
||||
|
||||
string Email { get; }
|
||||
}
|
||||
}
|
7
BookShop/BookShopDataModels/Models/IGenreModel.cs
Normal file
7
BookShop/BookShopDataModels/Models/IGenreModel.cs
Normal file
@ -0,0 +1,7 @@
|
||||
namespace BookShopDataModels.Models
|
||||
{
|
||||
public interface IGenreModel : IId
|
||||
{
|
||||
string GenreName { get; }
|
||||
}
|
||||
}
|
15
BookShop/BookShopDataModels/Models/IOrderModel.cs
Normal file
15
BookShop/BookShopDataModels/Models/IOrderModel.cs
Normal file
@ -0,0 +1,15 @@
|
||||
namespace BookShopDataModels.Models
|
||||
{
|
||||
public interface IOrderModel: IId
|
||||
{
|
||||
int Count { get; }
|
||||
|
||||
int BookId { get; }
|
||||
|
||||
int ClientId { get; }
|
||||
|
||||
double Sum { get; }
|
||||
|
||||
DateTime DateCreate { get; }
|
||||
}
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
namespace BookShop
|
||||
namespace BookShopView
|
||||
{
|
||||
partial class Form1
|
||||
{
|
@ -1,4 +1,4 @@
|
||||
namespace BookShop
|
||||
namespace BookShopView
|
||||
{
|
||||
public partial class Form1 : Form
|
||||
{
|
@ -1,4 +1,4 @@
|
||||
namespace BookShop
|
||||
namespace BookShopView
|
||||
{
|
||||
internal static class Program
|
||||
{
|
Loading…
Reference in New Issue
Block a user