From b4c1ca61868c6821ba9e05c66cc67072c3916318 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9F=D0=B0=D0=B2=D0=B5=D0=BB=20=D0=9F=D1=83=D1=82=D0=B8?= =?UTF-8?q?=D0=BB=D0=B8=D0=BD?= Date: Sun, 23 Apr 2023 16:20:56 +0400 Subject: [PATCH] ListImplement --- .../BusinessLogic/MessageInfoLogic.cs | 43 +++++++++++++ .../BindingModels/MessageInfoBindingModel.cs | 19 ++++++ .../IMessageInfoLogic.cs | 13 ++++ .../SearchModels/MessageInfoSearchModel.cs | 9 +++ .../StoragesContract/IMessageInfoStorage.cs | 17 ++++++ .../ViewModels/MessageInfoViewModel.cs | 24 ++++++++ .../IMessageInfoModel.cs | 17 ++++++ .../DataListSingleton.cs | 3 + .../MessageInfo.cs | 49 +++++++++++++++ .../MessageInfoStorage.cs | 60 +++++++++++++++++++ 10 files changed, 254 insertions(+) create mode 100644 PrecastConcretePlant/PrecastConcretePlantBusinessLogic/BusinessLogic/MessageInfoLogic.cs create mode 100644 PrecastConcretePlant/PrecastConcretePlantContracts/BindingModels/MessageInfoBindingModel.cs create mode 100644 PrecastConcretePlant/PrecastConcretePlantContracts/BusinessLogicsContracts/IMessageInfoLogic.cs create mode 100644 PrecastConcretePlant/PrecastConcretePlantContracts/SearchModels/MessageInfoSearchModel.cs create mode 100644 PrecastConcretePlant/PrecastConcretePlantContracts/StoragesContract/IMessageInfoStorage.cs create mode 100644 PrecastConcretePlant/PrecastConcretePlantContracts/ViewModels/MessageInfoViewModel.cs create mode 100644 PrecastConcretePlant/PrecastConcretePlantDataModels/IMessageInfoModel.cs create mode 100644 PrecastConcretePlant/PrecastConcretePlantListImplement/MessageInfo.cs create mode 100644 PrecastConcretePlant/PrecastConcretePlantListImplement/MessageInfoStorage.cs diff --git a/PrecastConcretePlant/PrecastConcretePlantBusinessLogic/BusinessLogic/MessageInfoLogic.cs b/PrecastConcretePlant/PrecastConcretePlantBusinessLogic/BusinessLogic/MessageInfoLogic.cs new file mode 100644 index 0000000..58f7d5e --- /dev/null +++ b/PrecastConcretePlant/PrecastConcretePlantBusinessLogic/BusinessLogic/MessageInfoLogic.cs @@ -0,0 +1,43 @@ +using Microsoft.Extensions.Logging; +using PrecastConcretePlantContracts.BindingModels; +using PrecastConcretePlantContracts.BusinessLogicsContracts; +using PrecastConcretePlantContracts.SearchModels; +using PrecastConcretePlantContracts.StoragesContract; +using PrecastConcretePlantContracts.ViewModels; + +namespace PrecastConcretePlantBusinessLogic.BusinessLogic +{ + public class MessageInfoLogic : IMessageInfoLogic + { + private readonly ILogger _logger; + private readonly IMessageInfoStorage _messageInfoStorage; + public MessageInfoLogic(ILogger logger, IMessageInfoStorage MessageInfoStorage) + { + _logger = logger; + _messageInfoStorage = MessageInfoStorage; + } + + public bool Create(MessageInfoBindingModel model) + { + if (_messageInfoStorage.Insert(model) == null) + { + _logger.LogWarning("Insert operation failed"); + return false; + } + return true; + } + + public List? ReadList(MessageInfoSearchModel? model) + { + _logger.LogInformation("ReadList. MessageId:{MessageId}.ClientId:{ClientId} ", model?.MessageId, model?.ClientId); + var list = (model == null) ? _messageInfoStorage.GetFullList() : _messageInfoStorage.GetFilteredList(model); + if (list == null) + { + _logger.LogWarning("ReadList return null list"); + return null; + } + _logger.LogInformation("ReadList. Count:{Count}", list.Count); + return list; + } + } +} diff --git a/PrecastConcretePlant/PrecastConcretePlantContracts/BindingModels/MessageInfoBindingModel.cs b/PrecastConcretePlant/PrecastConcretePlantContracts/BindingModels/MessageInfoBindingModel.cs new file mode 100644 index 0000000..d836814 --- /dev/null +++ b/PrecastConcretePlant/PrecastConcretePlantContracts/BindingModels/MessageInfoBindingModel.cs @@ -0,0 +1,19 @@ +using PrecastConcretePlantDataModels; + +namespace PrecastConcretePlantContracts.BindingModels +{ + public class MessageInfoBindingModel : IMessageInfoModel + { + public string MessageId { get; set; } = string.Empty; + + public int? ClientId { get; set; } + + public string SenderName { get; set; } = string.Empty; + + public string Subject { get; set; } = string.Empty; + + public string Body { get; set; } = string.Empty; + + public DateTime DateDelivery { get; set; } + } +} diff --git a/PrecastConcretePlant/PrecastConcretePlantContracts/BusinessLogicsContracts/IMessageInfoLogic.cs b/PrecastConcretePlant/PrecastConcretePlantContracts/BusinessLogicsContracts/IMessageInfoLogic.cs new file mode 100644 index 0000000..0fc99ec --- /dev/null +++ b/PrecastConcretePlant/PrecastConcretePlantContracts/BusinessLogicsContracts/IMessageInfoLogic.cs @@ -0,0 +1,13 @@ +using PrecastConcretePlantContracts.BindingModels; +using PrecastConcretePlantContracts.SearchModels; +using PrecastConcretePlantContracts.ViewModels; + +namespace PrecastConcretePlantContracts.BusinessLogicsContracts +{ + public interface IMessageInfoLogic + { + List? ReadList(MessageInfoSearchModel? model); + + bool Create(MessageInfoBindingModel model); + } +} \ No newline at end of file diff --git a/PrecastConcretePlant/PrecastConcretePlantContracts/SearchModels/MessageInfoSearchModel.cs b/PrecastConcretePlant/PrecastConcretePlantContracts/SearchModels/MessageInfoSearchModel.cs new file mode 100644 index 0000000..b488944 --- /dev/null +++ b/PrecastConcretePlant/PrecastConcretePlantContracts/SearchModels/MessageInfoSearchModel.cs @@ -0,0 +1,9 @@ +namespace PrecastConcretePlantContracts.SearchModels +{ + public class MessageInfoSearchModel + { + public int? ClientId { get; set; } + + public string? MessageId { get; set; } + } +} \ No newline at end of file diff --git a/PrecastConcretePlant/PrecastConcretePlantContracts/StoragesContract/IMessageInfoStorage.cs b/PrecastConcretePlant/PrecastConcretePlantContracts/StoragesContract/IMessageInfoStorage.cs new file mode 100644 index 0000000..00b3410 --- /dev/null +++ b/PrecastConcretePlant/PrecastConcretePlantContracts/StoragesContract/IMessageInfoStorage.cs @@ -0,0 +1,17 @@ +using PrecastConcretePlantContracts.BindingModels; +using PrecastConcretePlantContracts.SearchModels; +using PrecastConcretePlantContracts.ViewModels; + +namespace PrecastConcretePlantContracts.StoragesContract +{ + public interface IMessageInfoStorage + { + List GetFullList(); + + List GetFilteredList(MessageInfoSearchModel model); + + MessageInfoViewModel? GetElement(MessageInfoSearchModel model); + + MessageInfoViewModel? Insert(MessageInfoBindingModel model); + } +} \ No newline at end of file diff --git a/PrecastConcretePlant/PrecastConcretePlantContracts/ViewModels/MessageInfoViewModel.cs b/PrecastConcretePlant/PrecastConcretePlantContracts/ViewModels/MessageInfoViewModel.cs new file mode 100644 index 0000000..06177a8 --- /dev/null +++ b/PrecastConcretePlant/PrecastConcretePlantContracts/ViewModels/MessageInfoViewModel.cs @@ -0,0 +1,24 @@ +using PrecastConcretePlantDataModels; +using System.ComponentModel; + +namespace PrecastConcretePlantContracts.ViewModels +{ + public class MessageInfoViewModel : IMessageInfoModel + { + public string MessageId { get; set; } = string.Empty; + + public int? ClientId { get; set; } + + [DisplayName("Отправитель")] + public string SenderName { get; set; } = string.Empty; + + [DisplayName("Дата письма")] + public DateTime DateDelivery { get; set; } + + [DisplayName("Заголовок")] + public string Subject { get; set; } = string.Empty; + + [DisplayName("Текст")] + public string Body { get; set; } = string.Empty; + } +} \ No newline at end of file diff --git a/PrecastConcretePlant/PrecastConcretePlantDataModels/IMessageInfoModel.cs b/PrecastConcretePlant/PrecastConcretePlantDataModels/IMessageInfoModel.cs new file mode 100644 index 0000000..50bfbce --- /dev/null +++ b/PrecastConcretePlant/PrecastConcretePlantDataModels/IMessageInfoModel.cs @@ -0,0 +1,17 @@ +namespace PrecastConcretePlantDataModels +{ + public interface IMessageInfoModel + { + string MessageId { get; } + + int? ClientId { get; } + + string SenderName { get; } + + DateTime DateDelivery { get; } + + string Subject { get; } + + string Body { get; } + } +} diff --git a/PrecastConcretePlant/PrecastConcretePlantListImplement/DataListSingleton.cs b/PrecastConcretePlant/PrecastConcretePlantListImplement/DataListSingleton.cs index e3b91b3..260fd39 100644 --- a/PrecastConcretePlant/PrecastConcretePlantListImplement/DataListSingleton.cs +++ b/PrecastConcretePlant/PrecastConcretePlantListImplement/DataListSingleton.cs @@ -10,6 +10,8 @@ namespace PrecastConcretePlantListImplement public List Reinforced { get; set; } public List Clients { get; set; } public List Implementers { get; set; } + public List Messages { get; set; } + private DataListSingleton() { Components = new List(); @@ -17,6 +19,7 @@ namespace PrecastConcretePlantListImplement Reinforced = new List(); Clients = new List(); Implementers = new List(); + Messages = new List(); } public static DataListSingleton GetInstance() { diff --git a/PrecastConcretePlant/PrecastConcretePlantListImplement/MessageInfo.cs b/PrecastConcretePlant/PrecastConcretePlantListImplement/MessageInfo.cs new file mode 100644 index 0000000..57f958e --- /dev/null +++ b/PrecastConcretePlant/PrecastConcretePlantListImplement/MessageInfo.cs @@ -0,0 +1,49 @@ +using PrecastConcretePlantContracts.BindingModels; +using PrecastConcretePlantContracts.ViewModels; +using PrecastConcretePlantDataModels; + +namespace PrecastConcretePlantListImplement +{ + public class MessageInfo : IMessageInfoModel + { + public string MessageId { get; private set; } = string.Empty; + + public int? ClientId { get; private set; } + + public string SenderName { get; private set; } = string.Empty; + + public DateTime DateDelivery { get; private set; } = DateTime.Now; + + public string Subject { get; private set; } = string.Empty; + + public string Body { get; private set; } = string.Empty; + + public static MessageInfo? Create(MessageInfoBindingModel model) + { + if (model == null) + { + return null; + } + return new() + { + Body = model.Body, + Subject = model.Subject, + ClientId = model.ClientId, + MessageId = model.MessageId, + SenderName = model.SenderName, + DateDelivery = model.DateDelivery, + }; + } + + public MessageInfoViewModel GetViewModel => new() + { + Body = Body, + Subject = Subject, + ClientId = ClientId, + MessageId = MessageId, + SenderName = SenderName, + DateDelivery = DateDelivery, + }; + + } +} diff --git a/PrecastConcretePlant/PrecastConcretePlantListImplement/MessageInfoStorage.cs b/PrecastConcretePlant/PrecastConcretePlantListImplement/MessageInfoStorage.cs new file mode 100644 index 0000000..37ff86f --- /dev/null +++ b/PrecastConcretePlant/PrecastConcretePlantListImplement/MessageInfoStorage.cs @@ -0,0 +1,60 @@ +using PrecastConcretePlantContracts.BindingModels; +using PrecastConcretePlantContracts.SearchModels; +using PrecastConcretePlantContracts.StoragesContract; +using PrecastConcretePlantContracts.ViewModels; + +namespace PrecastConcretePlantListImplement +{ + public class MessageInfoStorage : IMessageInfoStorage + { + private readonly DataListSingleton _source; + public MessageInfoStorage() + { + _source = DataListSingleton.GetInstance(); + } + + public MessageInfoViewModel? GetElement(MessageInfoSearchModel model) + { + foreach (var message in _source.Messages) + { + if (model.MessageId != null && model.MessageId.Equals(message.MessageId)) + return message.GetViewModel; + } + return null; + } + + public List GetFilteredList(MessageInfoSearchModel model) + { + List result = new(); + foreach (var item in _source.Messages) + { + if (item.ClientId.HasValue && item.ClientId == model.ClientId) + { + result.Add(item.GetViewModel); + } + } + return result; + } + + public List GetFullList() + { + List result = new(); + foreach (var item in _source.Messages) + { + result.Add(item.GetViewModel); + } + return result; + } + + public MessageInfoViewModel? Insert(MessageInfoBindingModel model) + { + var newMessage = MessageInfo.Create(model); + if (newMessage == null) + { + return null; + } + _source.Messages.Add(newMessage); + return newMessage.GetViewModel; + } + } +}