From 1f26d40ff08988aafe091e15eab69af0d6e4607b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?10=D0=93=20=D0=95=D0=B3=D0=BE=D1=80=20=D0=A0=D0=BE=D0=BC?= =?UTF-8?q?=D0=B0=D0=BD=D0=BE=D0=B2?= Date: Tue, 16 May 2023 01:43:26 +0400 Subject: [PATCH] not done but --- SecuritySystem/DataGridViewExtension.cs | 55 ++++ SecuritySystem/FormClients.cs | 17 +- SecuritySystem/FormComponent.Designer.cs | 1 + SecuritySystem/FormComponent.cs | 20 +- SecuritySystem/FormComponents.cs | 24 +- SecuritySystem/FormImplementers.cs | 62 ++-- SecuritySystem/FormMain.Designer.cs | 15 +- SecuritySystem/FormMain.cs | 200 +++++++----- SecuritySystem/FormMessageInfos.cs | 10 +- SecuritySystem/FormSecure.cs | 114 ++++--- SecuritySystem/FormSecures.Designer.cs | 129 ++++---- SecuritySystem/FormSecures.cs | 51 ++- SecuritySystem/FormSecures.resx | 62 +--- SecuritySystem/Program.cs | 109 +++---- SecuritySystem/SecuritySystemView.csproj | 4 +- .../BusinessLogics/BackUpLogic.cs | 105 ++++++ .../BusinessLogics/ClientLogic.cs | 2 +- .../BusinessLogics/ComponentLogic.cs | 2 +- .../BusinessLogics/OrderLogic.cs | 14 +- .../BusinessLogics/ReportLogic.cs | 2 +- .../BusinessLogics/SecureLogic.cs | 2 +- .../Attributes/ColumnAttribute.cs | 28 ++ .../Attributes/GridViewAutoSize.cs | 20 ++ .../BindingModels/BackUpSaveBinidngModel.cs | 14 + .../BindingModels/MessageInfoBindingModel.cs | 1 + .../BusinessLogicsContracts/IBackUpLogic.cs | 15 + .../BusinessLogicsContracts/IReportLogic.cs | 5 - .../DI/DependencyManager.cs | 43 +++ .../DI/IDependencyContainer.cs | 17 + .../DI/IImplementationExtension.cs | 14 + .../DI/ServiceDependencyContainer.cs | 62 ++++ .../DI/ServiceProviderLoader.cs | 57 ++++ .../DI/UnityDependencyContainer.cs | 55 ++++ .../SecuritySystemContracts.csproj | 2 + .../StorageContracts/IBackUpInfo.cs | 14 + .../StorageContracts/IClientStorage.cs | 2 +- .../StorageContracts/IComponentStorage.cs | 2 +- .../StorageContracts/IOrderStorage.cs | 2 +- .../StorageContracts/ISecureStorage.cs | 2 +- .../ViewModels/ClientViewModel.cs | 8 +- .../ViewModels/ComponentViewModel.cs | 15 +- .../ViewModels/ImplementerViewModel.cs | 35 +- .../ViewModels/MessageInfoViewModel.cs | 22 +- .../ViewModels/OrderViewModel.cs | 32 +- .../ViewModels/SecureViewModel.cs | 15 +- .../Models/IMessageInfoModel.cs | 2 +- .../DatabaseImplementationExtension.cs | 27 ++ .../Implements/BackUpInfo.cs | 32 ++ .../Implements/ClientStorage.cs | 2 +- .../Implements/ComponentStorage.cs | 2 +- .../Implements/OrderStorage.cs | 1 - .../Implements/SecureStorage.cs | 2 +- .../20230502104117_lab7.Designer.cs | 298 ------------------ .../Migrations/20230502104117_lab7.cs | 215 ------------- .../SecuritySystemDatabaseModelSnapshot.cs | 295 ----------------- .../Models/Client.cs | 6 + .../Models/Component.cs | 5 + .../Models/Implementer.cs | 17 +- .../Models/MessageInfo.cs | 10 +- .../Models/Order.cs | 11 + .../Models/Secure.cs | 7 + .../SecuritySystemDatabase.cs | 3 +- .../SecuritySystemDatabaseImplement.csproj | 7 +- .../FileImplementationExtension.cs | 27 ++ .../Implements/BackUpInfo.cs | 32 ++ .../Implements/ClientStorage.cs | 2 +- .../Implements/ComponentStorage.cs | 3 +- .../Implements/OrderStorage.cs | 3 +- .../Implements/SecureStorage.cs | 17 +- SecuritySystemFileImplement/Models/Client.cs | 26 +- .../Models/Component.cs | 18 +- .../Models/Implementer.cs | 142 +++++---- .../Models/MessageInfo.cs | 140 ++++---- SecuritySystemFileImplement/Models/Order.cs | 89 ++++-- SecuritySystemFileImplement/Models/Secure.cs | 34 +- .../Implements/IBackUpInfo.cs | 22 ++ .../Implements/MessageInfoStorage.cs | 3 +- .../ListImplementationExtension.cs | 26 ++ .../Controllers/ClientController.cs | 3 - SecuritySystemRestApi/Program.cs | 9 +- .../SecuritySystemRestApi.csproj | 2 +- 81 files changed, 1397 insertions(+), 1625 deletions(-) create mode 100644 SecuritySystem/DataGridViewExtension.cs create mode 100644 SecuritySystemBusinessLogic/BusinessLogics/BackUpLogic.cs create mode 100644 SecuritySystemContracts/Attributes/ColumnAttribute.cs create mode 100644 SecuritySystemContracts/Attributes/GridViewAutoSize.cs create mode 100644 SecuritySystemContracts/BindingModels/BackUpSaveBinidngModel.cs create mode 100644 SecuritySystemContracts/BusinessLogicsContracts/IBackUpLogic.cs create mode 100644 SecuritySystemContracts/DI/DependencyManager.cs create mode 100644 SecuritySystemContracts/DI/IDependencyContainer.cs create mode 100644 SecuritySystemContracts/DI/IImplementationExtension.cs create mode 100644 SecuritySystemContracts/DI/ServiceDependencyContainer.cs create mode 100644 SecuritySystemContracts/DI/ServiceProviderLoader.cs create mode 100644 SecuritySystemContracts/DI/UnityDependencyContainer.cs create mode 100644 SecuritySystemContracts/StorageContracts/IBackUpInfo.cs create mode 100644 SecuritySystemDatabaseImplement/DatabaseImplementationExtension.cs create mode 100644 SecuritySystemDatabaseImplement/Implements/BackUpInfo.cs delete mode 100644 SecuritySystemDatabaseImplement/Migrations/20230502104117_lab7.Designer.cs delete mode 100644 SecuritySystemDatabaseImplement/Migrations/20230502104117_lab7.cs delete mode 100644 SecuritySystemDatabaseImplement/Migrations/SecuritySystemDatabaseModelSnapshot.cs create mode 100644 SecuritySystemFileImplement/FileImplementationExtension.cs create mode 100644 SecuritySystemFileImplement/Implements/BackUpInfo.cs create mode 100644 SecuritySystemListImplement/Implements/IBackUpInfo.cs create mode 100644 SecuritySystemListImplement/ListImplementationExtension.cs diff --git a/SecuritySystem/DataGridViewExtension.cs b/SecuritySystem/DataGridViewExtension.cs new file mode 100644 index 0000000..a9183b3 --- /dev/null +++ b/SecuritySystem/DataGridViewExtension.cs @@ -0,0 +1,55 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using SecuritySystemContracts.Attributes; + +namespace SecuritySystemView +{ + public static class DataGridViewExtension + { + public static void FillandConfigGrid(this DataGridView grid, List? +data) + { + if (data == null) + { + return; + } + grid.DataSource = data; + var type = typeof(T); + var properties = type.GetProperties(); + foreach (DataGridViewColumn column in grid.Columns) + { + var property = properties.FirstOrDefault(x => x.Name == + column.Name); + if (property == null) + { + throw new InvalidOperationException($"В типе {type.Name} не найдено свойство с именем { column.Name }"); + } + var attribute = + property.GetCustomAttributes(typeof(ColumnAttribute), true)?.SingleOrDefault(); + if (attribute == null) + { + throw new InvalidOperationException($"Не найден атрибут типа ColumnAttribute для свойства { property.Name }"); + } + // ищем нужный нам атрибут + if (attribute is ColumnAttribute columnAttr) + { + column.HeaderText = columnAttr.Title; + column.Visible = columnAttr.Visible; + if (columnAttr.IsUseAutoSize) + { + column.AutoSizeMode = + (DataGridViewAutoSizeColumnMode)Enum.Parse(typeof(DataGridViewAutoSizeColumnMode) + , columnAttr.GridViewAutoSize.ToString()); + } + else + { + column.Width = columnAttr.Width; + } + } + } + } + } +} diff --git a/SecuritySystem/FormClients.cs b/SecuritySystem/FormClients.cs index 93664f0..ff1c049 100644 --- a/SecuritySystem/FormClients.cs +++ b/SecuritySystem/FormClients.cs @@ -1,15 +1,6 @@ using SecuritySystemContracts.BindingModels; using SecuritySystemContracts.BusinessLogicsContracts; using Microsoft.Extensions.Logging; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Forms; namespace SecuritySystemView { @@ -31,13 +22,7 @@ namespace SecuritySystemView { try { - var list = _logic.ReadList(null); - if (list != null) - { - dataGridView.DataSource = list; - dataGridView.Columns["Id"].Visible = false; - dataGridView.Columns["ClientFIO"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; - } + dataGridView.FillandConfigGrid(_logic.ReadList(null)); _logger.LogInformation("Загрузка клиентов"); } catch (Exception ex) diff --git a/SecuritySystem/FormComponent.Designer.cs b/SecuritySystem/FormComponent.Designer.cs index 280f9a6..c59617a 100644 --- a/SecuritySystem/FormComponent.Designer.cs +++ b/SecuritySystem/FormComponent.Designer.cs @@ -115,5 +115,6 @@ private Label labelCost; private Button buttonSave; private Button buttonCancel; + private DataGridView dataGridView; } } \ No newline at end of file diff --git a/SecuritySystem/FormComponent.cs b/SecuritySystem/FormComponent.cs index bfd6ac0..cae6cb2 100644 --- a/SecuritySystem/FormComponent.cs +++ b/SecuritySystem/FormComponent.cs @@ -1,16 +1,6 @@ using Microsoft.Extensions.Logging; using SecuritySystemContracts.BindingModels; using SecuritySystemContracts.BusinessLogicsContracts; -using SecuritySystemContracts.SearchModels; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Forms; namespace SecuritySystemView { @@ -32,16 +22,8 @@ namespace SecuritySystemView { try { + dataGridView.FillandConfigGrid(_logic.ReadList(null)); _logger.LogInformation("Получение компонента"); - var view = _logic.ReadElement(new ComponentSearchModel - { - Id = _id.Value - }); - if (view != null) - { - textBoxName.Text = view.ComponentName; - textBoxCost.Text = view.Cost.ToString(); - } } catch (Exception ex) { diff --git a/SecuritySystem/FormComponents.cs b/SecuritySystem/FormComponents.cs index c657b13..982dd7d 100644 --- a/SecuritySystem/FormComponents.cs +++ b/SecuritySystem/FormComponents.cs @@ -1,7 +1,8 @@ using Microsoft.Extensions.Logging; using SecuritySystemContracts.BindingModels; using SecuritySystemContracts.BusinessLogicsContracts; -using SecuritySystemView; +using SecuritySystem; +using SecuritySystemContracts.DI; namespace SecuritySystemView { @@ -42,28 +43,21 @@ namespace SecuritySystemView } private void ButtonAdd_Click(object sender, EventArgs e) { - var service = Program.ServiceProvider?.GetService(typeof(FormComponent)); - if (service is FormComponent form) + var form = DependencyManager.Instance.Resolve(); + if (form.ShowDialog() == DialogResult.OK) { - if (form.ShowDialog() == DialogResult.OK) - { - LoadData(); - } + LoadData(); } } private void ButtonUpd_Click(object sender, EventArgs e) { if (dataGridView.SelectedRows.Count == 1) { - var service = Program.ServiceProvider?.GetService(typeof(FormComponent)); - if (service is FormComponent form) + var form = DependencyManager.Instance.Resolve(); + form.Id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); + if (form.ShowDialog() == DialogResult.OK) { - form.Id = - Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); - if (form.ShowDialog() == DialogResult.OK) - { - LoadData(); - } + LoadData(); } } } diff --git a/SecuritySystem/FormImplementers.cs b/SecuritySystem/FormImplementers.cs index d9d93cc..1276390 100644 --- a/SecuritySystem/FormImplementers.cs +++ b/SecuritySystem/FormImplementers.cs @@ -1,15 +1,8 @@ using SecuritySystemContracts.BindingModels; using SecuritySystemContracts.BusinessLogicsContracts; using Microsoft.Extensions.Logging; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Forms; +using SecuritySystem; +using SecuritySystemContracts.DI; namespace SecuritySystemView { @@ -31,17 +24,8 @@ namespace SecuritySystemView { try { - var list = _logic.ReadList(null); - if (list != null) - { - dataGridView.DataSource = list; - dataGridView.Columns["Id"].Visible = false; - dataGridView.Columns["ImplementerFIO"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; - dataGridView.Columns["Password"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; - dataGridView.Columns["WorkExperience"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; - dataGridView.Columns["Qualification"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; - } - _logger.LogInformation("Загрузка исполнителей"); + dataGridView.FillandConfigGrid(_logic.ReadList(null)); + _logger.LogInformation("Загрузка исполнителей"); } catch (Exception ex) { @@ -51,30 +35,24 @@ namespace SecuritySystemView } private void ButtonAdd_Click(object sender, EventArgs e) { - var service = Program.ServiceProvider?.GetService(typeof(FormImplementer)); - if (service is FormImplementer form) - { - if (form.ShowDialog() == DialogResult.OK) - { - LoadData(); - } - } - } + var form = DependencyManager.Instance.Resolve(); + if (form.ShowDialog() == DialogResult.OK) + { + LoadData(); + } + } private void ButtonUpd_Click(object sender, EventArgs e) { - if (dataGridView.SelectedRows.Count == 1) - { - var service = Program.ServiceProvider?.GetService(typeof(FormImplementer)); - if (service is FormImplementer form) - { - form.Id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); - if (form.ShowDialog() == DialogResult.OK) - { - LoadData(); - } - } - } - } + if (dataGridView.SelectedRows.Count == 1) + { + var form = DependencyManager.Instance.Resolve(); + form.Id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); + if (form.ShowDialog() == DialogResult.OK) + { + LoadData(); + } + } + } private void ButtonDel_Click(object sender, EventArgs e) { if (dataGridView.SelectedRows.Count == 1) diff --git a/SecuritySystem/FormMain.Designer.cs b/SecuritySystem/FormMain.Designer.cs index b3d4deb..195f2eb 100644 --- a/SecuritySystem/FormMain.Designer.cs +++ b/SecuritySystem/FormMain.Designer.cs @@ -47,6 +47,7 @@ namespace SecuritySystemView buttonRef = new Button(); workToolStripMenuItem = new ToolStripMenuItem(); letterToolStripMenuItem = new ToolStripMenuItem(); + createBackupToolStripMenuItem = new ToolStripMenuItem(); menuStrip1.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); SuspendLayout(); @@ -55,7 +56,7 @@ namespace SecuritySystemView // menuStrip1.ImageScalingSize = new Size(20, 20); menuStrip1.Items.AddRange(new ToolStripItem[] { guideToolStripMenuItem, отчетыToolStripMenuItem, workToolStripMenuItem }); - menuStrip1.Items.AddRange(new ToolStripItem[] { guideToolStripMenuItem, отчетыToolStripMenuItem, workToolStripMenuItem, letterToolStripMenuItem }); + menuStrip1.Items.AddRange(new ToolStripItem[] { guideToolStripMenuItem, отчетыToolStripMenuItem, workToolStripMenuItem, letterToolStripMenuItem, createBackupToolStripMenuItem }); menuStrip1.Location = new Point(0, 0); menuStrip1.Name = "menuStrip1"; menuStrip1.Padding = new Padding(5, 2, 0, 2); @@ -82,7 +83,7 @@ namespace SecuritySystemView goodsToolStripMenuItem.Name = "goodsToolStripMenuItem"; goodsToolStripMenuItem.Size = new Size(180, 22); goodsToolStripMenuItem.Text = "Изделия"; - goodsToolStripMenuItem.Click += GoodsToolStripMenuItem_Click; + goodsToolStripMenuItem.Click += SecuresToolStripMenuItem_Click; // // clientsToolStripMenuItem // @@ -110,7 +111,7 @@ namespace SecuritySystemView componentListToolStripMenuItem.Name = "componentListToolStripMenuItem"; componentListToolStripMenuItem.Size = new Size(218, 22); componentListToolStripMenuItem.Text = "Список компонентов"; - componentListToolStripMenuItem.Click += ComponentListToolStripMenuItem_Click; + componentListToolStripMenuItem.Click += ComponentSecuresToolStripMenuItem_Click; // // componentsSecureToolStripMenuItem // @@ -186,6 +187,13 @@ namespace SecuritySystemView letterToolStripMenuItem.Size = new Size(77, 24); letterToolStripMenuItem.Text = "Почта"; letterToolStripMenuItem.Click += letterToolStripMenuItem_Click; + // + // createBackupToolStripMenuItem + // + createBackupToolStripMenuItem.Name = "createBackupToolStripMenuItem"; + createBackupToolStripMenuItem.Size = new Size(123, 24); + createBackupToolStripMenuItem.Text = "Создать Бекап"; + createBackupToolStripMenuItem.Click += createBackupToolStripMenuItem_Click; // // FormMain // @@ -227,5 +235,6 @@ namespace SecuritySystemView private ToolStripMenuItem ImplementersToolStripMenuItem; private ToolStripMenuItem workToolStripMenuItem; private ToolStripMenuItem letterToolStripMenuItem; + private ToolStripMenuItem createBackupToolStripMenuItem; } } \ No newline at end of file diff --git a/SecuritySystem/FormMain.cs b/SecuritySystem/FormMain.cs index 36aa43f..1dd4754 100644 --- a/SecuritySystem/FormMain.cs +++ b/SecuritySystem/FormMain.cs @@ -1,15 +1,7 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Forms; -using SecuritySystemContracts.BusinessLogicsContracts; -using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging; using SecuritySystemContracts.BindingModels; +using SecuritySystemContracts.BusinessLogicsContracts; +using SecuritySystemContracts.DI; namespace SecuritySystemView { @@ -19,13 +11,15 @@ namespace SecuritySystemView private readonly IOrderLogic _orderLogic; private readonly IReportLogic _reportLogic; private readonly IWorkProcess _workProcess; - public FormMain(ILogger logger, IOrderLogic orderLogic, IReportLogic reportLogic, IWorkProcess workProcess) + private readonly IBackUpLogic _backUpLogic; + public FormMain(ILogger logger, IOrderLogic orderLogic, IReportLogic reportLogic, IWorkProcess workProcess, IBackUpLogic backUpLogic) { InitializeComponent(); _logger = logger; _orderLogic = orderLogic; _reportLogic = reportLogic; _workProcess = workProcess; + _backUpLogic = backUpLogic; } private void FormMain_Load(object sender, EventArgs e) { @@ -35,79 +29,110 @@ namespace SecuritySystemView { try { - var list = _orderLogic.ReadList(null); - if (list != null) - { - dataGridView.DataSource = list; - dataGridView.Columns["SecureId"].Visible = false; - dataGridView.Columns["ClientId"].Visible = false; - dataGridView.Columns["ImplementerId"].Visible = false; - dataGridView.Columns["DateImplement"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; - } + dataGridView.FillandConfigGrid(_orderLogic.ReadList(null)); _logger.LogInformation("Загрузка заказов"); } catch (Exception ex) { _logger.LogError(ex, "Ошибка загрузки заказов"); - MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, + MessageBoxIcon.Error); } } private void ComponentsToolStripMenuItem_Click(object sender, EventArgs e) { - var service = Program.ServiceProvider?.GetService(typeof(FormComponents)); - if (service is FormComponents form) - { - form.ShowDialog(); - } + var form = DependencyManager.Instance.Resolve(); + form.ShowDialog(); } - private void GoodsToolStripMenuItem_Click(object sender, EventArgs e) + private void SecuresToolStripMenuItem_Click(object sender, EventArgs e) { - var service = Program.ServiceProvider?.GetService(typeof(FormSecures)); - if (service is FormSecures form) - { - form.ShowDialog(); - } - } - private void ClientsToolStripMenuItem_Click(object sender, EventArgs e) - { - var service = Program.ServiceProvider?.GetService(typeof(FormClients)); - if (service is FormClients form) - { - form.ShowDialog(); - } + var form = + DependencyManager.Instance.Resolve(); + form.ShowDialog(); } private void ButtonCreateOrder_Click(object sender, EventArgs e) { - var service = Program.ServiceProvider?.GetService(typeof(FormCreateOrder)); - if (service is FormCreateOrder form) + var form = DependencyManager.Instance.Resolve(); + form.ShowDialog(); + LoadData(); + } + private void ButtonTakeOrderInWork_Click(object sender, EventArgs e) + { + if (dataGridView.SelectedRows.Count == 1) { - form.ShowDialog(); - LoadData(); + int id = + Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); + _logger.LogInformation("Заказ №{id}. Меняется статус на 'В работе'", id); + try + { + var operationResult = _orderLogic.TakeOrderInWork(new + OrderBindingModel + { Id = id }); + if (!operationResult) + { + throw new Exception("Ошибка при сохранении. Дополнительная информация в логах."); + } + LoadData(); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка передачи заказа в работу"); + MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, + MessageBoxIcon.Error); + } + } + } + private void ButtonOrderReady_Click(object sender, EventArgs e) + { + if (dataGridView.SelectedRows.Count == 1) + { + int id = + Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); + _logger.LogInformation("Заказ №{id}. Меняется статус на 'Готов'", + id); + try + { + var operationResult = _orderLogic.FinishOrder(new + OrderBindingModel + { Id = id }); + if (!operationResult) + { + throw new Exception("Ошибка при сохранении. Дополнительная информация в логах."); + } + LoadData(); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка отметки о готовности заказа"); + MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + } } } private void ButtonIssuedOrder_Click(object sender, EventArgs e) { if (dataGridView.SelectedRows.Count == 1) { - int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); - _logger.LogInformation("Заказ No {id}. Меняется статус на 'Выдан'", id); + int id = + Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); + _logger.LogInformation("Заказ №{id}. Меняется статус на 'Выдан'", + id); try { - var operationResult = _orderLogic.DeliveryOrder(new OrderBindingModel - { - Id = id - }); + var operationResult = _orderLogic.DeliveryOrder(new + OrderBindingModel + { Id = id }); if (!operationResult) { throw new Exception("Ошибка при сохранении. Дополнительная информация в логах."); } - _logger.LogInformation("Заказ No {id} выдан", id); + _logger.LogInformation("Заказ №{id} выдан", id); LoadData(); } catch (Exception ex) { _logger.LogError(ex, "Ошибка отметки о выдачи заказа"); - MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, + MessageBoxIcon.Error); } } } @@ -115,7 +140,8 @@ namespace SecuritySystemView { LoadData(); } - private void ComponentListToolStripMenuItem_Click(object sender, EventArgs e) + + private void SecureToolStripMenuItem_Click(object sender, EventArgs e) { using var dialog = new SaveFileDialog { Filter = "docx|*.docx" }; if (dialog.ShowDialog() == DialogResult.OK) @@ -126,39 +152,63 @@ namespace SecuritySystemView } private void ComponentSecuresToolStripMenuItem_Click(object sender, EventArgs e) { - var service = Program.ServiceProvider?.GetService(typeof(FormReportSecureComponents)); - if (service is FormReportSecureComponents form) - { - form.ShowDialog(); - } + var form = DependencyManager.Instance.Resolve(); + form.ShowDialog(); } private void OrderListToolStripMenuItem_Click(object sender, EventArgs e) { - var service = Program.ServiceProvider?.GetService(typeof(FormReportOrders)); - if (service is FormReportOrders form) - { - form.ShowDialog(); - } + var form = DependencyManager.Instance.Resolve(); + form.ShowDialog(); } - private void ImplementersToolStripMenuItem_Click(object sender, EventArgs e) + + private void ClientsToolStripMenuItem_Click(object sender, EventArgs e) { - var service = Program.ServiceProvider?.GetService(typeof(FormImplementers)); - if (service is FormImplementers form) - { - form.ShowDialog(); - } + var form = DependencyManager.Instance.Resolve(); + form.ShowDialog(); } + private void WorkStartToolStripMenuItem_Click(object sender, EventArgs e) { - _workProcess.DoWork((Program.ServiceProvider?.GetService(typeof(IImplementerLogic)) as IImplementerLogic)!, _orderLogic); - MessageBox.Show("Процесс обработки запущен", "Сообщение", MessageBoxButtons.OK, MessageBoxIcon.Information); + _workProcess.DoWork((DependencyManager.Instance.Resolve())!, _orderLogic); + MessageBox.Show("Процесс обработки запущен", "Сообщение", + MessageBoxButtons.OK, MessageBoxIcon.Information); + } + + private void ImplementersToolStripMenuItem_Click(object sender, EventArgs e) + { + var form = DependencyManager.Instance.Resolve(); + form.ShowDialog(); + } + private void letterToolStripMenuItem_Click(object sender, EventArgs e) { - var service = Program.ServiceProvider?.GetService(typeof(FormMessageInfos)); - if (service is FormMessageInfos form) + var form = DependencyManager.Instance.Resolve(); + form.ShowDialog(); + } + + private void createBackupToolStripMenuItem_Click(object sender, EventArgs e) + { + try { - form.ShowDialog(); + if (_backUpLogic != null) + { + var fbd = new FolderBrowserDialog(); + if (fbd.ShowDialog() == DialogResult.OK) + { + _backUpLogic.CreateBackUp(new BackUpSaveBinidngModel + { + FolderName = fbd.SelectedPath + }); + MessageBox.Show("Бекап создан", "Сообщение", + MessageBoxButtons.OK, MessageBoxIcon.Information); + } + } + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, + MessageBoxIcon.Error); } } } diff --git a/SecuritySystem/FormMessageInfos.cs b/SecuritySystem/FormMessageInfos.cs index 221c8da..77e3a5c 100644 --- a/SecuritySystem/FormMessageInfos.cs +++ b/SecuritySystem/FormMessageInfos.cs @@ -9,6 +9,7 @@ using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using SecuritySystemContracts.BusinessLogicsContracts; +using SecuritySystemView; namespace SecuritySystemView { @@ -31,14 +32,7 @@ namespace SecuritySystemView { try { - var list = _logic.ReadList(null); - if (list != null) - { - dataGridView.DataSource = list; - dataGridView.Columns["MessageId"].Visible = false; - dataGridView.Columns["ClientId"].Visible = false; - dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; - } + dataGridView.FillandConfigGrid(_logic.ReadList(null)); _logger.LogInformation("Загрузка писем"); } catch (Exception ex) diff --git a/SecuritySystem/FormSecure.cs b/SecuritySystem/FormSecure.cs index 0bb016e..92998c3 100644 --- a/SecuritySystem/FormSecure.cs +++ b/SecuritySystem/FormSecure.cs @@ -1,18 +1,9 @@ using Microsoft.Extensions.Logging; -using SecuritySystemView; +using SecuritySystemContracts.DI; +using SecuritySystemDataModels.Models; using SecuritySystemContracts.BindingModels; using SecuritySystemContracts.BusinessLogicsContracts; using SecuritySystemContracts.SearchModels; -using SecuritySystemDataModels.Models; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Forms; namespace SecuritySystemView { @@ -23,6 +14,7 @@ namespace SecuritySystemView private int? _id; private Dictionary _SecureComponents; public int Id { set { _id = value; } } + public FormSecure(ILogger logger, ISecureLogic logic) { InitializeComponent(); @@ -37,21 +29,22 @@ namespace SecuritySystemView _logger.LogInformation("Загрузка изделия"); try { - var view = _logic.ReadElement(new SecureSearchModel { Id = _id.Value }); + var view = _logic.ReadElement(new SecureSearchModel + { + Id = _id.Value + }); if (view != null) { textBoxName.Text = view.SecureName; textBoxPrice.Text = view.Price.ToString(); - _SecureComponents = view.SecureComponents ?? new - Dictionary(); + _SecureComponents = view.SecureComponents ?? new Dictionary(); LoadData(); } } catch (Exception ex) { _logger.LogError(ex, "Ошибка загрузки изделия"); - MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, - MessageBoxIcon.Error); + MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } @@ -63,9 +56,9 @@ namespace SecuritySystemView if (_SecureComponents != null) { dataGridView.Rows.Clear(); - foreach (var pc in _SecureComponents) + foreach (var element in _SecureComponents) { - dataGridView.Rows.Add(new object[] { pc.Key, pc.Value.Item1.ComponentName, pc.Value.Item2 }); + dataGridView.Rows.Add(new object[] { element.Key, element.Value.Item1.ComponentName, element.Value.Item2 }); } textBoxPrice.Text = CalcPrice().ToString(); } @@ -73,57 +66,54 @@ namespace SecuritySystemView catch (Exception ex) { _logger.LogError(ex, "Ошибка загрузки компонент изделия"); - MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, - MessageBoxIcon.Error); + MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); } } + private void ButtonAdd_Click(object sender, EventArgs e) { - var service = Program.ServiceProvider?.GetService(typeof(FormSecureComponent)); - if (service is FormSecureComponent form) + var form = DependencyManager.Instance.Resolve(); + if (form.ShowDialog() == DialogResult.OK) { + if (form.ComponentModel == null) + { + return; + } + _logger.LogInformation("Добавление нового компонента: { ComponentName} - { Count}", form.ComponentModel.ComponentName, form.Count); + if (_SecureComponents.ContainsKey(form.Id)) + { + _SecureComponents[form.Id] = (form.ComponentModel, + form.Count); + } + else + { + _SecureComponents.Add(form.Id, (form.ComponentModel, + form.Count)); + } + LoadData(); + } + + } + private void ButtonUpd_Click(object sender, EventArgs e) + { + if (dataGridView.SelectedRows.Count == 1) + { + var form = DependencyManager.Instance.Resolve(); + int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells[0].Value); + form.Id = id; + form.Count = _SecureComponents[id].Item2; if (form.ShowDialog() == DialogResult.OK) { if (form.ComponentModel == null) { return; } - _logger.LogInformation("Добавление нового компонента: {ComponentName} - {Count}", form.ComponentModel.ComponentName, form.Count); - if (_SecureComponents.ContainsKey(form.Id)) - { - _SecureComponents[form.Id] = (form.ComponentModel, form.Count); - } - else - { - _SecureComponents.Add(form.Id, (form.ComponentModel, form.Count)); - } + _logger.LogInformation("Изменение компонента: { ComponentName} - { Count}", form.ComponentModel.ComponentName, form.Count); + _SecureComponents[form.Id] = (form.ComponentModel, form.Count); LoadData(); } } } - private void ButtonUpd_Click(object sender, EventArgs e) - { - if (dataGridView.SelectedRows.Count == 1) - { - var service = Program.ServiceProvider?.GetService(typeof(FormSecureComponent)); - if (service is FormSecureComponent form) - { - int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells[0].Value); - form.Id = id; - form.Count = _SecureComponents[id].Item2; - if (form.ShowDialog() == DialogResult.OK) - { - if (form.ComponentModel == null) - { - return; - } - _logger.LogInformation("Изменение компонента: {ComponentName} - {Count}", form.ComponentModel.ComponentName, form.Count); - _SecureComponents[form.Id] = (form.ComponentModel, form.Count); - LoadData(); - } - } - } - } private void ButtonDel_Click(object sender, EventArgs e) { if (dataGridView.SelectedRows.Count == 1) @@ -133,13 +123,13 @@ namespace SecuritySystemView { try { - _logger.LogInformation("Удаление компонента: {ComponentName} - { Count}", dataGridView.SelectedRows[0].Cells[1].Value); + _logger.LogInformation("Удаление компонента: { ComponentName} - { Count}", dataGridView.SelectedRows[0].Cells[1].Value); _SecureComponents?.Remove(Convert.ToInt32(dataGridView.SelectedRows[0].Cells[0].Value)); } catch (Exception ex) { MessageBox.Show(ex.Message, "Ошибка", - MessageBoxButtons.OK, MessageBoxIcon.Error); + MessageBoxButtons.OK, MessageBoxIcon.Error); } LoadData(); } @@ -153,17 +143,20 @@ namespace SecuritySystemView { if (string.IsNullOrEmpty(textBoxName.Text)) { - MessageBox.Show("Заполните название", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + MessageBox.Show("Заполните название", "Ошибка", + MessageBoxButtons.OK, MessageBoxIcon.Error); return; } if (string.IsNullOrEmpty(textBoxPrice.Text)) { - MessageBox.Show("Заполните цену", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + MessageBox.Show("Заполните цену", "Ошибка", MessageBoxButtons.OK, + MessageBoxIcon.Error); return; } if (_SecureComponents == null || _SecureComponents.Count == 0) { - MessageBox.Show("Заполните компоненты", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + MessageBox.Show("Заполните компоненты", "Ошибка", + MessageBoxButtons.OK, MessageBoxIcon.Error); return; } _logger.LogInformation("Сохранение изделия"); @@ -181,7 +174,8 @@ namespace SecuritySystemView { throw new Exception("Ошибка при сохранении. Дополнительная информация в логах."); } - MessageBox.Show("Сохранение прошло успешно", "Сообщение", MessageBoxButtons.OK, MessageBoxIcon.Information); + MessageBox.Show("Сохранение прошло успешно", "Сообщение", + MessageBoxButtons.OK, MessageBoxIcon.Information); DialogResult = DialogResult.OK; Close(); } diff --git a/SecuritySystem/FormSecures.Designer.cs b/SecuritySystem/FormSecures.Designer.cs index 74c6dc4..fb6bcce 100644 --- a/SecuritySystem/FormSecures.Designer.cs +++ b/SecuritySystem/FormSecures.Designer.cs @@ -28,91 +28,77 @@ /// private void InitializeComponent() { - this.ToolsPanel = new System.Windows.Forms.Panel(); - this.buttonRef = new System.Windows.Forms.Button(); - this.buttonDel = new System.Windows.Forms.Button(); - this.buttonUpd = new System.Windows.Forms.Button(); - this.buttonAdd = new System.Windows.Forms.Button(); this.dataGridView = new System.Windows.Forms.DataGridView(); - this.ToolsPanel.SuspendLayout(); + this.ButtonAdd = new System.Windows.Forms.Button(); + this.ButtonUpd = new System.Windows.Forms.Button(); + this.ButtonDel = new System.Windows.Forms.Button(); + this.ButtonRef = new System.Windows.Forms.Button(); ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).BeginInit(); this.SuspendLayout(); // - // ToolsPanel - // - this.ToolsPanel.Controls.Add(this.buttonRef); - this.ToolsPanel.Controls.Add(this.buttonDel); - this.ToolsPanel.Controls.Add(this.buttonUpd); - this.ToolsPanel.Controls.Add(this.buttonAdd); - this.ToolsPanel.Location = new System.Drawing.Point(608, 12); - this.ToolsPanel.Name = "ToolsPanel"; - this.ToolsPanel.Size = new System.Drawing.Size(180, 426); - this.ToolsPanel.TabIndex = 3; - // - // buttonRef - // - this.buttonRef.Location = new System.Drawing.Point(31, 206); - this.buttonRef.Name = "buttonRef"; - this.buttonRef.Size = new System.Drawing.Size(126, 36); - this.buttonRef.TabIndex = 3; - this.buttonRef.Text = "Обновить"; - this.buttonRef.UseVisualStyleBackColor = true; - this.buttonRef.Click += new System.EventHandler(this.ButtonRef_Click); - // - // buttonDel - // - this.buttonDel.Location = new System.Drawing.Point(31, 142); - this.buttonDel.Name = "buttonDel"; - this.buttonDel.Size = new System.Drawing.Size(126, 36); - this.buttonDel.TabIndex = 2; - this.buttonDel.Text = "Удалить"; - this.buttonDel.UseVisualStyleBackColor = true; - this.buttonDel.Click += new System.EventHandler(this.ButtonDel_Click); - // - // buttonUpd - // - this.buttonUpd.Location = new System.Drawing.Point(31, 76); - this.buttonUpd.Name = "buttonUpd"; - this.buttonUpd.Size = new System.Drawing.Size(126, 36); - this.buttonUpd.TabIndex = 1; - this.buttonUpd.Text = "Изменить"; - this.buttonUpd.UseVisualStyleBackColor = true; - this.buttonUpd.Click += new System.EventHandler(this.ButtonUpd_Click); - // - // buttonAdd - // - this.buttonAdd.Location = new System.Drawing.Point(31, 16); - this.buttonAdd.Name = "buttonAdd"; - this.buttonAdd.Size = new System.Drawing.Size(126, 36); - this.buttonAdd.TabIndex = 0; - this.buttonAdd.Text = "Добавить"; - this.buttonAdd.UseVisualStyleBackColor = true; - this.buttonAdd.Click += new System.EventHandler(this.ButtonAdd_Click); - // // dataGridView // - this.dataGridView.AllowUserToAddRows = false; - this.dataGridView.AllowUserToDeleteRows = false; this.dataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.dataGridView.Location = new System.Drawing.Point(12, 12); + this.dataGridView.Location = new System.Drawing.Point(0, 0); this.dataGridView.Name = "dataGridView"; - this.dataGridView.ReadOnly = true; this.dataGridView.RowHeadersWidth = 51; this.dataGridView.RowTemplate.Height = 29; - this.dataGridView.Size = new System.Drawing.Size(590, 426); - this.dataGridView.TabIndex = 2; + this.dataGridView.Size = new System.Drawing.Size(624, 446); + this.dataGridView.TabIndex = 0; // - // FormSecure + // ButtonAdd + // + this.ButtonAdd.Location = new System.Drawing.Point(630, 12); + this.ButtonAdd.Name = "ButtonAdd"; + this.ButtonAdd.Size = new System.Drawing.Size(158, 29); + this.ButtonAdd.TabIndex = 1; + this.ButtonAdd.Text = "Добавить"; + this.ButtonAdd.UseVisualStyleBackColor = true; + this.ButtonAdd.Click += new System.EventHandler(this.ButtonAdd_Click); + // + // ButtonUpd + // + this.ButtonUpd.Location = new System.Drawing.Point(630, 47); + this.ButtonUpd.Name = "ButtonUpd"; + this.ButtonUpd.Size = new System.Drawing.Size(158, 29); + this.ButtonUpd.TabIndex = 2; + this.ButtonUpd.Text = "Изменить"; + this.ButtonUpd.UseVisualStyleBackColor = true; + this.ButtonUpd.Click += new System.EventHandler(this.ButtonUpd_Click); + // + // ButtonDel + // + this.ButtonDel.Location = new System.Drawing.Point(630, 82); + this.ButtonDel.Name = "ButtonDel"; + this.ButtonDel.Size = new System.Drawing.Size(158, 29); + this.ButtonDel.TabIndex = 3; + this.ButtonDel.Text = "Удалить"; + this.ButtonDel.UseVisualStyleBackColor = true; + this.ButtonDel.Click += new System.EventHandler(this.ButtonDel_Click); + // + // ButtonRef + // + this.ButtonRef.Location = new System.Drawing.Point(630, 117); + this.ButtonRef.Name = "ButtonRef"; + this.ButtonRef.Size = new System.Drawing.Size(158, 29); + this.ButtonRef.TabIndex = 4; + this.ButtonRef.Text = "Обновить"; + this.ButtonRef.UseVisualStyleBackColor = true; + this.ButtonRef.Click += new System.EventHandler(this.ButtonRef_Click); + // + // FormSecures // this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 20F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(800, 450); - this.Controls.Add(this.ToolsPanel); + this.Controls.Add(this.ButtonRef); + this.Controls.Add(this.ButtonDel); + this.Controls.Add(this.ButtonUpd); + this.Controls.Add(this.ButtonAdd); this.Controls.Add(this.dataGridView); this.Name = "FormSecures"; - this.Text = "Изделия"; + this.Text = "FormSecures"; this.Load += new System.EventHandler(this.FormSecures_Load); - this.ToolsPanel.ResumeLayout(false); ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).EndInit(); this.ResumeLayout(false); @@ -120,11 +106,10 @@ #endregion - private Panel ToolsPanel; - private Button buttonRef; - private Button buttonDel; - private Button buttonUpd; - private Button buttonAdd; private DataGridView dataGridView; + private Button ButtonAdd; + private Button ButtonUpd; + private Button ButtonDel; + private Button ButtonRef; } } \ No newline at end of file diff --git a/SecuritySystem/FormSecures.cs b/SecuritySystem/FormSecures.cs index fd85fb5..b435b12 100644 --- a/SecuritySystem/FormSecures.cs +++ b/SecuritySystem/FormSecures.cs @@ -2,15 +2,7 @@ using SecuritySystemView; using SecuritySystemContracts.BindingModels; using SecuritySystemContracts.BusinessLogicsContracts; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Forms; +using SecuritySystemContracts.DI; namespace SecuritySystemView { @@ -32,60 +24,52 @@ namespace SecuritySystemView { try { - var list = _logic.ReadList(null); - if (list != null) - { - dataGridView.DataSource = list; - dataGridView.Columns["Id"].Visible = false; - dataGridView.Columns["SecureComponents"].Visible = false; - dataGridView.Columns["SecureName"].AutoSizeMode = - DataGridViewAutoSizeColumnMode.Fill; - } - _logger.LogInformation("Загрузка изделий"); + dataGridView.FillandConfigGrid(_logic.ReadList(null)); + _logger.LogInformation("Загрузка изделий"); } catch (Exception ex) { _logger.LogError(ex, "Ошибка загрузки изделий"); - MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, + MessageBoxIcon.Error); } } private void ButtonAdd_Click(object sender, EventArgs e) { - var service = Program.ServiceProvider?.GetService(typeof(FormSecure)); - if (service is FormSecure form) - { + var form = DependencyManager.Instance.Resolve (); if (form.ShowDialog() == DialogResult.OK) { LoadData(); } - } } private void ButtonUpd_Click(object sender, EventArgs e) { if (dataGridView.SelectedRows.Count == 1) { - var service = Program.ServiceProvider?.GetService(typeof(FormSecure)); - if (service is FormSecure form) - { + var form = DependencyManager.Instance.Resolve (); form.Id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); if (form.ShowDialog() == DialogResult.OK) { LoadData(); } - } } } private void ButtonDel_Click(object sender, EventArgs e) { if (dataGridView.SelectedRows.Count == 1) { - if (MessageBox.Show("Удалить запись?", "Вопрос", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) + if (MessageBox.Show("Удалить запись?", "Вопрос", + MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { - int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); + int id = + Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); _logger.LogInformation("Удаление изделия"); try { - if (!_logic.Delete(new SecureBindingModel { Id = id })) + if (!_logic.Delete(new SecureBindingModel + { + Id = id + })) { throw new Exception("Ошибка при удалении. Дополнительная информация в логах."); } @@ -93,8 +77,9 @@ namespace SecuritySystemView } catch (Exception ex) { - _logger.LogError(ex, "Ошибка удаления изделия"); - MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + _logger.LogError(ex, "Ошибка удаления компонента"); + MessageBox.Show(ex.Message, "Ошибка", + MessageBoxButtons.OK, MessageBoxIcon.Error); } } } diff --git a/SecuritySystem/FormSecures.resx b/SecuritySystem/FormSecures.resx index 1af7de1..f298a7b 100644 --- a/SecuritySystem/FormSecures.resx +++ b/SecuritySystem/FormSecures.resx @@ -1,64 +1,4 @@ - - - + diff --git a/SecuritySystem/Program.cs b/SecuritySystem/Program.cs index 59a539d..e220d8f 100644 --- a/SecuritySystem/Program.cs +++ b/SecuritySystem/Program.cs @@ -1,38 +1,39 @@ -using SecuritySystemView; -using SecuritySystemBusinessLogic.BusinessLogics; using Microsoft.Extensions.DependencyInjection; -using SecuritySystemBusinessLogic.OfficePackage; -using SecuritySystemBusinessLogic.OfficePackage.Implements; using Microsoft.Extensions.Logging; -using NLog.Extensions.Logging; -using SecuritySystemDatabaseImplement.Implements; using SecuritySystemContracts.BusinessLogicsContracts; -using SecuritySystemContracts.StoragesContracts; -using SecureCompanyBusinessLogic.BusinessLogics; using SecuritySystemContracts.StorageContracts; +using SecuritySystemView; +using SecuritySystemDatabaseImplement.Implements; +using NLog.Extensions.Logging; +using SecuritySystemBusinessLogic.BusinessLogics; +using System; +using SecuritySystemBusinessLogic.OfficePackage.Implements; +using SecuritySystemBusinessLogic.OfficePackage; using SecuritySystemBusinessLogic.MailWorker; using SecuritySystemContracts.BindingModels; +using SecuritySystemContracts.DI; +using SecureCompanyBusinessLogic.BusinessLogics; +using SecuritySystemBusinessLogic.BusinessLogics; +using SecuritySystemBusinessLogic.MailWorker; +using SecuritySystemBusinessLogic.OfficePackage.Implements; +using SecuritySystemBusinessLogic.OfficePackage; +using SecuritySystemContracts.BindingModels; +using SecuritySystemContracts.BusinessLogicsContracts; +using SecuritySystemView; -namespace SecuritySystemView +namespace SecuritySystem { internal static class Program { - private static ServiceProvider? _serviceProvider; - public static ServiceProvider? ServiceProvider => _serviceProvider; - /// - /// The main entry point for the application. - /// [STAThread] static void Main() { ApplicationConfiguration.Initialize(); var services = new ServiceCollection(); - ConfigureServices(services); - _serviceProvider = services.BuildServiceProvider(); + InitDependency(); try { - var mailSender = - _serviceProvider.GetService(); + var mailSender = DependencyManager.Instance.Resolve(); mailSender?.MailConfig(new MailConfigBindingModel { MailLogin = @@ -50,51 +51,51 @@ namespace SecuritySystemView } catch (Exception ex) { - var logger = _serviceProvider.GetService(); + var logger = DependencyManager.Instance.Resolve(); logger?.LogError(ex, " "); } - Application.Run(_serviceProvider.GetRequiredService()); + Application.Run(DependencyManager.Instance.Resolve()); } - private static void ConfigureServices(ServiceCollection services) + private static void InitDependency() { - services.AddLogging(option => + DependencyManager.InitDependency(); + + DependencyManager.Instance.AddLogging(option => { option.SetMinimumLevel(LogLevel.Information); option.AddNLog("nlog.config"); }); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddSingleton(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(true); + DependencyManager.Instance.RegisterType(); + + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); } - private static void MailCheck(object obj) => ServiceProvider?.GetService()?.MailCheck(); + private static void MailCheck(object obj) => DependencyManager.Instance.Resolve()?.MailCheck(); } } \ No newline at end of file diff --git a/SecuritySystem/SecuritySystemView.csproj b/SecuritySystem/SecuritySystemView.csproj index 66cfba2..6eb63fe 100644 --- a/SecuritySystem/SecuritySystemView.csproj +++ b/SecuritySystem/SecuritySystemView.csproj @@ -9,12 +9,12 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/SecuritySystemBusinessLogic/BusinessLogics/BackUpLogic.cs b/SecuritySystemBusinessLogic/BusinessLogics/BackUpLogic.cs new file mode 100644 index 0000000..948ec4f --- /dev/null +++ b/SecuritySystemBusinessLogic/BusinessLogics/BackUpLogic.cs @@ -0,0 +1,105 @@ +using Microsoft.Extensions.Logging; +using System; +using System.Collections.Generic; +using System.IO.Compression; +using System.Linq; +using System.Reflection; +using System.Runtime.Serialization.Json; +using System.Text; +using System.Threading.Tasks; +using SecuritySystemContracts.BindingModels; +using SecuritySystemContracts.BusinessLogicsContracts; +using SecuritySystemContracts.StorageContracts; +using SecuritySystemDataModels; + +namespace SecuritySystemBusinessLogic.BusinessLogics +{ + public class BackUpLogic : IBackUpLogic + { + private readonly ILogger _logger; + private readonly IBackUpInfo _backUpInfo; + public BackUpLogic(ILogger logger, IBackUpInfo backUpInfo) + { + _logger = logger; + _backUpInfo = backUpInfo; + } + public void CreateBackUp(BackUpSaveBinidngModel model) + { + if (_backUpInfo == null) + { + return; + } + try + { + _logger.LogDebug("Clear folder"); + // зачистка папки и удаление старого архива + var dirInfo = new DirectoryInfo(model.FolderName); + if (dirInfo.Exists) + { + foreach (var file in dirInfo.GetFiles()) + { + file.Delete(); + } + } + _logger.LogDebug("Delete archive"); + string fileName = $"{model.FolderName}.zip"; + if (File.Exists(fileName)) + { + File.Delete(fileName); + } + // берем метод для сохранения + _logger.LogDebug("Get assembly"); + var typeIId = typeof(IId); + var assembly = typeIId.Assembly; + if (assembly == null) + { + throw new ArgumentNullException("Сборка не найдена", + nameof(assembly)); + } + var types = assembly.GetTypes(); + var method = GetType().GetMethod("SaveToFile", + BindingFlags.NonPublic | BindingFlags.Instance); + _logger.LogDebug("Find {count} types", types.Length); + foreach (var type in types) + { + if (type.IsInterface && type.GetInterface(typeIId.Name) != + null) + { + var modelType = + _backUpInfo.GetTypeByModelInterface(type.Name); + if (modelType == null) + { + throw new InvalidOperationException($"Не найден класс - модель для { type.Name }"); + } + _logger.LogDebug("Call SaveToFile method for {name} type", type.Name); + // вызываем метод на выполнение + method?.MakeGenericMethod(modelType).Invoke(this, new + object[] { model.FolderName }); + } + } + _logger.LogDebug("Create zip and remove folder"); + // архивируем + ZipFile.CreateFromDirectory(model.FolderName, fileName); + // удаляем папку + dirInfo.Delete(true); + } + catch (Exception) + { + throw; + } + } + private void SaveToFile(string folderName) where T : class, new() + { + var records = _backUpInfo.GetList(); + if (records == null) + { + _logger.LogWarning("{type} type get null list", typeof(T).Name); + return; + } + var jsonFormatter = new DataContractJsonSerializer(typeof(List)); + using var fs = new FileStream(string.Format("{0}/{1}.json", folderName, typeof(T).Name), FileMode.OpenOrCreate); + jsonFormatter.WriteObject(fs, records); + } + + } +} diff --git a/SecuritySystemBusinessLogic/BusinessLogics/ClientLogic.cs b/SecuritySystemBusinessLogic/BusinessLogics/ClientLogic.cs index fd27b88..a3e9cfe 100644 --- a/SecuritySystemBusinessLogic/BusinessLogics/ClientLogic.cs +++ b/SecuritySystemBusinessLogic/BusinessLogics/ClientLogic.cs @@ -1,7 +1,7 @@ using SecuritySystemContracts.BindingModels; using SecuritySystemContracts.BusinessLogicsContracts; using SecuritySystemContracts.SearchModels; -using SecuritySystemContracts.StoragesContracts; +using SecuritySystemContracts.StorageContracts; using SecuritySystemContracts.ViewModels; using SecuritySystemDataModels.Models; using Microsoft.Extensions.Logging; diff --git a/SecuritySystemBusinessLogic/BusinessLogics/ComponentLogic.cs b/SecuritySystemBusinessLogic/BusinessLogics/ComponentLogic.cs index 3b74f22..5c22c04 100644 --- a/SecuritySystemBusinessLogic/BusinessLogics/ComponentLogic.cs +++ b/SecuritySystemBusinessLogic/BusinessLogics/ComponentLogic.cs @@ -2,7 +2,7 @@ using SecuritySystemContracts.BindingModels; using SecuritySystemContracts.BusinessLogicsContracts; using SecuritySystemContracts.SearchModels; -using SecuritySystemContracts.StoragesContracts; +using SecuritySystemContracts.StorageContracts; using SecuritySystemContracts.ViewModels; using Microsoft.Extensions.Logging; diff --git a/SecuritySystemBusinessLogic/BusinessLogics/OrderLogic.cs b/SecuritySystemBusinessLogic/BusinessLogics/OrderLogic.cs index 38cca4e..e35491a 100644 --- a/SecuritySystemBusinessLogic/BusinessLogics/OrderLogic.cs +++ b/SecuritySystemBusinessLogic/BusinessLogics/OrderLogic.cs @@ -2,22 +2,10 @@ using SecuritySystemContracts.BindingModels; using SecuritySystemContracts.BusinessLogicsContracts; using SecuritySystemContracts.SearchModels; -using SecuritySystemContracts.StoragesContracts; -using SecuritySystemContracts.ViewModels; -using SecuritySystemDataModels.Enums; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using SecuritySystemBusinessLogic.MailWorker; -using SecuritySystemContracts.BindingModels; -using SecuritySystemContracts.BusinessLogicsContracts; -using SecuritySystemContracts.SearchModels; using SecuritySystemContracts.StorageContracts; using SecuritySystemContracts.ViewModels; -using SecuritySystemDataModels; using SecuritySystemDataModels.Enums; +using SecuritySystemBusinessLogic.MailWorker; namespace SecuritySystemBusinessLogic.BusinessLogics { diff --git a/SecuritySystemBusinessLogic/BusinessLogics/ReportLogic.cs b/SecuritySystemBusinessLogic/BusinessLogics/ReportLogic.cs index fb7d5e1..ddbbdc1 100644 --- a/SecuritySystemBusinessLogic/BusinessLogics/ReportLogic.cs +++ b/SecuritySystemBusinessLogic/BusinessLogics/ReportLogic.cs @@ -3,7 +3,7 @@ using SecuritySystemBusinessLogic.OfficePackage; using SecuritySystemContracts.BindingModels; using SecuritySystemContracts.BusinessLogicsContracts; using SecuritySystemContracts.SearchModels; -using SecuritySystemContracts.StoragesContracts; +using SecuritySystemContracts.StorageContracts; using SecuritySystemContracts.ViewModels; namespace SecureCompanyBusinessLogic.BusinessLogics diff --git a/SecuritySystemBusinessLogic/BusinessLogics/SecureLogic.cs b/SecuritySystemBusinessLogic/BusinessLogics/SecureLogic.cs index 98a8ece..f77e47a 100644 --- a/SecuritySystemBusinessLogic/BusinessLogics/SecureLogic.cs +++ b/SecuritySystemBusinessLogic/BusinessLogics/SecureLogic.cs @@ -2,7 +2,7 @@ using SecuritySystemContracts.BindingModels; using SecuritySystemContracts.BusinessLogicsContracts; using SecuritySystemContracts.SearchModels; -using SecuritySystemContracts.StoragesContracts; +using SecuritySystemContracts.StorageContracts; using SecuritySystemContracts.ViewModels; using Microsoft.Extensions.Logging; diff --git a/SecuritySystemContracts/Attributes/ColumnAttribute.cs b/SecuritySystemContracts/Attributes/ColumnAttribute.cs new file mode 100644 index 0000000..11a5a95 --- /dev/null +++ b/SecuritySystemContracts/Attributes/ColumnAttribute.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SecuritySystemContracts.Attributes +{ + [AttributeUsage(AttributeTargets.Property)] + public class ColumnAttribute : Attribute + { + public ColumnAttribute(string title = "", bool visible = true, int width + = 0, GridViewAutoSize gridViewAutoSize = GridViewAutoSize.None, bool + isUseAutoSize = false) + { + Title = title; + Visible = visible; + Width = width; + GridViewAutoSize = gridViewAutoSize; + IsUseAutoSize = isUseAutoSize; + } + public string Title { get; private set; } + public bool Visible { get; private set; } + public int Width { get; private set; } + public GridViewAutoSize GridViewAutoSize { get; private set; } + public bool IsUseAutoSize { get; private set; } + } +} diff --git a/SecuritySystemContracts/Attributes/GridViewAutoSize.cs b/SecuritySystemContracts/Attributes/GridViewAutoSize.cs new file mode 100644 index 0000000..7e6a4c4 --- /dev/null +++ b/SecuritySystemContracts/Attributes/GridViewAutoSize.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SecuritySystemContracts.Attributes +{ + public enum GridViewAutoSize + { + NotSet = 0, + None = 1, + ColumnHeader = 2, + AllCellsExceptHeader = 4, + AllCells = 6, + DisplayedCellsExceptHeader = 8, + DisplayedCells = 10, + Fill = 16 + } +} diff --git a/SecuritySystemContracts/BindingModels/BackUpSaveBinidngModel.cs b/SecuritySystemContracts/BindingModels/BackUpSaveBinidngModel.cs new file mode 100644 index 0000000..717d494 --- /dev/null +++ b/SecuritySystemContracts/BindingModels/BackUpSaveBinidngModel.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SecuritySystemContracts.BindingModels +{ + public class BackUpSaveBinidngModel + { + public string FolderName { get; set; } = string.Empty; + } + +} diff --git a/SecuritySystemContracts/BindingModels/MessageInfoBindingModel.cs b/SecuritySystemContracts/BindingModels/MessageInfoBindingModel.cs index 23f48c8..62992ae 100644 --- a/SecuritySystemContracts/BindingModels/MessageInfoBindingModel.cs +++ b/SecuritySystemContracts/BindingModels/MessageInfoBindingModel.cs @@ -19,5 +19,6 @@ namespace SecuritySystemContracts.BindingModels public string Subject { get; set; } = string.Empty; public string Body { get; set; } = string.Empty; + public int Id => throw new NotImplementedException(); } } diff --git a/SecuritySystemContracts/BusinessLogicsContracts/IBackUpLogic.cs b/SecuritySystemContracts/BusinessLogicsContracts/IBackUpLogic.cs new file mode 100644 index 0000000..c7bd3b6 --- /dev/null +++ b/SecuritySystemContracts/BusinessLogicsContracts/IBackUpLogic.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using SecuritySystemContracts.BindingModels; + +namespace SecuritySystemContracts.BusinessLogicsContracts +{ + public interface IBackUpLogic + { + void CreateBackUp(BackUpSaveBinidngModel model); + } + +} diff --git a/SecuritySystemContracts/BusinessLogicsContracts/IReportLogic.cs b/SecuritySystemContracts/BusinessLogicsContracts/IReportLogic.cs index 98ec59a..25512f5 100644 --- a/SecuritySystemContracts/BusinessLogicsContracts/IReportLogic.cs +++ b/SecuritySystemContracts/BusinessLogicsContracts/IReportLogic.cs @@ -1,10 +1,5 @@ using SecuritySystemContracts.BindingModels; using SecuritySystemContracts.ViewModels; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace SecuritySystemContracts.BusinessLogicsContracts { diff --git a/SecuritySystemContracts/DI/DependencyManager.cs b/SecuritySystemContracts/DI/DependencyManager.cs new file mode 100644 index 0000000..a85ab36 --- /dev/null +++ b/SecuritySystemContracts/DI/DependencyManager.cs @@ -0,0 +1,43 @@ +using Microsoft.Extensions.Logging; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SecuritySystemContracts.DI +{ + public class DependencyManager + { + private readonly IDependencyContainer _dependencyManager; + private static DependencyManager? _manager; + private static readonly object _locjObject = new(); + private DependencyManager() + { + _dependencyManager = new UnityDependencyContainer(); + } + public static DependencyManager Instance + { + get + { + if (_manager == null) { lock (_locjObject) { _manager = new DependencyManager(); } } + return _manager; + } + } + public static void InitDependency() + { + var ext = ServiceProviderLoader.GetImplementationExtensions(); + if (ext == null) + { + throw new ArgumentNullException("Отсутствуют компоненты для загрузки зависимостей по модулям"); + } + ext.RegisterServices(); + } + public void AddLogging(Action configure) => _dependencyManager.AddLogging(configure); + public void RegisterType(bool isSingle = false) where U : + class, T where T : class => _dependencyManager.RegisterType(isSingle); + public void RegisterType(bool isSingle = false) where T : class => _dependencyManager.RegisterType(isSingle); + public T Resolve() => _dependencyManager.Resolve(); + + } +} diff --git a/SecuritySystemContracts/DI/IDependencyContainer.cs b/SecuritySystemContracts/DI/IDependencyContainer.cs new file mode 100644 index 0000000..5d9ebbe --- /dev/null +++ b/SecuritySystemContracts/DI/IDependencyContainer.cs @@ -0,0 +1,17 @@ +using Microsoft.Extensions.Logging; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SecuritySystemContracts.DI +{ + public interface IDependencyContainer + { + void AddLogging(Action configure); + void RegisterType(bool isSingle) where U : class, T where T : class; + void RegisterType(bool isSingle) where T : class; + T Resolve(); + } +} diff --git a/SecuritySystemContracts/DI/IImplementationExtension.cs b/SecuritySystemContracts/DI/IImplementationExtension.cs new file mode 100644 index 0000000..d6e3be8 --- /dev/null +++ b/SecuritySystemContracts/DI/IImplementationExtension.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SecuritySystemContracts.DI +{ + public interface IImplementationExtension + { + public int Priority { get; } + public void RegisterServices(); + } +} diff --git a/SecuritySystemContracts/DI/ServiceDependencyContainer.cs b/SecuritySystemContracts/DI/ServiceDependencyContainer.cs new file mode 100644 index 0000000..23f4f10 --- /dev/null +++ b/SecuritySystemContracts/DI/ServiceDependencyContainer.cs @@ -0,0 +1,62 @@ +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SecuritySystemContracts.DI +{ + public class ServiceDependencyContainer : IDependencyContainer + { + private ServiceProvider? _serviceProvider; + + private readonly ServiceCollection _serviceCollection; + + public ServiceDependencyContainer() + { + _serviceCollection = new ServiceCollection(); + } + + public void AddLogging(Action configure) + { + _serviceCollection.AddLogging(configure); + } + + public void RegisterType(bool isSingle) where U : class, T where T : class + { + if (isSingle) + { + _serviceCollection.AddSingleton(); + } + else + { + _serviceCollection.AddTransient(); + } + _serviceProvider = null; + } + + public void RegisterType(bool isSingle) where T : class + { + if (isSingle) + { + _serviceCollection.AddSingleton(); + } + else + { + _serviceCollection.AddTransient(); + } + _serviceProvider = null; + } + + public T Resolve() + { + if (_serviceProvider == null) + { + _serviceProvider = _serviceCollection.BuildServiceProvider(); + } + return _serviceProvider.GetService()!; + } + } +} diff --git a/SecuritySystemContracts/DI/ServiceProviderLoader.cs b/SecuritySystemContracts/DI/ServiceProviderLoader.cs new file mode 100644 index 0000000..183dbf4 --- /dev/null +++ b/SecuritySystemContracts/DI/ServiceProviderLoader.cs @@ -0,0 +1,57 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; + +namespace SecuritySystemContracts.DI +{ + public static partial class ServiceProviderLoader + { + public static IImplementationExtension? GetImplementationExtensions() + { + IImplementationExtension? source = null; + var files = + Directory.GetFiles(TryGetImplementationExtensionsFolder(), "*.dll", SearchOption.AllDirectories); + foreach (var file in files.Distinct()) + { + Assembly asm = Assembly.LoadFrom(file); + foreach (var t in asm.GetExportedTypes()) + { + if (t.IsClass && + typeof(IImplementationExtension).IsAssignableFrom(t)) + { + if (source == null) + { + source = + (IImplementationExtension)Activator.CreateInstance(t)!; + } + else + { + var newSource = + (IImplementationExtension)Activator.CreateInstance(t)!; + if (newSource.Priority > + source.Priority) + { + source = newSource; + } + } + } + } + } + return source; + } + private static string TryGetImplementationExtensionsFolder() + { + var directory = new DirectoryInfo(Directory.GetCurrentDirectory()); + while (directory != null && + !directory.GetDirectories("ImplementationExtensions", SearchOption.AllDirectories).Any(x => x.Name == "ImplementationExtensions")) + { + directory = directory.Parent; + } + return $"{directory?.FullName}\\ImplementationExtensions"; + } + + } +} diff --git a/SecuritySystemContracts/DI/UnityDependencyContainer.cs b/SecuritySystemContracts/DI/UnityDependencyContainer.cs new file mode 100644 index 0000000..d937be6 --- /dev/null +++ b/SecuritySystemContracts/DI/UnityDependencyContainer.cs @@ -0,0 +1,55 @@ +using Microsoft.Extensions.Logging; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Unity; +using Unity.Microsoft.Logging; + +namespace SecuritySystemContracts.DI +{ + public class UnityDependencyContainer : IDependencyContainer + { + private UnityContainer? _unityContrainer; + + public UnityDependencyContainer() + { + _unityContrainer = new UnityContainer(); + } + + public void AddLogging(Action configure) + { + _unityContrainer.AddExtension(new LoggingExtension(LoggerFactory.Create(configure))); + } + + public void RegisterType(bool isSingle) where U : class, T where T : class + { + if (isSingle) + { + _unityContrainer.RegisterSingleton(); + } + else + { + _unityContrainer.RegisterType(); + } + } + + public void RegisterType(bool isSingle) where T : class + { + if (isSingle) + { + _unityContrainer.RegisterSingleton(); + } + else + { + _unityContrainer.RegisterType(); + } + } + + public T Resolve() + { + return _unityContrainer.Resolve(); + } + } +} diff --git a/SecuritySystemContracts/SecuritySystemContracts.csproj b/SecuritySystemContracts/SecuritySystemContracts.csproj index c816b99..9db876f 100644 --- a/SecuritySystemContracts/SecuritySystemContracts.csproj +++ b/SecuritySystemContracts/SecuritySystemContracts.csproj @@ -10,6 +10,8 @@ + + diff --git a/SecuritySystemContracts/StorageContracts/IBackUpInfo.cs b/SecuritySystemContracts/StorageContracts/IBackUpInfo.cs new file mode 100644 index 0000000..5079999 --- /dev/null +++ b/SecuritySystemContracts/StorageContracts/IBackUpInfo.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SecuritySystemContracts.StorageContracts +{ + public interface IBackUpInfo + { + List? GetList() where T : class, new(); + Type? GetTypeByModelInterface(string modelInterfaceName); + } +} diff --git a/SecuritySystemContracts/StorageContracts/IClientStorage.cs b/SecuritySystemContracts/StorageContracts/IClientStorage.cs index 1271f85..7d05a11 100644 --- a/SecuritySystemContracts/StorageContracts/IClientStorage.cs +++ b/SecuritySystemContracts/StorageContracts/IClientStorage.cs @@ -9,7 +9,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace SecuritySystemContracts.StoragesContracts +namespace SecuritySystemContracts.StorageContracts { public interface IClientStorage { diff --git a/SecuritySystemContracts/StorageContracts/IComponentStorage.cs b/SecuritySystemContracts/StorageContracts/IComponentStorage.cs index 6bfb296..d34677b 100644 --- a/SecuritySystemContracts/StorageContracts/IComponentStorage.cs +++ b/SecuritySystemContracts/StorageContracts/IComponentStorage.cs @@ -7,7 +7,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace SecuritySystemContracts.StoragesContracts +namespace SecuritySystemContracts.StorageContracts { public interface IComponentStorage { diff --git a/SecuritySystemContracts/StorageContracts/IOrderStorage.cs b/SecuritySystemContracts/StorageContracts/IOrderStorage.cs index b0ed803..186ed8c 100644 --- a/SecuritySystemContracts/StorageContracts/IOrderStorage.cs +++ b/SecuritySystemContracts/StorageContracts/IOrderStorage.cs @@ -7,7 +7,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace SecuritySystemContracts.StoragesContracts +namespace SecuritySystemContracts.StorageContracts { public interface IOrderStorage { diff --git a/SecuritySystemContracts/StorageContracts/ISecureStorage.cs b/SecuritySystemContracts/StorageContracts/ISecureStorage.cs index 7dc62cc..41da294 100644 --- a/SecuritySystemContracts/StorageContracts/ISecureStorage.cs +++ b/SecuritySystemContracts/StorageContracts/ISecureStorage.cs @@ -7,7 +7,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace SecuritySystemContracts.StoragesContracts +namespace SecuritySystemContracts.StorageContracts { public interface ISecureStorage { diff --git a/SecuritySystemContracts/ViewModels/ClientViewModel.cs b/SecuritySystemContracts/ViewModels/ClientViewModel.cs index de2e2a9..f628d43 100644 --- a/SecuritySystemContracts/ViewModels/ClientViewModel.cs +++ b/SecuritySystemContracts/ViewModels/ClientViewModel.cs @@ -5,17 +5,19 @@ using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; +using SecuritySystemContracts.Attributes; namespace SecuritySystemContracts.ViewModels { public class ClientViewModel : IClientModel { + [Column(visible: false)] public int Id { get; set; } - [DisplayName("ФИО клиента")] + [Column(title: "ФИО клиента", width: 75)] public string ClientFIO { get; set; } = string.Empty; - [DisplayName("Логин (эл. почта)")] + [Column(title: "Логин (эл. почта)", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)] public string Email { get; set; } = string.Empty; - [DisplayName("Пароль")] + [Column(title: "Пароль", width: 75)] public string Password { get; set; } = string.Empty; } } diff --git a/SecuritySystemContracts/ViewModels/ComponentViewModel.cs b/SecuritySystemContracts/ViewModels/ComponentViewModel.cs index 08769e5..535d6f9 100644 --- a/SecuritySystemContracts/ViewModels/ComponentViewModel.cs +++ b/SecuritySystemContracts/ViewModels/ComponentViewModel.cs @@ -1,19 +1,16 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using SecuritySystemDataModels.Models; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using SecuritySystemDataModels.Models; +using SecuritySystemContracts.Attributes; namespace SecuritySystemContracts.ViewModels { public class ComponentViewModel : IComponentModel { + [Column(visible: false)] public int Id { get; set; } - [DisplayName("Название компонента")] + [Column(title: "Название компонента", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)] public string ComponentName { get; set; } = string.Empty; - [DisplayName("Цена")] + [Column(title: "Цена", width: 75)] public double Cost { get; set; } } + } diff --git a/SecuritySystemContracts/ViewModels/ImplementerViewModel.cs b/SecuritySystemContracts/ViewModels/ImplementerViewModel.cs index 52bfb7f..fc9dddb 100644 --- a/SecuritySystemContracts/ViewModels/ImplementerViewModel.cs +++ b/SecuritySystemContracts/ViewModels/ImplementerViewModel.cs @@ -1,26 +1,19 @@ using SecuritySystemDataModels.Models; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using SecuritySystemContracts.Attributes; namespace SecuritySystemContracts.ViewModels { - /// - /// Исполнитель, выполняющий заказы - /// - public class ImplementerViewModel : IImplementerModel - { - public int Id { get; set; } - [DisplayName("ФИО исполнителя")] - public string ImplementerFIO { get; set; } = string.Empty; - [DisplayName("Пароль")] - public string Password { get; set; } = string.Empty; - [DisplayName("Стаж работы")] - public int WorkExperience { get; set; } - [DisplayName("Квалификация")] - public int Qualification { get; set; } - } + public class ImplementerViewModel : IImplementerModel + { + [Column(visible: false)] + public int Id { get; set; } + [Column(title: "ФИО исполнителя", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)] + public string ImplementerFIO { get; set; } = string.Empty; + [Column(title: "Пароль", width: 75)] + public string Password { get; set; } = string.Empty; + [Column(title: "Стаж работы", width: 75)] + public int WorkExperience { get; set; } + [Column(title: "Квалификация", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)] + public int Qualification { get; set; } + } } diff --git a/SecuritySystemContracts/ViewModels/MessageInfoViewModel.cs b/SecuritySystemContracts/ViewModels/MessageInfoViewModel.cs index 1ce8411..0b835a2 100644 --- a/SecuritySystemContracts/ViewModels/MessageInfoViewModel.cs +++ b/SecuritySystemContracts/ViewModels/MessageInfoViewModel.cs @@ -1,25 +1,23 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using SecuritySystemDataModels.Models; +using SecuritySystemDataModels.Models; +using SecuritySystemContracts.Attributes; namespace SecuritySystemContracts.ViewModels { public class MessageInfoViewModel : IMessageInfoModel { + [Column(visible: false)] public string MessageId { get; set; } = string.Empty; - + [Column(visible: false)] public int? ClientId { get; set; } - [DisplayName("Отправитель")] + [Column(title: "Отправитель", width: 150)] public string SenderName { get; set; } = string.Empty; - [DisplayName("Дата письма")] + [Column(title: "Дата письма", width: 150)] public DateTime DateDelivery { get; set; } - [DisplayName("Заголовок")] + [Column(title: "Заголовок", width: 150)] public string Subject { get; set; } = string.Empty; - [DisplayName("Текст письма")] + [Column(title: "Текст письма", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)] public string Body { get; set; } = string.Empty; + [Column(visible: false)] + public int Id => throw new NotImplementedException(); } } diff --git a/SecuritySystemContracts/ViewModels/OrderViewModel.cs b/SecuritySystemContracts/ViewModels/OrderViewModel.cs index 83049af..fedeeaf 100644 --- a/SecuritySystemContracts/ViewModels/OrderViewModel.cs +++ b/SecuritySystemContracts/ViewModels/OrderViewModel.cs @@ -1,39 +1,35 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; +using SecuritySystemDataModels.Enums; using SecuritySystemDataModels.Models; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using SecuritySystemDataModels.Enums; +using SecuritySystemContracts.Attributes; namespace SecuritySystemContracts.ViewModels { public class OrderViewModel : IOrderModel { - [DisplayName("Номер")] + [Column(title: "Номер", width: 75)] public int Id { get; set; } + [Column(visible: false)] public int SecureId { get; set; } - [DisplayName("Изделие")] + [Column(title: "Изделие", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)] public string SecureName { get; set; } = string.Empty; + [Column(visible: false)] public int ClientId { get; set; } - [DisplayName("Клиент")] + [Column(title: "Клиент", width: 200)] public string ClientFIO { get; set; } = string.Empty; + [Column(visible: false)] public int? ImplementerId { get; set; } - [DisplayName("Исполнитель")] + [Column(title: "Исполнитель", width: 200)] public string ImplementerFIO { get; set; } = string.Empty; - [DisplayName("Количество")] + [Column(title: "Количество", width: 75)] public int Count { get; set; } - [DisplayName("Сумма")] + [Column(title: "Сумма", width: 75)] public double Sum { get; set; } - [DisplayName("Статус")] + [Column(title: "Статус", width: 75)] public OrderStatus Status { get; set; } = OrderStatus.Неизвестен; - [DisplayName("Дата создания")] + [Column(title: "Дата создания", width: 150)] public DateTime DateCreate { get; set; } = DateTime.Now; - [DisplayName("Дата выполнения")] + [Column(title: "Дата выполнения", width: 150)] public DateTime? DateImplement { get; set; } - - OrderStatus IOrderModel.Status => throw new NotImplementedException(); } } diff --git a/SecuritySystemContracts/ViewModels/SecureViewModel.cs b/SecuritySystemContracts/ViewModels/SecureViewModel.cs index 4480475..5d4f6e7 100644 --- a/SecuritySystemContracts/ViewModels/SecureViewModel.cs +++ b/SecuritySystemContracts/ViewModels/SecureViewModel.cs @@ -1,20 +1,17 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using SecuritySystemDataModels.Models; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using SecuritySystemDataModels.Models; +using SecuritySystemContracts.Attributes; namespace SecuritySystemContracts.ViewModels { public class SecureViewModel : ISecureModel { + [Column(visible: false)] public int Id { get; set; } - [DisplayName("Название изделия")] + [Column(title: "Название изделия", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)] public string SecureName { get; set; } = string.Empty; - [DisplayName("Цена")] + [Column(title: "Цена", width: 150)] public double Price { get; set; } + [Column(visible: false)] public Dictionary SecureComponents { get; diff --git a/SecuritySystemDataModels/Models/IMessageInfoModel.cs b/SecuritySystemDataModels/Models/IMessageInfoModel.cs index 287cc6e..99021a7 100644 --- a/SecuritySystemDataModels/Models/IMessageInfoModel.cs +++ b/SecuritySystemDataModels/Models/IMessageInfoModel.cs @@ -6,7 +6,7 @@ using System.Threading.Tasks; namespace SecuritySystemDataModels.Models { - public interface IMessageInfoModel + public interface IMessageInfoModel : IId { string MessageId { get; } int? ClientId { get; } diff --git a/SecuritySystemDatabaseImplement/DatabaseImplementationExtension.cs b/SecuritySystemDatabaseImplement/DatabaseImplementationExtension.cs new file mode 100644 index 0000000..8d4fb85 --- /dev/null +++ b/SecuritySystemDatabaseImplement/DatabaseImplementationExtension.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using SecuritySystemContracts.DI; +using SecuritySystemContracts.StorageContracts; +using SecuritySystemDatabaseImplement.Implements; + +namespace SecuritySystemDatabaseImplement +{ + public class DatabaseImplementationExtension : IImplementationExtension + { + public int Priority => 2; + + public void RegisterServices() + { + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + } + } +} diff --git a/SecuritySystemDatabaseImplement/Implements/BackUpInfo.cs b/SecuritySystemDatabaseImplement/Implements/BackUpInfo.cs new file mode 100644 index 0000000..3f1acc0 --- /dev/null +++ b/SecuritySystemDatabaseImplement/Implements/BackUpInfo.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using SecuritySystemContracts.StorageContracts; + +namespace SecuritySystemDatabaseImplement.Implements +{ + public class BackUpInfo : IBackUpInfo + { + public List? GetList() where T : class, new() + { + using var context = new SecuritySystemDatabase(); + return context.Set().ToList(); + } + public Type? GetTypeByModelInterface(string modelInterfaceName) + { + var assembly = typeof(BackUpInfo).Assembly; + var types = assembly.GetTypes(); + foreach (var type in types) + { + if (type.IsClass && + type.GetInterface(modelInterfaceName) != null) + { + return type; + } + } + return null; + } + } +} diff --git a/SecuritySystemDatabaseImplement/Implements/ClientStorage.cs b/SecuritySystemDatabaseImplement/Implements/ClientStorage.cs index 7c2e711..75e4199 100644 --- a/SecuritySystemDatabaseImplement/Implements/ClientStorage.cs +++ b/SecuritySystemDatabaseImplement/Implements/ClientStorage.cs @@ -1,6 +1,6 @@ using SecuritySystemContracts.BindingModels; using SecuritySystemContracts.SearchModels; -using SecuritySystemContracts.StoragesContracts; +using SecuritySystemContracts.StorageContracts; using SecuritySystemContracts.ViewModels; using SecuritySystemDatabaseImplement.Models; using Microsoft.EntityFrameworkCore; diff --git a/SecuritySystemDatabaseImplement/Implements/ComponentStorage.cs b/SecuritySystemDatabaseImplement/Implements/ComponentStorage.cs index e76910e..91d51b3 100644 --- a/SecuritySystemDatabaseImplement/Implements/ComponentStorage.cs +++ b/SecuritySystemDatabaseImplement/Implements/ComponentStorage.cs @@ -1,7 +1,7 @@ using SecuritySystemDatabaseImplement.Models; using SecuritySystemContracts.BindingModels; using SecuritySystemContracts.SearchModels; -using SecuritySystemContracts.StoragesContracts; +using SecuritySystemContracts.StorageContracts; using SecuritySystemContracts.ViewModels; namespace SecuritySystemDatabaseImplement.Implements diff --git a/SecuritySystemDatabaseImplement/Implements/OrderStorage.cs b/SecuritySystemDatabaseImplement/Implements/OrderStorage.cs index e669917..bacc927 100644 --- a/SecuritySystemDatabaseImplement/Implements/OrderStorage.cs +++ b/SecuritySystemDatabaseImplement/Implements/OrderStorage.cs @@ -4,7 +4,6 @@ using SecuritySystemContracts.StorageContracts; using SecuritySystemContracts.ViewModels; using Microsoft.EntityFrameworkCore; using SecuritySystemDatabaseImplement.Models; -using SecuritySystemContracts.StoragesContracts; namespace SecuritySystemDatabaseImplement.Implements { diff --git a/SecuritySystemDatabaseImplement/Implements/SecureStorage.cs b/SecuritySystemDatabaseImplement/Implements/SecureStorage.cs index 9b5151e..d8c2932 100644 --- a/SecuritySystemDatabaseImplement/Implements/SecureStorage.cs +++ b/SecuritySystemDatabaseImplement/Implements/SecureStorage.cs @@ -1,6 +1,6 @@ using SecuritySystemContracts.BindingModels; using SecuritySystemContracts.SearchModels; -using SecuritySystemContracts.StoragesContracts; +using SecuritySystemContracts.StorageContracts; using SecuritySystemContracts.ViewModels; using SecuritySystemDatabaseImplement.Models; using Microsoft.EntityFrameworkCore; diff --git a/SecuritySystemDatabaseImplement/Migrations/20230502104117_lab7.Designer.cs b/SecuritySystemDatabaseImplement/Migrations/20230502104117_lab7.Designer.cs deleted file mode 100644 index 814dcec..0000000 --- a/SecuritySystemDatabaseImplement/Migrations/20230502104117_lab7.Designer.cs +++ /dev/null @@ -1,298 +0,0 @@ -// -using System; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; -using SecuritySystemDatabaseImplement; - -#nullable disable - -namespace SecuritySystemDatabaseImplement.Migrations -{ - [DbContext(typeof(SecuritySystemDatabase))] - [Migration("20230502104117_lab7")] - partial class lab7 - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "7.0.4") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("SecuritySystemDatabaseImplement.Models.Client", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ClientFIO") - .IsRequired() - .HasColumnType("text"); - - b.Property("Email") - .IsRequired() - .HasColumnType("text"); - - b.Property("Password") - .IsRequired() - .HasColumnType("text"); - - b.HasKey("Id"); - - b.ToTable("Clients"); - }); - - modelBuilder.Entity("SecuritySystemDatabaseImplement.Models.Component", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ComponentName") - .IsRequired() - .HasColumnType("text"); - - b.Property("Cost") - .HasColumnType("double precision"); - - b.HasKey("Id"); - - b.ToTable("Components"); - }); - - modelBuilder.Entity("SecuritySystemDatabaseImplement.Models.Implementer", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ImplementerFIO") - .IsRequired() - .HasColumnType("text"); - - b.Property("Password") - .IsRequired() - .HasColumnType("text"); - - b.Property("Qualification") - .HasColumnType("integer"); - - b.Property("WorkExperience") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.ToTable("Implementers"); - }); - - modelBuilder.Entity("SecuritySystemDatabaseImplement.Models.MessageInfo", b => - { - b.Property("MessageId") - .HasColumnType("text"); - - b.Property("Body") - .IsRequired() - .HasColumnType("text"); - - b.Property("ClientId") - .HasColumnType("integer"); - - b.Property("DateDelivery") - .HasColumnType("timestamp with time zone"); - - b.Property("SenderName") - .IsRequired() - .HasColumnType("text"); - - b.Property("Subject") - .IsRequired() - .HasColumnType("text"); - - b.HasKey("MessageId"); - - b.HasIndex("ClientId"); - - b.ToTable("MessageInfos"); - }); - - modelBuilder.Entity("SecuritySystemDatabaseImplement.Models.Order", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ClientId") - .HasColumnType("integer"); - - b.Property("Count") - .HasColumnType("integer"); - - b.Property("DateCreate") - .HasColumnType("timestamp with time zone"); - - b.Property("DateImplement") - .HasColumnType("timestamp with time zone"); - - b.Property("ImplementerId") - .HasColumnType("integer"); - - b.Property("SecureId") - .HasColumnType("integer"); - - b.Property("Status") - .HasColumnType("integer"); - - b.Property("Sum") - .HasColumnType("double precision"); - - b.HasKey("Id"); - - b.HasIndex("ClientId"); - - b.HasIndex("ImplementerId"); - - b.HasIndex("SecureId"); - - b.ToTable("Orders"); - }); - - modelBuilder.Entity("SecuritySystemDatabaseImplement.Models.Secure", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("Price") - .HasColumnType("double precision"); - - b.Property("SecureName") - .IsRequired() - .HasColumnType("text"); - - b.HasKey("Id"); - - b.ToTable("Secures"); - }); - - modelBuilder.Entity("SecuritySystemDatabaseImplement.Models.SecureComponent", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ComponentId") - .HasColumnType("integer"); - - b.Property("Count") - .HasColumnType("integer"); - - b.Property("SecureId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ComponentId"); - - b.HasIndex("SecureId"); - - b.ToTable("SecureComponents"); - }); - - modelBuilder.Entity("SecuritySystemDatabaseImplement.Models.MessageInfo", b => - { - b.HasOne("SecuritySystemDatabaseImplement.Models.Client", "Client") - .WithMany("MessageInfos") - .HasForeignKey("ClientId"); - - b.Navigation("Client"); - }); - - modelBuilder.Entity("SecuritySystemDatabaseImplement.Models.Order", b => - { - b.HasOne("SecuritySystemDatabaseImplement.Models.Client", "Client") - .WithMany("Orders") - .HasForeignKey("ClientId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("SecuritySystemDatabaseImplement.Models.Implementer", "Implementer") - .WithMany("Orders") - .HasForeignKey("ImplementerId"); - - b.HasOne("SecuritySystemDatabaseImplement.Models.Secure", "Secure") - .WithMany("Orders") - .HasForeignKey("SecureId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Client"); - - b.Navigation("Implementer"); - - b.Navigation("Secure"); - }); - - modelBuilder.Entity("SecuritySystemDatabaseImplement.Models.SecureComponent", b => - { - b.HasOne("SecuritySystemDatabaseImplement.Models.Component", "Component") - .WithMany("SecureComponents") - .HasForeignKey("ComponentId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("SecuritySystemDatabaseImplement.Models.Secure", "Secure") - .WithMany("Components") - .HasForeignKey("SecureId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Component"); - - b.Navigation("Secure"); - }); - - modelBuilder.Entity("SecuritySystemDatabaseImplement.Models.Client", b => - { - b.Navigation("MessageInfos"); - - b.Navigation("Orders"); - }); - - modelBuilder.Entity("SecuritySystemDatabaseImplement.Models.Component", b => - { - b.Navigation("SecureComponents"); - }); - - modelBuilder.Entity("SecuritySystemDatabaseImplement.Models.Implementer", b => - { - b.Navigation("Orders"); - }); - - modelBuilder.Entity("SecuritySystemDatabaseImplement.Models.Secure", b => - { - b.Navigation("Components"); - - b.Navigation("Orders"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/SecuritySystemDatabaseImplement/Migrations/20230502104117_lab7.cs b/SecuritySystemDatabaseImplement/Migrations/20230502104117_lab7.cs deleted file mode 100644 index 68120e8..0000000 --- a/SecuritySystemDatabaseImplement/Migrations/20230502104117_lab7.cs +++ /dev/null @@ -1,215 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; - -#nullable disable - -namespace SecuritySystemDatabaseImplement.Migrations -{ - /// - public partial class lab7 : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "Clients", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - ClientFIO = table.Column(type: "text", nullable: false), - Email = table.Column(type: "text", nullable: false), - Password = table.Column(type: "text", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Clients", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "Components", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - ComponentName = table.Column(type: "text", nullable: false), - Cost = table.Column(type: "double precision", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Components", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "Implementers", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - ImplementerFIO = table.Column(type: "text", nullable: false), - Password = table.Column(type: "text", nullable: false), - WorkExperience = table.Column(type: "integer", nullable: false), - Qualification = table.Column(type: "integer", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Implementers", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "Secures", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - SecureName = table.Column(type: "text", nullable: false), - Price = table.Column(type: "double precision", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Secures", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "MessageInfos", - columns: table => new - { - MessageId = table.Column(type: "text", nullable: false), - ClientId = table.Column(type: "integer", nullable: true), - SenderName = table.Column(type: "text", nullable: false), - DateDelivery = table.Column(type: "timestamp with time zone", nullable: false), - Subject = table.Column(type: "text", nullable: false), - Body = table.Column(type: "text", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_MessageInfos", x => x.MessageId); - table.ForeignKey( - name: "FK_MessageInfos_Clients_ClientId", - column: x => x.ClientId, - principalTable: "Clients", - principalColumn: "Id"); - }); - - migrationBuilder.CreateTable( - name: "Orders", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - SecureId = table.Column(type: "integer", nullable: false), - ClientId = table.Column(type: "integer", nullable: false), - ImplementerId = table.Column(type: "integer", nullable: true), - Count = table.Column(type: "integer", nullable: false), - Sum = table.Column(type: "double precision", nullable: false), - Status = table.Column(type: "integer", nullable: false), - DateCreate = table.Column(type: "timestamp with time zone", nullable: false), - DateImplement = table.Column(type: "timestamp with time zone", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_Orders", x => x.Id); - table.ForeignKey( - name: "FK_Orders_Clients_ClientId", - column: x => x.ClientId, - principalTable: "Clients", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_Orders_Implementers_ImplementerId", - column: x => x.ImplementerId, - principalTable: "Implementers", - principalColumn: "Id"); - table.ForeignKey( - name: "FK_Orders_Secures_SecureId", - column: x => x.SecureId, - principalTable: "Secures", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "SecureComponents", - columns: table => new - { - Id = table.Column(type: "integer", nullable: false) - .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - SecureId = table.Column(type: "integer", nullable: false), - ComponentId = table.Column(type: "integer", nullable: false), - Count = table.Column(type: "integer", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_SecureComponents", x => x.Id); - table.ForeignKey( - name: "FK_SecureComponents_Components_ComponentId", - column: x => x.ComponentId, - principalTable: "Components", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_SecureComponents_Secures_SecureId", - column: x => x.SecureId, - principalTable: "Secures", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateIndex( - name: "IX_MessageInfos_ClientId", - table: "MessageInfos", - column: "ClientId"); - - migrationBuilder.CreateIndex( - name: "IX_Orders_ClientId", - table: "Orders", - column: "ClientId"); - - migrationBuilder.CreateIndex( - name: "IX_Orders_ImplementerId", - table: "Orders", - column: "ImplementerId"); - - migrationBuilder.CreateIndex( - name: "IX_Orders_SecureId", - table: "Orders", - column: "SecureId"); - - migrationBuilder.CreateIndex( - name: "IX_SecureComponents_ComponentId", - table: "SecureComponents", - column: "ComponentId"); - - migrationBuilder.CreateIndex( - name: "IX_SecureComponents_SecureId", - table: "SecureComponents", - column: "SecureId"); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "MessageInfos"); - - migrationBuilder.DropTable( - name: "Orders"); - - migrationBuilder.DropTable( - name: "SecureComponents"); - - migrationBuilder.DropTable( - name: "Clients"); - - migrationBuilder.DropTable( - name: "Implementers"); - - migrationBuilder.DropTable( - name: "Components"); - - migrationBuilder.DropTable( - name: "Secures"); - } - } -} diff --git a/SecuritySystemDatabaseImplement/Migrations/SecuritySystemDatabaseModelSnapshot.cs b/SecuritySystemDatabaseImplement/Migrations/SecuritySystemDatabaseModelSnapshot.cs deleted file mode 100644 index 913a755..0000000 --- a/SecuritySystemDatabaseImplement/Migrations/SecuritySystemDatabaseModelSnapshot.cs +++ /dev/null @@ -1,295 +0,0 @@ -// -using System; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; -using SecuritySystemDatabaseImplement; - -#nullable disable - -namespace SecuritySystemDatabaseImplement.Migrations -{ - [DbContext(typeof(SecuritySystemDatabase))] - partial class SecuritySystemDatabaseModelSnapshot : ModelSnapshot - { - protected override void BuildModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "7.0.4") - .HasAnnotation("Relational:MaxIdentifierLength", 63); - - NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); - - modelBuilder.Entity("SecuritySystemDatabaseImplement.Models.Client", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ClientFIO") - .IsRequired() - .HasColumnType("text"); - - b.Property("Email") - .IsRequired() - .HasColumnType("text"); - - b.Property("Password") - .IsRequired() - .HasColumnType("text"); - - b.HasKey("Id"); - - b.ToTable("Clients"); - }); - - modelBuilder.Entity("SecuritySystemDatabaseImplement.Models.Component", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ComponentName") - .IsRequired() - .HasColumnType("text"); - - b.Property("Cost") - .HasColumnType("double precision"); - - b.HasKey("Id"); - - b.ToTable("Components"); - }); - - modelBuilder.Entity("SecuritySystemDatabaseImplement.Models.Implementer", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ImplementerFIO") - .IsRequired() - .HasColumnType("text"); - - b.Property("Password") - .IsRequired() - .HasColumnType("text"); - - b.Property("Qualification") - .HasColumnType("integer"); - - b.Property("WorkExperience") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.ToTable("Implementers"); - }); - - modelBuilder.Entity("SecuritySystemDatabaseImplement.Models.MessageInfo", b => - { - b.Property("MessageId") - .HasColumnType("text"); - - b.Property("Body") - .IsRequired() - .HasColumnType("text"); - - b.Property("ClientId") - .HasColumnType("integer"); - - b.Property("DateDelivery") - .HasColumnType("timestamp with time zone"); - - b.Property("SenderName") - .IsRequired() - .HasColumnType("text"); - - b.Property("Subject") - .IsRequired() - .HasColumnType("text"); - - b.HasKey("MessageId"); - - b.HasIndex("ClientId"); - - b.ToTable("MessageInfos"); - }); - - modelBuilder.Entity("SecuritySystemDatabaseImplement.Models.Order", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ClientId") - .HasColumnType("integer"); - - b.Property("Count") - .HasColumnType("integer"); - - b.Property("DateCreate") - .HasColumnType("timestamp with time zone"); - - b.Property("DateImplement") - .HasColumnType("timestamp with time zone"); - - b.Property("ImplementerId") - .HasColumnType("integer"); - - b.Property("SecureId") - .HasColumnType("integer"); - - b.Property("Status") - .HasColumnType("integer"); - - b.Property("Sum") - .HasColumnType("double precision"); - - b.HasKey("Id"); - - b.HasIndex("ClientId"); - - b.HasIndex("ImplementerId"); - - b.HasIndex("SecureId"); - - b.ToTable("Orders"); - }); - - modelBuilder.Entity("SecuritySystemDatabaseImplement.Models.Secure", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("Price") - .HasColumnType("double precision"); - - b.Property("SecureName") - .IsRequired() - .HasColumnType("text"); - - b.HasKey("Id"); - - b.ToTable("Secures"); - }); - - modelBuilder.Entity("SecuritySystemDatabaseImplement.Models.SecureComponent", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("ComponentId") - .HasColumnType("integer"); - - b.Property("Count") - .HasColumnType("integer"); - - b.Property("SecureId") - .HasColumnType("integer"); - - b.HasKey("Id"); - - b.HasIndex("ComponentId"); - - b.HasIndex("SecureId"); - - b.ToTable("SecureComponents"); - }); - - modelBuilder.Entity("SecuritySystemDatabaseImplement.Models.MessageInfo", b => - { - b.HasOne("SecuritySystemDatabaseImplement.Models.Client", "Client") - .WithMany("MessageInfos") - .HasForeignKey("ClientId"); - - b.Navigation("Client"); - }); - - modelBuilder.Entity("SecuritySystemDatabaseImplement.Models.Order", b => - { - b.HasOne("SecuritySystemDatabaseImplement.Models.Client", "Client") - .WithMany("Orders") - .HasForeignKey("ClientId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("SecuritySystemDatabaseImplement.Models.Implementer", "Implementer") - .WithMany("Orders") - .HasForeignKey("ImplementerId"); - - b.HasOne("SecuritySystemDatabaseImplement.Models.Secure", "Secure") - .WithMany("Orders") - .HasForeignKey("SecureId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Client"); - - b.Navigation("Implementer"); - - b.Navigation("Secure"); - }); - - modelBuilder.Entity("SecuritySystemDatabaseImplement.Models.SecureComponent", b => - { - b.HasOne("SecuritySystemDatabaseImplement.Models.Component", "Component") - .WithMany("SecureComponents") - .HasForeignKey("ComponentId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("SecuritySystemDatabaseImplement.Models.Secure", "Secure") - .WithMany("Components") - .HasForeignKey("SecureId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Component"); - - b.Navigation("Secure"); - }); - - modelBuilder.Entity("SecuritySystemDatabaseImplement.Models.Client", b => - { - b.Navigation("MessageInfos"); - - b.Navigation("Orders"); - }); - - modelBuilder.Entity("SecuritySystemDatabaseImplement.Models.Component", b => - { - b.Navigation("SecureComponents"); - }); - - modelBuilder.Entity("SecuritySystemDatabaseImplement.Models.Implementer", b => - { - b.Navigation("Orders"); - }); - - modelBuilder.Entity("SecuritySystemDatabaseImplement.Models.Secure", b => - { - b.Navigation("Components"); - - b.Navigation("Orders"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/SecuritySystemDatabaseImplement/Models/Client.cs b/SecuritySystemDatabaseImplement/Models/Client.cs index 092c906..37ef47a 100644 --- a/SecuritySystemDatabaseImplement/Models/Client.cs +++ b/SecuritySystemDatabaseImplement/Models/Client.cs @@ -5,6 +5,7 @@ using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations; +using System.Runtime.Serialization; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -12,14 +13,19 @@ using SecuritySystemDatabaseImplement.Models; namespace SecuritySystemDatabaseImplement.Models { + [DataContract] public class Client : IClientModel { + [DataMember] public int Id { get; set; } [Required] + [DataMember] public string ClientFIO { get; set; } = string.Empty; [Required] + [DataMember] public string Email { get; set; } = string.Empty; [Required] + [DataMember] public string Password { get; set; } = string.Empty; [ForeignKey("ClientId")] public virtual List MessageInfos { get; set; } = new(); diff --git a/SecuritySystemDatabaseImplement/Models/Component.cs b/SecuritySystemDatabaseImplement/Models/Component.cs index 61fc1df..f6bfc35 100644 --- a/SecuritySystemDatabaseImplement/Models/Component.cs +++ b/SecuritySystemDatabaseImplement/Models/Component.cs @@ -3,15 +3,20 @@ using SecuritySystemContracts.ViewModels; using SecuritySystemDataModels.Models; using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations; +using System.Runtime.Serialization; namespace SecuritySystemDatabaseImplement.Models { + [DataContract] public class Component : IComponentModel { + [DataMember] public int Id { get; private set; } [Required] + [DataMember] public string ComponentName { get; private set; } = string.Empty; [Required] + [DataMember] public double Cost { get; set; } [ForeignKey("ComponentId")] public virtual List SecureComponents { get; set; } = new(); diff --git a/SecuritySystemDatabaseImplement/Models/Implementer.cs b/SecuritySystemDatabaseImplement/Models/Implementer.cs index aa22756..ff6f42e 100644 --- a/SecuritySystemDatabaseImplement/Models/Implementer.cs +++ b/SecuritySystemDatabaseImplement/Models/Implementer.cs @@ -7,20 +7,27 @@ using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; +using System.Runtime.Serialization; namespace SecuritySystemDatabaseImplement.Models { + [DataContract] public class Implementer { - public int Id { get; private set; } + [DataMember] + public int Id { get; private set; } [Required] - public string ImplementerFIO { get; private set; } = string.Empty; + [DataMember] + public string ImplementerFIO { get; private set; } = string.Empty; [Required] - public string Password { get; private set; } = string.Empty; + [DataMember] + public string Password { get; private set; } = string.Empty; [Required] - public int WorkExperience { get; private set; } + [DataMember] + public int WorkExperience { get; private set; } [Required] - public int Qualification { get; private set; } + [DataMember] + public int Qualification { get; private set; } [ForeignKey("ImplementerId")] public virtual List Orders { get; set; } = new(); public static Implementer? Create(ImplementerBindingModel model) diff --git a/SecuritySystemDatabaseImplement/Models/MessageInfo.cs b/SecuritySystemDatabaseImplement/Models/MessageInfo.cs index bc9d8f7..57e591c 100644 --- a/SecuritySystemDatabaseImplement/Models/MessageInfo.cs +++ b/SecuritySystemDatabaseImplement/Models/MessageInfo.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; +using System.Runtime.Serialization; using System.Text; using System.Threading.Tasks; using SecuritySystemContracts.BindingModels; @@ -10,19 +11,25 @@ using SecuritySystemDataModels.Models; namespace SecuritySystemDatabaseImplement.Models { + [DataContract] public class MessageInfo : IMessageInfoModel { + [DataMember] [Key] public string MessageId { get; private set; } = string.Empty; - + [DataMember] public int? ClientId { get; private set; } [Required] + [DataMember] public string SenderName { get; private set; } = string.Empty; [Required] + [DataMember] public DateTime DateDelivery { get; private set; } [Required] + [DataMember] public string Subject { get; private set; } = string.Empty; [Required] + [DataMember] public string Body { get; private set; } = string.Empty; public virtual Client? Client { get; private set; } @@ -51,5 +58,6 @@ namespace SecuritySystemDatabaseImplement.Models Subject = Subject, Body = Body }; + public int Id => throw new NotImplementedException(); } } diff --git a/SecuritySystemDatabaseImplement/Models/Order.cs b/SecuritySystemDatabaseImplement/Models/Order.cs index 9a8058d..d5a3a43 100644 --- a/SecuritySystemDatabaseImplement/Models/Order.cs +++ b/SecuritySystemDatabaseImplement/Models/Order.cs @@ -4,27 +4,38 @@ using SecuritySystemDataModels.Enums; using SecuritySystemDataModels.Models; using System.ComponentModel.DataAnnotations; using System.Reflection; +using System.Runtime.Serialization; namespace SecuritySystemDatabaseImplement.Models { + [DataContract] public class Order : IOrderModel { + [DataMember] public int Id { get; set; } [Required] + [DataMember] public int SecureId { get; set; } [Required] + [DataMember] public int ClientId { get; set; } public int? ImplementerId { get; set; } [Required] + [DataMember] public int Count { get; set; } [Required] + [DataMember] public double Sum { get; set; } [Required] + [DataMember] public OrderStatus Status { get; set; } [Required] + [DataMember] public DateTime DateCreate { get; set; } + [DataMember] public DateTime? DateImplement { get; set; } + [DataMember] public virtual Secure Secure { get; set; } public virtual Client Client { get; set; } diff --git a/SecuritySystemDatabaseImplement/Models/Secure.cs b/SecuritySystemDatabaseImplement/Models/Secure.cs index 680b028..4500d73 100644 --- a/SecuritySystemDatabaseImplement/Models/Secure.cs +++ b/SecuritySystemDatabaseImplement/Models/Secure.cs @@ -3,17 +3,24 @@ using SecuritySystemContracts.ViewModels; using SecuritySystemDataModels.Models; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; +using System.Runtime.Serialization; + namespace SecuritySystemDatabaseImplement.Models { + [DataContract] public class Secure : ISecureModel { + [DataMember] public int Id { get; set; } [Required] + [DataMember] public string SecureName { get; set; } = string.Empty; [Required] + [DataMember] public double Price { get; set; } private Dictionary? _SecureComponents = null; [NotMapped] + [DataMember] public Dictionary SecureComponents { get diff --git a/SecuritySystemDatabaseImplement/SecuritySystemDatabase.cs b/SecuritySystemDatabaseImplement/SecuritySystemDatabase.cs index 9ee961a..98a9599 100644 --- a/SecuritySystemDatabaseImplement/SecuritySystemDatabase.cs +++ b/SecuritySystemDatabaseImplement/SecuritySystemDatabase.cs @@ -1,6 +1,5 @@ using SecuritySystemDatabaseImplement.Models; using Microsoft.EntityFrameworkCore; -using SecuritySystemDatabaseImplement.Models; namespace SecuritySystemDatabaseImplement { @@ -10,7 +9,7 @@ namespace SecuritySystemDatabaseImplement { if (optionsBuilder.IsConfigured == false) { - optionsBuilder.UseNpgsql(@"Host=localhost;Port=5432;Database=SecuritySystemDatabaseFull7;Username=postgres;Password=1953"); + optionsBuilder.UseNpgsql(@"Host=localhost;Port=5432;Database=SecuritySystemDatabaseFull8;Username=postgres;Password=1953"); } base.OnConfiguring(optionsBuilder); } diff --git a/SecuritySystemDatabaseImplement/SecuritySystemDatabaseImplement.csproj b/SecuritySystemDatabaseImplement/SecuritySystemDatabaseImplement.csproj index 48614cb..afdadd6 100644 --- a/SecuritySystemDatabaseImplement/SecuritySystemDatabaseImplement.csproj +++ b/SecuritySystemDatabaseImplement/SecuritySystemDatabaseImplement.csproj @@ -7,17 +7,16 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive - + - diff --git a/SecuritySystemFileImplement/FileImplementationExtension.cs b/SecuritySystemFileImplement/FileImplementationExtension.cs new file mode 100644 index 0000000..adb0040 --- /dev/null +++ b/SecuritySystemFileImplement/FileImplementationExtension.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using SecuritySystemContracts.DI; +using SecuritySystemContracts.StorageContracts; +using SecuritySystemFileImplement.Implements; + +namespace SecuritySystemFileImplement +{ + public class FileImplementationExtension + { + public int Priority => 1; + + public void RegisterServices() + { + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + } + } +} diff --git a/SecuritySystemFileImplement/Implements/BackUpInfo.cs b/SecuritySystemFileImplement/Implements/BackUpInfo.cs new file mode 100644 index 0000000..927abe9 --- /dev/null +++ b/SecuritySystemFileImplement/Implements/BackUpInfo.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using SecuritySystemContracts.StorageContracts; +using SecuritySystemFileImplement; + +namespace SecuritySystemFileImplement.Implements +{ + public class BackUpInfo : IBackUpInfo + { + public List? GetList() where T : class, new() + { + var source = DataFileSingleton.GetInstance(); + return (List?)source.GetType().GetProperties().FirstOrDefault(x => x.PropertyType.IsGenericType && x.PropertyType.GetProperty("Item").PropertyType == typeof(T)).GetValue(source); + } + public Type? GetTypeByModelInterface(string modelInterfaceName) + { + var assembly = typeof(BackUpInfo).Assembly; + var types = assembly.GetTypes(); + foreach (var type in types) + { + if (type.IsClass && type.GetInterface(modelInterfaceName) != null) + { + return type; + } + } + return null; + } + } +} diff --git a/SecuritySystemFileImplement/Implements/ClientStorage.cs b/SecuritySystemFileImplement/Implements/ClientStorage.cs index 54ccb7d..11e5bab 100644 --- a/SecuritySystemFileImplement/Implements/ClientStorage.cs +++ b/SecuritySystemFileImplement/Implements/ClientStorage.cs @@ -1,6 +1,6 @@ using SecuritySystemContracts.BindingModels; using SecuritySystemContracts.SearchModels; -using SecuritySystemContracts.StoragesContracts; +using SecuritySystemContracts.StorageContracts; using SecuritySystemContracts.ViewModels; using SecuritySystemFileImplement.Models; using System; diff --git a/SecuritySystemFileImplement/Implements/ComponentStorage.cs b/SecuritySystemFileImplement/Implements/ComponentStorage.cs index 239abc2..4f0f28a 100644 --- a/SecuritySystemFileImplement/Implements/ComponentStorage.cs +++ b/SecuritySystemFileImplement/Implements/ComponentStorage.cs @@ -3,10 +3,9 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; - using SecuritySystemContracts.BindingModels; using SecuritySystemContracts.SearchModels; -using SecuritySystemContracts.StoragesContracts; +using SecuritySystemContracts.StorageContracts; using SecuritySystemContracts.ViewModels; using SecuritySystemFileImplement.Models; using SecuritySystemFileImplement; diff --git a/SecuritySystemFileImplement/Implements/OrderStorage.cs b/SecuritySystemFileImplement/Implements/OrderStorage.cs index 803567b..c680268 100644 --- a/SecuritySystemFileImplement/Implements/OrderStorage.cs +++ b/SecuritySystemFileImplement/Implements/OrderStorage.cs @@ -3,10 +3,9 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; - using SecuritySystemContracts.BindingModels; using SecuritySystemContracts.SearchModels; -using SecuritySystemContracts.StoragesContracts; +using SecuritySystemContracts.StorageContracts; using SecuritySystemContracts.ViewModels; using SecuritySystemFileImplement.Models; using SecuritySystemFileImplement; diff --git a/SecuritySystemFileImplement/Implements/SecureStorage.cs b/SecuritySystemFileImplement/Implements/SecureStorage.cs index 594b510..adc2608 100644 --- a/SecuritySystemFileImplement/Implements/SecureStorage.cs +++ b/SecuritySystemFileImplement/Implements/SecureStorage.cs @@ -1,24 +1,15 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Linq; -using System.Numerics; -using System.Text; -using System.Threading.Tasks; - -using SecuritySystemContracts.BindingModels; +using SecuritySystemContracts.BindingModels; using SecuritySystemContracts.SearchModels; -using SecuritySystemContracts.StoragesContracts; +using SecuritySystemContracts.StorageContracts; using SecuritySystemContracts.ViewModels; using SecuritySystemFileImplement.Models; -using SecuritySystemFileImplement; namespace SecuritySystemFileImplement.Implements { - public class Securestorage : ISecureStorage + public class SecureStorage : ISecureStorage { private readonly DataFileSingleton source; - public Securestorage() + public SecureStorage() { source = DataFileSingleton.GetInstance(); } diff --git a/SecuritySystemFileImplement/Models/Client.cs b/SecuritySystemFileImplement/Models/Client.cs index e4dd062..8d111e8 100644 --- a/SecuritySystemFileImplement/Models/Client.cs +++ b/SecuritySystemFileImplement/Models/Client.cs @@ -1,22 +1,24 @@ using SecuritySystemContracts.BindingModels; -using SecuritySystemContracts.ViewModels; using SecuritySystemDataModels.Models; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using System.Runtime.Serialization; using System.Xml.Linq; +using SecuritySystemContracts.ViewModels; namespace SecuritySystemFileImplement.Models { + [DataContract] public class Client : IClientModel { - public int Id { get; private set; } + [DataMember] public string ClientFIO { get; private set; } = string.Empty; + [DataMember] public string Email { get; private set; } = string.Empty; + [DataMember] public string Password { get; private set; } = string.Empty; - public static Client? Create(ClientBindingModel? model) + [DataMember] + public int Id { get; private set; } + + public static Client? Create(ClientBindingModel model) { if (model == null) { @@ -27,9 +29,10 @@ namespace SecuritySystemFileImplement.Models Id = model.Id, ClientFIO = model.ClientFIO, Email = model.Email, - Password = model.Password, + Password = model.Password }; } + public static Client? Create(XElement element) { if (element == null) @@ -44,7 +47,8 @@ namespace SecuritySystemFileImplement.Models Password = element.Element("Password")!.Value }; } - public void Update(ClientBindingModel? model) + + public void Update(ClientBindingModel model) { if (model == null) { @@ -54,6 +58,7 @@ namespace SecuritySystemFileImplement.Models Email = model.Email; Password = model.Password; } + public ClientViewModel GetViewModel => new() { Id = Id, @@ -61,6 +66,7 @@ namespace SecuritySystemFileImplement.Models Email = Email, Password = Password }; + public XElement GetXElement => new("Client", new XAttribute("Id", Id), new XElement("ClientFIO", ClientFIO), diff --git a/SecuritySystemFileImplement/Models/Component.cs b/SecuritySystemFileImplement/Models/Component.cs index d345360..a63c800 100644 --- a/SecuritySystemFileImplement/Models/Component.cs +++ b/SecuritySystemFileImplement/Models/Component.cs @@ -1,20 +1,19 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -using SecuritySystemContracts.BindingModels; -using SecuritySystemContracts.ViewModels; +using SecuritySystemContracts.BindingModels; using SecuritySystemDataModels.Models; +using System.Runtime.Serialization; using System.Xml.Linq; +using SecuritySystemContracts.ViewModels; namespace SecuritySystemFileImplement.Models { + [DataContract] public class Component : IComponentModel { + [DataMember] public int Id { get; private set; } + [DataMember] public string ComponentName { get; private set; } = string.Empty; + [DataMember] public double Cost { get; set; } public static Component? Create(ComponentBindingModel model) { @@ -61,5 +60,6 @@ namespace SecuritySystemFileImplement.Models new XAttribute("Id", Id), new XElement("ComponentName", ComponentName), new XElement("Cost", Cost.ToString())); + } -} \ No newline at end of file +} diff --git a/SecuritySystemFileImplement/Models/Implementer.cs b/SecuritySystemFileImplement/Models/Implementer.cs index ef7d9c9..d3eb99b 100644 --- a/SecuritySystemFileImplement/Models/Implementer.cs +++ b/SecuritySystemFileImplement/Models/Implementer.cs @@ -1,76 +1,80 @@ using SecuritySystemContracts.BindingModels; -using SecuritySystemContracts.ViewModels; using SecuritySystemDataModels.Models; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using System.Runtime.Serialization; using System.Xml.Linq; +using SecuritySystemContracts.ViewModels; namespace SecuritySystemFileImplement.Models { - public class Implementer : IImplementerModel - { - public int Id { get; private set; } - public string ImplementerFIO { get; private set; } = string.Empty; - public string Password { get; private set; } = string.Empty; - public int WorkExperience { get; private set; } - public int Qualification { get; private set; } - public static Implementer? Create(ImplementerBindingModel? model) - { - if (model == null) - { - return null; - } - return new Implementer() - { - Id = model.Id, - ImplementerFIO = model.ImplementerFIO, - Password = model.Password, - WorkExperience = model.WorkExperience, - Qualification = model.Qualification, - }; - } - public static Implementer? Create(XElement element) - { - if (element == null) - { - return null; - } - return new Implementer() - { - Id = Convert.ToInt32(element.Attribute("Id")!.Value), - ImplementerFIO = element.Element("ImplementerFIO")!.Value, - Password = element.Element("Password")!.Value, - WorkExperience = Convert.ToInt32(element.Element("WorkExperience")!.Value), - Qualification = Convert.ToInt32(element.Element("Qualification")!.Value) - }; - } - public void Update(ImplementerBindingModel? model) - { - if (model == null) - { - return; - } - ImplementerFIO = model.ImplementerFIO; - Password = model.Password; - WorkExperience = model.WorkExperience; - Qualification = model.Qualification; - } - public ImplementerViewModel GetViewModel => new() - { - Id = Id, - ImplementerFIO = ImplementerFIO, - Password = Password, - WorkExperience = WorkExperience, - Qualification = Qualification - }; - public XElement GetXElement => new("Implementer", - new XAttribute("Id", Id), - new XElement("ImplementerFIO", ImplementerFIO), - new XElement("Password", Password), - new XElement("WorkExperience", WorkExperience), - new XElement("Qualification", Qualification)); - } + [DataContract] + public class Implementer : IImplementerModel + { + [DataMember] + public int Id { get; private set; } + [DataMember] + public string ImplementerFIO { get; private set; } = string.Empty; + [DataMember] + public string Password { get; private set; } = string.Empty; + [DataMember] + public int WorkExperience { get; private set; } + [DataMember] + public int Qualification { get; private set; } + + public static Implementer? Create(ImplementerBindingModel model) + { + if (model == null) + { + return null; + } + return new Implementer() + { + Id = model.Id, + ImplementerFIO = model.ImplementerFIO, + Password = model.Password, + WorkExperience = model.WorkExperience, + Qualification = model.Qualification, + }; + } + public static Implementer? Create(XElement element) + { + if (element == null) + { + return null; + } + return new Implementer() + { + Id = Convert.ToInt32(element.Attribute("Id")!.Value), + ImplementerFIO = element.Element("ImplementerFIO")!.Value, + Password = element.Element("Password")!.Value, + WorkExperience = Convert.ToInt32(element.Attribute("WorkExperience")!.Value), + Qualification = Convert.ToInt32(element.Attribute("Qualification")!.Value), + }; + } + public void Update(ImplementerBindingModel model) + { + if (model == null) + { + return; + } + ImplementerFIO = model.ImplementerFIO; + Password = model.Password; + WorkExperience = model.WorkExperience; + Qualification = model.Qualification; + } + public ImplementerViewModel GetViewModel => new() + { + Id = Id, + ImplementerFIO = ImplementerFIO, + Password = Password, + WorkExperience = WorkExperience, + Qualification = Qualification + }; + + public XElement GetXElement => new("Implementer", + new XAttribute("Id", Id), + new XElement("ImplementerFIO", ImplementerFIO), + new XElement("Password", Password), + new XElement("WorkExperience", WorkExperience), + new XElement("Qualification", Qualification)); + } } diff --git a/SecuritySystemFileImplement/Models/MessageInfo.cs b/SecuritySystemFileImplement/Models/MessageInfo.cs index 741b8ad..c2740ba 100644 --- a/SecuritySystemFileImplement/Models/MessageInfo.cs +++ b/SecuritySystemFileImplement/Models/MessageInfo.cs @@ -1,78 +1,78 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Xml.Linq; -using SecuritySystemContracts.BindingModels; -using SecuritySystemContracts.ViewModels; +using SecuritySystemContracts.BindingModels; using SecuritySystemDataModels.Models; +using System.Runtime.Serialization; +using System.Xml.Linq; +using SecuritySystemContracts.ViewModels; namespace SecuritySystemFileImplement.Models { - public class MessageInfo : IMessageInfoModel - { - public string MessageId { get; set; } = string.Empty; + [DataContract] + public class MessageInfo : IMessageInfoModel + { + [DataMember] + public string MessageId { get; set; } = string.Empty; + [DataMember] + public int? ClientId { get; set; } + [DataMember] + public string SenderName { get; set; } = string.Empty; + [DataMember] + public DateTime DateDelivery { get; set; } = DateTime.Now; + [DataMember] + public string Subject { get; set; } = string.Empty; + [DataMember] + public string Body { get; set; } = string.Empty; - public int? ClientId { 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, + DateDelivery = model.DateDelivery, + Subject = model.Subject, + Body = model.Body + }; + } + public static MessageInfo? Create(XElement element) + { + if (element == null) + { + return null; + } + return new MessageInfo() + { + MessageId = element.Element("MessageId")!.Value, + ClientId = Convert.ToInt32(element.Element("ClientId")!.Value), + SenderName = element.Element("MessageId")!.Value, + DateDelivery = DateTime.ParseExact(element.Element("DateDelivery")!.Value, "G", null), + Subject = element.Element("MessageId")!.Value, + Body = element.Element("MessageId")!.Value + }; + } + public MessageInfoViewModel GetViewModel => new() + { + MessageId = MessageId, + ClientId = ClientId, + SenderName = SenderName, + DateDelivery = DateDelivery, + Subject = Subject, + Body = Body + }; - public string SenderName { get; set; } = string.Empty; + public XElement GetXElement => + new("MessageInfo", + new XAttribute("MessageId", MessageId), + new XElement("ClientId", ClientId), + new XElement("SenderName", SenderName), + new XElement("DateDelivery", DateDelivery), + new XElement("Subject", Subject), + new XElement("Body", Body)); - public DateTime DateDelivery { get; set; } = DateTime.Now; - - public string Subject { get; set; } = string.Empty; - - public string Body { get; set; } = string.Empty; - - public static MessageInfo? Create(MessageInfoBindingModel model) - { - if (model == null) - { - return null; - } - return new MessageInfo() - { - MessageId = model.MessageId, - ClientId = model.ClientId, - SenderName = model.SenderName, - DateDelivery = model.DateDelivery, - Subject = model.Subject, - Body = model.Body - }; - } - public static MessageInfo? Create(XElement element) - { - if (element == null) - { - return null; - } - return new MessageInfo() - { - MessageId = element.Element("MessageId")!.Value, - ClientId = Convert.ToInt32(element.Element("ClientId")!.Value), - SenderName = element.Element("MessageId")!.Value, - DateDelivery = DateTime.ParseExact(element.Element("DateDelivery")!.Value, "G", null), - Subject = element.Element("MessageId")!.Value, - Body = element.Element("MessageId")!.Value - }; - } - public MessageInfoViewModel GetViewModel => new() - { - MessageId = MessageId, - ClientId = ClientId, - SenderName = SenderName, - DateDelivery = DateDelivery, - Subject = Subject, - Body = Body - }; - - public XElement GetXElement => - new("MessageInfo", - new XAttribute("MessageId", MessageId), - new XElement("ClientId", ClientId), - new XElement("SenderName", SenderName), - new XElement("DateDelivery", DateDelivery), - new XElement("Subject", Subject), - new XElement("Body", Body)); - } + public int Id => throw new NotImplementedException(); + } } diff --git a/SecuritySystemFileImplement/Models/Order.cs b/SecuritySystemFileImplement/Models/Order.cs index da649e6..e5cce08 100644 --- a/SecuritySystemFileImplement/Models/Order.cs +++ b/SecuritySystemFileImplement/Models/Order.cs @@ -1,40 +1,45 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -using System.Xml.Linq; -using SecuritySystemContracts.BindingModels; -using SecuritySystemContracts.ViewModels; +using SecuritySystemContracts.BindingModels; using SecuritySystemDataModels.Enums; using SecuritySystemDataModels.Models; +using System.Runtime.Serialization; +using System.Xml.Linq; +using SecuritySystemContracts.ViewModels; namespace SecuritySystemFileImplement.Models { + [DataContract] public class Order : IOrderModel { - public int Id { get; private set; } + [DataMember] public int SecureId { get; private set; } + [DataMember] public int ClientId { get; private set; } - public string SecureName { get; private set; } = string.Empty; + [DataMember] + public int? ImplementerId { get; private set; } + [DataMember] public int Count { get; private set; } + [DataMember] public double Sum { get; private set; } - public OrderStatus Status { get; private set; } = OrderStatus.Неизвестен; - public DateTime DateCreate { get; private set; } = DateTime.Now; + [DataMember] + public OrderStatus Status { get; private set; } + [DataMember] + public DateTime DateCreate { get; private set; } + [DataMember] public DateTime? DateImplement { get; private set; } - + [DataMember] + public int Id { get; private set; } public static Order? Create(OrderBindingModel? model) { if (model == null) { return null; } - return new Order + return new Order() { Id = model.Id, SecureId = model.SecureId, - SecureName = model.SecureName, + ClientId = model.ClientId, + ImplementerId = model.ImplementerId, Count = model.Count, Sum = model.Sum, Status = model.Status, @@ -49,51 +54,65 @@ namespace SecuritySystemFileImplement.Models { return null; } - return new Order() + var order = new Order() { Id = Convert.ToInt32(element.Attribute("Id")!.Value), SecureId = Convert.ToInt32(element.Element("SecureId")!.Value), - SecureName = element.Element("SecureName")!.Value, - Sum = Convert.ToDouble(element.Element("Sum")!.Value), + ClientId = Convert.ToInt32(element.Element("ClientId")!.Value), + ImplementerId = Convert.ToInt32(element.Element("ImplementerId")!.Value), Count = Convert.ToInt32(element.Element("Count")!.Value), + Sum = Convert.ToDouble(element.Element("Sum")!.Value), Status = (OrderStatus)Enum.Parse(typeof(OrderStatus), element.Element("Status")!.Value), - DateCreate = Convert.ToDateTime(element.Element("DateCreate")!.Value), - DateImplement = string.IsNullOrEmpty(element.Element("DateImplement")!.Value) ? null : Convert.ToDateTime(element.Element("DateImplement")!.Value) + DateCreate = DateTime.ParseExact(element.Element("DateCreate")!.Value, "G", null), + DateImplement = Convert.ToDateTime(element.Element("DateCreate")!.Value) }; + DateTime.TryParse(element.Element("DateImplement")!.Value, out DateTime dateImpl); + order.DateImplement = dateImpl; + if (!Enum.TryParse(element.Element("Status")!.Value, out OrderStatus status)) + { + return null; + } + order.Status = status; + return order; } - public void Update(OrderBindingModel? model) { if (model == null) { return; } + SecureId = model.SecureId; + ClientId = model.ClientId; + ImplementerId = model.ImplementerId; + Count = model.Count; + Sum = model.Sum; Status = model.Status; + DateCreate = model.DateCreate; DateImplement = model.DateImplement; } - public OrderViewModel GetViewModel => new() { Id = Id, SecureId = SecureId, - SecureName = SecureName, + ClientId = ClientId, + ImplementerId = ImplementerId, Count = Count, Sum = Sum, Status = Status, DateCreate = DateCreate, DateImplement = DateImplement }; + public XElement GetXElement => new("Order", + new XAttribute("Id", Id), + new XElement("SecureId", SecureId.ToString()), + new XElement("ClientId", ClientId.ToString()), + new XElement("ImplementerId", ClientId.ToString()), + new XElement("Count", Count.ToString()), + new XElement("Sum", Sum.ToString()), + new XElement("Status", Status.ToString()), + new XElement("DateCreate", DateCreate.ToString()), + new XElement("DateImplement", DateImplement.ToString())); + - public XElement GetXElement => new( - "Order", - new XAttribute("Id", Id), - new XElement("SecureId", SecureId.ToString()), - new XElement("SecureName", SecureName.ToString()), - new XElement("Count", Count.ToString()), - new XElement("Sum", Sum.ToString()), - new XElement("Status", Status.ToString()), - new XElement("DateCreate", DateCreate.ToString()), - new XElement("DateImplement", DateImplement.ToString()) - ); } } diff --git a/SecuritySystemFileImplement/Models/Secure.cs b/SecuritySystemFileImplement/Models/Secure.cs index 3f43727..cd68279 100644 --- a/SecuritySystemFileImplement/Models/Secure.cs +++ b/SecuritySystemFileImplement/Models/Secure.cs @@ -1,24 +1,23 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - +using SecuritySystemDataModels.Models; +using System.Runtime.Serialization; using System.Xml.Linq; -using SecuritySystemDataModels.Models; using SecuritySystemContracts.BindingModels; using SecuritySystemContracts.ViewModels; -using SecuritySystemFileImplement; namespace SecuritySystemFileImplement.Models { + [DataContract] public class Secure : ISecureModel { + [DataMember] public int Id { get; private set; } + [DataMember] public string SecureName { get; private set; } = string.Empty; + [DataMember] public double Price { get; private set; } public Dictionary Components { get; private set; } = new(); private Dictionary? _SecureComponents = null; + [DataMember] public Dictionary SecureComponents { get @@ -26,8 +25,9 @@ namespace SecuritySystemFileImplement.Models if (_SecureComponents == null) { var source = DataFileSingleton.GetInstance(); - _SecureComponents = Components.ToDictionary(x => x.Key, y => - ((source.Components.FirstOrDefault(z => z.Id == y.Key) as IComponentModel)!, y.Value)); + _SecureComponents = Components.ToDictionary(x => x.Key, + y => ((source.Components.FirstOrDefault(z => z.Id == y.Key) as IComponentModel)!, + y.Value)); } return _SecureComponents; } @@ -43,7 +43,8 @@ namespace SecuritySystemFileImplement.Models Id = model.Id, SecureName = model.SecureName, Price = model.Price, - Components = model.SecureComponents.ToDictionary(x => x.Key, x => x.Value.Item2) + Components = model.SecureComponents.ToDictionary(x => x.Key, x + => x.Value.Item2) }; } public static Secure? Create(XElement element) @@ -57,11 +58,9 @@ namespace SecuritySystemFileImplement.Models Id = Convert.ToInt32(element.Attribute("Id")!.Value), SecureName = element.Element("SecureName")!.Value, Price = Convert.ToDouble(element.Element("Price")!.Value), - Components = - element.Element("SecureComponents")!.Elements("SecureComponent") - .ToDictionary(x => - Convert.ToInt32(x.Element("Key")?.Value), x => - Convert.ToInt32(x.Element("Value")?.Value)) + Components = element.Element("SecureComponents")!.Elements("SecureComponent") + .ToDictionary(x => Convert.ToInt32(x.Element("Key")?.Value), + x => Convert.ToInt32(x.Element("Value")?.Value)) }; } public void Update(SecureBindingModel model) @@ -89,7 +88,6 @@ namespace SecuritySystemFileImplement.Models new XElement("SecureComponents", Components.Select(x => new XElement("SecureComponent", new XElement("Key", x.Key), - new XElement("Value", x.Value))) - .ToArray())); + new XElement("Value", x.Value))).ToArray())); } } diff --git a/SecuritySystemListImplement/Implements/IBackUpInfo.cs b/SecuritySystemListImplement/Implements/IBackUpInfo.cs new file mode 100644 index 0000000..0bba924 --- /dev/null +++ b/SecuritySystemListImplement/Implements/IBackUpInfo.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using SecuritySystemContracts.StorageContracts; + +namespace SecuritySystemListImplement.Implements +{ + public class BackUpInfo : IBackUpInfo + { + public List? GetList() where T : class, new() + { + throw new NotImplementedException(); + } + + public Type? GetTypeByModelInterface(string modelInterfaceName) + { + throw new NotImplementedException(); + } + } +} diff --git a/SecuritySystemListImplement/Implements/MessageInfoStorage.cs b/SecuritySystemListImplement/Implements/MessageInfoStorage.cs index a902462..bb9b882 100644 --- a/SecuritySystemListImplement/Implements/MessageInfoStorage.cs +++ b/SecuritySystemListImplement/Implements/MessageInfoStorage.cs @@ -62,5 +62,6 @@ namespace SecuritySystemListImplement.Implements _source.MessageInfos.Add(newMessage); return newMessage.GetViewModel; } - } + public int Id => throw new NotImplementedException(); + } } diff --git a/SecuritySystemListImplement/ListImplementationExtension.cs b/SecuritySystemListImplement/ListImplementationExtension.cs new file mode 100644 index 0000000..1b47920 --- /dev/null +++ b/SecuritySystemListImplement/ListImplementationExtension.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using SecuritySystemContracts.DI; +using SecuritySystemContracts.StorageContracts; +using SecuritySystemListImplement.Implements; + +namespace SecuritySystemListImplement +{ + public class ListImplementationExtension : IImplementationExtension + { + public int Priority => 0; + public void RegisterServices() + { + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + } + } +} diff --git a/SecuritySystemRestApi/Controllers/ClientController.cs b/SecuritySystemRestApi/Controllers/ClientController.cs index e32d1dc..c9ae052 100644 --- a/SecuritySystemRestApi/Controllers/ClientController.cs +++ b/SecuritySystemRestApi/Controllers/ClientController.cs @@ -3,9 +3,6 @@ using SecuritySystemContracts.BusinessLogicsContracts; using SecuritySystemContracts.SearchModels; using SecuritySystemContracts.ViewModels; using Microsoft.AspNetCore.Mvc; -using SecuritySystemContracts.BusinessLogicsContracts; -using SecuritySystemContracts.SearchModels; -using SecuritySystemContracts.ViewModels; namespace SecuritySystemRestApi.Controllers { diff --git a/SecuritySystemRestApi/Program.cs b/SecuritySystemRestApi/Program.cs index 04ecf5c..23712b0 100644 --- a/SecuritySystemRestApi/Program.cs +++ b/SecuritySystemRestApi/Program.cs @@ -1,17 +1,10 @@ using SecuritySystemBusinessLogic.BusinessLogics; using SecuritySystemContracts.BusinessLogicsContracts; -using SecuritySystemContracts.StoragesContracts; +using SecuritySystemContracts.StorageContracts; using SecuritySystemDatabaseImplement.Implements; using Microsoft.OpenApi.Models; -using SecuritySystemBusinessLogic.BusinessLogics; -using SecuritySystemContracts.BusinessLogicsContracts; -using SecuritySystemContracts.StorageContracts; using SecuritySystemBusinessLogic.MailWorker; using SecuritySystemContracts.BindingModels; -using SecuritySystemBusinessLogic.BusinessLogics; -using SecuritySystemContracts.BusinessLogicsContracts; -using SecuritySystemContracts.StorageContracts; -using SecuritySystemDatabaseImplement.Implements; var builder = WebApplication.CreateBuilder(args); diff --git a/SecuritySystemRestApi/SecuritySystemRestApi.csproj b/SecuritySystemRestApi/SecuritySystemRestApi.csproj index 03cf1e3..45d8152 100644 --- a/SecuritySystemRestApi/SecuritySystemRestApi.csproj +++ b/SecuritySystemRestApi/SecuritySystemRestApi.csproj @@ -8,7 +8,7 @@ - +