From 6dfec7820692423cc53f4519f38665a14b8777c1 Mon Sep 17 00:00:00 2001 From: DyCTaTOR <125912249+DyCTaTOR@users.noreply.github.com> Date: Sun, 21 Apr 2024 15:05:34 +0400 Subject: [PATCH] =?UTF-8?q?=D0=9D=D0=B0=D1=87=D0=B0=D0=BB=D0=BE=20=D0=B1?= =?UTF-8?q?=D0=B8=D0=B7=D0=BD=D0=B5=D1=81=20=D0=BB=D0=BE=D0=B3=D0=B8=D0=BA?= =?UTF-8?q?=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- University/University.sln | 14 ++- .../BusinessLogics/StudentLogic.cs | 114 ++++++++++++++++++ .../UniversityBusinessLogic.csproj | 17 +++ 3 files changed, 141 insertions(+), 4 deletions(-) create mode 100644 University/UniversityBusinessLogic/BusinessLogics/StudentLogic.cs create mode 100644 University/UniversityBusinessLogic/UniversityBusinessLogic.csproj diff --git a/University/University.sln b/University/University.sln index f214fca..09448b3 100644 --- a/University/University.sln +++ b/University/University.sln @@ -3,13 +3,15 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.9.34728.123 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "University", "University\University.csproj", "{300EBC23-D9F1-49E6-A1B0-A7A9D9AAABB3}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "University", "University\University.csproj", "{300EBC23-D9F1-49E6-A1B0-A7A9D9AAABB3}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UniversityDataModels", "UniversityDataModels\UniversityDataModels.csproj", "{48B8AA21-264D-457C-81E0-C7412970FD37}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UniversityDataModels", "UniversityDataModels\UniversityDataModels.csproj", "{48B8AA21-264D-457C-81E0-C7412970FD37}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UniversityContracts", "UniversityContracts\UniversityContracts.csproj", "{9510FE77-96E8-4ED9-B8D7-18FE309B98C9}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UniversityContracts", "UniversityContracts\UniversityContracts.csproj", "{9510FE77-96E8-4ED9-B8D7-18FE309B98C9}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UniversityDatabaseImplement", "UniversityDatabaseImplement\UniversityDatabaseImplement.csproj", "{A8D828DA-DC23-4D25-9B71-4169F5A55FC1}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UniversityDatabaseImplement", "UniversityDatabaseImplement\UniversityDatabaseImplement.csproj", "{A8D828DA-DC23-4D25-9B71-4169F5A55FC1}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UniversityBusinessLogic", "UniversityBusinessLogic\UniversityBusinessLogic.csproj", "{C21D4CE2-0B08-40A5-BD7B-56F1C05FA109}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -33,6 +35,10 @@ Global {A8D828DA-DC23-4D25-9B71-4169F5A55FC1}.Debug|Any CPU.Build.0 = Debug|Any CPU {A8D828DA-DC23-4D25-9B71-4169F5A55FC1}.Release|Any CPU.ActiveCfg = Release|Any CPU {A8D828DA-DC23-4D25-9B71-4169F5A55FC1}.Release|Any CPU.Build.0 = Release|Any CPU + {C21D4CE2-0B08-40A5-BD7B-56F1C05FA109}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C21D4CE2-0B08-40A5-BD7B-56F1C05FA109}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C21D4CE2-0B08-40A5-BD7B-56F1C05FA109}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C21D4CE2-0B08-40A5-BD7B-56F1C05FA109}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/University/UniversityBusinessLogic/BusinessLogics/StudentLogic.cs b/University/UniversityBusinessLogic/BusinessLogics/StudentLogic.cs new file mode 100644 index 0000000..af56c14 --- /dev/null +++ b/University/UniversityBusinessLogic/BusinessLogics/StudentLogic.cs @@ -0,0 +1,114 @@ +using Microsoft.Extensions.Logging; +using UniversityContracts.BindingModels; +using UniversityContracts.BusinessLogicsContracts; +using UniversityContracts.SearchModels; +using UniversityContracts.StorageContracts; +using UniversityContracts.ViewModels; + + +namespace UniversityBusinessLogic.BusinessLogics +{ + public class StudentLogic : IStudentLogic + { + private readonly ILogger _logger; + private readonly IStudentStorage _studentStorage; + public StudentLogic(ILogger logger, IStudentStorage + studentStorage) + { + _logger = logger; + _studentStorage = studentStorage; + } + public List? ReadList(StudentSearchModel? model) + { + _logger.LogInformation("ReadList. Name: {Name}.Id:{Id} ", + model?.Name, model?.Id); + var list = model == null ? _studentStorage.GetFullList() : + _studentStorage.GetFilteredList(model); + if (list == null) + { + _logger.LogWarning("ReadList return null list"); + return null; + } + _logger.LogInformation("ReadList. Count:{Count}", list.Count); + return list; + } + public StudentViewModel? ReadElement(StudentSearchModel model) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + _logger.LogInformation("ReadElement. Name:{Name}.Id:{Id}", + model.Name, model.Id); + var element = _studentStorage.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(StudentBindingModel model) + { + CheckModel(model); + if (_studentStorage.Insert(model) == null) + { + _logger.LogWarning("Insert operation failed"); + return false; + } + return true; + } + public bool Update(StudentBindingModel model) + { + CheckModel(model); + if (_studentStorage.Update(model) == null) + { + _logger.LogWarning("Update operation failed"); + return false; + } + return true; + } + public bool Delete(StudentBindingModel model) + { + CheckModel(model, false); + _logger.LogInformation("Delete. Id:{Id}", model.Id); + if (_studentStorage.Delete(model) == null) + { + _logger.LogWarning("Delete operation failed"); + return false; + } + return true; + } + private void CheckModel(StudentBindingModel model, bool withParams = true) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + if (!withParams) + { + return; + } + if (string.IsNullOrEmpty(model.Name)) + { + throw new ArgumentNullException("Нет имени студента", + nameof(model.Name)); + } + if (string.IsNullOrEmpty(model.PhoneNumber)) + { + throw new ArgumentNullException("Должен быть номер телефона", nameof(model.PhoneNumber)); + } + _logger.LogInformation("Student. Name:{Name}.PhoneNumber:{PhoneNumber}. Id: {Id}", + model.Name, model.PhoneNumber, model.Id); + var element = _studentStorage.GetElement(new StudentSearchModel + { + Name = model.Name + }); + if (element != null && element.Id != model.Id) + { + throw new InvalidOperationException("Student с таким названием уже есть"); + } + } + } +} diff --git a/University/UniversityBusinessLogic/UniversityBusinessLogic.csproj b/University/UniversityBusinessLogic/UniversityBusinessLogic.csproj new file mode 100644 index 0000000..6ae889b --- /dev/null +++ b/University/UniversityBusinessLogic/UniversityBusinessLogic.csproj @@ -0,0 +1,17 @@ + + + + net8.0 + enable + enable + + + + + + + + + + +