diff --git a/University/UniversityBuisnessLogic/BuisnessLogic/ActivityLogic.cs b/University/UniversityBuisnessLogic/BuisnessLogic/ActivityLogic.cs new file mode 100644 index 0000000..a145745 --- /dev/null +++ b/University/UniversityBuisnessLogic/BuisnessLogic/ActivityLogic.cs @@ -0,0 +1,102 @@ +using UniversityContracts.BindingModels; +using UniversityContracts.BuisnessLogicContracts; +using UniversityContracts.SearchModels; +using UniversityContracts.StoragesContracts; +using UniversityContracts.ViewModels; +using Microsoft.Extensions.Logging; + +namespace UniversityBuisnessLogic.BuisnessLogic +{ + public class ActivityLogic : IActivityLogic + { + private readonly ILogger _logger; + private readonly IActivityStorage _activityStorage; + + public ActivityLogic(ILogger logger, IActivityStorage activityStorage) + { + _logger = logger; + _activityStorage = activityStorage; + } + public bool Create(ActivityBindingModel model) + { + CheckModel(model); + if (_activityStorage.Insert(model) == null) + { + _logger.LogWarning("Insert operation failed"); + return false; + } + return true; + } + + public bool Delete(ActivityBindingModel model) + { + CheckModel(model, false); + _logger.LogInformation("Delete. Id:{Id}", model.Id); + if (_activityStorage.Delete(model) == null) + { + _logger.LogWarning("Delete operation failed"); + return false; + } + return true; + } + + public ActivityViewModel? ReadElement(ActivitySearchModel model) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + _logger.LogInformation("ReadElement. Id:{Id}", model.Id); + var element = _activityStorage.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? ReadList(ActivitySearchModel? model) + { + _logger.LogInformation("ReadList. Id:{Id}", model?.Id); + var list = model == null ? _activityStorage.GetFullList() : _activityStorage.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(ActivityBindingModel model) + { + CheckModel(model); + if (_activityStorage.Update(model) == null) + { + _logger.LogWarning("Update operation failed"); + return false; + } + return true; + } + + private void CheckModel(ActivityBindingModel model, bool withParams = true) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + if (!withParams) + { + return; + } + if (model.Number <= 0) + { + throw new ArgumentNullException("Номер занятия должен быть больше 0", nameof(model.Number)); + } + + _logger.LogInformation("Activity. Number:{ComponentName}. Id: {Id}", model.Number, model.Id); + } + } +} diff --git a/University/UniversityBuisnessLogic/BuisnessLogic/DisciplineLogic.cs b/University/UniversityBuisnessLogic/BuisnessLogic/DisciplineLogic.cs new file mode 100644 index 0000000..af96521 --- /dev/null +++ b/University/UniversityBuisnessLogic/BuisnessLogic/DisciplineLogic.cs @@ -0,0 +1,117 @@ +using UniversityContracts.BindingModels; +using UniversityContracts.BuisnessLogicContracts; +using UniversityContracts.SearchModels; +using UniversityContracts.StoragesContracts; +using UniversityContracts.ViewModels; +using Microsoft.Extensions.Logging; + +namespace UniversityBuisnessLogic.BuisnessLogic +{ + public class DisciplineLogic : IDisciplineLogic + { + private readonly ILogger _logger; + private readonly IDisciplineStorage _disciplineStorage; + + public DisciplineLogic(ILogger logger, IDisciplineStorage disciplineStorage) + { + _logger = logger; + _disciplineStorage = disciplineStorage; + } + + public bool Create(DisciplineBindingModel model) + { + CheckModel(model); + if (_disciplineStorage.Insert(model) == null) + { + _logger.LogWarning("Insert operation failed"); + return false; + } + return true; + } + + public bool Delete(DisciplineBindingModel model) + { + CheckModel(model, false); + _logger.LogInformation("Delete. Id:{Id}", model.Id); + if (_disciplineStorage.Delete(model) == null) + { + _logger.LogWarning("Delete operation failed"); + return false; + } + return true; + } + + public DisciplineViewModel? ReadElement(DisciplineSearchModel model) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + _logger.LogInformation("ReadElement. DisciplineName:{Name}. Id:{Id}", model.Name, model.Id); + var element = _disciplineStorage.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? ReadList(DisciplineSearchModel? model) + { + _logger.LogInformation("ReadList. DisciplineName: {Name}. Id:{Id}", model?.Name, model?.Id); + var list = model == null ? _disciplineStorage.GetFullList() : _disciplineStorage.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(DisciplineBindingModel model) + { + CheckModel(model); + if (_disciplineStorage.Update(model) == null) + { + _logger.LogWarning("Update operation failed"); + return false; + } + return true; + } + + private void CheckModel(DisciplineBindingModel 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.Department)) + { + throw new ArgumentNullException("Нет названия кафедры", nameof(model.Name)); + } + + _logger.LogInformation("Discipline. Name:{Name}. Department:{Department}. Id: {Id}", model.Name, model.Department, model.Id); + + var element = _disciplineStorage.GetElement(new DisciplineSearchModel + { + Name = model.Name + }); + + if (element != null && element.Id != model.Id) + { + throw new InvalidOperationException("Дисциплина с таким названием уже есть"); + } + } + } +} diff --git a/University/UniversityBuisnessLogic/BuisnessLogic/ExaminationResultLogic.cs b/University/UniversityBuisnessLogic/BuisnessLogic/ExaminationResultLogic.cs new file mode 100644 index 0000000..51657c3 --- /dev/null +++ b/University/UniversityBuisnessLogic/BuisnessLogic/ExaminationResultLogic.cs @@ -0,0 +1,103 @@ +using UniversityContracts.BindingModels; +using UniversityContracts.BuisnessLogicContracts; +using UniversityContracts.SearchModels; +using UniversityContracts.StoragesContracts; +using UniversityContracts.ViewModels; +using Microsoft.Extensions.Logging; + +namespace UniversityBuisnessLogic.BuisnessLogic +{ + public class ExaminationResultLogic : IExaminationResultLogic + { + private readonly ILogger _logger; + private readonly IExaminationResultStorage _examinationResultStorage; + + public ExaminationResultLogic(ILogger logger, IExaminationResultStorage examinationResultStorage) + { + _logger = logger; + _examinationResultStorage = examinationResultStorage; + } + + public bool Create(ExaminationResultBindingModel model) + { + CheckModel(model); + if (_examinationResultStorage.Insert(model) == null) + { + _logger.LogWarning("Insert operation failed"); + return false; + } + return true; + } + + public bool Delete(ExaminationResultBindingModel model) + { + CheckModel(model, false); + _logger.LogInformation("Delete. Id:{Id}", model.Id); + if (_examinationResultStorage.Delete(model) == null) + { + _logger.LogWarning("Delete operation failed"); + return false; + } + return true; + } + + public ExaminationResultViewModel? ReadElement(ExaminationResultSearchModel model) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + _logger.LogInformation("ReadElement. Id:{Id}", model.Id); + var element = _examinationResultStorage.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? ReadList(ExaminationResultSearchModel? model) + { + _logger.LogInformation("ReadList. Id:{Id}", model?.Id); + var list = model == null ? _examinationResultStorage.GetFullList() : _examinationResultStorage.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(ExaminationResultBindingModel model) + { + CheckModel(model); + if (_examinationResultStorage.Update(model) == null) + { + _logger.LogWarning("Update operation failed"); + return false; + } + return true; + } + + private void CheckModel(ExaminationResultBindingModel model, bool withParams = true) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + if (!withParams) + { + return; + } + if (string.IsNullOrEmpty(model.ExaminationForm)) + { + throw new ArgumentNullException("Нет формы испытания", nameof(model.ExaminationForm)); + } + + _logger.LogInformation("ExaminationResult. ExaminationForm: {ExaminationForm}. Id: {Id}", model.ExaminationForm, model.Id); + } + } +} diff --git a/University/UniversityBuisnessLogic/BuisnessLogic/ReportTypeLogic.cs b/University/UniversityBuisnessLogic/BuisnessLogic/ReportTypeLogic.cs new file mode 100644 index 0000000..d7120ee --- /dev/null +++ b/University/UniversityBuisnessLogic/BuisnessLogic/ReportTypeLogic.cs @@ -0,0 +1,112 @@ +using UniversityContracts.BindingModels; +using UniversityContracts.BuisnessLogicContracts; +using UniversityContracts.SearchModels; +using UniversityContracts.StoragesContracts; +using UniversityContracts.ViewModels; +using Microsoft.Extensions.Logging; + +namespace UniversityBuisnessLogic.BuisnessLogic +{ + public class ReportTypeLogic : IReportTypeLogic + { + private readonly ILogger _logger; + private readonly IReportTypeStorage _reportTypeStorage; + + public ReportTypeLogic(ILogger logger, IReportTypeStorage reportTypeStorage) + { + _logger = logger; + _reportTypeStorage = reportTypeStorage; + } + + public bool Create(ReportTypeBindingModel model) + { + CheckModel(model); + if (_reportTypeStorage.Insert(model) == null) + { + _logger.LogWarning("Insert operation failed"); + return false; + } + return true; + } + + public bool Delete(ReportTypeBindingModel model) + { + CheckModel(model, false); + _logger.LogInformation("Delete. Id:{Id}", model.Id); + if (_reportTypeStorage.Delete(model) == null) + { + _logger.LogWarning("Delete operation failed"); + return false; + } + return true; + } + + public ReportTypeViewModel? ReadElement(ReportTypeSearchModel model) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + _logger.LogInformation("ReadElement. ReportTypeName: {Name}. Id:{Id}", model.Name, model.Id); + var element = _reportTypeStorage.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? ReadList(ReportTypeSearchModel? model) + { + _logger.LogInformation("ReadList. ReportTypeName: {Name}. Id:{Id}", model?.Name, model?.Id); + var list = model == null ? _reportTypeStorage.GetFullList() : _reportTypeStorage.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(ReportTypeBindingModel model) + { + CheckModel(model); + if (_reportTypeStorage.Update(model) == null) + { + _logger.LogWarning("Update operation failed"); + return false; + } + return true; + } + + private void CheckModel(ReportTypeBindingModel 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)); + } + + _logger.LogInformation("ReportType. ReportName:{Name}. Id: { Id}", model.Name, model.Id); + var element = _reportTypeStorage.GetElement(new ReportTypeSearchModel + { + Name = model.Name, + }); + + if (element != null && element.Id != model.Id) + { + throw new InvalidOperationException("Тип отчета с таким названием уже есть"); + } + } + } +} diff --git a/University/UniversityBuisnessLogic/BuisnessLogic/StatementLogic.cs b/University/UniversityBuisnessLogic/BuisnessLogic/StatementLogic.cs new file mode 100644 index 0000000..e834537 --- /dev/null +++ b/University/UniversityBuisnessLogic/BuisnessLogic/StatementLogic.cs @@ -0,0 +1,101 @@ +using UniversityContracts.BindingModels; +using UniversityContracts.BuisnessLogicContracts; +using UniversityContracts.SearchModels; +using UniversityContracts.StoragesContracts; +using UniversityContracts.ViewModels; +using Microsoft.Extensions.Logging; + +namespace UniversityBuisnessLogic.BuisnessLogic +{ + public class StatementLogic : IStatementLogic + { + private readonly ILogger _logger; + private readonly IStatementStorage _statementStorage; + + public StatementLogic(ILogger logger, IStatementStorage statementStorage) + { + _logger = logger; + _statementStorage = statementStorage; + } + public bool Create(StatementBindingModel model) + { + CheckModel(model); + if (_statementStorage.Insert(model) == null) + { + _logger.LogWarning("Insert operation failed"); + return false; + } + return true; + } + + public bool Delete(StatementBindingModel model) + { + CheckModel(model, false); + _logger.LogInformation("Delete. Id:{Id}", model.Id); + if (_statementStorage.Delete(model) == null) + { + _logger.LogWarning("Delete operation failed"); + return false; + } + return true; + } + + public StatementViewModel? ReadElement(StatementSearchModel model) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + _logger.LogInformation("ReadElement. Id:{Id}", model.Id); + var element = _statementStorage.GetElement(model); + if (element == null) + { + _logger.LogWarning("ReadElement element not found"); + return null; + } + _logger.LogInformation("ReadElement find. Id:{Id}", element.Id); + return element; + } + f + public List? ReadList(StatementSearchModel? model) + { + _logger.LogInformation("ReadList. Id:{Id}", model?.Id); + var list = model == null ? _statementStorage.GetFullList() : _statementStorage.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(StatementBindingModel model) + { + CheckModel(model); + if (_statementStorage.Update(model) == null) + { + _logger.LogWarning("Update operation failed"); + return false; + } + return true; + } + + private void CheckModel(StatementBindingModel model, bool withParams = true) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + if (!withParams) + { + return; + } + if (model.HoursCount <= 0) + { + throw new ArgumentNullException("Количество часов в ведомости должно быть больше 0", nameof(model.HoursCount)); + } + _logger.LogInformation("Statement. HoursCount:{HoursCount}. Id: { Id}", model.HoursCount, model.Id); + } + } +} diff --git a/University/UniversityBuisnessLogic/BuisnessLogic/StudentLogic.cs b/University/UniversityBuisnessLogic/BuisnessLogic/StudentLogic.cs new file mode 100644 index 0000000..08145a7 --- /dev/null +++ b/University/UniversityBuisnessLogic/BuisnessLogic/StudentLogic.cs @@ -0,0 +1,101 @@ +using UniversityContracts.BindingModels; +using UniversityContracts.BuisnessLogicContracts; +using UniversityContracts.SearchModels; +using UniversityContracts.StoragesContracts; +using UniversityContracts.ViewModels; +using Microsoft.Extensions.Logging; + +namespace UniversityBuisnessLogic.BuisnessLogic +{ + public class StudentLogic : IStudentLogic + { + private readonly ILogger _logger; + private readonly IStudentStorage _studentStorage; + + public StudentLogic(ILogger logger, IStudentStorage studentStorage) + { + _logger = logger; + _studentStorage = studentStorage; + } + public bool Create(StudentBindingModel model) + { + CheckModel(model); + if (_studentStorage.Insert(model) == null) + { + _logger.LogWarning("Insert 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; + } + + public StudentViewModel? ReadElement(StudentSearchModel model) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + _logger.LogInformation("ReadElement. StudentName: {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 List? ReadList(StudentSearchModel? model) + { + _logger.LogInformation("ReadList. StudentName: {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 bool Update(StudentBindingModel model) + { + CheckModel(model); + if (_studentStorage.Update(model) == null) + { + _logger.LogWarning("Update 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)); + } + + _logger.LogInformation("Student. Name:{Name}. Id: { Id}", model.Name, model.Id); + } + } +} diff --git a/University/UniversityBuisnessLogic/BuisnessLogic/UserLogic.cs b/University/UniversityBuisnessLogic/BuisnessLogic/UserLogic.cs new file mode 100644 index 0000000..f59dbd0 --- /dev/null +++ b/University/UniversityBuisnessLogic/BuisnessLogic/UserLogic.cs @@ -0,0 +1,130 @@ +using UniversityContracts.BindingModels; +using UniversityContracts.BuisnessLogicContracts; +using UniversityContracts.SearchModels; +using UniversityContracts.StoragesContracts; +using UniversityContracts.ViewModels; +using Microsoft.Extensions.Logging; + +namespace UniversityBuisnessLogic.BuisnessLogic +{ + public class UserLogic : IUserLogic + { + private readonly ILogger _logger; + private readonly IUserStorage _userStorage; + + public UserLogic(ILogger logger, IUserStorage userStorage) + { + _logger = logger; + _userStorage = userStorage; + } + + public bool Create(UserBindingModel model) + { + CheckModel(model); + if (_userStorage.Insert(model) == null) + { + _logger.LogWarning("Insert 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; + } + + public UserViewModel? ReadElement(UserSearchModel model) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + _logger.LogInformation("ReadElement. Id:{Id}", 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 List? ReadList(UserSearchModel? model) + { + _logger.LogInformation("ReadList. Id:{Id}", 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 bool Update(UserBindingModel model) + { + CheckModel(model); + if (_userStorage.Update(model) == null) + { + _logger.LogWarning("Update 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.Surname)) + { + throw new ArgumentNullException("Нет фамилии пользователя", nameof(model.Name)); + } + if (string.IsNullOrEmpty(model.Login)) + { + throw new ArgumentNullException("Нет логина", nameof(model.Name)); + } + if (string.IsNullOrEmpty(model.Password)) + { + throw new ArgumentNullException("Нет фамилии пароля", nameof(model.Name)); + } + else if (model.Password.Length < 6) + { + throw new ArgumentNullException("В пароле должно быть не менее 6 символов", nameof(model.Name)); + } + + _logger.LogInformation("User. Name:{Name}. Surname:{Surname}. Login: {Login} " + + "Password: {Password}. Id: {Id}", model.Name, model.Surname, model.Login, model.Password, model.Id); + + var element = _userStorage.GetElement(new UserSearchModel + { + Login = model.Login, + }); + + if (element != null && element.Id != model.Id) + { + throw new InvalidOperationException("Пользователь с таким логином уже есть"); + } + } + } +}