Data attributes have been placed in storage models.

This commit is contained in:
Yuee Shiness 2023-04-23 17:13:21 +04:00
parent 8abe0bbfb2
commit 29dc43b467
17 changed files with 198 additions and 15 deletions

View File

@ -36,7 +36,7 @@ namespace DressAtelierBusinessLogic.BusinessLogic
public List<MessageInfoViewModel>? ReadList(MessageInfoSearchModel? model)
{
_logger.LogInformation("ReadList. ClientID:{ClientID}. ID:{ ID}", model?.ClientID, model?.ID);
_logger.LogInformation("ReadList. ClientID:{ClientID}. ID:{ ID}", model?.ClientID, model?.MessageID);
var list = model == null ? _messageStorage.GetFullList() : _messageStorage.GetFilteredList(model);

View File

@ -7,20 +7,29 @@ using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
namespace DressAtelierDatabaseImplement.Models
{
[DataContract]
public class Client : IClientModel
{
[DataMember]
public int ID { get; private set; }
[Required]
[DataMember]
public string FullName { get; private set; } = string.Empty;
[Required]
[DataMember]
public string Email { get; private set; } = string.Empty;
[Required]
[DataMember]
public string Password { get; private set; } = string.Empty;
[ForeignKey("ClientID")]

View File

@ -6,24 +6,31 @@ using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Runtime.Serialization;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Threading.Tasks;
namespace DressAtelierDatabaseImplementation.Models
{
[DataContract]
public class Dress : IDressModel
{
[DataMember]
public int ID { get; private set; }
[Required]
[DataMember]
public string DressName { get; private set; } = string.Empty;
[Required]
[DataMember]
public double Price { get; private set; }
private Dictionary<int, (IMaterialModel, int)>? _dressMaterials = null;
[NotMapped]
[DataMember]
public Dictionary<int, (IMaterialModel, int)> DressComponents
{
get

View File

@ -9,19 +9,30 @@ using System.Threading.Tasks;
using DressAtelierDatabaseImplementation.Models;
using DressAtelierContracts.ViewModels;
using DressAtelierContracts.BindingModels;
using System.Runtime.Serialization;
namespace DressAtelierDatabaseImplement.Models
{
[DataContract]
public class Employee : IEmployeeModel
{
[DataMember]
public int ID { get; private set; }
[Required]
[DataMember]
public string FullName { get; private set; } = string.Empty;
[Required]
[DataMember]
public int WorkExperience { get; private set; }
[Required]
[DataMember]
public string Password { get; private set; } = string.Empty;
[Required]
[DataMember]
public int Qualification { get; private set; }
[ForeignKey("EmployeeID")]

View File

@ -5,17 +5,22 @@ using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
using System.Threading.Tasks;
namespace DressAtelierDatabaseImplementation.Models
{
[DataContract]
public class Material : IMaterialModel
{
[DataMember]
public string ComponentName { get; private set; } = string.Empty;
[DataMember]
public double Cost { get; private set; }
[DataMember]
public int ID { get; private set; }
[ForeignKey("MaterialID")]

View File

@ -4,23 +4,31 @@ using DressAtelierDataModels.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
using System.Threading.Tasks;
namespace DressAtelierDatabaseImplement.Models
{
[DataContract]
public class MessageInfo : IMessageInfoModel
{
[DataMember]
public string MessageID { get; private set; } = string.Empty;
[DataMember]
public int? ClientID { get; private set; }
[DataMember]
public string SenderName { get; private set; } = string.Empty;
[DataMember]
public DateTime DeliveryDate { get; private set; }
[DataMember]
public string Subject { get; private set; } = string.Empty;
[DataMember]
public string Body { get; private set; } = string.Empty;
public virtual Client? Client { get; private set; }

View File

@ -9,6 +9,7 @@ using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
@ -17,26 +18,37 @@ namespace DressAtelierDatabaseImplementation.Models
{
public class Order : IOrderModel
{
[DataMember]
public int ID { get; private set; }
[Required]
[DataMember]
public int DressID { get; private set; }
[Required]
[DataMember]
public int ClientID { get; private set; }
[DataMember]
public int? EmployeeID { get; private set; }
[Required]
[DataMember]
public int Count { get; private set; }
[Required]
[DataMember]
public double Sum { get; private set; }
[Required]
[DataMember]
public OrderStatus Status { get; private set; } = OrderStatus.Unknown;
[Required]
[DataMember]
public DateTime DateCreate { get; private set; } = DateTime.Now;
[DataMember]
public DateTime? DateImplement { get; private set; }
public virtual Dress Dress { get; set; }

View File

@ -0,0 +1,47 @@
using DressAtelierContracts.StorageContracts;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace DressAtelierFileImplement.Implements
{
public class BackupInfo : IBackupInfo
{
public List<T>? GetList<T>() where T : class, new()
{
List<T>? list = new();
var source = DataFileSingleton.GetInstance();
Type typeRequired = typeof(T);
Type typeSource = source.GetType();
foreach(var property in typeSource.GetProperties())
{
if (property.PropertyType.IsGenericType && property.PropertyType.GetGenericArguments()[0] == typeRequired)
{
list.Add((T)property.GetValue(source));
}
}
return list;
}
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;
}
}
}

View File

@ -4,19 +4,26 @@ using DressAtelierDataModels.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
namespace DressAtelierFileImplement.Models
{
[DataContract]
public class Client : IClientModel
{
[DataMember]
public int ID { get; set; }
[DataMember]
public string FullName { get; set; } = string.Empty;
[DataMember]
public string Email { get; set; } = string.Empty;
[DataMember]
public string Password { get; set; } = string.Empty;
public static Client? Create(ClientBindingModel? model)

View File

@ -9,19 +9,27 @@ using System.Threading.Tasks;
using System.Security.Cryptography.X509Certificates;
using System.Runtime.CompilerServices;
using System.Xml.Linq;
using System.Runtime.Serialization;
namespace DressAtelierFileImplement.Models
{
[DataContract]
public class Dress : IDressModel
{
[DataMember]
public int ID { get; private set; }
[DataMember]
public string DressName { get; private set; } = string.Empty;
[DataMember]
public double Price { get; private set; }
public Dictionary<int, int> Components { get; private set; } = new();
private Dictionary<int, (IMaterialModel, int)>? _dressComponents = null;
[DataMember]
public Dictionary<int, (IMaterialModel, int)> DressComponents
{
get

View File

@ -4,18 +4,29 @@ using DressAtelierDataModels.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
namespace DressAtelierFileImplement.Models
{
[DataContract]
public class Employee : IEmployeeModel
{
[DataMember]
public int ID { get; set; }
[DataMember]
public string FullName { get; set; } = string.Empty;
[DataMember]
public string Password { get; set; } = string.Empty;
[DataMember]
public int WorkExperience { get; set; }
[DataMember]
public int Qualification { get; set; }
public static Employee? Create(EmployeeBindingModel? model)

View File

@ -4,18 +4,23 @@ using DressAtelierDataModels.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
namespace DressAtelierFileImplement.Models
{
[DataContract]
public class Material : IMaterialModel
{
[DataMember]
public string ComponentName { get; private set; } = string.Empty;
[DataMember]
public double Cost { get; private set; }
[DataMember]
public int ID { get; private set; }
public static Material? Create(MaterialBindingModel? model)

View File

@ -4,24 +4,32 @@ using DressAtelierDataModels.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
namespace DressAtelierFileImplement.Models
{
[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 DeliveryDate { get; set; }
[DataMember]
public string Subject { get; set; } = string.Empty;
[DataMember]
public string Body { get; set; } = string.Empty;
public int ID { get; set; }

View File

@ -6,26 +6,41 @@ using System;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
namespace DressAtelierFileImplement.Models
{
[DataContract]
public class Order : IOrderModel
{
[DataMember]
public int ID { get; private set; }
[DataMember]
public int DressID { get; private set; }
[DataMember]
public int ClientID { get; private set; }
[DataMember]
public int? EmployeeID { get; private set; }
[DataMember]
public int Count { get; private set; }
[DataMember]
public double Sum { get; private set; }
[DataMember]
public OrderStatus Status { get; private set; } = OrderStatus.Unknown;
[DataMember]
public DateTime DateCreate { get; private set; } = DateTime.Now;
[DataMember]
public DateTime? DateImplement { get; private set; }
public static Order? Create(OrderBindingModel? model)

View File

@ -34,6 +34,7 @@
dressesToolStripMenuItem = new ToolStripMenuItem();
clientsToolStripMenuItem = new ToolStripMenuItem();
employeesToolStripMenuItem = new ToolStripMenuItem();
emailsToolStripMenuItem = new ToolStripMenuItem();
reportsToolStripMenuItem = new ToolStripMenuItem();
materialsListToolStripMenuItem = new ToolStripMenuItem();
materialsByDressesToolStripMenuItem = new ToolStripMenuItem();
@ -43,14 +44,14 @@
createOrderButton = new Button();
givenOrderButton = new Button();
refreshOrdersButton = new Button();
emailsToolStripMenuItem = new ToolStripMenuItem();
createBackupToolStripMenuItem = new ToolStripMenuItem();
menuStrip.SuspendLayout();
((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit();
SuspendLayout();
//
// menuStrip
//
menuStrip.Items.AddRange(new ToolStripItem[] { directoriesToolStripMenuItem, reportsToolStripMenuItem, startWorkingToolStripMenuItem });
menuStrip.Items.AddRange(new ToolStripItem[] { directoriesToolStripMenuItem, reportsToolStripMenuItem, startWorkingToolStripMenuItem, createBackupToolStripMenuItem });
menuStrip.Location = new Point(0, 0);
menuStrip.Name = "menuStrip";
menuStrip.Size = new Size(800, 24);
@ -67,31 +68,38 @@
// materialsToolStripMenuItem
//
materialsToolStripMenuItem.Name = "materialsToolStripMenuItem";
materialsToolStripMenuItem.Size = new Size(180, 22);
materialsToolStripMenuItem.Size = new Size(131, 22);
materialsToolStripMenuItem.Text = "Materials";
materialsToolStripMenuItem.Click += materialsToolStripMenuItem_Click;
//
// dressesToolStripMenuItem
//
dressesToolStripMenuItem.Name = "dressesToolStripMenuItem";
dressesToolStripMenuItem.Size = new Size(180, 22);
dressesToolStripMenuItem.Size = new Size(131, 22);
dressesToolStripMenuItem.Text = "Dresses";
dressesToolStripMenuItem.Click += dressesToolStripMenuItem_Click;
//
// clientsToolStripMenuItem
//
clientsToolStripMenuItem.Name = "clientsToolStripMenuItem";
clientsToolStripMenuItem.Size = new Size(180, 22);
clientsToolStripMenuItem.Size = new Size(131, 22);
clientsToolStripMenuItem.Text = "Clients";
clientsToolStripMenuItem.Click += clientsToolStripMenuItem_Click;
//
// employeesToolStripMenuItem
//
employeesToolStripMenuItem.Name = "employeesToolStripMenuItem";
employeesToolStripMenuItem.Size = new Size(180, 22);
employeesToolStripMenuItem.Size = new Size(131, 22);
employeesToolStripMenuItem.Text = "Employees";
employeesToolStripMenuItem.Click += employeesToolStripMenuItem_Click;
//
// emailsToolStripMenuItem
//
emailsToolStripMenuItem.Name = "emailsToolStripMenuItem";
emailsToolStripMenuItem.Size = new Size(131, 22);
emailsToolStripMenuItem.Text = "Emails";
emailsToolStripMenuItem.Click += emailsToolStripMenuItem_Click;
//
// reportsToolStripMenuItem
//
reportsToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { materialsListToolStripMenuItem, materialsByDressesToolStripMenuItem, ordersListToolStripMenuItem });
@ -167,12 +175,12 @@
refreshOrdersButton.UseVisualStyleBackColor = true;
refreshOrdersButton.Click += ButtonRef_Click;
//
// emailsToolStripMenuItem
// createBackupToolStripMenuItem
//
emailsToolStripMenuItem.Name = "emailsToolStripMenuItem";
emailsToolStripMenuItem.Size = new Size(180, 22);
emailsToolStripMenuItem.Text = "Emails";
emailsToolStripMenuItem.Click += emailsToolStripMenuItem_Click;
createBackupToolStripMenuItem.Name = "createBackupToolStripMenuItem";
createBackupToolStripMenuItem.Size = new Size(95, 20);
createBackupToolStripMenuItem.Text = "Create backup";
createBackupToolStripMenuItem.Click += createBackupToolStripMenuItem_Click;
//
// FormMain
//
@ -213,5 +221,6 @@
private ToolStripMenuItem startWorkingToolStripMenuItem;
private ToolStripMenuItem employeesToolStripMenuItem;
private ToolStripMenuItem emailsToolStripMenuItem;
private ToolStripMenuItem createBackupToolStripMenuItem;
}
}

View File

@ -22,13 +22,15 @@ namespace SewingDresses
private readonly IOrderLogic _orderLogic;
private readonly IReportLogic _reportLogic;
private readonly IWorkImitation _workImitation;
public FormMain(ILogger<FormMain> logger, IOrderLogic orderLogic, IReportLogic reportLogic, IWorkImitation workImitation)
private readonly IBackupLogic _backupLogic;
public FormMain(ILogger<FormMain> logger, IOrderLogic orderLogic, IReportLogic reportLogic, IWorkImitation workImitation, IBackupLogic backupLogic)
{
InitializeComponent();
_logger = logger;
_orderLogic = orderLogic;
_reportLogic = reportLogic;
_workImitation = workImitation;
_backupLogic = backupLogic;
}
private void FormMain_Load(object sender, EventArgs e)
@ -179,5 +181,22 @@ namespace SewingDresses
form.ShowDialog();
}
}
private void createBackupToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
if (_backupLogic != null)
{
var fbd = new FolderBrowserDialog();
if (fbd.ShowDialog() == DialogResult.OK)
{
_backupLogic.CreateBackup(new BackupSaveBindingModel { FolderName = fbd.SelectedPath });
MessageBox.Show("Backup has been created.", "Message", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
}
catch (Exception ex) { MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); }
}
}
}

View File

@ -68,6 +68,7 @@ namespace SewingDresses
services.AddTransient<IClientStorage, ClientStorage>();
services.AddTransient<IEmployeeStorage, EmployeeStorage>();
services.AddTransient<IMessageInfoStorage,MessageInfoStorage>();
services.AddTransient<IBackupInfo,BackupInfo>();
services.AddTransient<IMaterialLogic, MaterialLogic>();
services.AddTransient<IOrderLogic, OrderLogic>();
@ -76,6 +77,7 @@ namespace SewingDresses
services.AddTransient<IClientLogic, ClientLogic>();
services.AddTransient<IEmployeeLogic, EmployeeLogic>();
services.AddTransient<IMessageInfoLogic, MessageInfoLogic>();
services.AddTransient<IBackupLogic, BackupLogic>();
services.AddTransient<IWorkImitation, WorkImitation>();
services.AddSingleton<AbstractMailEmployee, MailKitEmployee>();