добавила в ордер логику метод отправки сообщения на почту :)

This commit is contained in:
Елена Бакальская 2024-05-05 14:28:04 +04:00
parent 7fd7890a53
commit e80dc53d6f
3 changed files with 48 additions and 6 deletions

View File

@ -28,8 +28,8 @@ namespace SushiBarBusinessLogic.MailWorker
_smtpClientPort = config.SmtpClientPort; _smtpClientPort = config.SmtpClientPort;
_popHost = config.PopHost; _popHost = config.PopHost;
_popPort = config.PopPort; _popPort = config.PopPort;
_logger.LogDebug("Config: {login}, {password}, {clientHost}, {clientPOrt}, {popHost}, {popPort}", _logger.LogDebug($"Config: {_mailLogin}, {_mailPassword}, " +
_mailLogin, _mailPassword, _smtpClientHost, _smtpClientPort, _popHost, _popPort); $"{_smtpClientHost}, {_smtpClientPort}, {_popHost}, {_popPort}");
} }
public async void MailSendAsync(MailSendInfoBindingModel info) public async void MailSendAsync(MailSendInfoBindingModel info)
{ {

View File

@ -71,6 +71,5 @@ namespace SushiBarBusinessLogic.MailWorker
}); });
return list; return list;
} }
} }
} }

View File

@ -6,6 +6,7 @@ using SushiBarContracts.ViewModels;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using SushiBarDataModels.Enums; using SushiBarDataModels.Enums;
using System.Xml.Linq; using System.Xml.Linq;
using SushiBarBusinessLogic.MailWorker;
namespace SushiBarBusinessLogic.BusinessLogic namespace SushiBarBusinessLogic.BusinessLogic
{ {
@ -13,12 +14,17 @@ namespace SushiBarBusinessLogic.BusinessLogic
{ {
private readonly ILogger _logger; private readonly ILogger _logger;
private readonly IOrderStorage _orderStorage; private readonly IOrderStorage _orderStorage;
private readonly IClientStorage clientStorage;
private readonly AbstractMailWorker abstractMailWorker;
static readonly object blocking = new object(); static readonly object blocking = new object();
public OrderLogic(ILogger<OrderLogic> logger, IOrderStorage orderStorage) public OrderLogic(ILogger<OrderLogic> logger, IOrderStorage orderStorage,
IClientStorage clientStorage, AbstractMailWorker abstractMailWorker)
{ {
_logger = logger; _logger = logger;
_orderStorage = orderStorage; _orderStorage = orderStorage;
this.clientStorage = clientStorage;
this.abstractMailWorker = abstractMailWorker;
} }
public OrderViewModel? ReadElement(OrderSearchModel model) public OrderViewModel? ReadElement(OrderSearchModel model)
@ -86,8 +92,7 @@ namespace SushiBarBusinessLogic.BusinessLogic
{ {
CheckModel(model, false); CheckModel(model, false);
var order = _orderStorage.GetElement(new OrderSearchModel { Id = model.Id }); var order = _orderStorage.GetElement(new OrderSearchModel { Id = model.Id });
if (order.ImplementerId.HasValue)
model.ImplementerId = order.ImplementerId;
if (order == null) if (order == null)
{ {
_logger.LogWarning("Change status operation failed. Order not found"); _logger.LogWarning("Change status operation failed. Order not found");
@ -100,6 +105,9 @@ namespace SushiBarBusinessLogic.BusinessLogic
return false; return false;
} }
if (order.ImplementerId.HasValue)
model.ImplementerId = order.ImplementerId;
model.Status = orderStatus; model.Status = orderStatus;
if (model.Status == OrderStatus.Готов) if (model.Status == OrderStatus.Готов)
@ -115,9 +123,44 @@ namespace SushiBarBusinessLogic.BusinessLogic
_logger.LogWarning("Change status operation failed"); _logger.LogWarning("Change status operation failed");
return false; return false;
} }
var clientView = clientStorage.GetElement(new ClientSearchModel { Id = order.ClientId });
if (clientView != null)
SendMail(clientView, order);
return true; return true;
} }
private void SendMail(ClientViewModel clientView, OrderViewModel orderView)
{
if(clientView == null || orderView == null)
{
return;
}
MailSendInfoBindingModel mailSendInfoBindingModel;
if(orderView.Status == OrderStatus.Принят)
{
mailSendInfoBindingModel = new MailSendInfoBindingModel
{
MailAddress = clientView.Email,
Subject = $"Заказ под номером {orderView.Id}",
Text = $"Ваш заказ под номером {orderView.Id} от {orderView.DateCreate} ценой в {orderView.Sum} " +
$"был принят"
};
}
else
{
mailSendInfoBindingModel = new MailSendInfoBindingModel
{
MailAddress = clientView.Email,
Subject = $"Заказ под номером {orderView.Id}",
Text = $"Ваш заказ под номером {orderView.Id} от {orderView.DateCreate} ценой в {orderView.Sum} " +
$"поменял статус на {orderView.Status}"
};
}
abstractMailWorker.MailSendAsync(mailSendInfoBindingModel);
}
private void CheckModel(OrderBindingModel model, bool withParams = true) private void CheckModel(OrderBindingModel model, bool withParams = true)
{ {
if (model == null) if (model == null)