From 5aaa2bf7dcc69fa010e6bddc19ffea9a1daa4f7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9D=D0=B8=D0=BA=D0=BE=D0=BB=D0=B0=D0=B9?= Date: Sat, 29 Apr 2023 16:48:12 +0400 Subject: [PATCH] =?UTF-8?q?=D0=B4=D1=83=D1=80=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BusinessLogics/MessageInfoLogic.cs | 21 ++++++ .../BindingModels/MessageInfoBindingModel.cs | 4 ++ .../SearchModels/MessageInfoSearchModel.cs | 4 ++ .../StoragesContracts/IMessageInfoStorage.cs | 2 + .../ViewModels/MessageInfoViewModel.cs | 6 ++ .../Implements/MessageInfoStorage.cs | 30 ++++++--- .../Models/EmailMessage.cs | 49 -------------- .../Models/MessageInfo.cs | 65 +++++++++++++++++++ .../Implements/MessageInfoStorage.cs | 5 ++ .../Implements/MessageInfoStorage.cs | 5 ++ 10 files changed, 133 insertions(+), 58 deletions(-) delete mode 100644 FoodOrders/FoodOrdersDatabaseImplement/Models/EmailMessage.cs create mode 100644 FoodOrders/FoodOrdersDatabaseImplement/Models/MessageInfo.cs diff --git a/FoodOrders/FoodOrdersBusinessLogic/BusinessLogics/MessageInfoLogic.cs b/FoodOrders/FoodOrdersBusinessLogic/BusinessLogics/MessageInfoLogic.cs index e9efeb6..371b7b9 100644 --- a/FoodOrders/FoodOrdersBusinessLogic/BusinessLogics/MessageInfoLogic.cs +++ b/FoodOrders/FoodOrdersBusinessLogic/BusinessLogics/MessageInfoLogic.cs @@ -27,6 +27,27 @@ namespace FoodOrdersBusinessLogic.BusinessLogics return true; } + public MessageInfoViewModel? ReadElement(MessageInfoSearchModel model) + { + var res = _messageInfoStorage.GetElement(model); + if (res == null) + { + _logger.LogWarning("Read element operation failed"); + return null; + } + return res; + } + + public bool Update(MessageInfoBindingModel model) + { + if (_messageInfoStorage.Update(model) == null) + { + _logger.LogWarning("Update operation failed"); + return false; + } + return true; + } + public List? ReadList(MessageInfoSearchModel? model) { _logger.LogInformation("ReadList. ClientId:{ClientId}", model?.ClientId); diff --git a/FoodOrders/FoodOrdersContracts/BindingModels/MessageInfoBindingModel.cs b/FoodOrders/FoodOrdersContracts/BindingModels/MessageInfoBindingModel.cs index d3f8521..3b2dde3 100644 --- a/FoodOrders/FoodOrdersContracts/BindingModels/MessageInfoBindingModel.cs +++ b/FoodOrders/FoodOrdersContracts/BindingModels/MessageInfoBindingModel.cs @@ -15,5 +15,9 @@ namespace FoodOrdersContracts.BindingModels public string Body { get; set; } = string.Empty; public DateTime DateDelivery { get; set; } + + public bool HasRead { get; set; } + + public string? Reply { get; set; } } } \ No newline at end of file diff --git a/FoodOrders/FoodOrdersContracts/SearchModels/MessageInfoSearchModel.cs b/FoodOrders/FoodOrdersContracts/SearchModels/MessageInfoSearchModel.cs index 8bdbe19..bfec85f 100644 --- a/FoodOrders/FoodOrdersContracts/SearchModels/MessageInfoSearchModel.cs +++ b/FoodOrders/FoodOrdersContracts/SearchModels/MessageInfoSearchModel.cs @@ -5,5 +5,9 @@ public int? ClientId { get; set; } public string? MessageId { get; set; } + + public int? Page { get; set; } + + public int? PageSize { get; set; } } } \ No newline at end of file diff --git a/FoodOrders/FoodOrdersContracts/StoragesContracts/IMessageInfoStorage.cs b/FoodOrders/FoodOrdersContracts/StoragesContracts/IMessageInfoStorage.cs index ca42e3f..a57c1ae 100644 --- a/FoodOrders/FoodOrdersContracts/StoragesContracts/IMessageInfoStorage.cs +++ b/FoodOrders/FoodOrdersContracts/StoragesContracts/IMessageInfoStorage.cs @@ -13,5 +13,7 @@ namespace FoodOrdersContracts.StoragesContracts MessageInfoViewModel? GetElement(MessageInfoSearchModel model); MessageInfoViewModel? Insert(MessageInfoBindingModel model); + + MessageInfoViewModel? Update(MessageInfoBindingModel model); } } \ No newline at end of file diff --git a/FoodOrders/FoodOrdersContracts/ViewModels/MessageInfoViewModel.cs b/FoodOrders/FoodOrdersContracts/ViewModels/MessageInfoViewModel.cs index 503c1a1..51eb56a 100644 --- a/FoodOrders/FoodOrdersContracts/ViewModels/MessageInfoViewModel.cs +++ b/FoodOrders/FoodOrdersContracts/ViewModels/MessageInfoViewModel.cs @@ -20,5 +20,11 @@ namespace FoodOrdersContracts.ViewModels [DisplayName("Текст")] public string Body { get; set; } = string.Empty; + + [DisplayName("Прочитано")] + public bool HasRead { get; set; } + + [DisplayName("Ответ")] + public string? Reply { get; set; } } } \ No newline at end of file diff --git a/FoodOrders/FoodOrdersDatabaseImplement/Implements/MessageInfoStorage.cs b/FoodOrders/FoodOrdersDatabaseImplement/Implements/MessageInfoStorage.cs index 5ee950a..a2ee9ab 100644 --- a/FoodOrders/FoodOrdersDatabaseImplement/Implements/MessageInfoStorage.cs +++ b/FoodOrders/FoodOrdersDatabaseImplement/Implements/MessageInfoStorage.cs @@ -20,15 +20,15 @@ namespace FoodOrdersDatabaseImplement.Implements public List GetFilteredList(MessageInfoSearchModel model) { - if (!model.ClientId.HasValue) - { - return new(); - } using var context = new FoodOrdersDatabase(); - return context.Messages - .Where(x => x.ClientId == model.ClientId) - .Select(x => x.GetViewModel) - .ToList(); + var res = context.Messages + .Where(x => !model.ClientId.HasValue || x.ClientId == model.ClientId) + .Select(x => x.GetViewModel); + if (!(model.Page.HasValue && model.PageSize.HasValue)) + { + return res.ToList(); + } + return res.Skip((model.Page.Value - 1) * model.PageSize.Value).Take(model.PageSize.Value).ToList(); } public List GetFullList() @@ -50,7 +50,19 @@ namespace FoodOrdersDatabaseImplement.Implements context.Messages.Add(newMessage); context.SaveChanges(); return context.Messages - .FirstOrDefault(x => x.MessageId == newMessage.MessageId)?.GetViewModel; + .FirstOrDefault(x => x.MessageId == newMessage.MessageId)? + .GetViewModel; + } + public MessageInfoViewModel? Update(MessageInfoBindingModel model) + { + using var context = new FoodOrdersDatabase(); + var res = context.Messages.FirstOrDefault(x => x.MessageId.Equals(model.MessageId)); + if (res != null) + { + res.Update(model); + context.SaveChanges(); + } + return res?.GetViewModel; } } } \ No newline at end of file diff --git a/FoodOrders/FoodOrdersDatabaseImplement/Models/EmailMessage.cs b/FoodOrders/FoodOrdersDatabaseImplement/Models/EmailMessage.cs deleted file mode 100644 index 69448eb..0000000 --- a/FoodOrders/FoodOrdersDatabaseImplement/Models/EmailMessage.cs +++ /dev/null @@ -1,49 +0,0 @@ -using FoodOrdersContracts.BindingModels; -using FoodOrdersContracts.ViewModels; -using FoodOrdersDataModels.Models; -using System.ComponentModel.DataAnnotations; - -namespace FoodOrdersDatabaseImplement.Models -{ - public class MessageInfo : IMessageInfoModel - { - [Key] - public string MessageId { get; private set; } = string.Empty; - - public int? ClientId { get; private set; } - [Required] - public string SenderName { get; private set; } = string.Empty; - [Required] - public DateTime DateDelivery { get; private set; } - [Required] - public string Subject { get; private set; } = string.Empty; - [Required] - public string Body { get; private set; } = string.Empty; - public virtual Client? Client { get; set; } - public static MessageInfo? Create(MessageInfoBindingModel model) - { - if (model == null) - { - return null; - } - return new MessageInfo() - { - MessageId = model.MessageId, - ClientId = model.ClientId, - SenderName = model.SenderName, - Body = model.Body, - Subject = model.Subject, - DateDelivery = model.DateDelivery, - }; - } - public MessageInfoViewModel GetViewModel => new() - { - MessageId = MessageId, - ClientId = ClientId, - SenderName = SenderName, - Body = Body, - Subject = Subject, - DateDelivery = DateDelivery, - }; - } -} diff --git a/FoodOrders/FoodOrdersDatabaseImplement/Models/MessageInfo.cs b/FoodOrders/FoodOrdersDatabaseImplement/Models/MessageInfo.cs new file mode 100644 index 0000000..a975fcf --- /dev/null +++ b/FoodOrders/FoodOrdersDatabaseImplement/Models/MessageInfo.cs @@ -0,0 +1,65 @@ +using FoodOrdersContracts.BindingModels; +using FoodOrdersContracts.ViewModels; +using FoodOrdersDataModels.Models; +using System.ComponentModel.DataAnnotations; + +namespace FoodOrdersDatabaseImplement.Models +{ + public class MessageInfo : IMessageInfoModel + { + [Key] + public string MessageId { get; private set; } = string.Empty; + + public int? ClientId { get; private set; } + [Required] + public string SenderName { get; private set; } = string.Empty; + [Required] + public DateTime DateDelivery { get; private set; } + [Required] + public string Subject { get; private set; } = string.Empty; + [Required] + public string Body { get; private set; } = string.Empty; + public virtual Client? Client { get; set; } + public bool HasRead { get; private set; } + public string? Reply { get; private set; } + public static MessageInfo? Create(MessageInfoBindingModel model) + { + if (model == null) + { + return null; + } + return new MessageInfo() + { + Body = model.Body, + Reply = model.Reply, + HasRead = model.HasRead, + Subject = model.Subject, + ClientId = model.ClientId, + MessageId = model.MessageId, + SenderName = model.SenderName, + DateDelivery = model.DateDelivery, + }; + } + public void Update(MessageInfoBindingModel model) + { + if (model == null) + { + return; + } + Reply = model.Reply; + HasRead = model.HasRead; + } + + public MessageInfoViewModel GetViewModel => new() + { + Body = Body, + Reply = Reply, + HasRead = HasRead, + Subject = Subject, + ClientId = ClientId, + MessageId = MessageId, + SenderName = SenderName, + DateDelivery = DateDelivery, + }; + } +} diff --git a/FoodOrders/FoodOrdersFileImplement/Implements/MessageInfoStorage.cs b/FoodOrders/FoodOrdersFileImplement/Implements/MessageInfoStorage.cs index 7581ccf..e462713 100644 --- a/FoodOrders/FoodOrdersFileImplement/Implements/MessageInfoStorage.cs +++ b/FoodOrders/FoodOrdersFileImplement/Implements/MessageInfoStorage.cs @@ -26,5 +26,10 @@ namespace FoodOrdersFileImplement.Implements { throw new NotImplementedException(); } + + public MessageInfoViewModel? Update(MessageInfoBindingModel model) + { + throw new NotImplementedException(); + } } } \ No newline at end of file diff --git a/FoodOrders/FoodOrdersListImplement/Implements/MessageInfoStorage.cs b/FoodOrders/FoodOrdersListImplement/Implements/MessageInfoStorage.cs index e4ac575..5e2aa4f 100644 --- a/FoodOrders/FoodOrdersListImplement/Implements/MessageInfoStorage.cs +++ b/FoodOrders/FoodOrdersListImplement/Implements/MessageInfoStorage.cs @@ -26,5 +26,10 @@ namespace FoodOrdersListImplement.Implements { throw new NotImplementedException(); } + + public MessageInfoViewModel? Update(MessageInfoBindingModel model) + { + throw new NotImplementedException(); + } } } \ No newline at end of file