reflections

This commit is contained in:
Марат Заргаров 2023-06-03 01:37:36 +04:00
parent 02873d40c9
commit 8d859ddc9f
57 changed files with 1320 additions and 501 deletions

1
.gitignore vendored
View File

@ -398,3 +398,4 @@ FodyWeavers.xsd
# JetBrains Rider # JetBrains Rider
*.sln.iml *.sln.iml
/Pizzeria/ImplementationExtensions

View File

@ -0,0 +1,103 @@
using Microsoft.Extensions.Logging;
using PizzeriaContracts.BindingModels;
using PizzeriaContracts.BusinessLogicsContracts;
using PizzeriaContracts.StoragesContracts;
using PizzeriaDataModels;
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;
namespace PizzeriaBusinessLogic.BusinessLogics
{
public class BackUpLogic : IBackUpLogic
{
private readonly ILogger _logger;
private readonly IBackUpInfo _backUpInfo;
public BackUpLogic(ILogger<BackUpLogic> logger, IBackUpInfo backUpInfo)
{
_logger = logger;
_backUpInfo = backUpInfo;
}
public void CreateBackUp(BackUpSaveBindingModel 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<T>(string folderName) where T : class, new()
{
var records = _backUpInfo.GetList<T>();
if (records == null)
{
_logger.LogWarning("{type} type get null list", typeof(T).Name);
return;
}
var jsonFormatter = new DataContractJsonSerializer(typeof(List<T>));
using var fs = new FileStream(string.Format("{0}/{1}.json", folderName, typeof(T).Name), FileMode.OpenOrCreate);
jsonFormatter.WriteObject(fs, records);
}
}
}

View File

@ -0,0 +1,25 @@
namespace PizzeriaContracts.Attributes
{
[AttributeUsage(AttributeTargets.Property)]
public class ColumnAttribute : Attribute
{
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; }
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;
}
}
}

View File

@ -0,0 +1,27 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PizzeriaContracts.Attributes
{
public enum GridViewAutoSize
{
NotSet = 0,
None = 1,
ColumnHeader = 2,
AllCellsExceptHeader = 4,
AllCells = 6,
DisplayedCellsExceptHeader = 8,
DisplayedCells = 10,
Fill = 16
}
}

View File

@ -0,0 +1,13 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PizzeriaContracts.BindingModels
{
public class BackUpSaveBindingModel
{
public string FolderName { get; set; } = string.Empty;
}
}

View File

@ -15,5 +15,6 @@ namespace PizzeriaContracts.BindingModels
public string Subject { get; set; } = string.Empty; public string Subject { get; set; } = string.Empty;
public string Body { get; set; } = string.Empty; public string Body { get; set; } = string.Empty;
public DateTime DateDelivery { get; set; } public DateTime DateDelivery { get; set; }
public int Id => throw new NotImplementedException();
} }
} }

View File

@ -0,0 +1,14 @@
using PizzeriaContracts.BindingModels;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PizzeriaContracts.BusinessLogicsContracts
{
public interface IBackUpLogic
{
void CreateBackUp(BackUpSaveBindingModel model);
}
}

View File

@ -0,0 +1,66 @@
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PizzeriaContracts.DI
{
public class DependencyManager
{
private readonly IDependencyContainer _dependencyManager;
private static DependencyManager? _manager;
private static readonly object _locjObject = new();
private DependencyManager()
{
_dependencyManager = new ServiceDependencyContainer();
}
public static DependencyManager Instance { get { if (_manager == null) { lock (_locjObject) { _manager = new DependencyManager(); } } return _manager; } }
/// <summary>
/// Иницализация библиотек, в которых идут установки зависомстей
/// </summary>
public static void InitDependency()
{
var ext = ServiceProviderLoader.GetImplementationExtensions();
if (ext == null)
{
throw new ArgumentNullException("Отсутствуют компоненты для загрузки зависимостей по модулям");
}
// регистрируем зависимости
ext.RegisterServices();
}
/// <summary>
/// Регистрация логгера
/// </summary>
/// <param name="configure"></param>
public void AddLogging(Action<ILoggingBuilder> configure) => _dependencyManager.AddLogging(configure);
/// <summary>
/// Добавление зависимости
/// </summary>
/// <typeparam name="T"></typeparam>
/// <typeparam name="U"></typeparam>
public void RegisterType<T, U>(bool isSingle = false) where U : class, T where T : class => _dependencyManager.RegisterType<T, U>(isSingle);
/// <summary>
/// Добавление зависимости
/// </summary>
/// <typeparam name="T"></typeparam>
/// <typeparam name="U"></typeparam>
public void RegisterType<T>(bool isSingle = false) where T : class => _dependencyManager.RegisterType<T>(isSingle);
/// <summary>
/// Получение класса со всеми зависмостями
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public T Resolve<T>() => _dependencyManager.Resolve<T>();
}
}

View File

@ -0,0 +1,40 @@
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PizzeriaContracts.DI
{
public interface IDependencyContainer
{
/// <summary>
/// Регистрация логгера
/// </summary>
/// <param name="configure"></param>
void AddLogging(Action<ILoggingBuilder> configure);
/// <summary>
/// Добавление зависимости
/// </summary>
/// <typeparam name="T"></typeparam>
/// <typeparam name="U"></typeparam>
/// <param name="isSingle"></param>
void RegisterType<T, U>(bool isSingle) where U : class, T where T : class;
/// <summary>
/// Добавление зависимости
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="isSingle"></param>
void RegisterType<T>(bool isSingle) where T : class;
/// <summary>
/// Получение класса со всеми зависмостями
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
T Resolve<T>();
}
}

View File

@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PizzeriaContracts.DI
{
public interface IImplementationExtension
{
public int Priority { get; }
/// <summary>
/// Регистрация сервисов
/// </summary>
public void RegisterServices();
}
}

View File

@ -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 PizzeriaContracts.DI
{
public class ServiceDependencyContainer : IDependencyContainer
{
private ServiceProvider? _serviceProvider;
private readonly ServiceCollection _serviceCollection;
public ServiceDependencyContainer()
{
_serviceCollection = new ServiceCollection();
}
public void AddLogging(Action<ILoggingBuilder> configure)
{
_serviceCollection.AddLogging(configure);
}
public void RegisterType<T, U>(bool isSingle) where U : class, T where T : class
{
if (isSingle)
{
_serviceCollection.AddSingleton<T, U>();
}
else
{
_serviceCollection.AddTransient<T, U>();
}
_serviceProvider = null;
}
public void RegisterType<T>(bool isSingle) where T : class
{
if (isSingle)
{
_serviceCollection.AddSingleton<T>();
}
else
{
_serviceCollection.AddTransient<T>();
}
_serviceProvider = null;
}
public T Resolve<T>()
{
if (_serviceProvider == null)
{
_serviceProvider = _serviceCollection.BuildServiceProvider();
}
return _serviceProvider.GetService<T>()!;
}
}
}

View File

@ -0,0 +1,55 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace PizzeriaContracts.DI
{
public class ServiceProviderLoader
{
/// <summary>
/// Загрузка всех классов-реализаций IImplementationExtension
/// </summary>
/// <returns></returns>
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";
}
}
}

View File

@ -6,6 +6,10 @@
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
</PropertyGroup> </PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Logging" Version="7.0.0" />
</ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\PizzeriaDataModels\PizzeriaDataModels.csproj" /> <ProjectReference Include="..\PizzeriaDataModels\PizzeriaDataModels.csproj" />
</ItemGroup> </ItemGroup>

View File

@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PizzeriaContracts.StoragesContracts
{
public interface IBackUpInfo
{
List<T>? GetList<T>() where T : class, new();
Type? GetTypeByModelInterface(string modelInterfaceName);
}
}

View File

