From a9e52b199b0661b85ca0c7e1318c30742a1168bd Mon Sep 17 00:00:00 2001 From: Sergey Chebotar Date: Tue, 31 Jan 2023 15:55:44 +0300 Subject: [PATCH] Database init --- .gitignore | 8 ++- Migrations/20230131125316_Init.Designer.cs | 79 ++++++++++++++++++++++ Migrations/20230131125316_Init.cs | 63 +++++++++++++++++ Migrations/DataContextModelSnapshot.cs | 76 +++++++++++++++++++++ Models/DataContext.cs | 21 ++++++ Models/Figure.cs | 8 +++ Models/SeedData.cs | 56 +++++++++++++++ Models/UnderwearBundle.cs | 11 +++ Program.cs | 13 ++++ appsettings.json | 5 +- 10 files changed, 338 insertions(+), 2 deletions(-) create mode 100644 Migrations/20230131125316_Init.Designer.cs create mode 100644 Migrations/20230131125316_Init.cs create mode 100644 Migrations/DataContextModelSnapshot.cs create mode 100644 Models/DataContext.cs create mode 100644 Models/Figure.cs create mode 100644 Models/SeedData.cs create mode 100644 Models/UnderwearBundle.cs diff --git a/.gitignore b/.gitignore index c53280b..f4816c1 100644 --- a/.gitignore +++ b/.gitignore @@ -454,4 +454,10 @@ $RECYCLE.BIN/ !.vscode/extensions.json # libman libraries -wwwroot/lib/* \ No newline at end of file +wwwroot/lib/* + +# database image content +wwwroot/content/* + +# database file +Database/MyDarlingDb.db \ No newline at end of file diff --git a/Migrations/20230131125316_Init.Designer.cs b/Migrations/20230131125316_Init.Designer.cs new file mode 100644 index 0000000..5bfcf94 --- /dev/null +++ b/Migrations/20230131125316_Init.Designer.cs @@ -0,0 +1,79 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using MyDarling.Models; + +#nullable disable + +namespace MyDarling.Migrations +{ + [DbContext(typeof(DataContext))] + [Migration("20230131125316_Init")] + partial class Init + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "7.0.2"); + + modelBuilder.Entity("MyDarling.Models.Figure", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("FilePath") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("UnderwearBundleId") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("UnderwearBundleId"); + + b.ToTable("Figures"); + }); + + modelBuilder.Entity("MyDarling.Models.UnderwearBundle", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("Description") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Price") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.ToTable("UnderwearBundles"); + }); + + modelBuilder.Entity("MyDarling.Models.Figure", b => + { + b.HasOne("MyDarling.Models.UnderwearBundle", null) + .WithMany("Figures") + .HasForeignKey("UnderwearBundleId"); + }); + + modelBuilder.Entity("MyDarling.Models.UnderwearBundle", b => + { + b.Navigation("Figures"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Migrations/20230131125316_Init.cs b/Migrations/20230131125316_Init.cs new file mode 100644 index 0000000..fe709a8 --- /dev/null +++ b/Migrations/20230131125316_Init.cs @@ -0,0 +1,63 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace MyDarling.Migrations +{ + /// + public partial class Init : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "UnderwearBundles", + columns: table => new + { + Id = table.Column(type: "INTEGER", nullable: false) + .Annotation("Sqlite:Autoincrement", true), + Name = table.Column(type: "TEXT", nullable: false), + Description = table.Column(type: "TEXT", nullable: false), + Price = table.Column(type: "TEXT", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_UnderwearBundles", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "Figures", + columns: table => new + { + Id = table.Column(type: "INTEGER", nullable: false) + .Annotation("Sqlite:Autoincrement", true), + FilePath = table.Column(type: "TEXT", nullable: false), + UnderwearBundleId = table.Column(type: "INTEGER", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Figures", x => x.Id); + table.ForeignKey( + name: "FK_Figures_UnderwearBundles_UnderwearBundleId", + column: x => x.UnderwearBundleId, + principalTable: "UnderwearBundles", + principalColumn: "Id"); + }); + + migrationBuilder.CreateIndex( + name: "IX_Figures_UnderwearBundleId", + table: "Figures", + column: "UnderwearBundleId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "Figures"); + + migrationBuilder.DropTable( + name: "UnderwearBundles"); + } + } +} diff --git a/Migrations/DataContextModelSnapshot.cs b/Migrations/DataContextModelSnapshot.cs new file mode 100644 index 0000000..bff1af3 --- /dev/null +++ b/Migrations/DataContextModelSnapshot.cs @@ -0,0 +1,76 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using MyDarling.Models; + +#nullable disable + +namespace MyDarling.Migrations +{ + [DbContext(typeof(DataContext))] + partial class DataContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "7.0.2"); + + modelBuilder.Entity("MyDarling.Models.Figure", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("FilePath") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("UnderwearBundleId") + .HasColumnType("INTEGER"); + + b.HasKey("Id"); + + b.HasIndex("UnderwearBundleId"); + + b.ToTable("Figures"); + }); + + modelBuilder.Entity("MyDarling.Models.UnderwearBundle", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("Description") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Price") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.ToTable("UnderwearBundles"); + }); + + modelBuilder.Entity("MyDarling.Models.Figure", b => + { + b.HasOne("MyDarling.Models.UnderwearBundle", null) + .WithMany("Figures") + .HasForeignKey("UnderwearBundleId"); + }); + + modelBuilder.Entity("MyDarling.Models.UnderwearBundle", b => + { + b.Navigation("Figures"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Models/DataContext.cs b/Models/DataContext.cs new file mode 100644 index 0000000..50adf12 --- /dev/null +++ b/Models/DataContext.cs @@ -0,0 +1,21 @@ +using Microsoft.EntityFrameworkCore; + +namespace MyDarling.Models +{ + public class DataContext : DbContext + { + protected readonly IConfiguration configuration; + public DataContext(IConfiguration configuration) + { + this.configuration = configuration; + } + + protected override void OnConfiguring(DbContextOptionsBuilder opts) + { + opts.UseSqlite(configuration.GetConnectionString("MyDarlingDb")); + } + + public DbSet UnderwearBundles => Set(); + public DbSet
Figures => Set
(); + } +} \ No newline at end of file diff --git a/Models/Figure.cs b/Models/Figure.cs new file mode 100644 index 0000000..7ac5b5f --- /dev/null +++ b/Models/Figure.cs @@ -0,0 +1,8 @@ +namespace MyDarling.Models +{ + public class Figure + { + public int Id { get; set; } + public string FilePath { get; set; } = string.Empty; + } +} \ No newline at end of file diff --git a/Models/SeedData.cs b/Models/SeedData.cs new file mode 100644 index 0000000..1f0ff76 --- /dev/null +++ b/Models/SeedData.cs @@ -0,0 +1,56 @@ +using Microsoft.EntityFrameworkCore; +namespace MyDarling.Models +{ + public static class SeedData + { + public static void SeedDatabase(DataContext context) + { + context.Database.Migrate(); + if (context.UnderwearBundles.Count() == 0) + { + var alice = new UnderwearBundle + { + Name = "Alice", + Figures = new List
+ { + new Figure() + { + FilePath = "/content/0/img/IMG_4896.JPG" + }, + new Figure() + { + FilePath = "/content/0/img/IMG_4902.JPG" + } + }, + Description = @"Комплект из бежевого эластичного кружева с голубой отделкой. + В комплект входит бра, 2 трусиков (на высокой посадке и стандартной на регуляции) и чокер. + Низ можно сделать на выбор стринги/бразильянки.", + Price = 3000 + }; + + var nikki = new UnderwearBundle + { + Name = "Nikki", + Figures = new List
+ { + new Figure() + { + FilePath = "/content/1/img/IMG_4897.JPG" + }, + new Figure() + { + FilePath = "/content/1/img/IMG_4898.JPG" + } + }, + Description = @"Базовый сет из мягкой эластичной сетки. + В комплект входит лиф на косточках и 2 трусиков – бразильянки на высокой посадке и стринги на стандартной посадке с регуляцией. + Доступен в цветах: желтый, черный, бежевый молочный.", + Price = 3800 + }; + + context.UnderwearBundles.AddRange(alice, nikki); + context.SaveChanges(); + } + } + } +} \ No newline at end of file diff --git a/Models/UnderwearBundle.cs b/Models/UnderwearBundle.cs new file mode 100644 index 0000000..5617b07 --- /dev/null +++ b/Models/UnderwearBundle.cs @@ -0,0 +1,11 @@ +namespace MyDarling.Models +{ + public class UnderwearBundle + { + public int Id { get; set; } + public string Name { get; set; } = "My Darling Bundle"; + public ICollection
Figures { get; set; } = new List
(); + public string Description { get; set; } = string.Empty; + public decimal Price { get; set; } + } +} \ No newline at end of file diff --git a/Program.cs b/Program.cs index 8f6a7b7..91c4c5d 100644 --- a/Program.cs +++ b/Program.cs @@ -1,9 +1,22 @@ +using Microsoft.EntityFrameworkCore; +using MyDarling.Models; + var builder = WebApplication.CreateBuilder(args); + +builder.Services.AddDbContext(opts => +{ + opts.UseSqlite(builder.Configuration["ConnectionStrings:MyDarlingDb"]); + opts.EnableSensitiveDataLogging(true); +}); builder.Services.AddControllersWithViews(); + var app = builder.Build(); app.UseStaticFiles(); app.MapControllers(); app.MapDefaultControllerRoute(); +var context = app.Services.CreateScope().ServiceProvider.GetRequiredService(); + + app.Run(); \ No newline at end of file diff --git a/appsettings.json b/appsettings.json index 10f68b8..6f63f2f 100644 --- a/appsettings.json +++ b/appsettings.json @@ -5,5 +5,8 @@ "Microsoft.AspNetCore": "Warning" } }, - "AllowedHosts": "*" + "AllowedHosts": "*", + "ConnectionStrings": { + "MyDarlingDb": "Data Source=Database/MyDarlingDb.db" + } }