diff --git a/SushiBarContracts/BindingModel/BackUpSaveBinidngModel.cs b/SushiBarContracts/BindingModel/BackUpSaveBinidngModel.cs new file mode 100644 index 0000000..b672379 --- /dev/null +++ b/SushiBarContracts/BindingModel/BackUpSaveBinidngModel.cs @@ -0,0 +1,7 @@ +namespace SushiBarContracts.BindingModel +{ + public class BackUpSaveBinidngModel + { + public string FolderName { get; set; } = string.Empty; + } +} diff --git a/SushiBarContracts/BusinessLogicsContracts/IBackUpLogic.cs b/SushiBarContracts/BusinessLogicsContracts/IBackUpLogic.cs new file mode 100644 index 0000000..7101974 --- /dev/null +++ b/SushiBarContracts/BusinessLogicsContracts/IBackUpLogic.cs @@ -0,0 +1,9 @@ +using SushiBarContracts.BindingModel; + +namespace SushiBarContracts.BusinessLogicsContracts +{ + public interface IBackUpLogic + { + void CreateBackUp(BackUpSaveBinidngModel model); + } +} diff --git a/SushiBarContracts/StoragesContracts/IBackUpInfo.cs b/SushiBarContracts/StoragesContracts/IBackUpInfo.cs new file mode 100644 index 0000000..a58249e --- /dev/null +++ b/SushiBarContracts/StoragesContracts/IBackUpInfo.cs @@ -0,0 +1,8 @@ +namespace SushiBarContracts.StoragesContracts +{ + public interface IBackUpInfo + { + List? GetList() where T : class, new(); + Type? GetTypeByModelInterface(string modelInterfaceName); + } +} diff --git a/SushiBarDatabaseImplement/Implements/BackUpInfo.cs b/SushiBarDatabaseImplement/Implements/BackUpInfo.cs new file mode 100644 index 0000000..712ae1e --- /dev/null +++ b/SushiBarDatabaseImplement/Implements/BackUpInfo.cs @@ -0,0 +1,27 @@ +using SushiBarContracts.StoragesContracts; + +namespace SushiBarDatabaseImplement.Implements +{ + public class BackUpInfo : IBackUpInfo + { + public List? GetList() where T : class, new() + { + using var context = new SushiBarDatabase(); + 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/SushiBarDatabaseImplement/Models/Client.cs b/SushiBarDatabaseImplement/Models/Client.cs index e911434..506aee9 100644 --- a/SushiBarDatabaseImplement/Models/Client.cs +++ b/SushiBarDatabaseImplement/Models/Client.cs @@ -3,24 +3,28 @@ using SushiBarContracts.ViewModels; using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations; using SushiBarDataModels; +using System.Runtime.Serialization; namespace SushiBarDatabaseImplement.Models { + [DataContract] public class Client : IClientModel { + [DataMember] public int Id { get; private set; } + [DataMember] [Required] public string ClientFIO { get; private set; } = string.Empty; - + + [DataMember] [Required] public string Email { get; private set; } = string.Empty; + [DataMember] [Required] public string Password { get; private set; } = string.Empty; - [Required] - [ForeignKey("ClientId")] public virtual List Orders { get; set; } = new(); diff --git a/SushiBarDatabaseImplement/Models/Component.cs b/SushiBarDatabaseImplement/Models/Component.cs index e394f9a..acbb8e5 100644 --- a/SushiBarDatabaseImplement/Models/Component.cs +++ b/SushiBarDatabaseImplement/Models/Component.cs @@ -3,16 +3,24 @@ using System.ComponentModel.DataAnnotations; using SushiBarDataModels.Models; using SushiBarContracts.BindingModel; using SushiBarContracts.ViewModels; +using System.Runtime.Serialization; namespace SushiBarDatabaseImplement.Models { + [DataContract] public class Component : IComponentModel { + [DataMember] public int Id { get; private set; } + + [DataMember] [Required] public string ComponentName { get; private set; } = string.Empty; + + [DataMember] [Required] public double Cost { get; set; } + [ForeignKey("ComponentId")] public virtual List SushiComponents { get; set; } = new(); public static Component? Create(ComponentBindingModel model) diff --git a/SushiBarDatabaseImplement/Models/Implementer.cs b/SushiBarDatabaseImplement/Models/Implementer.cs index 241ca9c..96f3ead 100644 --- a/SushiBarDatabaseImplement/Models/Implementer.cs +++ b/SushiBarDatabaseImplement/Models/Implementer.cs @@ -1,33 +1,34 @@ using SushiBarContracts.BindingModel; using SushiBarContracts.ViewModels; using SushiBarDataModels; -using System; -using System.Collections.Generic; using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using System.Runtime.Serialization; namespace SushiBarDatabaseImplement.Models { + [DataContract] public class Implementer : IImplementerModel { + [DataMember] public int Id { get; private set; } + [DataMember] [Required] public string ImplementerFIO { get; private set; } = string.Empty; + [DataMember] [Required] public string Password { get; private set; } = string.Empty; + [DataMember] [Required] public int WorkExperience { get; private set; } + [DataMember] [Required] public int Qualification { get; private set; } - [Required] [ForeignKey("ImplementerId")] public virtual List Orders { get; set; } = new(); diff --git a/SushiBarDatabaseImplement/Models/MessageInfo.cs b/SushiBarDatabaseImplement/Models/MessageInfo.cs index 989ec72..f6c558e 100644 --- a/SushiBarDatabaseImplement/Models/MessageInfo.cs +++ b/SushiBarDatabaseImplement/Models/MessageInfo.cs @@ -2,25 +2,33 @@ using SushiBarContracts.ViewModels; using SushiBarDataModels; using System.ComponentModel.DataAnnotations; +using System.Runtime.Serialization; namespace SushiBarDatabaseImplement.Models { + [DataContract] public class MessageInfo : IMessageInfoModel { + [DataMember] [Key] public string MessageId { get; set; } = string.Empty; + [DataMember] public int? ClientId { get; set; } + [DataMember] [Required] public string SenderName { get; set; } = string.Empty; + [DataMember] [Required] public DateTime DateDelivery { get; set; } = DateTime.Now; + [DataMember] [Required] public string Subject { get; set; } = string.Empty; + [DataMember] [Required] public string Body { get; set; } = string.Empty; diff --git a/SushiBarDatabaseImplement/Models/Order.cs b/SushiBarDatabaseImplement/Models/Order.cs index 9a7247d..b4a7ec3 100644 --- a/SushiBarDatabaseImplement/Models/Order.cs +++ b/SushiBarDatabaseImplement/Models/Order.cs @@ -3,33 +3,46 @@ using SushiBarContracts.ViewModels; using SushiBarDataModels; using SushiBarDataModels.Enums; using System.ComponentModel.DataAnnotations; +using System.Runtime.Serialization; namespace SushiBarDatabaseImplement.Models { + [DataContract] public class Order : IOrderModel { + [DataMember] public int Id { get; set; } + [DataMember] [Required] public int SushiId { get; set; } + [DataMember] [Required] public int ClientId { get; set; } - + + [DataMember] public int? ImplementerId { get; set; } + [DataMember] [Required] public int Count { get; set; } + [DataMember] [Required] public double Sum { get; set; } + [DataMember] [Required] public OrderStatus Status { get; set; } = OrderStatus.Неизвестен; + [DataMember] [Required] public DateTime DateCreate { get; set; } = DateTime.Now; + + [DataMember] public DateTime? DateImplement { get; set; } + public virtual Client? Client { get; set; } public virtual Implementer? Implementer { get; set; } public virtual Sushi? Sushi { get; set; } @@ -53,7 +66,7 @@ namespace SushiBarDatabaseImplement.Models ImplementerId = model.ImplementerId, }; } - + public void Update(OrderBindingModel model) { if (model == null) @@ -74,7 +87,7 @@ namespace SushiBarDatabaseImplement.Models DateCreate = DateCreate, DateImplement = DateImplement, ClientId = ClientId, - ImplementerId =ImplementerId, + ImplementerId = ImplementerId, SushiName = Sushi?.SushiName ?? string.Empty, ClientFIO = Client?.ClientFIO ?? string.Empty, ImplementerFIO = Implementer?.ImplementerFIO ?? string.Empty diff --git a/SushiBarDatabaseImplement/Models/Sushi.cs b/SushiBarDatabaseImplement/Models/Sushi.cs index 9e3a64e..960a047 100644 --- a/SushiBarDatabaseImplement/Models/Sushi.cs +++ b/SushiBarDatabaseImplement/Models/Sushi.cs @@ -3,18 +3,28 @@ using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations; using SushiBarContracts.BindingModel; using SushiBarContracts.ViewModels; +using System.Runtime.Serialization; namespace SushiBarDatabaseImplement.Models { + [DataContract] public class Sushi : ISushiModel { + [DataMember] public int Id { get; set; } + + [DataMember] [Required] public string SushiName { get; set; } = string.Empty; + + [DataMember] [Required] public double Price { get; set; } + private Dictionary? _sushiComponents = null; + + [DataMember] [NotMapped] public Dictionary SushiComponents { diff --git a/SushiBarDatabaseImplement/Models/SushiComponent.cs b/SushiBarDatabaseImplement/Models/SushiComponent.cs index 60c93fa..2a470de 100644 --- a/SushiBarDatabaseImplement/Models/SushiComponent.cs +++ b/SushiBarDatabaseImplement/Models/SushiComponent.cs @@ -1,18 +1,29 @@ using System.ComponentModel.DataAnnotations; +using System.Runtime.Serialization; namespace SushiBarDatabaseImplement.Models { + [DataContract] public class SushiComponent { + [DataMember] public int Id { get; set; } + + [DataMember] [Required] public int SushiId { get; set; } + + [DataMember] [Required] public int ComponentId { get; set; } + + [DataMember] [Required] public int Count { get; set; } + public virtual Component Component { get; set; } = new(); + public virtual Sushi Sushi { get; set; } = new(); } diff --git a/SushiBarFileImplement/Implements/BackUpInfo.cs b/SushiBarFileImplement/Implements/BackUpInfo.cs new file mode 100644 index 0000000..507e2c1 --- /dev/null +++ b/SushiBarFileImplement/Implements/BackUpInfo.cs @@ -0,0 +1,40 @@ +using SushiBarContracts.StoragesContracts; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SushiBarFileImplement.Implements +{ + public class BackUpInfo : IBackUpInfo + { + private readonly DataFileSingleton _fileSingleton; + + public BackUpInfo() + { + _fileSingleton = DataFileSingleton.GetInstance(); + } + + public List? GetList() where T : class, new() + { + return (List?)_fileSingleton.GetType().GetProperties() + .FirstOrDefault(x => x.PropertyType.IsGenericType && x.PropertyType.GetGenericArguments()[0] == typeof(T)) + ?.GetValue(_fileSingleton); + } + 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/SushiBarFileImplement/Models/Client.cs b/SushiBarFileImplement/Models/Client.cs index 5a837bd..62c2ff0 100644 --- a/SushiBarFileImplement/Models/Client.cs +++ b/SushiBarFileImplement/Models/Client.cs @@ -1,15 +1,24 @@ using SushiBarContracts.BindingModel; using SushiBarContracts.ViewModels; using SushiBarDataModels; +using System.Runtime.Serialization; using System.Xml.Linq; namespace SushiBarFileImplement.Models { + [DataContract] public class Client : IClientModel { + [DataMember] 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) { diff --git a/SushiBarFileImplement/Models/Component.cs b/SushiBarFileImplement/Models/Component.cs index 3b722c6..4158a90 100644 --- a/SushiBarFileImplement/Models/Component.cs +++ b/SushiBarFileImplement/Models/Component.cs @@ -1,14 +1,21 @@ using SushiBarContracts.BindingModel; using SushiBarContracts.ViewModels; using SushiBarDataModels.Models; +using System.Runtime.Serialization; using System.Xml.Linq; namespace SushiBarFileImplement.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) { diff --git a/SushiBarFileImplement/Models/Implementer.cs b/SushiBarFileImplement/Models/Implementer.cs index c8f5734..ef8ee2e 100644 --- a/SushiBarFileImplement/Models/Implementer.cs +++ b/SushiBarFileImplement/Models/Implementer.cs @@ -4,18 +4,29 @@ using SushiBarDataModels; 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 SushiBarFileImplement.Models { + [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) { diff --git a/SushiBarFileImplement/Models/MessageInfo.cs b/SushiBarFileImplement/Models/MessageInfo.cs index a6052b9..750ded9 100644 --- a/SushiBarFileImplement/Models/MessageInfo.cs +++ b/SushiBarFileImplement/Models/MessageInfo.cs @@ -1,22 +1,30 @@ using SushiBarContracts.BindingModel; using SushiBarContracts.ViewModels; using SushiBarDataModels; +using System.Runtime.Serialization; using System.Xml.Linq; namespace SushiBarFileImplement.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 DateDelivery { get; set; } = DateTime.Now; + [DataMember] public string Subject { get; set; } = string.Empty; + [DataMember] public string Body { get; set; } = string.Empty; public static MessageInfo? Create(MessageInfoBindingModel model) diff --git a/SushiBarFileImplement/Models/Order.cs b/SushiBarFileImplement/Models/Order.cs index cedea01..329d903 100644 --- a/SushiBarFileImplement/Models/Order.cs +++ b/SushiBarFileImplement/Models/Order.cs @@ -2,20 +2,39 @@ using SushiBarContracts.ViewModels; using SushiBarDataModels; using SushiBarDataModels.Enums; +using System.Runtime.Serialization; using System.Xml.Linq; namespace SushiBarFileImplement.Models { + [DataContract] public class Order : IOrderModel { + [DataMember] public int Id { get; private set; } + + [DataMember] public int SushiId { get; private set; } + + [DataMember] public int ClientId { get; private set; } + + [DataMember] public int? ImplementerId { 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.Неизвестен; + + [DataMember] public DateTime DateCreate { get; private set; } = DateTime.Now; + + [DataMember] public DateTime? DateImplement { get; private set; } public static Order? Create(OrderBindingModel? model) { diff --git a/SushiBarFileImplement/Models/Sushi.cs b/SushiBarFileImplement/Models/Sushi.cs index 7de8910..bef7781 100644 --- a/SushiBarFileImplement/Models/Sushi.cs +++ b/SushiBarFileImplement/Models/Sushi.cs @@ -1,18 +1,27 @@ using SushiBarContracts.BindingModel; using SushiBarContracts.ViewModels; using SushiBarDataModels.Models; +using System.Runtime.Serialization; using System.Xml.Linq; namespace SushiBarFileImplement.Models { + [DataContract] public class Sushi : ISushiModel { + [DataMember] public int Id { get; private set; } + + [DataMember] public string SushiName { get; private set; } = string.Empty; + + [DataMember] public double Price { get; private set; } public Dictionary Components { get; private set; } = new(); private Dictionary? _sushiComponents = null; + + [DataMember] public Dictionary SushiComponents { get