@ -1,4 +1,5 @@
using PizzeriaDataModels.Models; using PizzeriaContracts.Attributes;
using PizzeriaDataModels.Models;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
@ -10,12 +11,16 @@ namespace PizzeriaContracts.ViewModels
{ {
public class ClientViewModel : IClientModel public class ClientViewModel : IClientModel
{ {
[Column(visible: false)]
public int Id { get; set; } public int Id { get; set; }
[DisplayName("ФИО клиента")]
[Column(title: "ФИО клиента", width: 150)]
public string ClientFIO { get; set; } = string.Empty; public string ClientFIO { get; set; } = string.Empty;
[DisplayName("Логин (эл. почта)")]
[Column(title: "Логин (эл. почта)", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)]
public string Email { get; set; } = string.Empty; public string Email { get; set; } = string.Empty;
[DisplayName("Пароль")]
[Column(title: "Пароль", width: 150)]
public string Password { get; set; } = string.Empty; public string Password { get; set; } = string.Empty;
} }

View File

@ -1,4 +1,5 @@
using PizzeriaDataModels; using PizzeriaContracts.Attributes;
using PizzeriaDataModels;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
@ -10,10 +11,11 @@ namespace PizzeriaContracts.ViewModels
{ {
public class ComponentViewModel : IComponentModel public class ComponentViewModel : IComponentModel
{ {
[Column(visible: false)]
public int Id { get; set; } public int Id { get; set; }
[DisplayName("Название компонента")] [Column(title: "Название ингредиента", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)]
public string ComponentName { get; set; } = string.Empty; public string ComponentName { get; set; } = string.Empty;
[DisplayName("Цена")] [Column(title: "Цена", width: 150)]
public double Cost { get; set; } public double Cost { get; set; }
} }

View File

@ -1,4 +1,5 @@
using PizzeriaDataModels.Models; using PizzeriaContracts.Attributes;
using PizzeriaDataModels.Models;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
@ -10,18 +11,19 @@ namespace PizzeriaContracts.ViewModels
{ {
public class ImplementerViewModel : IImplementerModel public class ImplementerViewModel : IImplementerModel
{ {
[Column(visible: false)]
public int Id { get; set; } public int Id { get; set; }
[DisplayName("ФИО исполнителя")] [Column(title: "ФИО исполнителя", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)]
public string ImplementerFIO { get; set; } = string.Empty; public string ImplementerFIO { get; set; } = string.Empty;
[DisplayName("Пароль")] [Column(title: "Пароль", width: 100)]
public string Password { get; set; } = string.Empty; public string Password { get; set; } = string.Empty;
[DisplayName("Стаж работы")] [Column(title: "Стаж работы", width: 60)]
public int WorkExperience { get; set; } public int WorkExperience { get; set; }
[DisplayName("Квалификация")] [Column(title: "Квалификация", width: 60)]
public int Qualification { get; set; } public int Qualification { get; set; }
} }
} }

View File

@ -1,4 +1,5 @@
using PizzeriaDataModels.Models; using PizzeriaContracts.Attributes;
using PizzeriaDataModels.Models;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
@ -10,20 +11,25 @@ namespace PizzeriaContracts.ViewModels
{ {
public class MessageInfoViewModel : IMessageInfoModel public class MessageInfoViewModel : IMessageInfoModel
{ {
[Column(visible: false)]
public int Id { get; set; }
[Column(visible: false)]
public string MessageId { get; set; } = string.Empty; public string MessageId { get; set; } = string.Empty;
[Column(visible: false)]
public int? ClientId { get; set; } public int? ClientId { get; set; }
[DisplayName("Отправитель")] [Column(title: "Отправитель", width: 150)]
public string SenderName { get; set; } = string.Empty; public string SenderName { get; set; } = string.Empty;
[DisplayName("Дата письма")] [Column(title: "Дата письма", width: 120)]
public DateTime DateDelivery { get; set; } public DateTime DateDelivery { get; set; }
[DisplayName("Заголовок")] [Column(title: "Заголовок", width: 120)]
public string Subject { get; set; } = string.Empty; public string Subject { get; set; } = string.Empty;
[DisplayName("Текст")] [Column(title: "Текст", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)]
public string Body { get; set; } = string.Empty; public string Body { get; set; } = string.Empty;
} }
} }

View File

@ -1,4 +1,5 @@
using PizzeriaDataModels; using PizzeriaContracts.Attributes;
using PizzeriaDataModels;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
@ -10,37 +11,43 @@ namespace PizzeriaContracts.ViewModels
{ {
public class OrderViewModel : IOrderModel public class OrderViewModel : IOrderModel
{ {
[DisplayName("Номер")] [Column(title: "Номер", width: 90)]
public int Id { get; set; } public int Id { get; set; }
[Column(visible: false)]
public int ClientId { get; set; } public int ClientId { get; set; }
[DisplayName("Клиент")] [Column(title: "Имя клиента", width: 190)]
public string? ClientFIO { get; set; } = string.Empty; public string? ClientFIO { get; set; } = string.Empty;
[Column(visible: false)]
public string ClientEmail { get; set; } = string.Empty; public string ClientEmail { get; set; } = string.Empty;
[Column(visible: false)]
public int PizzaId { get; set; } public int PizzaId { get; set; }
[DisplayName("Изделие")] [Column(title: "Пицца", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)]
public string PizzaName { get; set; } = string.Empty; public string PizzaName { get; set; } = string.Empty;
[Column(visible: false)]
public int? ImplementerId { get; set; } public int? ImplementerId { get; set; }
[DisplayName("Исполнитель")]
[Column(title: "Исполнитель", width: 150)]
public string? ImplementerFIO { get; set; } = null; public string? ImplementerFIO { get; set; } = null;
[DisplayName("Количество")] [Column(title: "Количество", width: 100)]
public int Count { get; set; } public int Count { get; set; }
[DisplayName("Сумма")] [Column(title: "Сумма", width: 120)]
public double Sum { get; set; } public double Sum { get; set; }
[DisplayName("Статус")] [Column(title: "Статус", width: 70)]
public OrderStatus Status { get; set; } = OrderStatus.Неизвестен; public OrderStatus Status { get; set; } = OrderStatus.Неизвестен;
[DisplayName("Дата создания")] [Column(title: "Дата создания", width: 120)]
public DateTime DateCreate { get; set; } = DateTime.Now; public DateTime DateCreate { get; set; } = DateTime.Now;
[DisplayName("Дата выполнения")] [Column(title: "Дата выполнения", width: 120)]
public DateTime? DateImplement { get; set; } public DateTime? DateImplement { get; set; }
} }

View File

@ -1,4 +1,5 @@
using PizzeriaDataModels; using PizzeriaContracts.Attributes;
using PizzeriaDataModels;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
@ -10,16 +11,17 @@ namespace PizzeriaContracts.ViewModels
{ {
public class PizzaViewModel : IPizzaModel public class PizzaViewModel : IPizzaModel
{ {
[Column(visible: false)]
public int Id { get; set; } public int Id { get; set; }
[DisplayName("Название изделия")]
[Column(title: "Название пиццы", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)]
public string PizzaName { get; set; } = string.Empty; public string PizzaName { get; set; } = string.Empty;
[DisplayName("Цена")]
[Column(title: "Цена", width: 70)]
public double Price { get; set; } public double Price { get; set; }
public Dictionary<int, (IComponentModel, int)> PizzaComponents
{ [Column(visible: false)]
get; public Dictionary<int, (IComponentModel, int)> PizzaComponents { get; set; } = new();
set;
} = new();
} }
} }

View File

@ -6,7 +6,7 @@ using System.Threading.Tasks;
namespace PizzeriaDataModels.Models namespace PizzeriaDataModels.Models
{ {
public interface IMessageInfoModel public interface IMessageInfoModel : IId
{ {
string MessageId { get; } string MessageId { get; }
int? ClientId { get; } int? ClientId { get; }

View File

@ -0,0 +1,28 @@
using PizzeriaContracts.DI;
using PizzeriaContracts.StorageContracts;
using PizzeriaContracts.StoragesContracts;
using PizzeriaDatabaseImplement.Implements;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PizzeriaDatabaseImplement
{
public class ImplementationExtension : IImplementationExtension
{
public int Priority => 3;
public void RegisterServices()
{
DependencyManager.Instance.RegisterType<IClientStorage, ClientStorage>();
DependencyManager.Instance.RegisterType<IComponentStorage, ComponentStorage>();
DependencyManager.Instance.RegisterType<IImplementerStorage, ImplementerStorage>();
DependencyManager.Instance.RegisterType<IMessageInfoStorage, MessageInfoStorage>();
DependencyManager.Instance.RegisterType<IOrderStorage, OrderStorage>();
DependencyManager.Instance.RegisterType<IPizzaStorage, PizzaStorage>();
DependencyManager.Instance.RegisterType<IBackUpInfo, BackUpInfo>();
}
}
}

View File

@ -0,0 +1,32 @@
using PizzeriaContracts.StoragesContracts;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PizzeriaDatabaseImplement.Implements
{
public class BackUpInfo : IBackUpInfo
{
public List<T>? GetList<T>() where T : class, new()
{
using var context = new PizzeriaDatabase();
return context.Set<T>().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;
}
}
}

View File

@ -8,53 +8,34 @@ using System.ComponentModel.DataAnnotations;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Runtime.Serialization;
namespace PizzeriaDatabaseImplement.Models namespace PizzeriaDatabaseImplement.Models
{ {
[DataContract]
public class Client : IClientModel public class Client : IClientModel
{ {
[DataMember]
public int Id { get; set; } public int Id { get; set; }
[DataMember]
[Required] [Required]
public string ClientFIO { get; set; } = string.Empty; public string ClientFIO { get; set; } = string.Empty;
[DataMember]
[Required] [Required]
public string Email { get; set; } = string.Empty; public string Email { get; set; } = string.Empty;
[DataMember]
[Required] [Required]
public string Password { get; set; } = string.Empty; public string Password { get; set; } = string.Empty;
[ForeignKey("ClientId")] [ForeignKey("ClientId")]
public virtual List<Order> ClientOrders { get; set; } = new(); public virtual List<Order> ClientOrders { get; set; } = new();
[ForeignKey("ClientId")] [ForeignKey("ClientId")]
public virtual List<MessageInfo> ClientMessages { get; set; } = new(); public virtual List<MessageInfo> ClientMessages { get; set; } = new();
public static Client? Create(ClientBindingModel model)
{
if (model == null)
{
return null;
}
return new Client()
{
Id = model.Id,
ClientFIO = model.ClientFIO,
Email = model.Email,
Password = model.Password
};
}
public void Update(ClientBindingModel model)
{
if (model == null)
{
return;
}
ClientFIO = model.ClientFIO;
Email = model.Email;
Password = model.Password;
}
public ClientViewModel GetViewModel => new() public ClientViewModel GetViewModel => new()
{ {
Id = Id, Id = Id,
@ -62,5 +43,23 @@ namespace PizzeriaDatabaseImplement.Models
Email = Email, Email = Email,
Password = Password Password = Password
}; };
public static Client Create(ClientBindingModel model)
{
return new Client()
{
Id = model.Id,
ClientFIO = model.ClientFIO,
Email = model.Email,
Password = model.Password,
};
}
public void Update(ClientBindingModel model)
{
ClientFIO = model.ClientFIO;
Email = model.Email;
Password = model.Password;
}
} }
} }

View File

@ -3,16 +3,24 @@ using PizzeriaContracts.ViewModels;
using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations.Schema;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using PizzeriaDataModels; using PizzeriaDataModels;
using System.Runtime.Serialization;
namespace PizzeriaDatabaseImplement.Models namespace PizzeriaDatabaseImplement.Models
{ {
[DataContract]
public class Component : IComponentModel public class Component : IComponentModel
{ {
[DataMember]
public int Id { get; private set; } public int Id { get; private set; }
[DataMember]
[Required] [Required]
public string ComponentName { get; private set; } = string.Empty; public string ComponentName { get; private set; } = string.Empty;
[DataMember]
[Required] [Required]
public double Cost { get; set; } public double Cost { get; set; }
[ForeignKey("ComponentId")] [ForeignKey("ComponentId")]
public virtual List<PizzaComponent> PizzaComponents { get; set; } = new(); public virtual List<PizzaComponent> PizzaComponents { get; set; } = new();
public static Component? Create(ComponentBindingModel model) public static Component? Create(ComponentBindingModel model)

View File

@ -8,22 +8,29 @@ using System.ComponentModel.DataAnnotations;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Runtime.Serialization;
namespace PizzeriaDatabaseImplement.Models namespace PizzeriaDatabaseImplement.Models
{ {
[DataContract]
public class Implementer : IImplementerModel public class Implementer : IImplementerModel
{ {
[DataMember]
public int Id { get; set; } public int Id { get; set; }
[DataMember]
[Required] [Required]
public string ImplementerFIO { get; set; } = string.Empty; public string ImplementerFIO { get; set; } = string.Empty;
[DataMember]
[Required] [Required]
public string Password { get; set; } = string.Empty; public string Password { get; set; } = string.Empty;
[DataMember]
[Required] [Required]
public int WorkExperience { get; set; } public int WorkExperience { get; set; }
[DataMember]
[Required] [Required]
public int Qualification { get; set; } public int Qualification { get; set; }

View File

@ -8,28 +8,38 @@ using System.ComponentModel.DataAnnotations;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Runtime.Serialization;
namespace PizzeriaDatabaseImplement.Models namespace PizzeriaDatabaseImplement.Models
{ {
public class MessageInfo : IMessageInfoModel public class MessageInfo : IMessageInfoModel
{ {
[NotMapped]
public int Id { get; private set; }
[DataMember]
[Key] [Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)] [DatabaseGenerated(DatabaseGeneratedOption.None)]
public string MessageId { get; set; } = string.Empty; public string MessageId { get; set; } = string.Empty;
[DataMember]
public int? ClientId { get; set; } public int? ClientId { get; set; }
public virtual Client? Client { get; set; } public virtual Client? Client { get; set; }
[DataMember]
[Required] [Required]
public string SenderName { get; set; } = string.Empty; public string SenderName { get; set; } = string.Empty;
[DataMember]
[Required] [Required]
public DateTime DateDelivery { get; set; } public DateTime DateDelivery { get; set; }
[DataMember]
[Required] [Required]
public string Subject { get; set; } = string.Empty; public string Subject { get; set; } = string.Empty;
[DataMember]
[Required] [Required]
public string Body { get; set; } = string.Empty; public string Body { get; set; } = string.Empty;

View File

@ -6,39 +6,52 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using System.Linq; using System.Linq;
using System.Runtime.Serialization;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace PizzeriaDatabaseImplement.Models namespace PizzeriaDatabaseImplement.Models
{ {
public class Order [DataContract]
public class Order : IOrderModel
{ {
[DataMember]
public int Id { get; private set; } public int Id { get; private set; }
[DataMember]
[Required] [Required]
public int ClientId { get; private set; } public int ClientId { get; private set; }
public virtual Client Client { get; set; } = new(); public virtual Client Client { get; private set; } = new();
[DataMember]
[Required] [Required]
public int PizzaId { get; private set; } public int PizzaId { get; private set; }
public virtual Pizza Pizza { get; set; } = new(); public virtual Pizza Pizza { get; set; } = new();
[DataMember]
public int? ImplementerId { get; private set; } public int? ImplementerId { get; private set; }
public virtual Implementer? Implementer { get; set; } = new(); public virtual Implementer? Implementer { get; set; } = new();
[DataMember]
[Required] [Required]
public int Count { get; private set; } public int Count { get; private set; }
[DataMember]
[Required] [Required]
public double Sum { get; private set; } public double Sum { get; private set; }
[DataMember]
[Required] [Required]
public OrderStatus Status { get; private set; } = OrderStatus.Неизвестен; public OrderStatus Status { get; private set; } = OrderStatus.Неизвестен;
[DataMember]
[Required] [Required]
public DateTime DateCreate { get; private set; } = DateTime.Now; public DateTime DateCreate { get; private set; } = DateTime.Now;
[DataMember]
public DateTime? DateImplement { get; private set; } public DateTime? DateImplement { get; private set; }
public static Order Create(PizzeriaDatabase context, OrderBindingModel model) public static Order Create(PizzeriaDatabase context, OrderBindingModel model)
@ -47,7 +60,7 @@ namespace PizzeriaDatabaseImplement.Models
{ {
Id = model.Id, Id = model.Id,
ClientId = model.ClientId, ClientId = model.ClientId,
Client = context.Clients.First(x => model.ClientId == x.Id), Client = context.Clients.First(x => x.Id == model.ClientId),
PizzaId = model.PizzaId, PizzaId = model.PizzaId,
Pizza = context.Pizzas.First(x => x.Id == model.PizzaId), Pizza = context.Pizzas.First(x => x.Id == model.PizzaId),
ImplementerId = model.ImplementerId, ImplementerId = model.ImplementerId,

View File

@ -3,18 +3,27 @@ using PizzeriaContracts.ViewModels;
using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations.Schema;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using PizzeriaDataModels; using PizzeriaDataModels;
using System.Runtime.Serialization;
namespace PizzeriaDatabaseImplement.Models namespace PizzeriaDatabaseImplement.Models
{ {
[DataContract]
public class Pizza : IPizzaModel public class Pizza : IPizzaModel
{ {
[DataMember]
public int Id { get; set; } public int Id { get; set; }
[DataMember]
[Required] [Required]
public string PizzaName { get; set; } = string.Empty; public string PizzaName { get; set; } = string.Empty;
[DataMember]
[Required] [Required]
public double Price { get; set; } public double Price { get; set; }
private Dictionary<int, (IComponentModel, int)>? _pizzaComponents = null; private Dictionary<int, (IComponentModel, int)>? _pizzaComponents = null;
[DataMember]
[NotMapped] [NotMapped]
public Dictionary<int, (IComponentModel, int)> PizzaComponents public Dictionary<int, (IComponentModel, int)> PizzaComponents
{ {
@ -33,8 +42,7 @@ namespace PizzeriaDatabaseImplement.Models
[ForeignKey("PizzaId")] [ForeignKey("PizzaId")]
public virtual List<Order> Orders { get; set; } = new(); public virtual List<Order> Orders { get; set; } = new();
public static Pizza public static Pizza Create(PizzeriaDatabase context, PizzaBindingModel model)
Create(PizzeriaDatabase context, PizzaBindingModel model)
{ {
return new Pizza() return new Pizza()
{ {

View File

@ -21,4 +21,8 @@
<ProjectReference Include="..\PizzeriaDataModels\PizzeriaDataModels.csproj" /> <ProjectReference Include="..\PizzeriaDataModels\PizzeriaDataModels.csproj" />
</ItemGroup> </ItemGroup>
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
<Exec Command="copy /Y &quot;$(TargetDir)*.dll&quot; &quot;$(SolutionDir)ImplementationExtensions\*.dll&quot;" />
</Target>
</Project> </Project>

View File

@ -0,0 +1,28 @@
using PizzeriaContracts.DI;
using PizzeriaContracts.StorageContracts;
using PizzeriaContracts.StoragesContracts;
using PizzeriaFileImplement.Implements;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PizzeriaFileImplement
{
public class ImplementationExtension : IImplementationExtension
{
public int Priority => 1;
public void RegisterServices()
{
DependencyManager.Instance.RegisterType<IClientStorage, ClientStorage>();
DependencyManager.Instance.RegisterType<IComponentStorage, ComponentStorage>();
DependencyManager.Instance.RegisterType<IImplementerStorage, ImplementerStorage>();
DependencyManager.Instance.RegisterType<IMessageInfoStorage, MessageInfoStorage>();
DependencyManager.Instance.RegisterType<IOrderStorage, OrderStorage>();
DependencyManager.Instance.RegisterType<IPizzaStorage, PizzaStorage>();
DependencyManager.Instance.RegisterType<IBackUpInfo, BackUpInfo>();
}
}
}

View File

@ -0,0 +1,42 @@
using PizzeriaContracts.StoragesContracts;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using static System.Net.Mime.MediaTypeNames;
namespace PizzeriaFileImplement.Implements
{
public class BackUpInfo : IBackUpInfo
{
private readonly DataFileSingleton source;
private readonly PropertyInfo[] sourceProperties;
public BackUpInfo()
{
source = DataFileSingleton.GetInstance();
sourceProperties = source.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public);
}
public List<T>? GetList<T>() where T : class, new()
{
var requredType = typeof(T);
return (List<T>?)sourceProperties.FirstOrDefault(x => x.PropertyType.IsGenericType && x.PropertyType.GetGenericArguments()[0] == requredType)
?.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;
}
}
}

View File

@ -4,19 +4,27 @@ using PizzeriaDataModels.Models;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Runtime.Serialization;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Xml.Linq; using System.Xml.Linq;
namespace PizzeriaFileImplement.Models namespace PizzeriaFileImplement.Models
{ {
[DataContract]
public class Client : IClientModel public class Client : IClientModel
{ {
[DataMember]
public int Id { get; private set; } public int Id { get; private set; }
public string ClientFIO { get; private set; } = string.Empty;
public string Email { get; private set; } = string.Empty;
public string Password { get; private set; } = string.Empty;
[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) public static Client? Create(ClientBindingModel model)
{ {
if (model == null) if (model == null)
@ -28,10 +36,9 @@ namespace PizzeriaFileImplement.Models
Id = model.Id, Id = model.Id,
ClientFIO = model.ClientFIO, ClientFIO = model.ClientFIO,
Email = model.Email, Email = model.Email,
Password = model.Password Password = model.Password,
}; };
} }
public static Client? Create(XElement element) public static Client? Create(XElement element)
{ {
if (element == null) if (element == null)
@ -43,10 +50,9 @@ namespace PizzeriaFileImplement.Models
Id = Convert.ToInt32(element.Attribute("Id")!.Value), Id = Convert.ToInt32(element.Attribute("Id")!.Value),
ClientFIO = element.Element("ClientFIO")!.Value, ClientFIO = element.Element("ClientFIO")!.Value,
Email = element.Element("Email")!.Value, Email = element.Element("Email")!.Value,
Password = element.Element("Password")!.Value Password = element.Element("Password")!.Value,
}; };
} }
public void Update(ClientBindingModel model) public void Update(ClientBindingModel model)
{ {
if (model == null) if (model == null)
@ -57,15 +63,13 @@ namespace PizzeriaFileImplement.Models
Email = model.Email; Email = model.Email;
Password = model.Password; Password = model.Password;
} }
public ClientViewModel GetViewModel => new() public ClientViewModel GetViewModel => new()
{ {
Id = Id, Id = Id,
ClientFIO = ClientFIO, ClientFIO = ClientFIO,
Email = Email, Email = Email,
Password = Password Password = Password,
}; };
public XElement GetXElement => new("Client", public XElement GetXElement => new("Client",
new XAttribute("Id", Id), new XAttribute("Id", Id),
new XElement("ClientFIO", ClientFIO), new XElement("ClientFIO", ClientFIO),

View File

@ -4,25 +4,30 @@ using PizzeriaDataModels.Models;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Runtime.Serialization;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Xml.Linq; using System.Xml.Linq;
namespace PizzeriaFileImplement.Models namespace PizzeriaFileImplement.Models
{ {
[DataContract]
public class Implementer : IImplementerModel public class Implementer : IImplementerModel
{ {
public int Id { get; private set; } [DataMember]
public int Id { get; set; }
[DataMember]
public string ImplementerFIO { get; set; } = string.Empty;
public string ImplementerFIO { get; private set; } = string.Empty; [DataMember]
public string Password { get; set; } = string.Empty;
public string Password { get; private set; } = string.Empty; [DataMember]
public int WorkExperience { get; set; }
public int WorkExperience { get; private set; } [DataMember]
public int Qualification { get; set; }
public int Qualification { get; private set; } public static Implementer? Create(ImplementerBindingModel? model)
public static Implementer? Create(ImplementerBindingModel model)
{ {
if (model == null) if (model == null)
{ {
@ -34,10 +39,9 @@ namespace PizzeriaFileImplement.Models
ImplementerFIO = model.ImplementerFIO, ImplementerFIO = model.ImplementerFIO,
Password = model.Password, Password = model.Password,
WorkExperience = model.WorkExperience, WorkExperience = model.WorkExperience,
Qualification = model.Qualification, Qualification = model.Qualification
}; };
} }
public static Implementer? Create(XElement element) public static Implementer? Create(XElement element)
{ {
if (element == null) if (element == null)
@ -49,11 +53,10 @@ namespace PizzeriaFileImplement.Models
Id = Convert.ToInt32(element.Attribute("Id")!.Value), Id = Convert.ToInt32(element.Attribute("Id")!.Value),
ImplementerFIO = element.Element("ImplementerFIO")!.Value, ImplementerFIO = element.Element("ImplementerFIO")!.Value,
Password = element.Element("Password")!.Value, Password = element.Element("Password")!.Value,
WorkExperience = Convert.ToInt32(element.Element("Cost")!.Value), WorkExperience = Convert.ToInt32(element.Element("WorkExperience")!.Value),
Qualification = Convert.ToInt32(element.Element("Cost")!.Value) Qualification = Convert.ToInt32(element.Element("Qualification")!.Value)
}; };
} }
public void Update(ImplementerBindingModel model) public void Update(ImplementerBindingModel model)
{ {
if (model == null) if (model == null)
@ -65,7 +68,6 @@ namespace PizzeriaFileImplement.Models
WorkExperience = model.WorkExperience; WorkExperience = model.WorkExperience;
Qualification = model.Qualification; Qualification = model.Qualification;
} }
public ImplementerViewModel GetViewModel => new() public ImplementerViewModel GetViewModel => new()
{ {
Id = Id, Id = Id,
@ -74,12 +76,11 @@ namespace PizzeriaFileImplement.Models
WorkExperience = WorkExperience, WorkExperience = WorkExperience,
Qualification = Qualification Qualification = Qualification
}; };
public XElement GetXElement => new("Implementer", public XElement GetXElement => new("Implementer",
new XAttribute("Id", Id), new XAttribute("Id", Id),
new XElement("ImplementerFIO", ImplementerFIO), new XElement("ImplementerFIO", ImplementerFIO),
new XElement("Password", Password), new XElement("Password", Password),
new XElement("WorkExperience", WorkExperience), new XElement("WorkExperience", WorkExperience.ToString()),
new XElement("Qualification", Qualification)); new XElement("Qualification", Qualification.ToString()));
} }
} }

View File

@ -4,60 +4,70 @@ using PizzeriaDataModels.Models;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Runtime.Serialization;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Xml.Linq; using System.Xml.Linq;
namespace PizzeriaFileImplement.Models namespace PizzeriaFileImplement.Models
{ {
[DataContract]
public class MessageInfo : IMessageInfoModel public class MessageInfo : IMessageInfoModel
{ {
[DataMember]
public int Id { get; private set; }
[DataMember]
public string MessageId { get; private set; } = string.Empty; public string MessageId { get; private set; } = string.Empty;
[DataMember]
public int? ClientId { get; private set; } public int? ClientId { get; private set; }
[DataMember]
public string SenderName { get; private set; } = string.Empty; public string SenderName { get; private set; } = string.Empty;
[DataMember]
public DateTime DateDelivery { get; private set; } public DateTime DateDelivery { get; private set; }
[DataMember]
public string Subject { get; private set; } = string.Empty; public string Subject { get; private set; } = string.Empty;
[DataMember]
public string Body { get; private set; } = string.Empty; public string Body { get; private set; } = string.Empty;
public static MessageInfo? Create(MessageInfoBindingModel? model)
public static MessageInfo? Create(MessageInfoBindingModel model)
{ {
if (model == null) if (model == null)
{ {
return null; return null;
} }
return new MessageInfo() return new()
{ {
MessageId = model.MessageId, MessageId = model.MessageId,
ClientId = model.ClientId, ClientId = model.ClientId,
SenderName = model.SenderName, SenderName = model.SenderName,
DateDelivery = model.DateDelivery, DateDelivery = model.DateDelivery,
Subject = model.Subject, Subject = model.Subject,
Body = model.Body Body = model.Body,
}; };
} }
public static MessageInfo? Create(XElement element) public static MessageInfo? Create(XElement element)
{ {
if (element == null) if (element == null)
{ {
return null; return null;
} }
return new MessageInfo() string clientId = element.Element("ClientId")!.Value;
return new()
{ {
MessageId = element.Attribute("MessageId")!.Value, MessageId = element.Attribute("MessageId")!.Value,
ClientId = Convert.ToInt32(element.Element("ClientId")!.Value), ClientId = string.IsNullOrEmpty(clientId) ? null : Convert.ToInt32(clientId),
SenderName = element.Element("SenderName")!.Value, SenderName = element.Element("SenderName")!.Value,
DateDelivery = Convert.ToDateTime(element.Element("DateDelivery")!.Value), DateDelivery = Convert.ToDateTime(element.Element("DateDelivery")!.Value),
Subject = element.Element("Subject")!.Value, Subject = element.Element("Subject")!.Value,
Body = element.Element("Body")!.Value, Body = element.Element("Body")!.Value
}; };
} }
public MessageInfoViewModel GetViewModel => new() public MessageInfoViewModel GetViewModel => new()
{ {
MessageId = MessageId, MessageId = MessageId,
@ -67,10 +77,9 @@ namespace PizzeriaFileImplement.Models
Subject = Subject, Subject = Subject,
Body = Body Body = Body
}; };
public XElement GetXElement => new("MessageInfo",
public XElement GetXElement => new("Message",
new XAttribute("MessageId", MessageId), new XAttribute("MessageId", MessageId),
new XElement("ClientId", ClientId), new XElement("ClientId", ClientId.ToString()),
new XElement("SenderName", SenderName), new XElement("SenderName", SenderName),
new XElement("DateDelivery", DateDelivery.ToString()), new XElement("DateDelivery", DateDelivery.ToString()),
new XElement("Subject", Subject), new XElement("Subject", Subject),

View File

@ -12,4 +12,8 @@
<ProjectReference Include="..\PizzeriaDataModels\PizzeriaDataModels.csproj" /> <ProjectReference Include="..\PizzeriaDataModels\PizzeriaDataModels.csproj" />
</ItemGroup> </ItemGroup>
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
<Exec Command="copy /Y &quot;$(TargetDir)*.dll&quot; &quot;$(SolutionDir)ImplementationExtensions\*.dll&quot;" />
</Target>
</Project> </Project>

View File

@ -0,0 +1,22 @@
using PizzeriaContracts.StoragesContracts;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PizzeriaListImplement.Implements
{
public class BackUpInfo : IBackUpInfo
{
public List<T>? GetList<T>() where T : class, new()
{
throw new NotImplementedException();
}
public Type? GetTypeByModelInterface(string modelInterfaceName)
{
throw new NotImplementedException();
}
}
}

View File

@ -0,0 +1,29 @@
using PizzeriaContracts.DI;
using PizzeriaContracts.StorageContracts;
using PizzeriaContracts.StoragesContracts;
using PizzeriaListImplement.Implements;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PizzeriaListImplement
{
public class ImplementationExtension : IImplementationExtension
{
public int Priority => 0;
public void RegisterServices()
{
DependencyManager.Instance.RegisterType<IClientStorage, ClientStorage>();
DependencyManager.Instance.RegisterType<IComponentStorage, ComponentStorage>();
DependencyManager.Instance.RegisterType<IImplementerStorage, ImplementerStorage>();
DependencyManager.Instance.RegisterType<IMessageInfoStorage, MessageInfoStorage>();
DependencyManager.Instance.RegisterType<IOrderStorage, OrderStorage>();
DependencyManager.Instance.RegisterType<IPizzaStorage, PizzaStorage>();
DependencyManager.Instance.RegisterType<IBackUpInfo, BackUpInfo>();
}
}
}

View File

@ -3,17 +3,29 @@ using PizzeriaContracts.ViewModels;
using PizzeriaDataModels.Models; using PizzeriaDataModels.Models;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq; using System.Linq;
using System.Runtime.Serialization;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace PizzeriaListImplement.Models namespace PizzeriaListImplement.Models
{ {
[DataContract]
public class Client : IClientModel public class Client : IClientModel
{ {
public int Id { get; private set; } [DataMember]
public string ClientFIO { get; private set; } = string.Empty; public int Id { get; set; }
public string Email { get; private set; } = string.Empty;
[DataMember]
[Required]
public string ClientFIO { get; set; } = string.Empty;
[DataMember]
[Required]
public string Email { get; set; } = string.Empty;
[DataMember]
public string Password { get; private set; } = string.Empty; public string Password { get; private set; } = string.Empty;
public static Client? Create(ClientBindingModel? model) public static Client? Create(ClientBindingModel? model)

View File

@ -3,16 +3,25 @@ using PizzeriaContracts.ViewModels;
using PizzeriaDataModels; using PizzeriaDataModels;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq; using System.Linq;
using System.Runtime.Serialization;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace PizzeriaListImplement.Models namespace PizzeriaListImplement.Models
{ {
[DataContract]
public class Component : IComponentModel public class Component : IComponentModel
{ {
[DataMember]
public int Id { get; private set; } public int Id { get; private set; }
[DataMember]
[Required]
public string ComponentName { get; private set; } = string.Empty; public string ComponentName { get; private set; } = string.Empty;
[DataMember]
public double Cost { get; set; } public double Cost { get; set; }
public static Component? Create(ComponentBindingModel? model) public static Component? Create(ComponentBindingModel? model)
{ {

View File

@ -3,18 +3,33 @@ using PizzeriaContracts.ViewModels;
using PizzeriaDataModels.Models; using PizzeriaDataModels.Models;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq; using System.Linq;
using System.Runtime.Serialization;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace PizzeriaListImplement.Models namespace PizzeriaListImplement.Models
{ {
[DataContract]
public class Implementer : IImplementerModel public class Implementer : IImplementerModel
{ {
public int Id { get; private set; } [DataMember]
public string ImplementerFIO { get; private set; } = string.Empty; public int Id { get; set; }
public string Password { get; private set; } = string.Empty;
public int WorkExperience { get; private set; } [DataMember]
[Required]
public string ImplementerFIO { get; set; } = string.Empty;
[DataMember]
[Required]
public string Password { get; set; } = string.Empty;
[DataMember]
[Required]
public int WorkExperience { get; set; }
[DataMember]
public int Qualification { get; private set; } public int Qualification { get; private set; }
public static Implementer? Create(ImplementerBindingModel? model) public static Implementer? Create(ImplementerBindingModel? model)

View File

@ -3,23 +3,44 @@ using PizzeriaContracts.ViewModels;
using PizzeriaDataModels.Models; using PizzeriaDataModels.Models;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.ComponentModel.DataAnnotations;
using System.Linq; using System.Linq;
using System.Runtime.Serialization;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace PizzeriaListImplement.Models namespace PizzeriaListImplement.Models
{ {
[DataContract]
public class MessageInfo : IMessageInfoModel public class MessageInfo : IMessageInfoModel
{ {
public string MessageId { get; private set; } = string.Empty; [NotMapped]
public int Id { get; private set; }
public int? ClientId { get; private set; } [DataMember]
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public string MessageId { get; set; } = string.Empty;
public string SenderName { get; private set; } = string.Empty; [DataMember]
public int? ClientId { get; set; }
public DateTime DateDelivery { get; private set; } public virtual Client? Client { get; set; }
public string Subject { get; private set; } = string.Empty; [DataMember]
[Required]
public string SenderName { get; set; } = string.Empty;
[DataMember]
[Required]
public DateTime DateDelivery { get; set; }
[DataMember]
[Required]
public string Subject { get; set; } = string.Empty;
[DataMember]
public string Body { get; private set; } = string.Empty; public string Body { get; private set; } = string.Empty;
@ -49,5 +70,6 @@ namespace PizzeriaListImplement.Models
Subject = Subject, Subject = Subject,
Body = Body Body = Body
}; };
} }
} }

View File

@ -3,23 +3,55 @@ using PizzeriaContracts.ViewModels;
using PizzeriaDataModels; using PizzeriaDataModels;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq; using System.Linq;
using System.Reflection; using System.Reflection;
using System.Runtime.Serialization;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace PizzeriaListImplement.Models namespace PizzeriaListImplement.Models
{ {
[DataContract]
public class Order : IOrderModel public class Order : IOrderModel
{ {
[DataMember]
public int Id { get; private set; } public int Id { get; private set; }
public int ClientId { get; private set; }
[DataMember]
[Required]
public int PizzaId { get; private set; } public int PizzaId { get; private set; }
public virtual Pizza Pizza { get; set; } = new();
[DataMember]
[Required]
public int ClientId { get; private set; }
public virtual Client Client { get; set; } = new();
[DataMember]
public int? ImplementerId { get; private set; } public int? ImplementerId { get; private set; }
public virtual Implementer? Implementer { get; set; } = new();
[DataMember]
[Required]
public int Count { get; private set; } public int Count { get; private set; }
[DataMember]
[Required]
public double Sum { get; private set; } public double Sum { get; private set; }
[DataMember]
[Required]
public OrderStatus Status { get; private set; } = OrderStatus.Неизвестен; public OrderStatus Status { get; private set; } = OrderStatus.Неизвестен;
[DataMember]
[Required]
public DateTime DateCreate { get; private set; } = DateTime.Now; public DateTime DateCreate { get; private set; } = DateTime.Now;
[DataMember]
public DateTime? DateImplement { get; private set; } public DateTime? DateImplement { get; private set; }
public static Order? Create(OrderBindingModel? model) public static Order? Create(OrderBindingModel? model)
{ {

View File

@ -4,16 +4,22 @@ using PizzeriaDataModels;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Runtime.Serialization;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace PizzeriaListImplement.Models namespace PizzeriaListImplement.Models
{ {
[DataContract]
public class Pizza : IPizzaModel public class Pizza : IPizzaModel
{ {
[DataMember]
public int Id { get; private set; } public int Id { get; private set; }
[DataMember]
public string PizzaName { get; private set; } = string.Empty; public string PizzaName { get; private set; } = string.Empty;
[DataMember]
public double Price { get; private set; } public double Price { get; private set; }
[DataMember]
public Dictionary<int, (IComponentModel, int)> PizzaComponents public Dictionary<int, (IComponentModel, int)> PizzaComponents
{ {
get; get;

View File

@ -11,4 +11,8 @@
<ProjectReference Include="..\PizzeriaDataModels\PizzeriaDataModels.csproj" /> <ProjectReference Include="..\PizzeriaDataModels\PizzeriaDataModels.csproj" />
</ItemGroup> </ItemGroup>
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
<Exec Command="copy /Y &quot;$(TargetDir)*.dll&quot; &quot;$(SolutionDir)ImplementationExtensions\*.dll&quot;" />
</Target>
</Project> </Project>

View File

@ -0,0 +1,53 @@
using PizzeriaContracts.Attributes;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PizzeriaView
{
internal static class DataGridViewExtension
{
public static void FillAndConfigGrid<T>(this DataGridView grid, List<T>? 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;
}
}
}
}
}
}

View File

@ -28,64 +28,66 @@
/// </summary> /// </summary>
private void InitializeComponent() private void InitializeComponent()
{ {
dataGridViewClients = new DataGridView(); this.dataGridView = new System.Windows.Forms.DataGridView();
buttonDel = new Button(); this.buttonDel = new System.Windows.Forms.Button();
buttonRef = new Button(); this.buttonRef = new System.Windows.Forms.Button();
((System.ComponentModel.ISupportInitialize)dataGridViewClients).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).BeginInit();
SuspendLayout(); this.SuspendLayout();
// //
// dataGridViewClients // dataGridView
// //
dataGridViewClients.BackgroundColor = SystemColors.ControlLightLight; this.dataGridView.BackgroundColor = System.Drawing.SystemColors.ControlLightLight;
dataGridViewClients.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; this.dataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dataGridViewClients.Location = new Point(1, 1); this.dataGridView.Location = new System.Drawing.Point(1, 1);
dataGridViewClients.Name = "dataGridViewClients"; this.dataGridView.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
dataGridViewClients.RowHeadersVisible = false; this.dataGridView.Name = "dataGridView";
dataGridViewClients.RowHeadersWidth = 51; this.dataGridView.RowHeadersVisible = false;
dataGridViewClients.RowTemplate.Height = 29; this.dataGridView.RowHeadersWidth = 51;
dataGridViewClients.SelectionMode = DataGridViewSelectionMode.FullRowSelect; this.dataGridView.RowTemplate.Height = 29;
dataGridViewClients.Size = new Size(650, 402); this.dataGridView.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
dataGridViewClients.TabIndex = 0; this.dataGridView.Size = new System.Drawing.Size(569, 302);
this.dataGridView.TabIndex = 0;
// //
// buttonDel // buttonDel
// //
buttonDel.Location = new Point(668, 12); this.buttonDel.Location = new System.Drawing.Point(584, 9);
buttonDel.Name = "buttonDel"; this.buttonDel.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
buttonDel.Size = new Size(102, 29); this.buttonDel.Name = "buttonDel";
buttonDel.TabIndex = 1; this.buttonDel.Size = new System.Drawing.Size(89, 22);
buttonDel.Text = "Удалить"; this.buttonDel.TabIndex = 1;
buttonDel.UseVisualStyleBackColor = true; this.buttonDel.Text = "Удалить";
buttonDel.Click += ButtonDel_Click; this.buttonDel.UseVisualStyleBackColor = true;
// //
// buttonRef // buttonRef
// //
buttonRef.Location = new Point(668, 47); this.buttonRef.Location = new System.Drawing.Point(584, 35);
buttonRef.Name = "buttonRef"; this.buttonRef.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
buttonRef.Size = new Size(102, 29); this.buttonRef.Name = "buttonRef";
buttonRef.TabIndex = 2; this.buttonRef.Size = new System.Drawing.Size(89, 22);
buttonRef.Text = "Обновить"; this.buttonRef.TabIndex = 2;
buttonRef.UseVisualStyleBackColor = true; this.buttonRef.Text = "Обновить";
buttonRef.Click += ButtonRef_Click; this.buttonRef.UseVisualStyleBackColor = true;
// //
// FormClients // FormClients
// //
AutoScaleDimensions = new SizeF(8F, 20F); this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
ClientSize = new Size(782, 403); this.ClientSize = new System.Drawing.Size(684, 302);
Controls.Add(buttonRef); this.Controls.Add(this.buttonRef);
Controls.Add(buttonDel); this.Controls.Add(this.buttonDel);
Controls.Add(dataGridViewClients); this.Controls.Add(this.dataGridView);
Name = "FormClients"; this.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
StartPosition = FormStartPosition.CenterParent; this.Name = "FormClients";
Text = "Клиенты"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
Load += FormClients_Load; this.Text = "Клиенты";
((System.ComponentModel.ISupportInitialize)dataGridViewClients).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).EndInit();
ResumeLayout(false); this.ResumeLayout(false);
} }
#endregion #endregion
private DataGridView dataGridViewClients; private DataGridView dataGridView;
private Button buttonDel; private Button buttonDel;
private Button buttonRef; private Button buttonRef;
} }

View File

@ -1,6 +1,7 @@
using PizzeriaContracts.BindingModels; using PizzeriaContracts.BindingModels;
using PizzeriaContracts.BusinessLogicsContracts; using PizzeriaContracts.BusinessLogicsContracts;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using PizzeriaView;
namespace Pizzeria namespace Pizzeria
{ {
@ -25,13 +26,7 @@ namespace Pizzeria
{ {
try try
{ {
var list = _logic.ReadList(null); dataGridView.FillAndConfigGrid(_logic.ReadList(null));
if (list != null)
{
dataGridViewClients.DataSource = list;
dataGridViewClients.Columns["Id"].Visible = false;
dataGridViewClients.Columns["ClientFIO"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
}
_logger.LogInformation("Загрузка клиентов"); _logger.LogInformation("Загрузка клиентов");
} }
catch (Exception ex) catch (Exception ex)
@ -43,12 +38,12 @@ namespace Pizzeria
private void ButtonDel_Click(object sender, EventArgs e) private void ButtonDel_Click(object sender, EventArgs e)
{ {
if (dataGridViewClients.SelectedRows.Count == 1) if (dataGridView.SelectedRows.Count == 1)
{ {
if (MessageBox.Show("Удалить запись?", "Вопрос", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == if (MessageBox.Show("Удалить запись?", "Вопрос", MessageBoxButtons.YesNo, MessageBoxIcon.Question) ==
DialogResult.Yes) DialogResult.Yes)
{ {
int id = Convert.ToInt32(dataGridViewClients.SelectedRows[0].Cells["Id"].Value); int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
_logger.LogInformation("Удаление клиента"); _logger.LogInformation("Удаление клиента");
try try
{ {

View File

@ -1,6 +1,7 @@
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using PizzeriaContracts.BindingModels; using PizzeriaContracts.BindingModels;
using PizzeriaContracts.BusinessLogicsContracts; using PizzeriaContracts.BusinessLogicsContracts;
using PizzeriaContracts.DI;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
@ -50,31 +51,25 @@ namespace PizzeriaView
} }
private void ButtonAdd_Click(object sender, EventArgs e) private void ButtonAdd_Click(object sender, EventArgs e)
{ {
var service = Program.ServiceProvider?.GetService(typeof(FormComponent)); var form = DependencyManager.Instance.Resolve<FormComponent>();
if (service is FormComponent form)
{
if (form.ShowDialog() == DialogResult.OK) if (form.ShowDialog() == DialogResult.OK)
{ {
LoadData(); LoadData();
} }
} }
}
private void ButtonUpd_Click(object sender, EventArgs e) private void ButtonUpd_Click(object sender, EventArgs e)
{ {
if (dataGridView.SelectedRows.Count == 1) if (dataGridView.SelectedRows.Count == 1)
{ {
var service = Program.ServiceProvider?.GetService(typeof(FormComponent)); var form = DependencyManager.Instance.Resolve<FormComponent>();
if (service is FormComponent form)
{ form.Id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
form.Id =
Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
if (form.ShowDialog() == DialogResult.OK) if (form.ShowDialog() == DialogResult.OK)
{ {
LoadData(); LoadData();
} }
} }
} }
}
private void ButtonDel_Click(object sender, EventArgs e) private void ButtonDel_Click(object sender, EventArgs e)
{ {
if (dataGridView.SelectedRows.Count == 1) if (dataGridView.SelectedRows.Count == 1)

View File

@ -2,6 +2,7 @@
using Pizzeria; using Pizzeria;
using PizzeriaContracts.BindingModels; using PizzeriaContracts.BindingModels;
using PizzeriaContracts.BusinessLogicsContracts; using PizzeriaContracts.BusinessLogicsContracts;
using PizzeriaContracts.DI;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
@ -28,14 +29,7 @@ namespace PizzeriaView
{ {
try try
{ {
var list = _logic.ReadList(null); dataGridView.FillAndConfigGrid(_logic.ReadList(null));
if (list != null)
{
dataGridView.DataSource = list;
dataGridView.Columns["Id"].Visible = false;
dataGridView.Columns["ImplementerFIO"].AutoSizeMode =
DataGridViewAutoSizeColumnMode.Fill;
}
_logger.LogInformation("Загрузка исполнителей"); _logger.LogInformation("Загрузка исполнителей");
} }
catch (Exception ex) catch (Exception ex)
@ -51,22 +45,17 @@ namespace PizzeriaView
} }
private void buttonAdd_Click(object sender, EventArgs e) private void buttonAdd_Click(object sender, EventArgs e)
{ {
var service = Program.ServiceProvider?.GetService(typeof(FormImplementer)); var form = DependencyManager.Instance.Resolve<FormImplementer>();
if (service is FormImplementer form)
{
if (form.ShowDialog() == DialogResult.OK) if (form.ShowDialog() == DialogResult.OK)
{ {
LoadData(); LoadData();
} }
} }
}
private void buttonUpd_Click(object sender, EventArgs e) private void buttonUpd_Click(object sender, EventArgs e)
{ {
if (dataGridView.SelectedRows.Count == 1) if (dataGridView.SelectedRows.Count == 1)
{ {
var service = Program.ServiceProvider?.GetService(typeof(FormImplementer)); var form = DependencyManager.Instance.Resolve<FormImplementer>();
if (service is FormImplementer form)
{
form.Id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); form.Id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
if (form.ShowDialog() == DialogResult.OK) if (form.ShowDialog() == DialogResult.OK)
{ {
@ -74,7 +63,6 @@ namespace PizzeriaView
} }
} }
} }
}
private void buttonDel_Click(object sender, EventArgs e) private void buttonDel_Click(object sender, EventArgs e)
{ {
if (dataGridView.SelectedRows.Count == 1) if (dataGridView.SelectedRows.Count == 1)

View File

@ -39,11 +39,12 @@
this.ингредиентыПоПиццамToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.ингредиентыПоПиццамToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.списокЗаказовToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.списокЗаказовToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.запускРаботToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.запускРаботToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.почтаToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.createBackUpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.dataGridView = new System.Windows.Forms.DataGridView(); this.dataGridView = new System.Windows.Forms.DataGridView();
this.buttonCreateOrder = new System.Windows.Forms.Button(); this.buttonCreateOrder = new System.Windows.Forms.Button();
this.buttonIssuedOrder = new System.Windows.Forms.Button(); this.buttonIssuedOrder = new System.Windows.Forms.Button();
this.buttonRef = new System.Windows.Forms.Button(); this.buttonRef = new System.Windows.Forms.Button();
this.почтаToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.menuStrip1.SuspendLayout(); this.menuStrip1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.dataGridView)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).BeginInit();
this.SuspendLayout(); this.SuspendLayout();
@ -55,11 +56,12 @@
this.bookToolStripMenuItem, this.bookToolStripMenuItem,
this.отчётыToolStripMenuItem, this.отчётыToolStripMenuItem,
this.запускРаботToolStripMenuItem, this.запускРаботToolStripMenuItem,
this.почтаToolStripMenuItem}); this.почтаToolStripMenuItem,
this.createBackUpToolStripMenuItem});
this.menuStrip1.Location = new System.Drawing.Point(0, 0); this.menuStrip1.Location = new System.Drawing.Point(0, 0);
this.menuStrip1.Name = "menuStrip1"; this.menuStrip1.Name = "menuStrip1";
this.menuStrip1.Padding = new System.Windows.Forms.Padding(5, 2, 0, 2); this.menuStrip1.Padding = new System.Windows.Forms.Padding(5, 2, 0, 2);
this.menuStrip1.Size = new System.Drawing.Size(1284, 24); this.menuStrip1.Size = new System.Drawing.Size(1383, 24);
this.menuStrip1.TabIndex = 0; this.menuStrip1.TabIndex = 0;
this.menuStrip1.Text = "menuStrip1"; this.menuStrip1.Text = "menuStrip1";
// //
@ -140,6 +142,20 @@
this.запускРаботToolStripMenuItem.Text = "Запуск работ"; this.запускРаботToolStripMenuItem.Text = "Запуск работ";
this.запускРаботToolStripMenuItem.Click += new System.EventHandler(this.startWorkToolStripMenuItem_Click); this.запускРаботToolStripMenuItem.Click += new System.EventHandler(this.startWorkToolStripMenuItem_Click);
// //
// почтаToolStripMenuItem
//
this.почтаToolStripMenuItem.Name = "почтаToolStripMenuItem";
this.почтаToolStripMenuItem.Size = new System.Drawing.Size(53, 20);
this.почтаToolStripMenuItem.Text = "Почта";
this.почтаToolStripMenuItem.Click += new System.EventHandler(this.MessagesToolStripMenuItem_Click);
//
// createBackUpToolStripMenuItem
//
this.createBackUpToolStripMenuItem.Name = "createBackUpToolStripMenuItem";
this.createBackUpToolStripMenuItem.Size = new System.Drawing.Size(97, 20);
this.createBackUpToolStripMenuItem.Text = "Создать бекап";
this.createBackUpToolStripMenuItem.Click += new System.EventHandler(this.createBackUpToolStripMenuItem_Click);
//
// dataGridView // dataGridView
// //
this.dataGridView.AllowUserToAddRows = false; this.dataGridView.AllowUserToAddRows = false;
@ -151,12 +167,12 @@
this.dataGridView.ReadOnly = true; this.dataGridView.ReadOnly = true;
this.dataGridView.RowHeadersWidth = 51; this.dataGridView.RowHeadersWidth = 51;
this.dataGridView.RowTemplate.Height = 29; this.dataGridView.RowTemplate.Height = 29;
this.dataGridView.Size = new System.Drawing.Size(1002, 350); this.dataGridView.Size = new System.Drawing.Size(1110, 350);
this.dataGridView.TabIndex = 1; this.dataGridView.TabIndex = 1;
// //
// buttonCreateOrder // buttonCreateOrder
// //
this.buttonCreateOrder.Location = new System.Drawing.Point(1035, 84); this.buttonCreateOrder.Location = new System.Drawing.Point(1155, 127);
this.buttonCreateOrder.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.buttonCreateOrder.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.buttonCreateOrder.Name = "buttonCreateOrder"; this.buttonCreateOrder.Name = "buttonCreateOrder";
this.buttonCreateOrder.Size = new System.Drawing.Size(216, 22); this.buttonCreateOrder.Size = new System.Drawing.Size(216, 22);
@ -167,7 +183,7 @@
// //
// buttonIssuedOrder // buttonIssuedOrder
// //
this.buttonIssuedOrder.Location = new System.Drawing.Point(1035, 135); this.buttonIssuedOrder.Location = new System.Drawing.Point(1155, 178);
this.buttonIssuedOrder.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.buttonIssuedOrder.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.buttonIssuedOrder.Name = "buttonIssuedOrder"; this.buttonIssuedOrder.Name = "buttonIssuedOrder";
this.buttonIssuedOrder.Size = new System.Drawing.Size(216, 22); this.buttonIssuedOrder.Size = new System.Drawing.Size(216, 22);
@ -178,7 +194,7 @@
// //
// buttonRef // buttonRef
// //
this.buttonRef.Location = new System.Drawing.Point(1035, 183); this.buttonRef.Location = new System.Drawing.Point(1155, 229);
this.buttonRef.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.buttonRef.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.buttonRef.Name = "buttonRef"; this.buttonRef.Name = "buttonRef";
this.buttonRef.Size = new System.Drawing.Size(216, 22); this.buttonRef.Size = new System.Drawing.Size(216, 22);
@ -187,18 +203,11 @@
this.buttonRef.UseVisualStyleBackColor = true; this.buttonRef.UseVisualStyleBackColor = true;
this.buttonRef.Click += new System.EventHandler(this.ButtonRef_Click); this.buttonRef.Click += new System.EventHandler(this.ButtonRef_Click);
// //
// почтаToolStripMenuItem
//
this.почтаToolStripMenuItem.Name = "почтаToolStripMenuItem";
this.почтаToolStripMenuItem.Size = new System.Drawing.Size(53, 20);
this.почтаToolStripMenuItem.Text = "Почта";
this.почтаToolStripMenuItem.Click += new System.EventHandler(this.MessagesToolStripMenuItem_Click);
//
// FormMain // FormMain
// //
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(1284, 424); this.ClientSize = new System.Drawing.Size(1383, 424);
this.Controls.Add(this.buttonRef); this.Controls.Add(this.buttonRef);
this.Controls.Add(this.buttonIssuedOrder); this.Controls.Add(this.buttonIssuedOrder);
this.Controls.Add(this.buttonCreateOrder); this.Controls.Add(this.buttonCreateOrder);
@ -235,5 +244,6 @@
private ToolStripMenuItem исполнителиToolStripMenuItem; private ToolStripMenuItem исполнителиToolStripMenuItem;
private ToolStripMenuItem запускРаботToolStripMenuItem; private ToolStripMenuItem запускРаботToolStripMenuItem;
private ToolStripMenuItem почтаToolStripMenuItem; private ToolStripMenuItem почтаToolStripMenuItem;
private ToolStripMenuItem createBackUpToolStripMenuItem;
} }
} }

View File

@ -11,6 +11,7 @@ using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows.Forms; using System.Windows.Forms;
using Pizzeria; using Pizzeria;
using PizzeriaContracts.DI;
namespace PizzeriaView namespace PizzeriaView
{ {
@ -20,13 +21,15 @@ namespace PizzeriaView
private readonly IOrderLogic _orderLogic; private readonly IOrderLogic _orderLogic;
private readonly IReportLogic _reportLogic; private readonly IReportLogic _reportLogic;
private readonly IWorkProcess _workProcess; private readonly IWorkProcess _workProcess;
public FormMain(ILogger<FormMain> logger, IOrderLogic orderLogic, IReportLogic reportLogic, IWorkProcess workProcess) private readonly IBackUpLogic _backUpLogic;
public FormMain(ILogger<FormMain> logger, IOrderLogic orderLogic, IReportLogic reportLogic, IWorkProcess workProcess, IBackUpLogic backUpLogiс)
{ {
InitializeComponent(); InitializeComponent();
_logger = logger; _logger = logger;
_orderLogic = orderLogic; _orderLogic = orderLogic;
_reportLogic = reportLogic; _reportLogic = reportLogic;
_workProcess = workProcess; _workProcess = workProcess;
_backUpLogic = backUpLogiс;
} }
private void FormMain_Load(object sender, EventArgs e) private void FormMain_Load(object sender, EventArgs e)
{ {
@ -36,17 +39,7 @@ namespace PizzeriaView
{ {
try try
{ {
var list = _orderLogic.ReadList(null); dataGridView.FillAndConfigGrid(_orderLogic.ReadList(null));
if (list != null)
{
dataGridView.DataSource = list;
dataGridView.Columns["PizzaId"].Visible = false;
dataGridView.Columns["ClientId"].Visible = false;
dataGridView.Columns["ImplementerId"].Visible = false;
dataGridView.Columns["ClientEmail"].Visible = false;
dataGridView.Columns["PizzaName"].AutoSizeMode =
DataGridViewAutoSizeColumnMode.Fill;
}
_logger.LogInformation("Загрузка заказов"); _logger.LogInformation("Загрузка заказов");
} }
catch (Exception ex) catch (Exception ex)
@ -57,59 +50,41 @@ namespace PizzeriaView
} }
private void MessagesToolStripMenuItem_Click(object sender, EventArgs e) private void MessagesToolStripMenuItem_Click(object sender, EventArgs e)
{ {
var service = Program.ServiceProvider?.GetService(typeof(FormMessages)); var form = DependencyManager.Instance.Resolve<FormMessages>();
if (service is FormMessages form)
{
form.ShowDialog(); form.ShowDialog();
} }
}
private void employersToolStripMenuItem_Click(object sender, EventArgs e) private void employersToolStripMenuItem_Click(object sender, EventArgs e)
{ {
var service = Program.ServiceProvider?.GetService(typeof(FormImplementers)); var form = DependencyManager.Instance.Resolve<FormImplementers>();
if (service is FormImplementers form)
{
form.ShowDialog(); form.ShowDialog();
} }
}
private void startWorkToolStripMenuItem_Click(object sender, EventArgs e) private void startWorkToolStripMenuItem_Click(object sender, EventArgs e)
{ {
_workProcess.DoWork((Program.ServiceProvider?.GetService(typeof(IImplementerLogic)) as IImplementerLogic)!, _orderLogic); _workProcess.DoWork(DependencyManager.Instance.Resolve<IImplementerLogic>(), _orderLogic);
MessageBox.Show("Процесс обработки запущен", "Сообщение", MessageBoxButtons.OK, MessageBoxIcon.Information); MessageBox.Show("Процесс обработки запущен", "Сообщение", MessageBoxButtons.OK, MessageBoxIcon.Information);
} }
private void ClientsToolStripMenuItem_Click(object sender, EventArgs e) private void ClientsToolStripMenuItem_Click(object sender, EventArgs e)
{ {
var service = Program.ServiceProvider?.GetService(typeof(FormClients)); var form = DependencyManager.Instance.Resolve<FormClients>();
if (service is FormClients form)
{
form.ShowDialog(); form.ShowDialog();
} }
}
private void IngridentsToolStripMenuItem_Click(object sender, EventArgs e) private void IngridentsToolStripMenuItem_Click(object sender, EventArgs e)
{ {
var service = Program.ServiceProvider?.GetService(typeof(FormComponents)); var form = DependencyManager.Instance.Resolve<FormComponents>();
if (service is FormComponents form)
{
form.ShowDialog(); form.ShowDialog();
} }
}
private void PizzasToolStripMenuItem_Click(object sender, EventArgs e) private void PizzasToolStripMenuItem_Click(object sender, EventArgs e)
{ {
var service = Program.ServiceProvider?.GetService(typeof(FormPizzas)); var form = DependencyManager.Instance.Resolve<FormPizzas>();
if (service is FormPizzas form)
{
form.ShowDialog(); form.ShowDialog();
} }
}
private void ButtonCreateOrder_Click(object sender, EventArgs e) private void ButtonCreateOrder_Click(object sender, EventArgs e)
{ {
var service = Program.ServiceProvider?.GetService(typeof(FormCreateOrder)); var form = DependencyManager.Instance.Resolve<FormCreateOrder>();
if (service is FormCreateOrder form)
{
form.ShowDialog(); form.ShowDialog();
LoadData(); LoadData();
} }
}
private void ButtonIssuedOrder_Click(object sender, EventArgs e) private void ButtonIssuedOrder_Click(object sender, EventArgs e)
{ {
@ -153,20 +128,38 @@ namespace PizzeriaView
private void ComponentPizzaToolStripMenuItem_Click(object sender, EventArgs e) private void ComponentPizzaToolStripMenuItem_Click(object sender, EventArgs e)
{ {
var service = Program.ServiceProvider?.GetService(typeof(FormReportPizzaComponents)); var form = DependencyManager.Instance.Resolve<FormReportPizzaComponents>();
if (service is FormReportPizzaComponents form)
{
form.ShowDialog(); form.ShowDialog();
} }
}
private void OrdersToolStripMenuItem_Click(object sender, EventArgs e) private void OrdersToolStripMenuItem_Click(object sender, EventArgs e)
{ {
var service = Program.ServiceProvider?.GetService(typeof(FormReportOrders)); var form = DependencyManager.Instance.Resolve<FormReportOrders>();
if (service is FormReportOrders form)
{
form.ShowDialog(); 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("Бекап создан", "Сообщение",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка создания бэкапа", MessageBoxButtons.OK,
MessageBoxIcon.Error);
}
} }
} }
} }

View File

@ -28,38 +28,40 @@
/// </summary> /// </summary>
private void InitializeComponent() private void InitializeComponent()
{ {
dataGridViewMessages = new DataGridView(); this.dataGridView = new System.Windows.Forms.DataGridView();
((System.ComponentModel.ISupportInitialize)dataGridViewMessages).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).BeginInit();
SuspendLayout(); this.SuspendLayout();
// //
// dataGridViewMessages // dataGridView
// //
dataGridViewMessages.BackgroundColor = SystemColors.ControlLightLight; this.dataGridView.BackgroundColor = System.Drawing.SystemColors.ControlLightLight;
dataGridViewMessages.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; this.dataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dataGridViewMessages.Location = new Point(1, 1); this.dataGridView.Location = new System.Drawing.Point(1, 1);
dataGridViewMessages.Name = "dataGridViewMessages"; this.dataGridView.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
dataGridViewMessages.RowHeadersVisible = false; this.dataGridView.Name = "dataGridView";
dataGridViewMessages.RowHeadersWidth = 51; this.dataGridView.RowHeadersVisible = false;
dataGridViewMessages.RowTemplate.Height = 29; this.dataGridView.RowHeadersWidth = 51;
dataGridViewMessages.SelectionMode = DataGridViewSelectionMode.FullRowSelect; this.dataGridView.RowTemplate.Height = 29;
dataGridViewMessages.Size = new Size(979, 750); this.dataGridView.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
dataGridViewMessages.TabIndex = 0; this.dataGridView.Size = new System.Drawing.Size(857, 562);
this.dataGridView.TabIndex = 0;
// //
// FormMessages // FormMessages
// //
AutoScaleDimensions = new SizeF(8F, 20F); this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
ClientSize = new Size(982, 753); this.ClientSize = new System.Drawing.Size(859, 565);
Controls.Add(dataGridViewMessages); this.Controls.Add(this.dataGridView);
Name = "FormMessages"; this.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
Text = "Входящие письма"; this.Name = "FormMessages";
Load += FormMessages_Load; this.Text = "Входящие письма";
((System.ComponentModel.ISupportInitialize)dataGridViewMessages).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).EndInit();
ResumeLayout(false); this.ResumeLayout(false);
} }
#endregion #endregion
private DataGridView dataGridViewMessages; private DataGridView dataGridView;
} }
} }

View File

@ -1,6 +1,8 @@
using Microsoft.EntityFrameworkCore.Diagnostics; using Microsoft.EntityFrameworkCore.Diagnostics;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using PizzeriaContracts.BusinessLogicsContracts; using PizzeriaContracts.BusinessLogicsContracts;
using PizzeriaView;
using System.Windows.Forms;
namespace Pizzeria namespace Pizzeria
{ {
@ -25,15 +27,8 @@ namespace Pizzeria
{ {
try try
{ {
var list = _logic.ReadList(null); dataGridView.FillAndConfigGrid(_logic.ReadList(null));
if (list != null) _logger.LogInformation("Загрузка почтовых собщений");
{
dataGridViewMessages.DataSource = list;
dataGridViewMessages.Columns["MessageId"].Visible = false;
dataGridViewMessages.Columns["ClientId"].Visible = false;
dataGridViewMessages.Columns["Body"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
}
_logger.LogInformation("Загрузка входящих писем");
} }
catch (Exception ex) catch (Exception ex)
{ {

View File

@ -2,6 +2,7 @@
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using PizzeriaContracts.BindingModels; using PizzeriaContracts.BindingModels;
using PizzeriaContracts.BusinessLogicsContracts; using PizzeriaContracts.BusinessLogicsContracts;
using PizzeriaContracts.DI;
using PizzeriaContracts.SearchModels; using PizzeriaContracts.SearchModels;
using PizzeriaDataModels; using PizzeriaDataModels;
using System; using System;
@ -82,35 +83,29 @@ namespace PizzeriaView
} }
private void ButtonAdd_Click(object sender, EventArgs e) private void ButtonAdd_Click(object sender, EventArgs e)
{ {
var service = Program.ServiceProvider?.GetService(typeof(FormPizzaComponent)); var form = DependencyManager.Instance.Resolve<FormPizzaComponent>();
if (service is FormPizzaComponent form)
{
if (form.ShowDialog() == DialogResult.OK) if (form.ShowDialog() == DialogResult.OK)
{
if (form.ComponentModel == null)
{ {
return; return;
} }
_logger.LogInformation("Добавление нового ингредиента:{ ComponentName}-{ Count}", form.ComponentModel.ComponentName, form.Count); _logger.LogInformation("Добавление нового ингридиента:{ ComponentName}-{ Count}", form.ComponentModel.ComponentName, form.Count);
if (_PizzaComponents.ContainsKey(form.Id)) if (_PizzaComponents.ContainsKey(form.Id))
{ {
_PizzaComponents[form.Id] = (form.ComponentModel,form.Count); _PizzaComponents[form.Id] = (form.ComponentModel,
form.Count);
} }
else else
{ {
_PizzaComponents.Add(form.Id, (form.ComponentModel,form.Count)); _PizzaComponents.Add(form.Id, (form.ComponentModel,
form.Count));
} }
LoadData(); LoadData();
} }
}
}
private void ButtonUpd_Click(object sender, EventArgs e) private void ButtonUpd_Click(object sender, EventArgs e)
{ {
if (dataGridView.SelectedRows.Count == 1) if (dataGridView.SelectedRows.Count == 1)
{ {
var service = Program.ServiceProvider?.GetService(typeof(FormPizzaComponent)); var form = DependencyManager.Instance.Resolve<FormPizzaComponent>();
if (service is FormPizzaComponent form)
{
int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells[0].Value); int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells[0].Value);
form.Id = id; form.Id = id;
form.Count = _PizzaComponents[id].Item2; form.Count = _PizzaComponents[id].Item2;
@ -120,13 +115,12 @@ namespace PizzeriaView
{ {
return; return;
} }
_logger.LogInformation("Изменение ингредиента:{ ComponentName}-{ Count}", form.ComponentModel.ComponentName, form.Count); _logger.LogInformation("Изменение ингридиента:{ ComponentName}-{ Count}", form.ComponentModel.ComponentName, form.Count);
_PizzaComponents[form.Id] = (form.ComponentModel, form.Count); _PizzaComponents[form.Id] = (form.ComponentModel, form.Count);
LoadData(); LoadData();
} }
} }
} }
}
private void ButtonDel_Click(object sender, EventArgs e) private void ButtonDel_Click(object sender, EventArgs e)
{ {
if (dataGridView.SelectedRows.Count == 1) if (dataGridView.SelectedRows.Count == 1)
@ -178,8 +172,7 @@ namespace PizzeriaView
Price = Convert.ToDouble(textBoxPrice.Text), Price = Convert.ToDouble(textBoxPrice.Text),
PizzaComponents = _PizzaComponents PizzaComponents = _PizzaComponents
}; };
var operationResult = _id.HasValue ? _logic.Update(model) : var operationResult = _id.HasValue ? _logic.Update(model) : _logic.Create(model);
_logic.Create(model);
if (!operationResult) if (!operationResult)
{ {
throw new Exception("Ошибка при сохранении. Дополнительная информация в логах."); throw new Exception("Ошибка при сохранении. Дополнительная информация в логах.");

View File

@ -1,6 +1,7 @@
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using PizzeriaContracts.BindingModels; using PizzeriaContracts.BindingModels;
using PizzeriaContracts.BusinessLogicsContracts; using PizzeriaContracts.BusinessLogicsContracts;
using PizzeriaContracts.DI;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
@ -31,15 +32,7 @@ namespace PizzeriaView
{ {
try try
{ {
var list = _logic.ReadList(null); dataGridView.FillAndConfigGrid(_logic.ReadList(null));
if (list != null)
{
dataGridView.DataSource = list;
dataGridView.Columns["Id"].Visible = false;
dataGridView.Columns["PizzaComponents"].Visible = false;
dataGridView.Columns["PizzaName"].AutoSizeMode =
DataGridViewAutoSizeColumnMode.Fill;
}
_logger.LogInformation("Загрузка пиццы"); _logger.LogInformation("Загрузка пиццы");
} }
catch (Exception ex) catch (Exception ex)
@ -50,22 +43,17 @@ namespace PizzeriaView
} }
private void ButtonAdd_Click(object sender, EventArgs e) private void ButtonAdd_Click(object sender, EventArgs e)
{ {
var service = Program.ServiceProvider?.GetService(typeof(FormPizza)); var form = DependencyManager.Instance.Resolve<FormPizza>();
if (service is FormPizza form)
{
if (form.ShowDialog() == DialogResult.OK) if (form.ShowDialog() == DialogResult.OK)
{ {
LoadData(); LoadData();
} }
} }
}
private void ButtonUpd_Click(object sender, EventArgs e) private void ButtonUpd_Click(object sender, EventArgs e)
{ {
if (dataGridView.SelectedRows.Count == 1) if (dataGridView.SelectedRows.Count == 1)
{ {
var service = Program.ServiceProvider?.GetService(typeof(FormPizza)); var form = DependencyManager.Instance.Resolve<FormPizza>();
if (service is FormPizza form)
{
form.Id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); form.Id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
if (form.ShowDialog() == DialogResult.OK) if (form.ShowDialog() == DialogResult.OK)
{ {
@ -73,7 +61,6 @@ namespace PizzeriaView
} }
} }
} }
}
private void ButtonDel_Click(object sender, EventArgs e) private void ButtonDel_Click(object sender, EventArgs e)
{ {
if (dataGridView.SelectedRows.Count == 1) if (dataGridView.SelectedRows.Count == 1)

View File

@ -13,13 +13,12 @@ using Pizzeria;
using PizzeriaContracts.StoragesContracts; using PizzeriaContracts.StoragesContracts;
using PizzeriaBusinessLogic.MailWorker; using PizzeriaBusinessLogic.MailWorker;
using PizzeriaContracts.BindingModels; using PizzeriaContracts.BindingModels;
using PizzeriaContracts.DI;
namespace PizzeriaView namespace PizzeriaView
{ {
internal static class Program internal static class Program
{ {
private static ServiceProvider? _serviceProvider;
public static ServiceProvider? ServiceProvider => _serviceProvider;
/// <summary> /// <summary>
/// The main entry point for the application. /// The main entry point for the application.
/// </summary> /// </summary>
@ -29,12 +28,10 @@ namespace PizzeriaView
// To customize application configuration such as set high DPI settings or default font, // To customize application configuration such as set high DPI settings or default font,
// see https://aka.ms/applicationconfiguration. // see https://aka.ms/applicationconfiguration.
ApplicationConfiguration.Initialize(); ApplicationConfiguration.Initialize();
var services = new ServiceCollection(); InitDependency();
ConfigureServices(services);
_serviceProvider = services.BuildServiceProvider();
try try
{ {
var mailSender = _serviceProvider.GetService<AbstractMailWorker>(); var mailSender = DependencyManager.Instance.Resolve<AbstractMailWorker>();
mailSender?.MailConfig(new MailConfigBindingModel mailSender?.MailConfig(new MailConfigBindingModel
{ {
MailLogin = System.Configuration.ConfigurationManager.AppSettings["MailLogin"] ?? string.Empty, MailLogin = System.Configuration.ConfigurationManager.AppSettings["MailLogin"] ?? string.Empty,
@ -49,56 +46,50 @@ namespace PizzeriaView
} }
catch (Exception ex) catch (Exception ex)
{ {
var logger = _serviceProvider.GetService<ILogger>(); var logger = DependencyManager.Instance.Resolve<ILogger>();
logger?.LogError(ex, "Îøèáêà ðàáîòû ñ ïî÷òîé"); logger?.LogError(ex, "Mails Problem");
} }
Application.Run(_serviceProvider.GetRequiredService<FormMain>()); Application.Run(DependencyManager.Instance.Resolve<FormMain>());
} }
private static void ConfigureServices(ServiceCollection services) private static void InitDependency()
{ {
services.AddLogging(option => DependencyManager.InitDependency();
DependencyManager.Instance.AddLogging(option =>
{ {
option.SetMinimumLevel(LogLevel.Information); option.SetMinimumLevel(LogLevel.Information);
option.AddNLog("nlog.config"); option.AddNLog("nlog.config");
}); });
services.AddTransient<FormMain>(); DependencyManager.Instance.RegisterType<IClientLogic, ClientLogic>();
DependencyManager.Instance.RegisterType<IComponentLogic, ComponentLogic>();
DependencyManager.Instance.RegisterType<IOrderLogic, OrderLogic>();
DependencyManager.Instance.RegisterType<IPizzaLogic, PizzaLogic>();
DependencyManager.Instance.RegisterType<IReportLogic, ReportLogic>();
DependencyManager.Instance.RegisterType<IImplementerLogic, ImplementerLogic>();
DependencyManager.Instance.RegisterType<IMessageInfoLogic, MessageInfoLogic>();
DependencyManager.Instance.RegisterType<IBackUpLogic, BackUpLogic>();
DependencyManager.Instance.RegisterType<IWorkProcess, WorkModeling>();
services.AddTransient<IClientStorage, ClientStorage>(); DependencyManager.Instance.RegisterType<AbstractSaveToWord, SaveToWord>();
services.AddTransient<IImplementerStorage, ImplementerStorage>(); DependencyManager.Instance.RegisterType<AbstractSaveToExcel, SaveToExcel>();
services.AddTransient<IComponentStorage, ComponentStorage>(); DependencyManager.Instance.RegisterType<AbstractSaveToPdf, SaveToPdf>();
services.AddTransient<IOrderStorage, OrderStorage>(); DependencyManager.Instance.RegisterType<AbstractMailWorker, MailKitWorker>(true);
services.AddTransient<IPizzaStorage, PizzaStorage>();
services.AddTransient<IMessageInfoStorage, MessageInfoStorage>();
services.AddTransient<IClientLogic, ClientLogic>(); DependencyManager.Instance.RegisterType<FormMain>();
services.AddTransient<IImplementerLogic, ImplementerLogic>(); DependencyManager.Instance.RegisterType<FormComponent>();
services.AddTransient<IComponentLogic, ComponentLogic>(); DependencyManager.Instance.RegisterType<FormComponents>();
services.AddTransient<IOrderLogic, OrderLogic>(); DependencyManager.Instance.RegisterType<FormCreateOrder>();
services.AddTransient<IPizzaLogic, PizzaLogic>(); DependencyManager.Instance.RegisterType<FormPizza>();
services.AddTransient<IReportLogic, ReportLogic>(); DependencyManager.Instance.RegisterType<FormPizzaComponent>();
services.AddTransient<IMessageInfoLogic, MessageInfoLogic>(); DependencyManager.Instance.RegisterType<FormPizzas>();
DependencyManager.Instance.RegisterType<FormReportOrders>();
services.AddSingleton<AbstractMailWorker, MailKitWorker>(); DependencyManager.Instance.RegisterType<FormReportPizzaComponents>();
services.AddTransient<IWorkProcess, WorkModeling>(); DependencyManager.Instance.RegisterType<FormClients>();
DependencyManager.Instance.RegisterType<FormImplementers>();
services.AddTransient<AbstractSaveToWord, SaveToWord>(); DependencyManager.Instance.RegisterType<FormImplementer>();
services.AddTransient<AbstractSaveToExcel, SaveToExcel>(); DependencyManager.Instance.RegisterType<FormMessages>();
services.AddTransient<AbstractSaveToPdf, SaveToPdf>();
services.AddTransient<FormClients>();
services.AddTransient<FormComponent>();
services.AddTransient<FormComponents>();
services.AddTransient<FormCreateOrder>();
services.AddTransient<FormPizza>();
services.AddTransient<FormPizzaComponent>();
services.AddTransient<FormPizzas>();
services.AddTransient<FormReportPizzaComponents>();
services.AddTransient<FormReportOrders>();
services.AddTransient<FormImplementer>();
services.AddTransient<FormImplementers>();
services.AddTransient<FormMessages>();
} }
private static void MailCheck(object obj) => ServiceProvider?.GetService<AbstractMailWorker>()?.MailCheck(); private static void MailCheck(object obj) => DependencyManager.Instance.Resolve<AbstractMailWorker>()?.MailCheck();
} }
} }