Datenstruktur angepasst

This commit is contained in:
BuildTools 2024-05-25 20:19:37 +02:00
parent 89f5d51580
commit 205fb71316
15 changed files with 673 additions and 686 deletions

View File

@ -0,0 +1,22 @@
using System.ComponentModel.DataAnnotations.Schema;
namespace songrequests_blazor.Data
{
public class Library
{
public int Id { get; set; }
public string Name { get; set; } = null!;
public List<Song>? Songs { get; set; }
public LibraryType Type { get; set; }
[Column("Sessions_ID")]
public virtual List<Session>? UsedInSessions { get; set; }
public enum LibraryType
{
Local,
Spotify
}
}
}

View File

@ -9,7 +9,8 @@ namespace songrequests_blazor.Data
public DbSet<Song> Songs { get; set; }
public DbSet<Session> Sessions { get; set; }
public DbSet<QueuedSong> QueuedSongs { get; set; }
public DbSet<QueuedSong> QueuedSongs { get; set; }
public DbSet<Library> Libraries { get; set; }
public LocalDbContext(DbContextOptions<LocalDbContext> options) : base(options)
{ }
@ -20,6 +21,61 @@ namespace songrequests_blazor.Data
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
// // Foreign Keys und dazugehörige Indizes (aus anderem Beispiel, daher andere Klassen- und Spaltennamen)
// entity.HasIndex(e => e.MAC_ID, "FK_MAC_ID_idx");
// entity.HasOne(d => d.Machine).WithMany(p => p.Logs).HasForeignKey(d => d.MAC_ID).HasConstraintName("FK_log_machine");
modelBuilder.Entity<Library>(entity =>
{
entity.HasMany(l => l.Songs).WithOne(s => s.Library).HasForeignKey(s => s.Library_ID).HasConstraintName("FK_library_songs");
//entity.HasMany(l => l.UsedInSessions).WithMany(s => s.EnabledLibraries).UsingEntity("Sessions_Libraries");
});
modelBuilder.Entity<QueuedSong>(entity =>
{
entity.HasOne(qs => qs.Song).WithMany(s => s.Queued).HasForeignKey(s => s.Song_ID).HasConstraintName("FK_queuedsongs_song");
entity.HasMany(qs => qs.UserVotes).WithMany(u => u.VotedSongs).UsingEntity("QueuedSongs_UserVotes");
entity.HasOne(qs => qs.AdddedBy).WithMany(u => u.AddedSongs).HasForeignKey(qs => qs.AddedBy_User_ID).HasConstraintName("FK_user_addedsongs");
});
modelBuilder.Entity<Session>(entity =>
{
entity.HasMany(ses => ses.EnabledLibraries).WithMany(l => l.UsedInSessions).UsingEntity("Sessions_Libraries");
entity.HasMany(ses => ses.QueuedSongs).WithOne(qs => qs.Session).HasForeignKey(qs => qs.Session_ID).HasConstraintName("FK_Session_QueuedSongs");
});
string AdminRoleGUID = "fc985a25-19ce-48ed-8443-c845f550960a";
string AdminUserGUID = "5c2511d0-6a08-4950-babd-d107996749ba";
modelBuilder.Entity<IdentityRole>().HasData(
new IdentityRole { Id = AdminRoleGUID, Name = "Administrator", NormalizedName = "ADMINISTRATOR".ToUpper() }
);
var hasher = new PasswordHasher<IdentityUser>();
var AdminUser = new IdentityUser()
{
Id = AdminUserGUID, // primary key
UserName = "admin@admin.com",
NormalizedUserName = "ADMIN@ADMIN.COM",
Email = "admin@admin.com",
NormalizedEmail = "ADMIN@ADMIN.COM"
};
AdminUser.PasswordHash = hasher.HashPassword(AdminUser, "admin");
modelBuilder.Entity<IdentityUser>().HasData(AdminUser);
modelBuilder.Entity<IdentityUserRole<string>>().HasData(
new IdentityUserRole<string>
{
RoleId = AdminRoleGUID,
UserId = AdminUserGUID
}
);
// Erweitertes definieren des Datenbankmodells (falls benötigt):
//modelBuilder.Entity<Song>(entity =>
//{

View File

@ -4,10 +4,17 @@
{
public int Id { get; set; }
public int Position { get; set; }
public int Song_ID { get; set; }
public Song Song { get; set; } = null!;
public DateTime Added { get; set; }
public DateTime Played { get; set; }
public string? AddedBy_User_ID { get; set; }
public User? AdddedBy { get; set; }
public DateTime Added { get; set; } = DateTime.Now;
public DateTime? Played { get; set; }
public List<User>? UserVotes { get; set; }
public int Session_ID { get; set; }
public virtual Session Session { get; set; } = null!;
}
}

View File

@ -5,7 +5,10 @@
public int Id { get; set; }
public string? SessionCode { get; set; }
public List<QueuedSong> Queue { get; set; } = null!;
public DateTime Created { get; set; }
public bool Active { get; set; }
public List<Library> EnabledLibraries { get; set; } = null!;
public List<QueuedSong> QueuedSongs { get; set; } = null!;
public DateTime Created { get; set; } = DateTime.Now;
}
}

View File

