бобры вперед
This commit is contained in:
parent
8b437f5de9
commit
d3461d9697
@ -0,0 +1,51 @@
|
|||||||
|
using JewelryStoreContracts.BindingModels;
|
||||||
|
using JewelryStoreContracts.BusinessLogicsContracts;
|
||||||
|
using JewelryStoreContracts.SearchModels;
|
||||||
|
using JewelryStoreContracts.StoragesContracts;
|
||||||
|
using JewelryStoreContracts.ViewModels;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace JewelryStoreBusinessLogic.BusinessLogics
|
||||||
|
{
|
||||||
|
public class MessageInfoLogic : IMessageInfoLogic
|
||||||
|
{
|
||||||
|
private readonly ILogger _logger;
|
||||||
|
|
||||||
|
private readonly IMessageInfoStorage _messageStorage;
|
||||||
|
|
||||||
|
public MessageInfoLogic(IMessageInfoStorage messageStorage, ILogger<MessageInfoLogic> logger)
|
||||||
|
{
|
||||||
|
_messageStorage = messageStorage;
|
||||||
|
_logger = logger;
|
||||||
|
}
|
||||||
|
public bool Create(MessageInfoBindingModel model)
|
||||||
|
{
|
||||||
|
if (_messageStorage.Insert(model) == null)
|
||||||
|
{
|
||||||
|
_logger.LogWarning("Insert operation failed");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<MessageInfoViewModel>? ReadList(MessageInfoSearchModel? model)
|
||||||
|
{
|
||||||
|
_logger.LogInformation("ReadList. ClientID:{ClientID}. ID:{ ID}", model?.ClientId, model?.MessageId);
|
||||||
|
|
||||||
|
var list = model == null ? _messageStorage.GetFullList() : _messageStorage.GetFilteredList(model);
|
||||||
|
|
||||||
|
if (list == null)
|
||||||
|
{
|
||||||
|
_logger.LogWarning("ReadList return null list");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
_logger.LogInformation("ReadList. Count:{Count}", list.Count);
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,59 @@
|
|||||||
|
using JewelryStoreContracts.BindingModels;
|
||||||
|
using JewelryStoreContracts.SearchModels;
|
||||||
|
using JewelryStoreContracts.StoragesContracts;
|
||||||
|
using JewelryStoreContracts.ViewModels;
|
||||||
|
using JewelryStoreDatabaseImplement.Models;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace JewelryStoreDatabaseImplement.Implements
|
||||||
|
{
|
||||||
|
public class MessageInfoStorage : IMessageInfoStorage
|
||||||
|
{
|
||||||
|
public MessageInfoViewModel? GetElement(MessageInfoSearchModel model)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(model.MessageId))
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
using var context = new JewelryStoreDatabase();
|
||||||
|
return context.Messages.Include(x => x.Client).FirstOrDefault(x => x.MessageId.Equals(model.MessageId))?.GetViewModel;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<MessageInfoViewModel> GetFilteredList(MessageInfoSearchModel model)
|
||||||
|
{
|
||||||
|
if (!model.ClientId.HasValue)
|
||||||
|
{
|
||||||
|
return new();
|
||||||
|
}
|
||||||
|
using var context = new JewelryStoreDatabase();
|
||||||
|
return context.Messages.Include(x => x.Client).Where(x => x.ClientId == model.ClientId).Select(x => x.GetViewModel).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<MessageInfoViewModel> GetFullList()
|
||||||
|
{
|
||||||
|
using var context = new JewelryStoreDatabase();
|
||||||
|
return context.Messages.Include(x => x.Client).Select(x => x.GetViewModel).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public MessageInfoViewModel? Insert(MessageInfoBindingModel model)
|
||||||
|
{
|
||||||
|
using var context = new JewelryStoreDatabase();
|
||||||
|
model.ClientId = context.Clients.FirstOrDefault(x => x.Email.Equals(model.SenderName))?.Id;
|
||||||
|
var message = MessageInfo.Create(model);
|
||||||
|
if (message == null || context.Messages.Any(x => x.MessageId.Equals(model.MessageId)))
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
context.Messages.Add(message);
|
||||||
|
context.SaveChanges();
|
||||||
|
return message.GetViewModel;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -26,5 +26,6 @@ namespace JewelryStoreDatabaseImplement
|
|||||||
public virtual DbSet<Order> Orders { set; get; }
|
public virtual DbSet<Order> Orders { set; get; }
|
||||||
public virtual DbSet<Client> Clients { set; get; }
|
public virtual DbSet<Client> Clients { set; get; }
|
||||||
public virtual DbSet<Implementer> Implementers { set; get; }
|
public virtual DbSet<Implementer> Implementers { set; get; }
|
||||||
|
public virtual DbSet<MessageInfo> Messages { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -12,8 +12,8 @@ using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
|
|||||||
namespace JewelryStoreDatabaseImplement.Migrations
|
namespace JewelryStoreDatabaseImplement.Migrations
|
||||||
{
|
{
|
||||||
[DbContext(typeof(JewelryStoreDatabase))]
|
[DbContext(typeof(JewelryStoreDatabase))]
|
||||||
[Migration("20240421174803_InitialCreate")]
|
[Migration("20240505124647_message")]
|
||||||
partial class InitialCreate
|
partial class message
|
||||||
{
|
{
|
||||||
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
||||||
{
|
{
|
||||||
@ -142,6 +142,36 @@ namespace JewelryStoreDatabaseImplement.Migrations
|
|||||||
b.ToTable("JewelComponents");
|
b.ToTable("JewelComponents");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("JewelryStoreDatabaseImplement.Models.MessageInfo", b =>
|
||||||
|
{
|
||||||
|
b.Property<string>("MessageId")
|
||||||
|
.HasColumnType("text");
|
||||||
|
|
||||||
|
b.Property<string>("Body")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("text");
|
||||||
|
|
||||||
|
b.Property<int?>("ClientId")
|
||||||
|
.HasColumnType("integer");
|
||||||
|
|
||||||
|
b.Property<DateTime>("DateDelivery")
|
||||||
|
.HasColumnType("timestamp without time zone");
|
||||||
|
|
||||||
|
b.Property<string>("SenderName")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("text");
|
||||||
|
|
||||||
|
b.Property<string>("Subject")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("text");
|
||||||
|
|
||||||
|
b.HasKey("MessageId");
|
||||||
|
|
||||||
|
b.HasIndex("ClientId");
|
||||||
|
|
||||||
|
b.ToTable("Messages");
|
||||||
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("JewelryStoreDatabaseImplement.Models.Order", b =>
|
modelBuilder.Entity("JewelryStoreDatabaseImplement.Models.Order", b =>
|
||||||
{
|
{
|
||||||
b.Property<int>("Id")
|
b.Property<int>("Id")
|
||||||
@ -204,6 +234,15 @@ namespace JewelryStoreDatabaseImplement.Migrations
|
|||||||
b.Navigation("Jewel");
|
b.Navigation("Jewel");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("JewelryStoreDatabaseImplement.Models.MessageInfo", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("JewelryStoreDatabaseImplement.Models.Client", "Client")
|
||||||
|
.WithMany("Messages")
|
||||||
|
.HasForeignKey("ClientId");
|
||||||
|
|
||||||
|
b.Navigation("Client");
|
||||||
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("JewelryStoreDatabaseImplement.Models.Order", b =>
|
modelBuilder.Entity("JewelryStoreDatabaseImplement.Models.Order", b =>
|
||||||
{
|
{
|
||||||
b.HasOne("JewelryStoreDatabaseImplement.Models.Client", "Client")
|
b.HasOne("JewelryStoreDatabaseImplement.Models.Client", "Client")
|
||||||
@ -231,6 +270,8 @@ namespace JewelryStoreDatabaseImplement.Migrations
|
|||||||
|
|
||||||
modelBuilder.Entity("JewelryStoreDatabaseImplement.Models.Client", b =>
|
modelBuilder.Entity("JewelryStoreDatabaseImplement.Models.Client", b =>
|
||||||
{
|
{
|
||||||
|
b.Navigation("Messages");
|
||||||
|
|
||||||
b.Navigation("Orders");
|
b.Navigation("Orders");
|
||||||
});
|
});
|
||||||
|
|
@ -6,7 +6,7 @@ using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
|
|||||||
|
|
||||||
namespace JewelryStoreDatabaseImplement.Migrations
|
namespace JewelryStoreDatabaseImplement.Migrations
|
||||||
{
|
{
|
||||||
public partial class InitialCreate : Migration
|
public partial class message : Migration
|
||||||
{
|
{
|
||||||
protected override void Up(MigrationBuilder migrationBuilder)
|
protected override void Up(MigrationBuilder migrationBuilder)
|
||||||
{
|
{
|
||||||
@ -69,6 +69,27 @@ namespace JewelryStoreDatabaseImplement.Migrations
|
|||||||
table.PrimaryKey("PK_Jewels", x => x.Id);
|
table.PrimaryKey("PK_Jewels", x => x.Id);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "Messages",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
MessageId = table.Column<string>(type: "text", nullable: false),
|
||||||
|
ClientId = table.Column<int>(type: "integer", nullable: true),
|
||||||
|
SenderName = table.Column<string>(type: "text", nullable: false),
|
||||||
|
DateDelivery = table.Column<DateTime>(type: "timestamp without time zone", nullable: false),
|
||||||
|
Subject = table.Column<string>(type: "text", nullable: false),
|
||||||
|
Body = table.Column<string>(type: "text", nullable: false)
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
table.PrimaryKey("PK_Messages", x => x.MessageId);
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "FK_Messages_Clients_ClientId",
|
||||||
|
column: x => x.ClientId,
|
||||||
|
principalTable: "Clients",
|
||||||
|
principalColumn: "Id");
|
||||||
|
});
|
||||||
|
|
||||||
migrationBuilder.CreateTable(
|
migrationBuilder.CreateTable(
|
||||||
name: "JewelComponents",
|
name: "JewelComponents",
|
||||||
columns: table => new
|
columns: table => new
|
||||||
@ -143,6 +164,11 @@ namespace JewelryStoreDatabaseImplement.Migrations
|
|||||||
table: "JewelComponents",
|
table: "JewelComponents",
|
||||||
column: "JewelId");
|
column: "JewelId");
|
||||||
|
|
||||||
|
migrationBuilder.CreateIndex(
|
||||||
|
name: "IX_Messages_ClientId",
|
||||||
|
table: "Messages",
|
||||||
|
column: "ClientId");
|
||||||
|
|
||||||
migrationBuilder.CreateIndex(
|
migrationBuilder.CreateIndex(
|
||||||
name: "IX_Orders_ClientId",
|
name: "IX_Orders_ClientId",
|
||||||
table: "Orders",
|
table: "Orders",
|
||||||
@ -164,6 +190,9 @@ namespace JewelryStoreDatabaseImplement.Migrations
|
|||||||
migrationBuilder.DropTable(
|
migrationBuilder.DropTable(
|
||||||
name: "JewelComponents");
|
name: "JewelComponents");
|
||||||
|
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "Messages");
|
||||||
|
|
||||||
migrationBuilder.DropTable(
|
migrationBuilder.DropTable(
|
||||||
name: "Orders");
|
name: "Orders");
|
||||||
|
|
@ -140,6 +140,36 @@ namespace JewelryStoreDatabaseImplement.Migrations
|
|||||||
b.ToTable("JewelComponents");
|
b.ToTable("JewelComponents");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("JewelryStoreDatabaseImplement.Models.MessageInfo", b =>
|
||||||
|
{
|
||||||
|
b.Property<string>("MessageId")
|
||||||
|
.HasColumnType("text");
|
||||||
|
|
||||||
|
b.Property<string>("Body")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("text");
|
||||||
|
|
||||||
|
b.Property<int?>("ClientId")
|
||||||
|
.HasColumnType("integer");
|
||||||
|
|
||||||
|
b.Property<DateTime>("DateDelivery")
|
||||||
|
.HasColumnType("timestamp without time zone");
|
||||||
|
|
||||||
|
b.Property<string>("SenderName")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("text");
|
||||||
|
|
||||||
|
b.Property<string>("Subject")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("text");
|
||||||
|
|
||||||
|
b.HasKey("MessageId");
|
||||||
|
|
||||||
|
b.HasIndex("ClientId");
|
||||||
|
|
||||||
|
b.ToTable("Messages");
|
||||||
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("JewelryStoreDatabaseImplement.Models.Order", b =>
|
modelBuilder.Entity("JewelryStoreDatabaseImplement.Models.Order", b =>
|
||||||
{
|
{
|
||||||
b.Property<int>("Id")
|
b.Property<int>("Id")
|
||||||
@ -202,6 +232,15 @@ namespace JewelryStoreDatabaseImplement.Migrations
|
|||||||
b.Navigation("Jewel");
|
b.Navigation("Jewel");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("JewelryStoreDatabaseImplement.Models.MessageInfo", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("JewelryStoreDatabaseImplement.Models.Client", "Client")
|
||||||
|
.WithMany("Messages")
|
||||||
|
.HasForeignKey("ClientId");
|
||||||
|
|
||||||
|
b.Navigation("Client");
|
||||||
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("JewelryStoreDatabaseImplement.Models.Order", b =>
|
modelBuilder.Entity("JewelryStoreDatabaseImplement.Models.Order", b =>
|
||||||
{
|
{
|
||||||
b.HasOne("JewelryStoreDatabaseImplement.Models.Client", "Client")
|
b.HasOne("JewelryStoreDatabaseImplement.Models.Client", "Client")
|
||||||
@ -229,6 +268,8 @@ namespace JewelryStoreDatabaseImplement.Migrations
|
|||||||
|
|
||||||
modelBuilder.Entity("JewelryStoreDatabaseImplement.Models.Client", b =>
|
modelBuilder.Entity("JewelryStoreDatabaseImplement.Models.Client", b =>
|
||||||
{
|
{
|
||||||
|
b.Navigation("Messages");
|
||||||
|
|
||||||
b.Navigation("Orders");
|
b.Navigation("Orders");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -20,8 +20,10 @@ namespace JewelryStoreDatabaseImplement.Models
|
|||||||
public string Email { get; set; } = string.Empty;
|
public string Email { get; set; } = string.Empty;
|
||||||
[Required]
|
[Required]
|
||||||
public string Password { get; set; } = string.Empty;
|
public string Password { get; set; } = string.Empty;
|
||||||
|
[ForeignKey("ClientId")]
|
||||||
|
public virtual List<MessageInfo> Messages { get; set; } = new();
|
||||||
|
|
||||||
[ForeignKey("ClientId")]
|
[ForeignKey("ClientId")]
|
||||||
public virtual List<Order> Orders { get; set; } = new();
|
public virtual List<Order> Orders { get; set; } = new();
|
||||||
|
|
||||||
public static Client? Create(ClientBindingModel model)
|
public static Client? Create(ClientBindingModel model)
|
||||||
|
@ -0,0 +1,54 @@
|
|||||||
|
using JewelryStoreContracts.BindingModels;
|
||||||
|
using JewelryStoreContracts.ViewModels;
|
||||||
|
using JewerlyStoreDataModels.Models;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace JewelryStoreDatabaseImplement.Models
|
||||||
|
{
|
||||||
|
public class MessageInfo : IMessageInfoModel
|
||||||
|
{
|
||||||
|
[Key]
|
||||||
|
public string MessageId { get; private set; } = string.Empty;
|
||||||
|
public int? ClientId { get; private set; }
|
||||||
|
[Required]
|
||||||
|
public string SenderName { get; private set; } = string.Empty;
|
||||||
|
[Required]
|
||||||
|
public DateTime DateDelivery { get; private set; }
|
||||||
|
[Required]
|
||||||
|
public string Subject { get; private set; } = string.Empty;
|
||||||
|
[Required]
|
||||||
|
public string Body { get; private set; } = string.Empty;
|
||||||
|
public virtual Client? Client { get; private set; }
|
||||||
|
public static MessageInfo? Create(MessageInfoBindingModel model)
|
||||||
|
{
|
||||||
|
if (model == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return new MessageInfo
|
||||||
|
{
|
||||||
|
MessageId = model.MessageId,
|
||||||
|
ClientId = model.ClientId,
|
||||||
|
SenderName = model.SenderName,
|
||||||
|
Body = model.Body,
|
||||||
|
DateDelivery = model.DateDelivery,
|
||||||
|
Subject = model.Subject,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public MessageInfoViewModel GetViewModel => new()
|
||||||
|
{
|
||||||
|
MessageId = MessageId,
|
||||||
|
ClientId = ClientId,
|
||||||
|
SenderName = SenderName,
|
||||||
|
Body = Body,
|
||||||
|
DateDelivery = DateDelivery,
|
||||||
|
Subject = Subject,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
@ -15,6 +15,7 @@ namespace JewelryStoreListImplement
|
|||||||
public List<Jewel> Jewels { get; set; }
|
public List<Jewel> Jewels { get; set; }
|
||||||
public List<Client> Clients { get; set; }
|
public List<Client> Clients { get; set; }
|
||||||
public List<Implementer> Implementers { get; set; }
|
public List<Implementer> Implementers { get; set; }
|
||||||
|
public List<MessageInfo> Messages { get; set; }
|
||||||
|
|
||||||
private DataListSingleton()
|
private DataListSingleton()
|
||||||
{
|
{
|
||||||
@ -23,6 +24,7 @@ namespace JewelryStoreListImplement
|
|||||||
Jewels = new List<Jewel>();
|
Jewels = new List<Jewel>();
|
||||||
Clients = new List<Client>();
|
Clients = new List<Client>();
|
||||||
Implementers = new List<Implementer>();
|
Implementers = new List<Implementer>();
|
||||||
|
Messages = new List<MessageInfo>();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static DataListSingleton GetInstance()
|
public static DataListSingleton GetInstance()
|
||||||
|
@ -0,0 +1,73 @@
|
|||||||
|
using JewelryStoreContracts.BindingModels;
|
||||||
|
using JewelryStoreContracts.SearchModels;
|
||||||
|
using JewelryStoreContracts.StoragesContracts;
|
||||||
|
using JewelryStoreContracts.ViewModels;
|
||||||
|
using JewelryStoreListImplement.Models;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace JewelryStoreListImplement.Implements
|
||||||
|
{
|
||||||
|
public class MessageInfoStorage : IMessageInfoStorage
|
||||||
|
{
|
||||||
|
private readonly DataListSingleton _source;
|
||||||
|
public MessageInfoStorage(DataListSingleton source)
|
||||||
|
{
|
||||||
|
_source = DataListSingleton.GetInstance();
|
||||||
|
}
|
||||||
|
|
||||||
|
public MessageInfoViewModel? GetElement(MessageInfoSearchModel model)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(model.MessageId))
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var msg in _source.Messages)
|
||||||
|
{
|
||||||
|
if (msg.MessageId.Equals(model.MessageId))
|
||||||
|
{
|
||||||
|
return msg.GetViewModel;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<MessageInfoViewModel> GetFilteredList(MessageInfoSearchModel model)
|
||||||
|
{
|
||||||
|
var list = new List<MessageInfoViewModel>();
|
||||||
|
foreach (var msg in _source.Messages)
|
||||||
|
{
|
||||||
|
if (msg.ClientId.HasValue && model.ClientId == msg.ClientId)
|
||||||
|
{
|
||||||
|
list.Add(msg.GetViewModel);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<MessageInfoViewModel> GetFullList()
|
||||||
|
{
|
||||||
|
var list = new List<MessageInfoViewModel>();
|
||||||
|
foreach (var msg in _source.Messages)
|
||||||
|
{
|
||||||
|
list.Add(msg.GetViewModel);
|
||||||
|
}
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
public MessageInfoViewModel? Insert(MessageInfoBindingModel model)
|
||||||
|
{
|
||||||
|
var newMessage = MessageInfo.Create(model);
|
||||||
|
if (newMessage == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
_source.Messages.Add(newMessage);
|
||||||
|
return newMessage.GetViewModel;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
51
JewelryStore/JewelryStoreListImplement/Models/MessageInfo.cs
Normal file
51
JewelryStore/JewelryStoreListImplement/Models/MessageInfo.cs
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
using JewelryStoreContracts.BindingModels;
|
||||||
|
using JewelryStoreContracts.ViewModels;
|
||||||
|
using JewerlyStoreDataModels.Models;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace JewelryStoreListImplement.Models
|
||||||
|
{
|
||||||
|
public class MessageInfo : IMessageInfoModel
|
||||||
|
{
|
||||||
|
public string MessageId { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
public int? ClientId { get; set; }
|
||||||
|
|
||||||
|
public string SenderName { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
public DateTime DateDelivery { get; set; }
|
||||||
|
|
||||||
|
public string Subject { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
public string Body { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
public static MessageInfo? Create(MessageInfoBindingModel? model)
|
||||||
|
{
|
||||||
|
if (model == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return new()
|
||||||
|
{
|
||||||
|
MessageId = model.MessageId,
|
||||||
|
SenderName = model.SenderName,
|
||||||
|
DateDelivery = model.DateDelivery,
|
||||||
|
Subject = model.Subject,
|
||||||
|
Body = model.Body,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public MessageInfoViewModel GetViewModel => new()
|
||||||
|
{
|
||||||
|
MessageId = MessageId,
|
||||||
|
SenderName = SenderName,
|
||||||
|
DateDelivery = DateDelivery,
|
||||||
|
Subject = Subject,
|
||||||
|
Body = Body
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
@ -17,11 +17,13 @@ namespace JewerlyStoreFileImplement
|
|||||||
private readonly string JewelFileName = "Jewel.xml";
|
private readonly string JewelFileName = "Jewel.xml";
|
||||||
private readonly string ClientFileName = "Client.xml";
|
private readonly string ClientFileName = "Client.xml";
|
||||||
private readonly string ImplementerFileName = "Implementer.xml";
|
private readonly string ImplementerFileName = "Implementer.xml";
|
||||||
|
private readonly string MessageInfoFileName = "MessageInfo.xml";
|
||||||
public List<Component> Components { get; private set; }
|
public List<Component> Components { get; private set; }
|
||||||
public List<Order> Orders { get; private set; }
|
public List<Order> Orders { get; private set; }
|
||||||
public List<Jewel> Jewels { get; private set; }
|
public List<Jewel> Jewels { get; private set; }
|
||||||
public List<Client> Clients { get; private set; }
|
public List<Client> Clients { get; private set; }
|
||||||
public List<Implementer> Implementers { get; private set; }
|
public List<Implementer> Implementers { get; private set; }
|
||||||
|
public List<MessageInfo> Messages { get; private set; }
|
||||||
|
|
||||||
public static DataFileSingleton GetInstance()
|
public static DataFileSingleton GetInstance()
|
||||||
{
|
{
|
||||||
@ -42,6 +44,8 @@ namespace JewerlyStoreFileImplement
|
|||||||
|
|
||||||
public void SaveImplementers() => SaveData(Implementers, OrderFileName, "Implementers", x => x.GetXElement);
|
public void SaveImplementers() => SaveData(Implementers, OrderFileName, "Implementers", x => x.GetXElement);
|
||||||
|
|
||||||
|
public void SaveMessages() => SaveData(Messages, MessageInfoFileName, "Messages", x => x.GetXElement);
|
||||||
|
|
||||||
private DataFileSingleton()
|
private DataFileSingleton()
|
||||||
{
|
{
|
||||||
Components = LoadData(ComponentFileName, "Component", x => Component.Create(x)!)!;
|
Components = LoadData(ComponentFileName, "Component", x => Component.Create(x)!)!;
|
||||||
@ -49,6 +53,7 @@ namespace JewerlyStoreFileImplement
|
|||||||
Orders = LoadData(OrderFileName, "Order", x => Order.Create(x)!)!;
|
Orders = LoadData(OrderFileName, "Order", x => Order.Create(x)!)!;
|
||||||
Clients = LoadData(ClientFileName, "Client", x => Client.Create(x)!)!;
|
Clients = LoadData(ClientFileName, "Client", x => Client.Create(x)!)!;
|
||||||
Implementers = LoadData(ImplementerFileName, "Implementer", x => Implementer.Create(x)!)!;
|
Implementers = LoadData(ImplementerFileName, "Implementer", x => Implementer.Create(x)!)!;
|
||||||
|
Messages = LoadData(MessageInfoFileName, "MessageInfo", x => MessageInfo.Create(x)!)!;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static List<T>? LoadData<T>(string filename, string xmlNodeName, Func<XElement, T> selectFunction)
|
private static List<T>? LoadData<T>(string filename, string xmlNodeName, Func<XElement, T> selectFunction)
|
||||||
|
@ -0,0 +1,58 @@
|
|||||||
|
using JewelryStoreContracts.BindingModels;
|
||||||
|
using JewelryStoreContracts.SearchModels;
|
||||||
|
using JewelryStoreContracts.StoragesContracts;
|
||||||
|
using JewelryStoreContracts.ViewModels;
|
||||||
|
using JewerlyStoreFileImplement.Models;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace JewerlyStoreFileImplement.Implements
|
||||||
|
{
|
||||||
|
public class MessageInfoStorage : IMessageInfoStorage
|
||||||
|
{
|
||||||
|
private readonly DataFileSingleton _source;
|
||||||
|
|
||||||
|
public MessageInfoStorage()
|
||||||
|
{
|
||||||
|
_source = DataFileSingleton.GetInstance();
|
||||||
|
}
|
||||||
|
|
||||||
|
public MessageInfoViewModel? GetElement(MessageInfoSearchModel model)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(model.MessageId))
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return _source.Messages.FirstOrDefault(x => x.MessageId.Equals(model.MessageId))?.GetViewModel;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<MessageInfoViewModel> GetFilteredList(MessageInfoSearchModel model)
|
||||||
|
{
|
||||||
|
if (!model.ClientId.HasValue)
|
||||||
|
{
|
||||||
|
return new();
|
||||||
|
}
|
||||||
|
return _source.Messages.Where(x => x.ClientId == model.ClientId).Select(x => x.GetViewModel).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<MessageInfoViewModel> GetFullList()
|
||||||
|
{
|
||||||
|
return _source.Messages.Select(x => x.GetViewModel).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
public MessageInfoViewModel? Insert(MessageInfoBindingModel model)
|
||||||
|
{
|
||||||
|
var newMessage = MessageInfo.Create(model);
|
||||||
|
if (newMessage == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
_source.Messages.Add(newMessage);
|
||||||
|
_source.SaveMessages();
|
||||||
|
return newMessage.GetViewModel;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
80
JewelryStore/JewerlyStoreFileImplement/Models/MessageInfo.cs
Normal file
80
JewelryStore/JewerlyStoreFileImplement/Models/MessageInfo.cs
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
using JewelryStoreContracts.BindingModels;
|
||||||
|
using JewelryStoreContracts.ViewModels;
|
||||||
|
using JewerlyStoreDataModels.Models;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Xml.Linq;
|
||||||
|
|
||||||
|
namespace JewerlyStoreFileImplement.Models
|
||||||
|
{
|
||||||
|
public class MessageInfo : IMessageInfoModel
|
||||||
|
{
|
||||||
|
public string MessageId { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
public int? ClientId { get; set; }
|
||||||
|
|
||||||
|
public string SenderName { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
public DateTime DateDelivery { get; set; }
|
||||||
|
|
||||||
|
public string Subject { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
public string Body { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
public static MessageInfo? Create(MessageInfoBindingModel? model)
|
||||||
|
{
|
||||||
|
if (model == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return new MessageInfo()
|
||||||
|
{
|
||||||
|
MessageId = model.MessageId,
|
||||||
|
ClientId = model.ClientId,
|
||||||
|
SenderName = model.SenderName,
|
||||||
|
DateDelivery = model.DateDelivery,
|
||||||
|
Subject = model.Subject,
|
||||||
|
Body = model.Body,
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public static MessageInfo? Create(XElement element)
|
||||||
|
{
|
||||||
|
if (element == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return new MessageInfo()
|
||||||
|
{
|
||||||
|
MessageId = element.Attribute("MessageId")!.Value,
|
||||||
|
ClientId = Convert.ToInt32(element.Attribute("ClientId")!.Value),
|
||||||
|
SenderName = element.Element("SenderName")!.Value,
|
||||||
|
DateDelivery = Convert.ToDateTime(element.Element("DateDelivery")!.Value),
|
||||||
|
Subject = element.Attribute("Subject")!.Value,
|
||||||
|
Body = element.Attribute("Body")!.Value,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public MessageInfoViewModel GetViewModel => new()
|
||||||
|
{
|
||||||
|
MessageId = MessageId,
|
||||||
|
ClientId = ClientId,
|
||||||
|
SenderName = SenderName,
|
||||||
|
DateDelivery = DateDelivery,
|
||||||
|
Subject = Subject,
|
||||||
|
Body = Body
|
||||||
|
};
|
||||||
|
|
||||||
|
public XElement GetXElement => new("MessageInfo", new XAttribute("MessageId", MessageId),
|
||||||
|
new XElement("ClientId", ClientId.ToString()),
|
||||||
|
new XElement("SenderName", SenderName),
|
||||||
|
new XElement("DateDelivery", DateDelivery),
|
||||||
|
new XElement("Subject", Subject),
|
||||||
|
new XElement("Body", Body),
|
||||||
|
new XElement("SenderName", SenderName));
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user