From b42ab445b017b45b870f60a2c01d7ac363ada891 Mon Sep 17 00:00:00 2001 From: ekallin Date: Sat, 6 Apr 2024 14:55:02 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D1=8B=20=D1=81=20=D0=B1=D0=B0=D0=B7=D0=B0=D0=BC=D0=B8=20?= =?UTF-8?q?=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B=D1=85=20=D0=B8=D0=B7=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D0=B5=D0=BD=D0=BE=20=D0=B4=D0=BB=D1=8F=20=D1=80=D0=B0?= =?UTF-8?q?=D0=B1=D0=BE=D1=82=D1=8B=20=D1=81=20=D0=BA=D0=BB=D0=B8=D0=B5?= =?UTF-8?q?=D0=BD=D1=82=D0=BE=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Implements/ClientStorage.cs | 66 ++++++ .../Implements/OrderStorage.cs | 25 ++- .../Migrations/20240310073215_InitCreate.cs | 2 + .../20240405210111_migrationLab5.Designer.cs | 210 ++++++++++++++++++ .../20240405210111_migrationLab5.cs | 22 ++ .../SushiBarDatabaseModelSnapshot.cs | 41 ++++ SushiBarDatabaseImplement/Models/Client.cs | 61 +++++ SushiBarDatabaseImplement/Models/Order.cs | 6 +- SushiBarDatabaseImplement/SushiBarDatabase.cs | 1 + 9 files changed, 428 insertions(+), 6 deletions(-) create mode 100644 SushiBarDatabaseImplement/Implements/ClientStorage.cs create mode 100644 SushiBarDatabaseImplement/Migrations/20240405210111_migrationLab5.Designer.cs create mode 100644 SushiBarDatabaseImplement/Migrations/20240405210111_migrationLab5.cs create mode 100644 SushiBarDatabaseImplement/Models/Client.cs diff --git a/SushiBarDatabaseImplement/Implements/ClientStorage.cs b/SushiBarDatabaseImplement/Implements/ClientStorage.cs new file mode 100644 index 0000000..3ac2c14 --- /dev/null +++ b/SushiBarDatabaseImplement/Implements/ClientStorage.cs @@ -0,0 +1,66 @@ +using SushiBarContracts.BindingModel; +using SushiBarContracts.SearchModel; +using SushiBarContracts.StoragesContracts; +using SushiBarContracts.ViewModels; +using SushiBarDatabaseImplement.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SushiBarDatabaseImplement.Implements +{ + public class ClientStorage : IClientStorage + { + public ClientViewModel? Insert(ClientBindingModel model) + { + using var context = new SushiBarDatabase(); + var newClient = Client.Create(model); + if (newClient == null) { return null; } + context.Clients.Add(newClient); + context.SaveChanges(); + return newClient.GetViewModel; + } + + public ClientViewModel? Update(ClientBindingModel model) + { + using var context = new SushiBarDatabase(); + var client = context.Clients.FirstOrDefault(x => x.Id == model.Id); + if (client == null) { return null; }; + client.Update(model); + context.SaveChanges(); + return client.GetViewModel; + } + + public ClientViewModel? Delete(ClientBindingModel model) + { + using var context = new SushiBarDatabase(); + var client = context.Clients.FirstOrDefault(x => x.Id == model.Id); + if (client == null) { return null; } + context.Clients.Remove(client); + context.SaveChanges(); + return client.GetViewModel; + } + + public ClientViewModel? GetElement(ClientSearchModel model) + { + if (string.IsNullOrEmpty(model.Email) && !model.Id.HasValue) { return null; } + using var context = new SushiBarDatabase(); + return context.Clients.FirstOrDefault(x => (!(string.IsNullOrEmpty(model.Email)) && model.Email == x.Email) || (model.Id.HasValue && model.Id == x.Id))?.GetViewModel; + } + + public List GetFilteredList(ClientSearchModel model) + { + if (string.IsNullOrEmpty(model.Email)) { return new(); } + using var context = new SushiBarDatabase(); + return context.Clients.Where(x => x.Email.Equals(model.Email)).Select(x => x.GetViewModel).ToList(); + } + + public List GetFullList() + { + using var context = new SushiBarDatabase(); + return context.Clients.Select(x => x.GetViewModel).ToList(); + } + } +} diff --git a/SushiBarDatabaseImplement/Implements/OrderStorage.cs b/SushiBarDatabaseImplement/Implements/OrderStorage.cs index e9e648f..e0fbe3c 100644 --- a/SushiBarDatabaseImplement/Implements/OrderStorage.cs +++ b/SushiBarDatabaseImplement/Implements/OrderStorage.cs @@ -17,13 +17,15 @@ namespace SushiBarDatabaseImplement.Implements public List GetFilteredList(OrderSearchModel model) { - if (!model.Id.HasValue && !model.DateTo.HasValue && !model.DateFrom.HasValue) + if (!model.Id.HasValue && !model.DateTo.HasValue && !model.DateFrom.HasValue && !model.ClientId.HasValue) { return new(); } using var context = new SushiBarDatabase(); if (model.Id.HasValue) return context.Orders.Where(x => x.Id == model.Id).Select(x => AccessViewModel(x.GetViewModel)).ToList(); + if (model.ClientId.HasValue) + return context.Orders.Where(x => x.ClientId == model.ClientId).Select(x => AccessViewModel(x.GetViewModel)).ToList(); else return context.Orders.Where(x => x.DateCreate >= model.DateFrom).Where(x => x.DateCreate <= model.DateTo).Select(x => AccessViewModel(x.GetViewModel)).ToList(); } @@ -73,13 +75,26 @@ namespace SushiBarDatabaseImplement.Implements { using var context = new SushiBarDatabase(); - var sushi = context.Sushis.FirstOrDefault(x => x.Id == viewModel.SushiId); if (viewModel != null) { - viewModel.SushiName = sushi!.SushiName; - return viewModel; - } + foreach (var sushi in context.Sushis) + { + if(sushi.Id == viewModel.Id) + { + viewModel.SushiName = sushi.SushiName; + break; + } + } + foreach (var client in context.Clients) + { + if(client.Id == viewModel.ClientId) + { + viewModel.ClientFIO = client.ClientFIO; + return viewModel; + } + } + } return null; } } diff --git a/SushiBarDatabaseImplement/Migrations/20240310073215_InitCreate.cs b/SushiBarDatabaseImplement/Migrations/20240310073215_InitCreate.cs index 6c95139..d895b47 100644 --- a/SushiBarDatabaseImplement/Migrations/20240310073215_InitCreate.cs +++ b/SushiBarDatabaseImplement/Migrations/20240310073215_InitCreate.cs @@ -11,6 +11,8 @@ namespace SushiBarDatabaseImplement.Migrations /// protected override void Up(MigrationBuilder migrationBuilder) { + + migrationBuilder.CreateTable( name: "Components", columns: table => new diff --git a/SushiBarDatabaseImplement/Migrations/20240405210111_migrationLab5.Designer.cs b/SushiBarDatabaseImplement/Migrations/20240405210111_migrationLab5.Designer.cs new file mode 100644 index 0000000..fc27124 --- /dev/null +++ b/SushiBarDatabaseImplement/Migrations/20240405210111_migrationLab5.Designer.cs @@ -0,0 +1,210 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using SushiBarDatabaseImplement; + +#nullable disable + +namespace SushiBarDatabaseImplement.Migrations +{ + [DbContext(typeof(SushiBarDatabase))] + [Migration("20240405210111_migrationLab5")] + partial class migrationLab5 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "8.0.2") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("SushiBarDatabaseImplement.Models.Client", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ClientFIO") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Email") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Password") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Clients"); + }); + + modelBuilder.Entity("SushiBarDatabaseImplement.Models.Component", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ComponentName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Cost") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.ToTable("Components"); + }); + + modelBuilder.Entity("SushiBarDatabaseImplement.Models.Order", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ClientId") + .HasColumnType("int"); + + b.Property("Count") + .HasColumnType("int"); + + b.Property("DateCreate") + .HasColumnType("datetime2"); + + b.Property("DateImplement") + .HasColumnType("datetime2"); + + b.Property("Status") + .HasColumnType("int"); + + b.Property("Sum") + .HasColumnType("float"); + + b.Property("SushiId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("ClientId"); + + b.HasIndex("SushiId"); + + b.ToTable("Orders"); + }); + + modelBuilder.Entity("SushiBarDatabaseImplement.Models.Sushi", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Price") + .HasColumnType("float"); + + b.Property("SushiName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Sushis"); + }); + + modelBuilder.Entity("SushiBarDatabaseImplement.Models.SushiComponent", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ComponentId") + .HasColumnType("int"); + + b.Property("Count") + .HasColumnType("int"); + + b.Property("SushiId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("ComponentId"); + + b.HasIndex("SushiId"); + + b.ToTable("SushiComponents"); + }); + + modelBuilder.Entity("SushiBarDatabaseImplement.Models.Order", b => + { + b.HasOne("SushiBarDatabaseImplement.Models.Client", null) + .WithMany("Orders") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("SushiBarDatabaseImplement.Models.Sushi", null) + .WithMany("Orders") + .HasForeignKey("SushiId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("SushiBarDatabaseImplement.Models.SushiComponent", b => + { + b.HasOne("SushiBarDatabaseImplement.Models.Component", "Component") + .WithMany("SushiComponents") + .HasForeignKey("ComponentId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("SushiBarDatabaseImplement.Models.Sushi", "Sushi") + .WithMany("Components") + .HasForeignKey("SushiId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Component"); + + b.Navigation("Sushi"); + }); + + modelBuilder.Entity("SushiBarDatabaseImplement.Models.Client", b => + { + b.Navigation("Orders"); + }); + + modelBuilder.Entity("SushiBarDatabaseImplement.Models.Component", b => + { + b.Navigation("SushiComponents"); + }); + + modelBuilder.Entity("SushiBarDatabaseImplement.Models.Sushi", b => + { + b.Navigation("Components"); + + b.Navigation("Orders"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/SushiBarDatabaseImplement/Migrations/20240405210111_migrationLab5.cs b/SushiBarDatabaseImplement/Migrations/20240405210111_migrationLab5.cs new file mode 100644 index 0000000..f611c12 --- /dev/null +++ b/SushiBarDatabaseImplement/Migrations/20240405210111_migrationLab5.cs @@ -0,0 +1,22 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace SushiBarDatabaseImplement.Migrations +{ + /// + public partial class migrationLab5 : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} diff --git a/SushiBarDatabaseImplement/Migrations/SushiBarDatabaseModelSnapshot.cs b/SushiBarDatabaseImplement/Migrations/SushiBarDatabaseModelSnapshot.cs index e8ebc24..a93fbc9 100644 --- a/SushiBarDatabaseImplement/Migrations/SushiBarDatabaseModelSnapshot.cs +++ b/SushiBarDatabaseImplement/Migrations/SushiBarDatabaseModelSnapshot.cs @@ -22,6 +22,31 @@ namespace SushiBarDatabaseImplement.Migrations SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + modelBuilder.Entity("SushiBarDatabaseImplement.Models.Client", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ClientFIO") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Email") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Password") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Clients"); + }); + modelBuilder.Entity("SushiBarDatabaseImplement.Models.Component", b => { b.Property("Id") @@ -50,6 +75,9 @@ namespace SushiBarDatabaseImplement.Migrations SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + b.Property("ClientId") + .HasColumnType("int"); + b.Property("Count") .HasColumnType("int"); @@ -70,6 +98,8 @@ namespace SushiBarDatabaseImplement.Migrations b.HasKey("Id"); + b.HasIndex("ClientId"); + b.HasIndex("SushiId"); b.ToTable("Orders"); @@ -123,6 +153,12 @@ namespace SushiBarDatabaseImplement.Migrations modelBuilder.Entity("SushiBarDatabaseImplement.Models.Order", b => { + b.HasOne("SushiBarDatabaseImplement.Models.Client", null) + .WithMany("Orders") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + b.HasOne("SushiBarDatabaseImplement.Models.Sushi", null) .WithMany("Orders") .HasForeignKey("SushiId") @@ -149,6 +185,11 @@ namespace SushiBarDatabaseImplement.Migrations b.Navigation("Sushi"); }); + modelBuilder.Entity("SushiBarDatabaseImplement.Models.Client", b => + { + b.Navigation("Orders"); + }); + modelBuilder.Entity("SushiBarDatabaseImplement.Models.Component", b => { b.Navigation("SushiComponents"); diff --git a/SushiBarDatabaseImplement/Models/Client.cs b/SushiBarDatabaseImplement/Models/Client.cs new file mode 100644 index 0000000..96a7c65 --- /dev/null +++ b/SushiBarDatabaseImplement/Models/Client.cs @@ -0,0 +1,61 @@ +using SushiBarContracts.BindingModel; +using SushiBarContracts.ViewModels; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations.Schema; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using SushiBarDataModels; + +namespace SushiBarDatabaseImplement.Models +{ + public class Client : IClientModel + { + public int Id { get; private set; } + [Required] + public string ClientFIO { get; private set; } = string.Empty; + + [Required] + public string Email { get; private set; } = string.Empty; + + [Required] + public string Password { get; private set; } = string.Empty; + [Required] + + [ForeignKey("ClientId")] + public virtual List Orders { 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() + { + Id = Id, + ClientFIO = ClientFIO, + Email = Email, + Password = Password + }; + } +} diff --git a/SushiBarDatabaseImplement/Models/Order.cs b/SushiBarDatabaseImplement/Models/Order.cs index 21d251d..967457b 100644 --- a/SushiBarDatabaseImplement/Models/Order.cs +++ b/SushiBarDatabaseImplement/Models/Order.cs @@ -12,6 +12,8 @@ namespace SushiBarDatabaseImplement.Models [Required] public int SushiId { get; set; } [Required] + public int ClientId { get; set; } + [Required] public int Count { get; set; } [Required] public double Sum { get; set; } @@ -35,7 +37,8 @@ namespace SushiBarDatabaseImplement.Models Sum = model.Sum, Status = model.Status, DateCreate = model.DateCreate, - DateImplement = model.DateImplement + DateImplement = model.DateImplement, + ClientId = model.ClientId }; } @@ -57,6 +60,7 @@ namespace SushiBarDatabaseImplement.Models Status = Status, DateCreate = DateCreate, DateImplement = DateImplement, + ClientId = ClientId }; } } diff --git a/SushiBarDatabaseImplement/SushiBarDatabase.cs b/SushiBarDatabaseImplement/SushiBarDatabase.cs index 013642e..60b3956 100644 --- a/SushiBarDatabaseImplement/SushiBarDatabase.cs +++ b/SushiBarDatabaseImplement/SushiBarDatabase.cs @@ -24,5 +24,6 @@ namespace SushiBarDatabaseImplement public virtual DbSet Sushis { set; get; } public virtual DbSet SushiComponents { set; get; } public virtual DbSet Orders { set; get; } + public virtual DbSet Clients { set; get; } } }