MessageInterface inherited IID and MessageModels were modified.

This commit is contained in:
Yuee Shiness 2023-04-23 15:59:06 +04:00
parent 5ed0dc584b
commit 8abe0bbfb2
16 changed files with 209 additions and 24 deletions

View File

@ -0,0 +1,98 @@
using DressAtelierContracts.BindingModels;
using DressAtelierContracts.BusinessLogicContracts;
using DressAtelierContracts.StorageContracts;
using DressAtelierDataModels;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.IO.Compression;
using System.Linq;
using System.Reflection;
using System.Runtime.Serialization.Json;
using System.Text;
using System.Threading.Tasks;
namespace DressAtelierBusinessLogic.BusinessLogic
{
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");
// removing data from dir and old archive deletion
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);
}
// taking method for saving
_logger.LogDebug("Get assembly");
var typeIID = typeof(IID);
var assembly = typeIID.Assembly;
if (assembly == null)
{
throw new ArgumentNullException("Assembly wasn't found", 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($"Class-model wasn't found for {type.Name}");
}
_logger.LogDebug("Call SaveToFile method for {name} type", type.Name);
// call method to perform
method?.MakeGenericMethod(modelType).Invoke(this, new object[] { model.FolderName });
}
}
_logger.LogDebug("Create zip and remove folder");
// archive
ZipFile.CreateFromDirectory(model.FolderName, fileName);
// folder deletion
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