@ -7,6 +7,7 @@ namespace songrequests_blazor.Data
public class Song
{
public int Id { get; set; }
public string Uri { get; set; } = null!;
// Tag-Parameter
public string Title { get; set; } = null!;
@ -16,19 +17,14 @@ namespace songrequests_blazor.Data
public string? Genre { get; set; }
public TimeSpan Length { get; set; }
// File-Parameter
public SourceType Source { get; set; }
public string SourceUri { get; set; } = null!;
// Statistics
public int RequestCount { get; set; }
public enum SourceType
{
LocalFile,
Spotify
}
public int Library_ID { get; set; }
public virtual Library Library { get; set; } = null!;
public virtual List<QueuedSong>? Queued { get; set; }
}
}

View File

@ -5,5 +5,6 @@ namespace songrequests_blazor.Data
public class User : IdentityUser
{
public List<QueuedSong>? VotedSongs { get; set; }
public List<QueuedSong>? AddedSongs { get; set; }
}
}

View File

@ -1,408 +0,0 @@
// <auto-generated />
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using songrequests_blazor.Data;
#nullable disable
namespace songrequests_blazor.Migrations
{
[DbContext(typeof(LocalDbContext))]
[Migration("20240523182804_AddedQueueData")]
partial class AddedQueueData
{
/// <inheritdoc />
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder.HasAnnotation("ProductVersion", "8.0.5");
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b =>
{
b.Property<string>("Id")
.HasColumnType("TEXT");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasColumnType("TEXT");
b.Property<string>("Name")
.HasMaxLength(256)
.HasColumnType("TEXT");
b.Property<string>("NormalizedName")
.HasMaxLength(256)
.HasColumnType("TEXT");
b.HasKey("Id");
b.HasIndex("NormalizedName")
.IsUnique()
.HasDatabaseName("RoleNameIndex");
b.ToTable("AspNetRoles", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("INTEGER");
b.Property<string>("ClaimType")
.HasColumnType("TEXT");
b.Property<string>("ClaimValue")
.HasColumnType("TEXT");
b.Property<string>("RoleId")
.IsRequired()
.HasColumnType("TEXT");
b.HasKey("Id");
b.HasIndex("RoleId");
b.ToTable("AspNetRoleClaims", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUser", b =>
{
b.Property<string>("Id")
.HasColumnType("TEXT");
b.Property<int>("AccessFailedCount")
.HasColumnType("INTEGER");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasColumnType("TEXT");
b.Property<string>("Discriminator")
.IsRequired()
.HasMaxLength(13)
.HasColumnType("TEXT");
b.Property<string>("Email")
.HasMaxLength(256)
.HasColumnType("TEXT");
b.Property<bool>("EmailConfirmed")
.HasColumnType("INTEGER");
b.Property<bool>("LockoutEnabled")
.HasColumnType("INTEGER");
b.Property<DateTimeOffset?>("LockoutEnd")
.HasColumnType("TEXT");
b.Property<string>("NormalizedEmail")
.HasMaxLength(256)
.HasColumnType("TEXT");
b.Property<string>("NormalizedUserName")
.HasMaxLength(256)
.HasColumnType("TEXT");
b.Property<string>("PasswordHash")
.HasColumnType("TEXT");
b.Property<string>("PhoneNumber")
.HasColumnType("TEXT");
b.Property<bool>("PhoneNumberConfirmed")
.HasColumnType("INTEGER");
b.Property<string>("SecurityStamp")
.HasColumnType("TEXT");
b.Property<bool>("TwoFactorEnabled")
.HasColumnType("INTEGER");
b.Property<string>("UserName")
.HasMaxLength(256)
.HasColumnType("TEXT");
b.HasKey("Id");
b.HasIndex("NormalizedEmail")
.HasDatabaseName("EmailIndex");
b.HasIndex("NormalizedUserName")
.IsUnique()
.HasDatabaseName("UserNameIndex");
b.ToTable("AspNetUsers", (string)null);
b.HasDiscriminator<string>("Discriminator").HasValue("IdentityUser");
b.UseTphMappingStrategy();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("INTEGER");
b.Property<string>("ClaimType")
.HasColumnType("TEXT");
b.Property<string>("ClaimValue")
.HasColumnType("TEXT");
b.Property<string>("UserId")
.IsRequired()
.HasColumnType("TEXT");
b.HasKey("Id");
b.HasIndex("UserId");
b.ToTable("AspNetUserClaims", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
{
b.Property<string>("LoginProvider")
.HasColumnType("TEXT");
b.Property<string>("ProviderKey")
.HasColumnType("TEXT");
b.Property<string>("ProviderDisplayName")
.HasColumnType("TEXT");
b.Property<string>("UserId")
.IsRequired()
.HasColumnType("TEXT");
b.HasKey("LoginProvider", "ProviderKey");
b.HasIndex("UserId");
b.ToTable("AspNetUserLogins", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
{
b.Property<string>("UserId")
.HasColumnType("TEXT");
b.Property<string>("RoleId")
.HasColumnType("TEXT");
b.HasKey("UserId", "RoleId");
b.HasIndex("RoleId");
b.ToTable("AspNetUserRoles", (string)null);
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
{
b.Property<string>("UserId")
.HasColumnType("TEXT");
b.Property<string>("LoginProvider")
.HasColumnType("TEXT");
b.Property<string>("Name")
.HasColumnType("TEXT");
b.Property<string>("Value")
.HasColumnType("TEXT");
b.HasKey("UserId", "LoginProvider", "Name");
b.ToTable("AspNetUserTokens", (string)null);
});
modelBuilder.Entity("songrequests_blazor.Data.QueuedSong", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("INTEGER");
b.Property<DateTime>("Added")
.HasColumnType("TEXT");
b.Property<DateTime>("Played")
.HasColumnType("TEXT");
b.Property<int>("Position")
.HasColumnType("INTEGER");
b.Property<int?>("SessionId")
.HasColumnType("INTEGER");
b.Property<int>("SongId")
.HasColumnType("INTEGER");
b.HasKey("Id");
b.HasIndex("SessionId");
b.HasIndex("SongId");
b.ToTable("QueuedSongs");
});
modelBuilder.Entity("songrequests_blazor.Data.Session", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("INTEGER");
b.Property<DateTime>("Created")
.HasColumnType("TEXT");
b.Property<string>("SessionCode")
.HasColumnType("TEXT");
b.HasKey("Id");
b.ToTable("Sessions");
});
modelBuilder.Entity("songrequests_blazor.Data.Song", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("INTEGER");
b.Property<string>("Album")
.HasColumnType("TEXT");
b.Property<string>("Artist")
.HasColumnType("TEXT");
b.Property<string>("Genre")
.HasColumnType("TEXT");
b.Property<TimeSpan>("Length")
.HasColumnType("TEXT");
b.Property<int>("RequestCount")
.HasColumnType("INTEGER");
b.Property<int>("Source")
.HasColumnType("INTEGER");
b.Property<string>("SourceUri")
.IsRequired()
.HasColumnType("TEXT");
b.Property<string>("Title")
.IsRequired()
.HasColumnType("TEXT");
b.Property<int?>("Year")
.HasColumnType("INTEGER");
b.HasKey("Id");
b.ToTable("Songs");
});
modelBuilder.Entity("songrequests_blazor.Data.User", b =>
{
b.HasBaseType("Microsoft.AspNetCore.Identity.IdentityUser");
b.Property<int?>("QueuedSongId")
.HasColumnType("INTEGER");
b.HasIndex("QueuedSongId");
b.HasDiscriminator().HasValue("User");
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
.WithMany()
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
.WithMany()
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
{
b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null)
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("songrequests_blazor.Data.QueuedSong", b =>
{
b.HasOne("songrequests_blazor.Data.Session", null)
.WithMany("Queue")
.HasForeignKey("SessionId");
b.HasOne("songrequests_blazor.Data.Song", "Song")
.WithMany()
.HasForeignKey("SongId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Song");
});
modelBuilder.Entity("songrequests_blazor.Data.User", b =>
{
b.HasOne("songrequests_blazor.Data.QueuedSong", null)
.WithMany("Votes")
.HasForeignKey("QueuedSongId");
});
modelBuilder.Entity("songrequests_blazor.Data.QueuedSong", b =>
{
b.Navigation("Votes");
});
modelBuilder.Entity("songrequests_blazor.Data.Session", b =>
{
b.Navigation("Queue");
});
#pragma warning restore 612, 618
}
}
}

View File

@ -1,130 +0,0 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace songrequests_blazor.Migrations
{
/// <inheritdoc />
public partial class AddedQueueData : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<int>(
name: "RequestCount",
table: "Songs",
type: "INTEGER",
nullable: false,
defaultValue: 0);
migrationBuilder.AddColumn<string>(
name: "Discriminator",
table: "AspNetUsers",
type: "TEXT",
maxLength: 13,
nullable: false,
defaultValue: "");
migrationBuilder.AddColumn<int>(
name: "QueuedSongId",
table: "AspNetUsers",
type: "INTEGER",
nullable: true);
migrationBuilder.CreateTable(
name: "Sessions",
columns: table => new
{
Id = table.Column<int>(type: "INTEGER", nullable: false)
.Annotation("Sqlite:Autoincrement", true),
SessionCode = table.Column<string>(type: "TEXT", nullable: true),
Created = table.Column<DateTime>(type: "TEXT", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Sessions", x => x.Id);
});
migrationBuilder.CreateTable(
name: "QueuedSongs",
columns: table => new
{
Id = table.Column<int>(type: "INTEGER", nullable: false)
.Annotation("Sqlite:Autoincrement", true),
Position = table.Column<int>(type: "INTEGER", nullable: false),
SongId = table.Column<int>(type: "INTEGER", nullable: false),
Added = table.Column<DateTime>(type: "TEXT", nullable: false),
Played = table.Column<DateTime>(type: "TEXT", nullable: false),
SessionId = table.Column<int>(type: "INTEGER", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_QueuedSongs", x => x.Id);
table.ForeignKey(
name: "FK_QueuedSongs_Sessions_SessionId",
column: x => x.SessionId,
principalTable: "Sessions",
principalColumn: "Id");
table.ForeignKey(
name: "FK_QueuedSongs_Songs_SongId",
column: x => x.SongId,
principalTable: "Songs",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateIndex(
name: "IX_AspNetUsers_QueuedSongId",
table: "AspNetUsers",
column: "QueuedSongId");
migrationBuilder.CreateIndex(
name: "IX_QueuedSongs_SessionId",
table: "QueuedSongs",
column: "SessionId");
migrationBuilder.CreateIndex(
name: "IX_QueuedSongs_SongId",
table: "QueuedSongs",
column: "SongId");
migrationBuilder.AddForeignKey(
name: "FK_AspNetUsers_QueuedSongs_QueuedSongId",
table: "AspNetUsers",
column: "QueuedSongId",
principalTable: "QueuedSongs",
principalColumn: "Id");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_AspNetUsers_QueuedSongs_QueuedSongId",
table: "AspNetUsers");
migrationBuilder.DropTable(
name: "QueuedSongs");
migrationBuilder.DropTable(
name: "Sessions");
migrationBuilder.DropIndex(
name: "IX_AspNetUsers_QueuedSongId",
table: "AspNetUsers");
migrationBuilder.DropColumn(
name: "RequestCount",
table: "Songs");
migrationBuilder.DropColumn(
name: "Discriminator",
table: "AspNetUsers");
migrationBuilder.DropColumn(
name: "QueuedSongId",
table: "AspNetUsers");
}
}
}

View File

@ -1,80 +0,0 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace songrequests_blazor.Migrations
{
/// <inheritdoc />
public partial class CorrectedUserVotesRelation : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_AspNetUsers_QueuedSongs_QueuedSongId",
table: "AspNetUsers");
migrationBuilder.DropIndex(
name: "IX_AspNetUsers_QueuedSongId",
table: "AspNetUsers");
migrationBuilder.DropColumn(
name: "QueuedSongId",
table: "AspNetUsers");
migrationBuilder.CreateTable(
name: "QueuedSongUser",
columns: table => new
{
VotedSongsId = table.Column<int>(type: "INTEGER", nullable: false),
VotesId = table.Column<string>(type: "TEXT", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_QueuedSongUser", x => new { x.VotedSongsId, x.VotesId });
table.ForeignKey(
name: "FK_QueuedSongUser_AspNetUsers_VotesId",
column: x => x.VotesId,
principalTable: "AspNetUsers",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_QueuedSongUser_QueuedSongs_VotedSongsId",
column: x => x.VotedSongsId,
principalTable: "QueuedSongs",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateIndex(
name: "IX_QueuedSongUser_VotesId",
table: "QueuedSongUser",
column: "VotesId");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "QueuedSongUser");
migrationBuilder.AddColumn<int>(
name: "QueuedSongId",
table: "AspNetUsers",
type: "INTEGER",
nullable: true);
migrationBuilder.CreateIndex(
name: "IX_AspNetUsers_QueuedSongId",
table: "AspNetUsers",
column: "QueuedSongId");
migrationBuilder.AddForeignKey(
name: "FK_AspNetUsers_QueuedSongs_QueuedSongId",
table: "AspNetUsers",
column: "QueuedSongId",
principalTable: "QueuedSongs",
principalColumn: "Id");
}
}
}

View File

@ -11,8 +11,8 @@ using songrequests_blazor.Data;
namespace songrequests_blazor.Migrations
{
[DbContext(typeof(LocalDbContext))]
[Migration("20240523183306_CorrectedUserVotesRelation")]
partial class CorrectedUserVotesRelation
[Migration("20240525181342_AddQueueDataAndAdminUser")]
partial class AddQueueDataAndAdminUser
{
/// <inheritdoc />
protected override void BuildTargetModel(ModelBuilder modelBuilder)
@ -44,6 +44,14 @@ namespace songrequests_blazor.Migrations
.HasDatabaseName("RoleNameIndex");
b.ToTable("AspNetRoles", (string)null);
b.HasData(
new
{
Id = "fc985a25-19ce-48ed-8443-c845f550960a",
Name = "Administrator",
NormalizedName = "ADMINISTRATOR"
});
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
@ -140,6 +148,24 @@ namespace songrequests_blazor.Migrations
b.HasDiscriminator<string>("Discriminator").HasValue("IdentityUser");
b.UseTphMappingStrategy();
b.HasData(
new
{
Id = "5c2511d0-6a08-4950-babd-d107996749ba",
AccessFailedCount = 0,
ConcurrencyStamp = "828466b4-e932-48c2-9ac5-2d5a16bbbade",
Email = "admin@admin.com",
EmailConfirmed = false,
LockoutEnabled = false,
NormalizedEmail = "ADMIN@ADMIN.COM",
NormalizedUserName = "ADMIN@ADMIN.COM",
PasswordHash = "AQAAAAIAAYagAAAAEAHO/Ra7WSxWtOXx++pYevyMsD+Wt/8tsCfJtQ59NaWFxF7BztGzvgNrnblXuYOkww==",
PhoneNumberConfirmed = false,
SecurityStamp = "23975ce5-b515-4a6a-a6b7-2a5e6d8c943e",
TwoFactorEnabled = false,
UserName = "admin@admin.com"
});
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
@ -200,6 +226,13 @@ namespace songrequests_blazor.Migrations
b.HasIndex("RoleId");
b.ToTable("AspNetUserRoles", (string)null);
b.HasData(
new
{
UserId = "5c2511d0-6a08-4950-babd-d107996749ba",
RoleId = "fc985a25-19ce-48ed-8443-c845f550960a"
});
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
@ -221,19 +254,52 @@ namespace songrequests_blazor.Migrations
b.ToTable("AspNetUserTokens", (string)null);
});
modelBuilder.Entity("QueuedSongUser", b =>
modelBuilder.Entity("QueuedSongs_UserVotes", b =>
{
b.Property<string>("UserVotesId")
.HasColumnType("TEXT");
b.Property<int>("VotedSongsId")
.HasColumnType("INTEGER");
b.Property<string>("VotesId")
b.HasKey("UserVotesId", "VotedSongsId");
b.HasIndex("VotedSongsId");
b.ToTable("QueuedSongs_UserVotes");
});
modelBuilder.Entity("Sessions_Libraries", b =>
{
b.Property<int>("EnabledLibrariesId")
.HasColumnType("INTEGER");
b.Property<int>("UsedInSessionsId")
.HasColumnType("INTEGER");
b.HasKey("EnabledLibrariesId", "UsedInSessionsId");
b.HasIndex("UsedInSessionsId");
b.ToTable("Sessions_Libraries");
});
modelBuilder.Entity("songrequests_blazor.Data.Library", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("INTEGER");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("TEXT");
b.HasKey("VotedSongsId", "VotesId");
b.Property<int>("Type")
.HasColumnType("INTEGER");
b.HasIndex("VotesId");
b.HasKey("Id");
b.ToTable("QueuedSongUser");
b.ToTable("Libraries");
});
modelBuilder.Entity("songrequests_blazor.Data.QueuedSong", b =>
@ -245,23 +311,28 @@ namespace songrequests_blazor.Migrations
b.Property<DateTime>("Added")
.HasColumnType("TEXT");
b.Property<DateTime>("Played")
b.Property<string>("AddedBy_User_ID")
.HasColumnType("TEXT");
b.Property<DateTime?>("Played")
.HasColumnType("TEXT");
b.Property<int>("Position")
.HasColumnType("INTEGER");
b.Property<int?>("SessionId")
b.Property<int>("Session_ID")
.HasColumnType("INTEGER");
b.Property<int>("SongId")
b.Property<int>("Song_ID")
.HasColumnType("INTEGER");
b.HasKey("Id");
b.HasIndex("SessionId");
b.HasIndex("AddedBy_User_ID");
b.HasIndex("SongId");
b.HasIndex("Session_ID");
b.HasIndex("Song_ID");
b.ToTable("QueuedSongs");
});
@ -301,17 +372,17 @@ namespace songrequests_blazor.Migrations
b.Property<TimeSpan>("Length")
.HasColumnType("TEXT");
b.Property<int>("Library_ID")
.HasColumnType("INTEGER");
b.Property<int>("RequestCount")
.HasColumnType("INTEGER");
b.Property<int>("Source")
.HasColumnType("INTEGER");
b.Property<string>("SourceUri")
b.Property<string>("Title")
.IsRequired()
.HasColumnType("TEXT");
b.Property<string>("Title")
b.Property<string>("Uri")
.IsRequired()
.HasColumnType("TEXT");
@ -320,6 +391,8 @@ namespace songrequests_blazor.Migrations
b.HasKey("Id");
b.HasIndex("Library_ID");
b.ToTable("Songs");
});
@ -381,39 +454,94 @@ namespace songrequests_blazor.Migrations
.IsRequired();
});
modelBuilder.Entity("QueuedSongUser", b =>
modelBuilder.Entity("QueuedSongs_UserVotes", b =>
{
b.HasOne("songrequests_blazor.Data.User", null)
.WithMany()
.HasForeignKey("UserVotesId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("songrequests_blazor.Data.QueuedSong", null)
.WithMany()
.HasForeignKey("VotedSongsId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
b.HasOne("songrequests_blazor.Data.User", null)
modelBuilder.Entity("Sessions_Libraries", b =>
{
b.HasOne("songrequests_blazor.Data.Library", null)
.WithMany()
.HasForeignKey("VotesId")
.HasForeignKey("EnabledLibrariesId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("songrequests_blazor.Data.Session", null)
.WithMany()
.HasForeignKey("UsedInSessionsId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("songrequests_blazor.Data.QueuedSong", b =>
{
b.HasOne("songrequests_blazor.Data.Session", null)
.WithMany("Queue")
.HasForeignKey("SessionId");
b.HasOne("songrequests_blazor.Data.User", "AdddedBy")
.WithMany("AddedSongs")
.HasForeignKey("AddedBy_User_ID")
.HasConstraintName("FK_user_addedsongs");
b.HasOne("songrequests_blazor.Data.Session", "Session")
.WithMany("QueuedSongs")
.HasForeignKey("Session_ID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired()
.HasConstraintName("FK_Session_QueuedSongs");
b.HasOne("songrequests_blazor.Data.Song", "Song")
.WithMany()
.HasForeignKey("SongId")
.WithMany("Queued")
.HasForeignKey("Song_ID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
.IsRequired()
.HasConstraintName("FK_queuedsongs_song");
b.Navigation("AdddedBy");
b.Navigation("Session");
b.Navigation("Song");
});
modelBuilder.Entity("songrequests_blazor.Data.Song", b =>
{
b.HasOne("songrequests_blazor.Data.Library", "Library")
.WithMany("Songs")
.HasForeignKey("Library_ID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired()
.HasConstraintName("FK_library_songs");
b.Navigation("Library");
});
modelBuilder.Entity("songrequests_blazor.Data.Library", b =>
{
b.Navigation("Songs");
});
modelBuilder.Entity("songrequests_blazor.Data.Session", b =>
{
b.Navigation("Queue");
b.Navigation("QueuedSongs");
});
modelBuilder.Entity("songrequests_blazor.Data.Song", b =>
{
b.Navigation("Queued");
});
modelBuilder.Entity("songrequests_blazor.Data.User", b =>
{
b.Navigation("AddedSongs");
});
#pragma warning restore 612, 618
}

View File

@ -0,0 +1,264 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace songrequests_blazor.Migrations
{
/// <inheritdoc />
public partial class AddQueueDataAndAdminUser : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.RenameColumn(
name: "SourceUri",
table: "Songs",
newName: "Uri");
migrationBuilder.RenameColumn(
name: "Source",
table: "Songs",
newName: "RequestCount");
migrationBuilder.AddColumn<int>(
name: "Library_ID",
table: "Songs",
type: "INTEGER",
nullable: false,
defaultValue: 0);
migrationBuilder.AddColumn<string>(
name: "Discriminator",
table: "AspNetUsers",
type: "TEXT",
maxLength: 13,
nullable: false,
defaultValue: "");
migrationBuilder.CreateTable(
name: "Libraries",
columns: table => new
{
Id = table.Column<int>(type: "INTEGER", nullable: false)
.Annotation("Sqlite:Autoincrement", true),
Name = table.Column<string>(type: "TEXT", nullable: false),
Type = table.Column<int>(type: "INTEGER", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Libraries", x => x.Id);
});
migrationBuilder.CreateTable(
name: "Sessions",
columns: table => new
{
Id = table.Column<int>(type: "INTEGER", nullable: false)
.Annotation("Sqlite:Autoincrement", true),
SessionCode = table.Column<string>(type: "TEXT", nullable: true),
Created = table.Column<DateTime>(type: "TEXT", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Sessions", x => x.Id);
});
migrationBuilder.CreateTable(
name: "QueuedSongs",
columns: table => new
{
Id = table.Column<int>(type: "INTEGER", nullable: false)
.Annotation("Sqlite:Autoincrement", true),
Position = table.Column<int>(type: "INTEGER", nullable: false),
Song_ID = table.Column<int>(type: "INTEGER", nullable: false),
AddedBy_User_ID = table.Column<string>(type: "TEXT", nullable: true),
Added = table.Column<DateTime>(type: "TEXT", nullable: false),
Played = table.Column<DateTime>(type: "TEXT", nullable: true),
Session_ID = table.Column<int>(type: "INTEGER", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_QueuedSongs", x => x.Id);
table.ForeignKey(
name: "FK_Session_QueuedSongs",
column: x => x.Session_ID,
principalTable: "Sessions",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_queuedsongs_song",
column: x => x.Song_ID,
principalTable: "Songs",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_user_addedsongs",
column: x => x.AddedBy_User_ID,
principalTable: "AspNetUsers",
principalColumn: "Id");
});
migrationBuilder.CreateTable(
name: "Sessions_Libraries",
columns: table => new
{
EnabledLibrariesId = table.Column<int>(type: "INTEGER", nullable: false),
UsedInSessionsId = table.Column<int>(type: "INTEGER", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Sessions_Libraries", x => new { x.EnabledLibrariesId, x.UsedInSessionsId });
table.ForeignKey(
name: "FK_Sessions_Libraries_Libraries_EnabledLibrariesId",
column: x => x.EnabledLibrariesId,
principalTable: "Libraries",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_Sessions_Libraries_Sessions_UsedInSessionsId",
column: x => x.UsedInSessionsId,
principalTable: "Sessions",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "QueuedSongs_UserVotes",
columns: table => new
{
UserVotesId = table.Column<string>(type: "TEXT", nullable: false),
VotedSongsId = table.Column<int>(type: "INTEGER", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_QueuedSongs_UserVotes", x => new { x.UserVotesId, x.VotedSongsId });
table.ForeignKey(
name: "FK_QueuedSongs_UserVotes_AspNetUsers_UserVotesId",
column: x => x.UserVotesId,
principalTable: "AspNetUsers",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_QueuedSongs_UserVotes_QueuedSongs_VotedSongsId",
column: x => x.VotedSongsId,
principalTable: "QueuedSongs",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.InsertData(
table: "AspNetRoles",
columns: new[] { "Id", "ConcurrencyStamp", "Name", "NormalizedName" },
values: new object[] { "fc985a25-19ce-48ed-8443-c845f550960a", null, "Administrator", "ADMINISTRATOR" });
migrationBuilder.InsertData(
table: "AspNetUsers",
columns: new[] { "Id", "AccessFailedCount", "ConcurrencyStamp", "Discriminator", "Email", "EmailConfirmed", "LockoutEnabled", "LockoutEnd", "NormalizedEmail", "NormalizedUserName", "PasswordHash", "PhoneNumber", "PhoneNumberConfirmed", "SecurityStamp", "TwoFactorEnabled", "UserName" },
values: new object[] { "5c2511d0-6a08-4950-babd-d107996749ba", 0, "828466b4-e932-48c2-9ac5-2d5a16bbbade", "IdentityUser", "admin@admin.com", false, false, null, "ADMIN@ADMIN.COM", "ADMIN@ADMIN.COM", "AQAAAAIAAYagAAAAEAHO/Ra7WSxWtOXx++pYevyMsD+Wt/8tsCfJtQ59NaWFxF7BztGzvgNrnblXuYOkww==", null, false, "23975ce5-b515-4a6a-a6b7-2a5e6d8c943e", false, "admin@admin.com" });
migrationBuilder.InsertData(
table: "AspNetUserRoles",
columns: new[] { "RoleId", "UserId" },
values: new object[] { "fc985a25-19ce-48ed-8443-c845f550960a", "5c2511d0-6a08-4950-babd-d107996749ba" });
migrationBuilder.CreateIndex(
name: "IX_Songs_Library_ID",
table: "Songs",
column: "Library_ID");
migrationBuilder.CreateIndex(
name: "IX_QueuedSongs_AddedBy_User_ID",
table: "QueuedSongs",
column: "AddedBy_User_ID");
migrationBuilder.CreateIndex(
name: "IX_QueuedSongs_Session_ID",
table: "QueuedSongs",
column: "Session_ID");
migrationBuilder.CreateIndex(
name: "IX_QueuedSongs_Song_ID",
table: "QueuedSongs",
column: "Song_ID");
migrationBuilder.CreateIndex(
name: "IX_QueuedSongs_UserVotes_VotedSongsId",
table: "QueuedSongs_UserVotes",
column: "VotedSongsId");
migrationBuilder.CreateIndex(
name: "IX_Sessions_Libraries_UsedInSessionsId",
table: "Sessions_Libraries",
column: "UsedInSessionsId");
migrationBuilder.AddForeignKey(
name: "FK_library_songs",
table: "Songs",
column: "Library_ID",
principalTable: "Libraries",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_library_songs",
table: "Songs");
migrationBuilder.DropTable(
name: "QueuedSongs_UserVotes");
migrationBuilder.DropTable(
name: "Sessions_Libraries");
migrationBuilder.DropTable(
name: "QueuedSongs");
migrationBuilder.DropTable(
name: "Libraries");
migrationBuilder.DropTable(
name: "Sessions");
migrationBuilder.DropIndex(
name: "IX_Songs_Library_ID",
table: "Songs");
migrationBuilder.DeleteData(
table: "AspNetUserRoles",
keyColumns: new[] { "RoleId", "UserId" },
keyValues: new object[] { "fc985a25-19ce-48ed-8443-c845f550960a", "5c2511d0-6a08-4950-babd-d107996749ba" });
migrationBuilder.DeleteData(
table: "AspNetRoles",
keyColumn: "Id",
keyValue: "fc985a25-19ce-48ed-8443-c845f550960a");
migrationBuilder.DeleteData(
table: "AspNetUsers",
keyColumn: "Id",
keyValue: "5c2511d0-6a08-4950-babd-d107996749ba");
migrationBuilder.DropColumn(
name: "Library_ID",
table: "Songs");
migrationBuilder.DropColumn(
name: "Discriminator",
table: "AspNetUsers");
migrationBuilder.RenameColumn(
name: "Uri",
table: "Songs",
newName: "SourceUri");
migrationBuilder.RenameColumn(
name: "RequestCount",
table: "Songs",
newName: "Source");
}
}
}

View File

@ -41,6 +41,14 @@ namespace songrequests_blazor.Migrations
.HasDatabaseName("RoleNameIndex");
b.ToTable("AspNetRoles", (string)null);
b.HasData(
new
{
Id = "fc985a25-19ce-48ed-8443-c845f550960a",
Name = "Administrator",
NormalizedName = "ADMINISTRATOR"
});
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
@ -137,6 +145,24 @@ namespace songrequests_blazor.Migrations
b.HasDiscriminator<string>("Discriminator").HasValue("IdentityUser");
b.UseTphMappingStrategy();
b.HasData(
new
{
Id = "5c2511d0-6a08-4950-babd-d107996749ba",
AccessFailedCount = 0,
ConcurrencyStamp = "828466b4-e932-48c2-9ac5-2d5a16bbbade",
Email = "admin@admin.com",
EmailConfirmed = false,
LockoutEnabled = false,
NormalizedEmail = "ADMIN@ADMIN.COM",
NormalizedUserName = "ADMIN@ADMIN.COM",
PasswordHash = "AQAAAAIAAYagAAAAEAHO/Ra7WSxWtOXx++pYevyMsD+Wt/8tsCfJtQ59NaWFxF7BztGzvgNrnblXuYOkww==",
PhoneNumberConfirmed = false,
SecurityStamp = "23975ce5-b515-4a6a-a6b7-2a5e6d8c943e",
TwoFactorEnabled = false,
UserName = "admin@admin.com"
});
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
@ -197,6 +223,13 @@ namespace songrequests_blazor.Migrations
b.HasIndex("RoleId");
b.ToTable("AspNetUserRoles", (string)null);
b.HasData(
new
{
UserId = "5c2511d0-6a08-4950-babd-d107996749ba",
RoleId = "fc985a25-19ce-48ed-8443-c845f550960a"
});
});
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
@ -218,19 +251,52 @@ namespace songrequests_blazor.Migrations
b.ToTable("AspNetUserTokens", (string)null);
});
modelBuilder.Entity("QueuedSongUser", b =>
modelBuilder.Entity("QueuedSongs_UserVotes", b =>
{
b.Property<string>("UserVotesId")
.HasColumnType("TEXT");
b.Property<int>("VotedSongsId")
.HasColumnType("INTEGER");
b.Property<string>("VotesId")
b.HasKey("UserVotesId", "VotedSongsId");
b.HasIndex("VotedSongsId");
b.ToTable("QueuedSongs_UserVotes");
});
modelBuilder.Entity("Sessions_Libraries", b =>
{
b.Property<int>("EnabledLibrariesId")
.HasColumnType("INTEGER");
b.Property<int>("UsedInSessionsId")
.HasColumnType("INTEGER");
b.HasKey("EnabledLibrariesId", "UsedInSessionsId");
b.HasIndex("UsedInSessionsId");
b.ToTable("Sessions_Libraries");
});
modelBuilder.Entity("songrequests_blazor.Data.Library", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("INTEGER");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("TEXT");
b.HasKey("VotedSongsId", "VotesId");
b.Property<int>("Type")
.HasColumnType("INTEGER");
b.HasIndex("VotesId");
b.HasKey("Id");
b.ToTable("QueuedSongUser");
b.ToTable("Libraries");
});
modelBuilder.Entity("songrequests_blazor.Data.QueuedSong", b =>
@ -242,23 +308,28 @@ namespace songrequests_blazor.Migrations
b.Property<DateTime>("Added")
.HasColumnType("TEXT");
b.Property<DateTime>("Played")
b.Property<string>("AddedBy_User_ID")
.HasColumnType("TEXT");
b.Property<DateTime?>("Played")
.HasColumnType("TEXT");
b.Property<int>("Position")
.HasColumnType("INTEGER");
b.Property<int?>("SessionId")
b.Property<int>("Session_ID")
.HasColumnType("INTEGER");
b.Property<int>("SongId")
b.Property<int>("Song_ID")
.HasColumnType("INTEGER");
b.HasKey("Id");
b.HasIndex("SessionId");
b.HasIndex("AddedBy_User_ID");
b.HasIndex("SongId");
b.HasIndex("Session_ID");
b.HasIndex("Song_ID");
b.ToTable("QueuedSongs");
});
@ -298,17 +369,17 @@ namespace songrequests_blazor.Migrations
b.Property<TimeSpan>("Length")
.HasColumnType("TEXT");
b.Property<int>("Library_ID")
.HasColumnType("INTEGER");
b.Property<int>("RequestCount")
.HasColumnType("INTEGER");
b.Property<int>("Source")
.HasColumnType("INTEGER");
b.Property<string>("SourceUri")
b.Property<string>("Title")
.IsRequired()
.HasColumnType("TEXT");
b.Property<string>("Title")
b.Property<string>("Uri")
.IsRequired()
.HasColumnType("TEXT");
@ -317,6 +388,8 @@ namespace songrequests_blazor.Migrations
b.HasKey("Id");
b.HasIndex("Library_ID");
b.ToTable("Songs");
});
@ -378,39 +451,94 @@ namespace songrequests_blazor.Migrations
.IsRequired();
});
modelBuilder.Entity("QueuedSongUser", b =>
modelBuilder.Entity("QueuedSongs_UserVotes", b =>
{
b.HasOne("songrequests_blazor.Data.User", null)
.WithMany()
.HasForeignKey("UserVotesId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("songrequests_blazor.Data.QueuedSong", null)
.WithMany()
.HasForeignKey("VotedSongsId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
b.HasOne("songrequests_blazor.Data.User", null)
modelBuilder.Entity("Sessions_Libraries", b =>
{
b.HasOne("songrequests_blazor.Data.Library", null)
.WithMany()
.HasForeignKey("VotesId")
.HasForeignKey("EnabledLibrariesId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("songrequests_blazor.Data.Session", null)
.WithMany()
.HasForeignKey("UsedInSessionsId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("songrequests_blazor.Data.QueuedSong", b =>
{
b.HasOne("songrequests_blazor.Data.Session", null)
.WithMany("Queue")
.HasForeignKey("SessionId");
b.HasOne("songrequests_blazor.Data.User", "AdddedBy")
.WithMany("AddedSongs")
.HasForeignKey("AddedBy_User_ID")
.HasConstraintName("FK_user_addedsongs");
b.HasOne("songrequests_blazor.Data.Session", "Session")
.WithMany("QueuedSongs")
.HasForeignKey("Session_ID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired()
.HasConstraintName("FK_Session_QueuedSongs");
b.HasOne("songrequests_blazor.Data.Song", "Song")
.WithMany()
.HasForeignKey("SongId")
.WithMany("Queued")
.HasForeignKey("Song_ID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
.IsRequired()
.HasConstraintName("FK_queuedsongs_song");
b.Navigation("AdddedBy");
b.Navigation("Session");
b.Navigation("Song");
});
modelBuilder.Entity("songrequests_blazor.Data.Song", b =>
{
b.HasOne("songrequests_blazor.Data.Library", "Library")
.WithMany("Songs")
.HasForeignKey("Library_ID")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired()
.HasConstraintName("FK_library_songs");
b.Navigation("Library");
});
modelBuilder.Entity("songrequests_blazor.Data.Library", b =>
{
b.Navigation("Songs");
});
modelBuilder.Entity("songrequests_blazor.Data.Session", b =>
{
b.Navigation("Queue");
b.Navigation("QueuedSongs");
});
modelBuilder.Entity("songrequests_blazor.Data.Song", b =>
{
b.Navigation("Queued");
});
modelBuilder.Entity("songrequests_blazor.Data.User", b =>
{
b.Navigation("AddedSongs");
});
#pragma warning restore 612, 618
}

Binary file not shown.

Binary file not shown.

View File