diff --git a/School/School.sln b/School/School.sln index e433f48..218fc09 100644 --- a/School/School.sln +++ b/School/School.sln @@ -9,6 +9,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SchoolDataModels", "Schools EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SchoolContracts", "SchoolContracts\SchoolContracts.csproj", "{D58B0AFE-E28D-4583-B9F1-C0EDF443243F}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SchoolBusinessLogic", "SchoolBusinessLogic\SchoolBusinessLogic.csproj", "{E78D42A3-7FA0-4E3A-B0C8-AEC70B3EE331}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -27,6 +29,10 @@ Global {D58B0AFE-E28D-4583-B9F1-C0EDF443243F}.Debug|Any CPU.Build.0 = Debug|Any CPU {D58B0AFE-E28D-4583-B9F1-C0EDF443243F}.Release|Any CPU.ActiveCfg = Release|Any CPU {D58B0AFE-E28D-4583-B9F1-C0EDF443243F}.Release|Any CPU.Build.0 = Release|Any CPU + {E78D42A3-7FA0-4E3A-B0C8-AEC70B3EE331}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E78D42A3-7FA0-4E3A-B0C8-AEC70B3EE331}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E78D42A3-7FA0-4E3A-B0C8-AEC70B3EE331}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E78D42A3-7FA0-4E3A-B0C8-AEC70B3EE331}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/School/SchoolBusinessLogic/BusinessLogic/AchievementLogic.cs b/School/SchoolBusinessLogic/BusinessLogic/AchievementLogic.cs new file mode 100644 index 0000000..4c14e0e --- /dev/null +++ b/School/SchoolBusinessLogic/BusinessLogic/AchievementLogic.cs @@ -0,0 +1,111 @@ +using Microsoft.Extensions.Logging; +using SchoolContracts.BindingModels; +using SchoolContracts.BusinessLogicsContracts; +using SchoolContracts.SearchModels; +using SchoolContracts.StoragesContracts; +using SchoolContracts.ViewModels; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SchoolBusinessLogic.BusinessLogic +{ + public class AchievementLogic : IAchievementLogic + { + private readonly ILogger _logger; + private readonly IAchievementStorage _AchievementStorage; + + public AchievementLogic(ILogger logger, IAchievementStorage AchievementStorage) + { + _logger = logger; + _AchievementStorage = AchievementStorage; + } + + public List? ReadList(AchievementSearchModel? model) + { + _logger.LogInformation("ReadList. Name:{Name} AchievementId:{Id}", model?.Name, model?.Id); + var list = model == null ? _AchievementStorage.GetFullList() : _AchievementStorage.GetFilteredList(model); + if (list == null) + { + _logger.LogWarning("ReadList return null list"); + return null; + } + _logger.LogInformation("ReadList. Count:{Count}", list.Count); + return list; + } + + public AchievementViewModel? ReadElement(AchievementSearchModel model) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + _logger.LogInformation("ReadElement.Id:{ Id}", model.Id); + var element = _AchievementStorage.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(AchievementBindingModel model) + { + CheckModel(model); + if (_AchievementStorage.Insert(model) == null) + { + _logger.LogWarning("Insert operation failed"); + return false; + } + return true; + + } + + public bool Update(AchievementBindingModel model) + { + CheckModel(model); + if (_AchievementStorage.Update(model) == null) + { + _logger.LogWarning("Update operation failed"); + return false; + } + return true; + } + public bool Delete(AchievementBindingModel model) + { + CheckModel(model); + _logger.LogInformation("Delete. Id:{Id}", model.Id); + if (_AchievementStorage.Delete(model) == null) + { + _logger.LogWarning("Delete operation failed"); + return false; + } + return true; + } + + private void CheckModel(AchievementBindingModel model) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + if (string.IsNullOrEmpty(model.Name)) + { + throw new ArgumentNullException("Нет названия достижения", + nameof(model.Name)); + } + if (string.IsNullOrEmpty(model.Description)) + { + throw new ArgumentNullException("Нет описания достижения", + nameof(model.Description)); + } + _logger.LogInformation("Achievement. Id:{Id}. LessonId:{LessonId}. Name:{Name}. Description:{Description} .ReceiptDate{ReceiptDate}", model.Id, model.LessonId, model.Name, model.Description, model.ReceiptDate); + } + } +} diff --git a/School/SchoolBusinessLogic/BusinessLogic/InterestLogic.cs b/School/SchoolBusinessLogic/BusinessLogic/InterestLogic.cs new file mode 100644 index 0000000..fb80c02 --- /dev/null +++ b/School/SchoolBusinessLogic/BusinessLogic/InterestLogic.cs @@ -0,0 +1,117 @@ +using Microsoft.Extensions.Logging; +using SchoolContracts.BindingModels; +using SchoolContracts.BusinessLogicsContracts; +using SchoolContracts.SearchModels; +using SchoolContracts.StoragesContracts; +using SchoolContracts.ViewModels; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SchoolBusinessLogic.BusinessLogic +{ + public class InterestLogic : IInterestLogic + { + private readonly ILogger _logger; + private readonly IInterestStorage _InterestStorage; + public InterestLogic(ILogger logger, IInterestStorage + InterestStorage) + { + _logger = logger; + _InterestStorage = InterestStorage; + } + public List? ReadList(InterestSearchModel? model) + { + _logger.LogInformation("ReadList. InterestName:{InterestName}.Id:{ Id}", model?.Name, model?.Id); + var list = model == null ? _InterestStorage.GetFullList() : + _InterestStorage.GetFilteredList(model); + if (list == null) + { + _logger.LogWarning("ReadList return null list"); + return null; + } + _logger.LogInformation("ReadList. Count:{Count}", list?.Count); + return list; + } + public InterestViewModel? ReadElement(InterestSearchModel model) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + _logger.LogInformation("ReadElement. InterestName:{InterestName}.Id:{ Id}", model.Name, model.Id); + var element = _InterestStorage.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(InterestBindingModel model) + { + CheckModel(model); + if (_InterestStorage.Insert(model) == null) + { + _logger.LogWarning("Insert operation failed"); + return false; + } + return true; + } + public bool Update(InterestBindingModel model) + { + CheckModel(model); + if (_InterestStorage.Update(model) == null) + { + _logger.LogWarning("Update operation failed"); + return false; + } + return true; + } + public bool Delete(InterestBindingModel model) + { + CheckModel(model, false); + _logger.LogInformation("Delete. Id:{Id}", model.Id); + if (_InterestStorage.Delete(model) == null) + { + _logger.LogWarning("Delete operation failed"); + return false; + } + return true; + } + private void CheckModel(InterestBindingModel 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.Direction)) + { + throw new ArgumentNullException("Нет направления интереса", + nameof(model.Direction)); + } + _logger.LogInformation("Interest. InterestName:{InterestName}.Direction:{Direction}. Id: { Id}", model.Name, model.Direction, model.Id); + var element = _InterestStorage.GetElement(new InterestSearchModel + { + Name = model.Name + }); + if (element != null && element.Id != model.Id) + { + throw new InvalidOperationException("Интерес с таким названием уже есть"); + } + } + } + } diff --git a/School/SchoolBusinessLogic/BusinessLogic/LessonLogic.cs b/School/SchoolBusinessLogic/BusinessLogic/LessonLogic.cs new file mode 100644 index 0000000..f275182 --- /dev/null +++ b/School/SchoolBusinessLogic/BusinessLogic/LessonLogic.cs @@ -0,0 +1,107 @@ +using Microsoft.Extensions.Logging; +using SchoolContracts.BindingModels; +using SchoolContracts.BusinessLogicsContracts; +using SchoolContracts.SearchModels; +using SchoolContracts.StoragesContracts; +using SchoolContracts.ViewModels; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SchoolBusinessLogic.BusinessLogic +{ + public class LessonLogic : ILessonLogic + { + private readonly ILogger _logger; + private readonly ILessonStorage _LessonStorage; + + public LessonLogic(ILogger logger, ILessonStorage LessonStorage) + { + _logger = logger; + _LessonStorage = LessonStorage; + } + + public List? ReadList(LessonSearchModel? model) + { + _logger.LogInformation("ReadList. LessonId:{Id}", model?.Id); + var list = model == null ? _LessonStorage.GetFullList() : _LessonStorage.GetFilteredList(model); + if (list == null) + { + _logger.LogWarning("ReadList return null list"); + return null; + } + _logger.LogInformation("ReadList. Count:{Count}", list.Count); + return list; + } + + public LessonViewModel? ReadElement(LessonSearchModel model) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + _logger.LogInformation("ReadElement.Id:{ Id}", model.Id); + var element = _LessonStorage.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(LessonBindingModel model) + { + CheckModel(model); + if (_LessonStorage.Insert(model) == null) + { + _logger.LogWarning("Insert operation failed"); + return false; + } + return true; + + } + + public bool Update(LessonBindingModel model) + { + CheckModel(model); + if (_LessonStorage.Update(model) == null) + { + _logger.LogWarning("Update operation failed"); + return false; + } + return true; + } + public bool Delete(LessonBindingModel model) + { + CheckModel(model); + _logger.LogInformation("Delete. Id:{Id}", model.Id); + if (_LessonStorage.Delete(model) == null) + { + _logger.LogWarning("Delete operation failed"); + return false; + } + return true; + } + + private void CheckModel(LessonBindingModel model) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + if (model.TimeStart >= model.TimeEnd) + { + throw new ArgumentNullException("Занятие должно начинаться раньше чем заканчивается"); + } + _logger.LogInformation("Lesson. Id:{Id}. UserId:{UserId}. TimeStart:{TimeStart}. TimeEnd:{TimeEnd}", model.Id, model.UserId, model.TimeStart, model.TimeEnd); + } + + + } +} diff --git a/School/SchoolBusinessLogic/BusinessLogic/UserLogic.cs b/School/SchoolBusinessLogic/BusinessLogic/UserLogic.cs new file mode 100644 index 0000000..5ec89c1 --- /dev/null +++ b/School/SchoolBusinessLogic/BusinessLogic/UserLogic.cs @@ -0,0 +1,127 @@ +using Microsoft.Extensions.Logging; +using SchoolContracts.BindingModels; +using SchoolContracts.BusinessLogicsContracts; +using SchoolContracts.SearchModels; +using SchoolContracts.StoragesContracts; +using SchoolContracts.ViewModels; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SchoolBusinessLogic.BusinessLogic +{ + public class UserLogic : IUserLogic + { + private readonly ILogger _logger; + private readonly IUserStorage _UserStorage; + public UserLogic(ILogger logger, IUserStorage + UserStorage) + { + _logger = logger; + _UserStorage = UserStorage; + } + public List? ReadList(UserSearchModel? model) + { + _logger.LogInformation("ReadList. UserName:{UserName}.Id:{ Id}", model?.Name, model?.Id); + var list = model == null ? _UserStorage.GetFullList() : + _UserStorage.GetFilteredList(model); + if (list == null) + { + _logger.LogWarning("ReadList return null list"); + return null; + } + _logger.LogInformation("ReadList. Count:{Count}", list?.Count); + return list; + } + public UserViewModel? ReadElement(UserSearchModel model) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + _logger.LogInformation("ReadElement. UserName:{Name}.Id:{ Id}", model.Name, model.Id); + var element = _UserStorage.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(UserBindingModel model) + { + CheckModel(model); + if (_UserStorage.Insert(model) == null) + { + _logger.LogWarning("Insert operation failed"); + return false; + } + return true; + } + public bool Update(UserBindingModel model) + { + CheckModel(model); + if (_UserStorage.Update(model) == null) + { + _logger.LogWarning("Update operation failed"); + return false; + } + return true; + } + public bool Delete(UserBindingModel model) + { + CheckModel(model, false); + _logger.LogInformation("Delete. Id:{Id}", model.Id); + if (_UserStorage.Delete(model) == null) + { + _logger.LogWarning("Delete operation failed"); + return false; + } + return true; + } + private void CheckModel(UserBindingModel 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.Mail)) + { + throw new ArgumentNullException("Нет электронной почты", + nameof(model.Mail)); + } + if (string.IsNullOrEmpty(model.PhoneNumber)) + { + throw new ArgumentNullException("Нет номера телефона", + nameof(model.PhoneNumber)); + } + if (string.IsNullOrEmpty(model.Password)) + { + throw new ArgumentNullException("Нет пароля пользователя", + nameof(model.Password)); + } + _logger.LogInformation("User. UserName:{UserName}.Birthdate:{ BirthDate}. Mail:{ Mail}. PhoneNumber{ PhoneNumber} Id: { Id}", model.Name, model.BirthDate, model.Mail, model.PhoneNumber, model.Id); + var element = _UserStorage.GetElement(new UserSearchModel + { + Name = model.Name + }); + if (element != null && element.Id != model.Id) + { + throw new InvalidOperationException("Пользователь с таким именем уже есть"); + } + } + } +} diff --git a/School/SchoolBusinessLogic/SchoolBusinessLogic.csproj b/School/SchoolBusinessLogic/SchoolBusinessLogic.csproj new file mode 100644 index 0000000..d8e0d45 --- /dev/null +++ b/School/SchoolBusinessLogic/SchoolBusinessLogic.csproj @@ -0,0 +1,17 @@ + + + + net6.0 + enable + enable + + + + + + + + + + +