@ -61,7 +61,7 @@ namespace DressAtelierBusinessLogic.MailEmployee
list.Add(new MessageInfoBindingModel list.Add(new MessageInfoBindingModel
{ {
DeliveryDate = message.Date.DateTime, DeliveryDate = message.Date.DateTime,
ID = message.MessageId, MessageID = message.MessageId,
SenderName = mail.Address, SenderName = mail.Address,
Subject = message.Subject, Subject = message.Subject,
Body = message.TextBody != null ? message.TextBody : message.HtmlBody Body = message.TextBody != null ? message.TextBody : message.HtmlBody

View File

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

View File

@ -9,7 +9,7 @@ namespace DressAtelierContracts.BindingModels
{ {
public class MessageInfoBindingModel : IMessageInfoModel public class MessageInfoBindingModel : IMessageInfoModel
{ {
public string ID { get; set; } = string.Empty; public string MessageID { get; set; } = string.Empty;
public int? ClientID { get; set; } public int? ClientID { get; set; }
@ -20,5 +20,7 @@ namespace DressAtelierContracts.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 int ID { get; set; }
} }
} }

View File

@ -0,0 +1,14 @@
using DressAtelierContracts.BindingModels;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DressAtelierContracts.BusinessLogicContracts
{
public interface IBackupLogic
{
void CreateBackup(BackupSaveBindingModel model);
}
}

View File

@ -8,7 +8,7 @@ namespace DressAtelierContracts.SearchModels
{ {
public class MessageInfoSearchModel public class MessageInfoSearchModel
{ {
public string? ID { get; set; } public string? MessageID { get; set; }
public int? ClientID { get; set; } public int? ClientID { get; set; }
} }

View File

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

View File

@ -12,7 +12,7 @@ namespace DressAtelierContracts.ViewModels
public class MessageInfoViewModel : IMessageInfoModel public class MessageInfoViewModel : IMessageInfoModel
{ {
[Column(visible: false)] [Column(visible: false)]
public string ID { get; set; } = string.Empty; public string MessageID { get; set; } = string.Empty;
[Column(visible: false)] [Column(visible: false)]
public int? ClientID { get; set; } public int? ClientID { get; set; }
@ -28,5 +28,7 @@ namespace DressAtelierContracts.ViewModels
[Column(title: "Message content", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)] [Column(title: "Message content", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)]
public string Body { get; set; } = string.Empty; public string Body { get; set; } = string.Empty;
public int ID { get; set; }
} }
} }

View File

@ -6,9 +6,9 @@ using System.Threading.Tasks;
namespace DressAtelierDataModels.Models namespace DressAtelierDataModels.Models
{ {
public interface IMessageInfoModel public interface IMessageInfoModel : IID
{ {
string ID { get; } string MessageID { get; }
int? ClientID { get; } int? ClientID { get; }
string SenderName { get; } string SenderName { get; }
DateTime DeliveryDate { get; } DateTime DeliveryDate { get; }

View File

@ -0,0 +1,33 @@
using DressAtelierContracts.StorageContracts;
using DressAtelierDatabaseImplementation;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DressAtelierDatabaseImplement.Implements
{
public class BackupInfo : IBackupInfo
{
public List<T>? GetList<T>() where T : class, new()
{
using var context = new DressAtelierDatabase();
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

@ -17,12 +17,12 @@ namespace DressAtelierDatabaseImplement.Implements
{ {
public MessageInfoViewModel? GetElement(MessageInfoSearchModel model) public MessageInfoViewModel? GetElement(MessageInfoSearchModel model)
{ {
if(string.IsNullOrEmpty(model.ID)) if(string.IsNullOrEmpty(model.MessageID))
{ {
return null; return null;
} }
using var context = new DressAtelierDatabase(); using var context = new DressAtelierDatabase();
return context.Messages.Include(x => x.Client).FirstOrDefault(x => x.ID.Equals(model.ID))?.GetViewModel; return context.Messages.Include(x => x.Client).FirstOrDefault(x => x.MessageID.Equals(model.MessageID))?.GetViewModel;
} }
public List<MessageInfoViewModel> GetFilteredList(MessageInfoSearchModel model) public List<MessageInfoViewModel> GetFilteredList(MessageInfoSearchModel model)
@ -54,7 +54,7 @@ namespace DressAtelierDatabaseImplement.Implements
return null; return null;
} }
if (GetElement(new MessageInfoSearchModel { ID = model.ID }) != null) if (GetElement(new MessageInfoSearchModel { MessageID = model.MessageID }) != null)
{ {
return null; return null;
} }

View File

@ -12,7 +12,7 @@ namespace DressAtelierDatabaseImplement.Models
public class MessageInfo : IMessageInfoModel public class MessageInfo : IMessageInfoModel
{ {
public string ID { get; private set; } = string.Empty; public string MessageID { get; private set; } = string.Empty;
public int? ClientID { get; private set; } public int? ClientID { get; private set; }
@ -25,6 +25,8 @@ namespace DressAtelierDatabaseImplement.Models
public virtual Client? Client { get; private set; } public virtual Client? Client { get; private set; }
public int ID { get; set; }
public static MessageInfo? Create(MessageInfoBindingModel model) public static MessageInfo? Create(MessageInfoBindingModel model)
{ {
if(model == null) if(model == null)
@ -33,7 +35,7 @@ namespace DressAtelierDatabaseImplement.Models
} }
return new MessageInfo return new MessageInfo
{ {
ID = model.ID, MessageID = model.MessageID,
ClientID = model.ClientID, ClientID = model.ClientID,
SenderName = model.SenderName, SenderName = model.SenderName,
Body = model.Body, Body = model.Body,
@ -44,12 +46,14 @@ namespace DressAtelierDatabaseImplement.Models
public MessageInfoViewModel GetViewModel => new() public MessageInfoViewModel GetViewModel => new()
{ {
ID = ID, MessageID = MessageID,
ClientID = ClientID, ClientID = ClientID,
SenderName = SenderName, SenderName = SenderName,
Body = Body, Body = Body,
DeliveryDate = DeliveryDate, DeliveryDate = DeliveryDate,
Subject = Subject, Subject = Subject,
}; };
} }
} }

View File

@ -23,11 +23,11 @@ namespace DressAtelierFileImplement.Implements
public MessageInfoViewModel? GetElement(MessageInfoSearchModel model) public MessageInfoViewModel? GetElement(MessageInfoSearchModel model)
{ {
if(string.IsNullOrEmpty(model.ID)) if(string.IsNullOrEmpty(model.MessageID))
{ {
return null; return null;
} }
return _source.Messages.FirstOrDefault(x => x.ID.Equals(model.ID))?.GetViewModel; return _source.Messages.FirstOrDefault(x => x.MessageID.Equals(model.MessageID))?.GetViewModel;
} }
public List<MessageInfoViewModel> GetFilteredList(MessageInfoSearchModel model) public List<MessageInfoViewModel> GetFilteredList(MessageInfoSearchModel model)

View File

@ -12,7 +12,7 @@ namespace DressAtelierFileImplement.Models
{ {
public class MessageInfo : IMessageInfoModel public class MessageInfo : IMessageInfoModel
{ {
public string ID { get; set; } = string.Empty; public string MessageID { get; set; } = string.Empty;
public int? ClientID { get; set; } public int? ClientID { get; set; }
@ -24,6 +24,8 @@ namespace DressAtelierFileImplement.Models
public string Body { get; set; } = string.Empty; public string Body { get; set; } = string.Empty;
public int ID { get; set; }
public static MessageInfo? Create(MessageInfoBindingModel? model) public static MessageInfo? Create(MessageInfoBindingModel? model)
{ {
if (model == null) if (model == null)
@ -32,7 +34,7 @@ namespace DressAtelierFileImplement.Models
} }
return new MessageInfo() return new MessageInfo()
{ {
ID = model.ID, MessageID = model.MessageID,
ClientID = model.ClientID, ClientID = model.ClientID,
SenderName = model.SenderName, SenderName = model.SenderName,
DeliveryDate = model.DeliveryDate, DeliveryDate = model.DeliveryDate,
@ -50,7 +52,7 @@ namespace DressAtelierFileImplement.Models
} }
return new MessageInfo() return new MessageInfo()
{ {
ID = element.Attribute("ID")!.Value, MessageID = element.Attribute("MessageID")!.Value,
ClientID = Convert.ToInt32(element.Attribute("ClientID")!.Value), ClientID = Convert.ToInt32(element.Attribute("ClientID")!.Value),
SenderName = element.Element("SenderName")!.Value, SenderName = element.Element("SenderName")!.Value,
DeliveryDate = Convert.ToDateTime(element.Element("DeliveryDate")!.Value), DeliveryDate = Convert.ToDateTime(element.Element("DeliveryDate")!.Value),
@ -61,7 +63,7 @@ namespace DressAtelierFileImplement.Models
public MessageInfoViewModel GetViewModel => new() public MessageInfoViewModel GetViewModel => new()
{ {
ID = ID, MessageID = MessageID,
ClientID = ClientID, ClientID = ClientID,
SenderName = SenderName, SenderName = SenderName,
DeliveryDate = DeliveryDate, DeliveryDate = DeliveryDate,
@ -69,12 +71,13 @@ namespace DressAtelierFileImplement.Models
Body = Body Body = Body
}; };
public XElement GetXElement => new("MessageInfo", new XAttribute("ID", ID), public XElement GetXElement => new("MessageInfo", new XAttribute("MessageID", MessageID),
new XElement("ClientID", ClientID.ToString()), new XElement("ClientID", ClientID.ToString()),
new XElement("SenderName", SenderName), new XElement("SenderName", SenderName),
new XElement("DeliveryDate", DeliveryDate), new XElement("DeliveryDate", DeliveryDate),
new XElement("Subject", Subject), new XElement("Subject", Subject),
new XElement("Body", Body), new XElement("Body", Body),
new XElement("SenderName", SenderName)); new XElement("SenderName", SenderName));
} }
} }

View File

@ -20,14 +20,14 @@ namespace DressAtelierListImplement.Implements
public MessageInfoViewModel? GetElement(MessageInfoSearchModel model) public MessageInfoViewModel? GetElement(MessageInfoSearchModel model)
{ {
if(string.IsNullOrEmpty(model.ID)) if(string.IsNullOrEmpty(model.MessageID))
{ {
return null; return null;
} }
foreach(var msg in _source.Messages) foreach(var msg in _source.Messages)
{ {
if(msg.ID.Equals(model.ID)) if(msg.MessageID.Equals(model.MessageID))
{ {
return msg.GetViewModel; return msg.GetViewModel;
} }

View File

@ -11,7 +11,7 @@ namespace DressAtelierListImplement.Models
{ {
public class MessageInfo : IMessageInfoModel public class MessageInfo : IMessageInfoModel
{ {
public string ID { get; set; } = string.Empty; public string MessageID { get; set; } = string.Empty;
public int? ClientID { get; set; } public int? ClientID { get; set; }
@ -23,6 +23,8 @@ namespace DressAtelierListImplement.Models
public string Body { get; set; } = string.Empty; public string Body { get; set; } = string.Empty;
public int ID { get; set; }
public static MessageInfo? Create(MessageInfoBindingModel? model) public static MessageInfo? Create(MessageInfoBindingModel? model)
{ {
if (model == null) if (model == null)
@ -31,7 +33,7 @@ namespace DressAtelierListImplement.Models
} }
return new() return new()
{ {
ID = model.ID, MessageID = model.MessageID,
SenderName = model.SenderName, SenderName = model.SenderName,
DeliveryDate = model.DeliveryDate, DeliveryDate = model.DeliveryDate,
Subject = model.Subject, Subject = model.Subject,
@ -41,7 +43,7 @@ namespace DressAtelierListImplement.Models
public MessageInfoViewModel GetViewModel => new() public MessageInfoViewModel GetViewModel => new()
{ {
ID = ID, MessageID = MessageID,
SenderName = SenderName, SenderName = SenderName,
DeliveryDate = DeliveryDate, DeliveryDate = DeliveryDate,
Subject = Subject, Subject = Subject,