From 105f89548f5c15c909b57a38af7e310e5de833e4 Mon Sep 17 00:00:00 2001 From: AnnZhimol Date: Thu, 18 May 2023 23:11:30 +0400 Subject: [PATCH] =?UTF-8?q?=D0=BF=D0=BE=D0=BF=D1=80=D0=B0=D0=B2=D0=BE?= =?UTF-8?q?=D1=87=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BusinessLogics/ConferenceLogic.cs | 40 +++++++++++++++++-- .../BusinessLogics/MealPlanLogic.cs | 40 +++++++++++++++++-- .../Implemets/ConferenceStorage.cs | 2 +- 3 files changed, 73 insertions(+), 9 deletions(-) diff --git a/Hotel/HotelBusinessLogic/BusinessLogics/ConferenceLogic.cs b/Hotel/HotelBusinessLogic/BusinessLogics/ConferenceLogic.cs index b7bba28..bf0a2a3 100644 --- a/Hotel/HotelBusinessLogic/BusinessLogics/ConferenceLogic.cs +++ b/Hotel/HotelBusinessLogic/BusinessLogics/ConferenceLogic.cs @@ -1,4 +1,5 @@ -using HotelContracts.BindingModels; +using HotelBusinessLogic.MailWorker; +using HotelContracts.BindingModels; using HotelContracts.BusinessLogicsContracts; using HotelContracts.SearchModels; using HotelContracts.StoragesContracts; @@ -13,23 +14,31 @@ namespace HotelBusinessLogic.BusinessLogics { private readonly ILogger _logger; private readonly IConferenceStorage _conferenceStorage; + private readonly AbstractMailWorker _mailWorker; + private readonly IOrganiserLogic _organiserLogic; - public ConferenceLogic(ILogger logger, IConferenceStorage conferenceStorage) + public ConferenceLogic(ILogger logger, IConferenceStorage conferenceStorage, IOrganiserLogic organiserLogic, AbstractMailWorker mailWorker) { _logger = logger; _conferenceStorage = conferenceStorage; + _organiserLogic = organiserLogic; + _mailWorker = mailWorker; } public bool Create(ConferenceBindingModel model) { CheckModel(model); model.ConferenceMembers = new(); - if (_conferenceStorage.Insert(model) == null) + var result = _conferenceStorage.Insert(model); + + if (result == null) { _logger.LogWarning("Insert operation failed"); return false; } + SendConferenceMessage(result.OrganiserId, $"Гостиница \"Развитие\", Конференция №{result.Id}", $"Конференция №{result.Id} под названием {result.ConferenceName} и датой начала {result.StartDate} добавлена"); + return true; } @@ -39,12 +48,16 @@ namespace HotelBusinessLogic.BusinessLogics _logger.LogInformation("Delete. Id:{Id}", model.Id); - if (_conferenceStorage.Delete(model) == null) + var result = _conferenceStorage.Delete(model); + + if (result == null) { _logger.LogWarning("Delete operation failed"); return false; } + SendConferenceMessage(result.OrganiserId, $"Гостиница \"Развитие\", Конференция №{result.Id}", $"Конференция №{result.Id} под названием {result.ConferenceName} и датой начала {result.StartDate} удалена"); + return true; } @@ -152,5 +165,24 @@ namespace HotelBusinessLogic.BusinessLogics _logger.LogInformation("Conference. ConferenceName:{ConferenceName}.StartDate:{ StartDate}. Id: { Id}", model.ConferenceName, model.StartDate, model.Id); } + + private bool SendConferenceMessage(int organiserId, string subject, string text) + { + var organiser = _organiserLogic.ReadElement(new() { Id = organiserId }); + + if (organiser == null) + { + return false; + } + + _mailWorker.MailSendAsync(new() + { + MailAddress = organiser.OrganiserEmail, + Subject = subject, + Text = text + }); + + return true; + } } } diff --git a/Hotel/HotelBusinessLogic/BusinessLogics/MealPlanLogic.cs b/Hotel/HotelBusinessLogic/BusinessLogics/MealPlanLogic.cs index dd1dc98..3990f7d 100644 --- a/Hotel/HotelBusinessLogic/BusinessLogics/MealPlanLogic.cs +++ b/Hotel/HotelBusinessLogic/BusinessLogics/MealPlanLogic.cs @@ -1,4 +1,5 @@ -using HotelContracts.BindingModels; +using HotelBusinessLogic.MailWorker; +using HotelContracts.BindingModels; using HotelContracts.BusinessLogicsContracts; using HotelContracts.SearchModels; using HotelContracts.StoragesContracts; @@ -12,11 +13,15 @@ namespace HotelBusinessLogic.BusinessLogics { private readonly ILogger _logger; private readonly IMealPlanStorage _mealPlanStorage; + private readonly AbstractMailWorker _mailWorker; + private readonly IOrganiserLogic _organiserLogic; - public MealPlanLogic(ILogger logger, IMealPlanStorage mealPlanStorage) + public MealPlanLogic(ILogger logger, IMealPlanStorage mealPlanStorage, IOrganiserLogic organiserLogic, AbstractMailWorker mailWorker) { _logger = logger; _mealPlanStorage = mealPlanStorage; + _organiserLogic = organiserLogic; + _mailWorker= mailWorker; } public bool AddMemberToMealPlan(MealPlanSearchModel model, IMemberModel member) @@ -56,12 +61,16 @@ namespace HotelBusinessLogic.BusinessLogics CheckModel(model); model.MealPlanMembers = new(); - if (_mealPlanStorage.Insert(model) == null) + var result = _mealPlanStorage.Insert(model); + + if (result == null) { _logger.LogWarning("Insert operation failed"); return false; } + SendMealPlanMessage(result.OrganiserId, $"Гостиница \"Развитие\", План питания №{result.Id}", $"План питания №{result.Id} под названием {result.MealPlanName} и стоимостью {result.MealPlanPrice} добавлен"); + return true; } @@ -71,12 +80,16 @@ namespace HotelBusinessLogic.BusinessLogics _logger.LogInformation("Delete. Id:{Id}", model.Id); - if (_mealPlanStorage.Delete(model) == null) + var result = _mealPlanStorage.Delete(model); + + if (result== null) { _logger.LogWarning("Delete operation failed"); return false; } + SendMealPlanMessage(result.OrganiserId, $"Гостиница \"Развитие\", План питания №{result.Id}", $"План питания №{result.Id} под названием {result.MealPlanName} и стоимостью {result.MealPlanPrice} удален"); + return true; } @@ -166,5 +179,24 @@ namespace HotelBusinessLogic.BusinessLogics throw new InvalidOperationException("План питания с таким названием уже есть"); } } + + private bool SendMealPlanMessage(int organiserId, string subject, string text) + { + var organiser = _organiserLogic.ReadElement(new() { Id = organiserId }); + + if (organiser == null) + { + return false; + } + + _mailWorker.MailSendAsync(new() + { + MailAddress = organiser.OrganiserEmail, + Subject = subject, + Text = text + }); + + return true; + } } } diff --git a/Hotel/HotelDataBaseImplement/Implemets/ConferenceStorage.cs b/Hotel/HotelDataBaseImplement/Implemets/ConferenceStorage.cs index 7543766..c083bca 100644 --- a/Hotel/HotelDataBaseImplement/Implemets/ConferenceStorage.cs +++ b/Hotel/HotelDataBaseImplement/Implemets/ConferenceStorage.cs @@ -65,7 +65,7 @@ namespace HotelDataBaseImplement.Implemets .ThenInclude(x => x.MealPlan) .Include(x => x.ConferenceBookings) .Include(x => x.Organiser) - .Where(x => x.StartDate >= model.DateFrom && x.StartDate <= model.DateTo) + .Where(x => x.StartDate >= model.DateFrom && x.StartDate <= model.DateTo && x.OrganiserId == model.OrganiserId) .Select(x => x.GetViewModel) .ToList(); }