diff --git a/LANCommander.Server.Data.MySQL/Migrations/20250213023250_InitialMigration.Designer.cs b/LANCommander.Server.Data.MySQL/Migrations/20250213023250_InitialMigration.Designer.cs deleted file mode 100644 index 0175701c..00000000 --- a/LANCommander.Server.Data.MySQL/Migrations/20250213023250_InitialMigration.Designer.cs +++ /dev/null @@ -1,2800 +0,0 @@ -// -using System; -using LANCommander.Server.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace LANCommander.Server.Data.MySQL.Migrations -{ - [DbContext(typeof(DatabaseContext))] - [Migration("20250213023250_InitialMigration")] - partial class InitialMigration - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "9.0.2") - .HasAnnotation("Relational:MaxIdentifierLength", 64); - - MySqlModelBuilderExtensions.AutoIncrementColumns(modelBuilder); - - modelBuilder.Entity("CategoryGame", b => - { - b.Property("CategoriesId") - .HasColumnType("char(36)"); - - b.Property("GamesId") - .HasColumnType("char(36)"); - - b.HasKey("CategoriesId", "GamesId"); - - b.HasIndex("GamesId"); - - b.ToTable("CategoryGame"); - }); - - modelBuilder.Entity("CollectionGame", b => - { - b.Property("CollectionId") - .HasColumnType("char(36)"); - - b.Property("GameId") - .HasColumnType("char(36)"); - - b.HasKey("CollectionId", "GameId"); - - b.HasIndex("GameId"); - - b.ToTable("CollectionGame"); - }); - - modelBuilder.Entity("GameDeveloper", b => - { - b.Property("GameId") - .HasColumnType("char(36)"); - - b.Property("DeveloperId") - .HasColumnType("char(36)"); - - b.HasKey("GameId", "DeveloperId"); - - b.HasIndex("DeveloperId"); - - b.ToTable("GameDeveloper"); - }); - - modelBuilder.Entity("GameGenre", b => - { - b.Property("GamesId") - .HasColumnType("char(36)"); - - b.Property("GenresId") - .HasColumnType("char(36)"); - - b.HasKey("GamesId", "GenresId"); - - b.HasIndex("GenresId"); - - b.ToTable("GameGenre"); - }); - - modelBuilder.Entity("GamePlatform", b => - { - b.Property("GamesId") - .HasColumnType("char(36)"); - - b.Property("PlatformsId") - .HasColumnType("char(36)"); - - b.HasKey("GamesId", "PlatformsId"); - - b.HasIndex("PlatformsId"); - - b.ToTable("GamePlatform"); - }); - - modelBuilder.Entity("GamePublisher", b => - { - b.Property("GameId") - .HasColumnType("char(36)"); - - b.Property("PublisherId") - .HasColumnType("char(36)"); - - b.HasKey("GameId", "PublisherId"); - - b.HasIndex("PublisherId"); - - b.ToTable("GamePublisher"); - }); - - modelBuilder.Entity("GameRedistributable", b => - { - b.Property("GameId") - .HasColumnType("char(36)"); - - b.Property("RedistributableId") - .HasColumnType("char(36)"); - - b.HasKey("GameId", "RedistributableId"); - - b.HasIndex("RedistributableId"); - - b.ToTable("GameRedistributable"); - }); - - modelBuilder.Entity("GameTag", b => - { - b.Property("GamesId") - .HasColumnType("char(36)"); - - b.Property("TagsId") - .HasColumnType("char(36)"); - - b.HasKey("GamesId", "TagsId"); - - b.HasIndex("TagsId"); - - b.ToTable("GameTag"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Action", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("char(36)"); - - b.Property("Arguments") - .HasColumnType("longtext"); - - b.Property("CreatedById") - .HasColumnType("char(36)"); - - b.Property("CreatedOn") - .HasColumnType("datetime(6)"); - - b.Property("GameId") - .HasColumnType("char(36)"); - - b.Property("Name") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("Path") - .HasColumnType("longtext"); - - b.Property("PrimaryAction") - .HasColumnType("tinyint(1)"); - - b.Property("ServerId") - .HasColumnType("char(36)"); - - b.Property("SortOrder") - .HasColumnType("int"); - - b.Property("UpdatedById") - .HasColumnType("char(36)"); - - b.Property("UpdatedOn") - .HasColumnType("datetime(6)"); - - b.Property("WorkingDirectory") - .HasColumnType("longtext"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("GameId"); - - b.HasIndex("ServerId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Actions"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Archive", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("char(36)"); - - b.Property("Changelog") - .HasColumnType("longtext"); - - b.Property("CompressedSize") - .HasColumnType("bigint"); - - b.Property("CreatedById") - .HasColumnType("char(36)"); - - b.Property("CreatedOn") - .HasColumnType("datetime(6)"); - - b.Property("GameId") - .HasColumnType("char(36)"); - - b.Property("LastVersionId") - .HasColumnType("char(36)"); - - b.Property("ObjectKey") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("RedistributableId") - .HasColumnType("char(36)"); - - b.Property("StorageLocationId") - .HasColumnType("char(36)"); - - b.Property("UncompressedSize") - .HasColumnType("bigint"); - - b.Property("UpdatedById") - .HasColumnType("char(36)"); - - b.Property("UpdatedOn") - .HasColumnType("datetime(6)"); - - b.Property("Version") - .IsRequired() - .HasColumnType("longtext"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("GameId"); - - b.HasIndex("LastVersionId"); - - b.HasIndex("RedistributableId"); - - b.HasIndex("StorageLocationId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Archive"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Category", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("char(36)"); - - b.Property("CreatedById") - .HasColumnType("char(36)"); - - b.Property("CreatedOn") - .HasColumnType("datetime(6)"); - - b.Property("Name") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("ParentId") - .HasColumnType("char(36)"); - - b.Property("UpdatedById") - .HasColumnType("char(36)"); - - b.Property("UpdatedOn") - .HasColumnType("datetime(6)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ParentId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Categories"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Collection", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("char(36)"); - - b.Property("CreatedById") - .HasColumnType("char(36)"); - - b.Property("CreatedOn") - .HasColumnType("datetime(6)"); - - b.Property("Name") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("UpdatedById") - .HasColumnType("char(36)"); - - b.Property("UpdatedOn") - .HasColumnType("datetime(6)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Collections"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Company", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("char(36)"); - - b.Property("CreatedById") - .HasColumnType("char(36)"); - - b.Property("CreatedOn") - .HasColumnType("datetime(6)"); - - b.Property("Name") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("UpdatedById") - .HasColumnType("char(36)"); - - b.Property("UpdatedOn") - .HasColumnType("datetime(6)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Companies"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Engine", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("char(36)"); - - b.Property("CreatedById") - .HasColumnType("char(36)"); - - b.Property("CreatedOn") - .HasColumnType("datetime(6)"); - - b.Property("Name") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("UpdatedById") - .HasColumnType("char(36)"); - - b.Property("UpdatedOn") - .HasColumnType("datetime(6)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Engines"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Game", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("char(36)"); - - b.Property("BaseGameId") - .HasColumnType("char(36)"); - - b.Property("CreatedById") - .HasColumnType("char(36)"); - - b.Property("CreatedOn") - .HasColumnType("datetime(6)"); - - b.Property("Description") - .HasColumnType("longtext"); - - b.Property("DirectoryName") - .HasColumnType("longtext"); - - b.Property("EngineId") - .HasColumnType("char(36)"); - - b.Property("IGDBId") - .HasColumnType("bigint"); - - b.Property("KeyAllocationMethod") - .HasColumnType("int"); - - b.Property("Notes") - .HasColumnType("longtext"); - - b.Property("ReleasedOn") - .HasColumnType("datetime(6)"); - - b.Property("Singleplayer") - .HasColumnType("tinyint(1)"); - - b.Property("SortTitle") - .HasColumnType("longtext"); - - b.Property("Title") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("Type") - .HasColumnType("int"); - - b.Property("UpdatedById") - .HasColumnType("char(36)"); - - b.Property("UpdatedOn") - .HasColumnType("datetime(6)"); - - b.Property("ValidKeyRegex") - .HasColumnType("longtext"); - - b.HasKey("Id"); - - b.HasIndex("BaseGameId"); - - b.HasIndex("CreatedById"); - - b.HasIndex("EngineId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Games"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.GameCustomField", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("char(36)"); - - b.Property("CreatedById") - .HasColumnType("char(36)"); - - b.Property("CreatedOn") - .HasColumnType("datetime(6)"); - - b.Property("GameId") - .HasColumnType("char(36)"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("varchar(64)"); - - b.Property("UpdatedById") - .HasColumnType("char(36)"); - - b.Property("UpdatedOn") - .HasColumnType("datetime(6)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(1024) - .HasColumnType("varchar(1024)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("GameId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("GameCustomField"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.GameSave", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("char(36)"); - - b.Property("CreatedById") - .HasColumnType("char(36)"); - - b.Property("CreatedOn") - .HasColumnType("datetime(6)"); - - b.Property("GameId") - .HasColumnType("char(36)"); - - b.Property("Size") - .HasColumnType("bigint"); - - b.Property("StorageLocationId") - .HasColumnType("char(36)"); - - b.Property("UpdatedById") - .HasColumnType("char(36)"); - - b.Property("UpdatedOn") - .HasColumnType("datetime(6)"); - - b.Property("UserId") - .HasColumnType("char(36)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("GameId"); - - b.HasIndex("StorageLocationId"); - - b.HasIndex("UpdatedById"); - - b.HasIndex("UserId"); - - b.ToTable("GameSaves"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Genre", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("char(36)"); - - b.Property("CreatedById") - .HasColumnType("char(36)"); - - b.Property("CreatedOn") - .HasColumnType("datetime(6)"); - - b.Property("Name") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("UpdatedById") - .HasColumnType("char(36)"); - - b.Property("UpdatedOn") - .HasColumnType("datetime(6)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Genres"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Issue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("char(36)"); - - b.Property("CreatedById") - .HasColumnType("char(36)"); - - b.Property("CreatedOn") - .HasColumnType("datetime(6)"); - - b.Property("Description") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("GameId") - .HasColumnType("char(36)"); - - b.Property("ResolvedById") - .HasColumnType("char(36)"); - - b.Property("ResolvedOn") - .HasColumnType("datetime(6)"); - - b.Property("UpdatedById") - .HasColumnType("char(36)"); - - b.Property("UpdatedOn") - .HasColumnType("datetime(6)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("GameId"); - - b.HasIndex("ResolvedById"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Issues"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Key", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("char(36)"); - - b.Property("AllocationMethod") - .HasColumnType("int"); - - b.Property("ClaimedByComputerName") - .HasMaxLength(255) - .HasColumnType("varchar(255)"); - - b.Property("ClaimedByIpv4Address") - .HasMaxLength(15) - .HasColumnType("varchar(15)"); - - b.Property("ClaimedByMacAddress") - .HasMaxLength(17) - .HasColumnType("varchar(17)"); - - b.Property("ClaimedByUserId") - .HasColumnType("char(36)"); - - b.Property("ClaimedOn") - .HasColumnType("datetime(6)"); - - b.Property("CreatedById") - .HasColumnType("char(36)"); - - b.Property("CreatedOn") - .HasColumnType("datetime(6)"); - - b.Property("GameId") - .HasColumnType("char(36)"); - - b.Property("UpdatedById") - .HasColumnType("char(36)"); - - b.Property("UpdatedOn") - .HasColumnType("datetime(6)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("varchar(255)"); - - b.HasKey("Id"); - - b.HasIndex("ClaimedByUserId"); - - b.HasIndex("CreatedById"); - - b.HasIndex("GameId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Keys"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Library", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("char(36)"); - - b.Property("CreatedById") - .HasColumnType("char(36)"); - - b.Property("CreatedOn") - .HasColumnType("datetime(6)"); - - b.Property("UpdatedById") - .HasColumnType("char(36)"); - - b.Property("UpdatedOn") - .HasColumnType("datetime(6)"); - - b.Property("UserId") - .HasColumnType("char(36)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("UpdatedById"); - - b.HasIndex("UserId") - .IsUnique(); - - b.ToTable("Libraries"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Media", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("char(36)"); - - b.Property("Crc32") - .IsRequired() - .HasMaxLength(8) - .HasColumnType("varchar(8)"); - - b.Property("CreatedById") - .HasColumnType("char(36)"); - - b.Property("CreatedOn") - .HasColumnType("datetime(6)"); - - b.Property("FileId") - .HasColumnType("char(36)"); - - b.Property("GameId") - .HasColumnType("char(36)"); - - b.Property("MimeType") - .HasMaxLength(255) - .HasColumnType("varchar(255)"); - - b.Property("Name") - .HasMaxLength(64) - .HasColumnType("varchar(64)"); - - b.Property("SourceUrl") - .HasMaxLength(2048) - .HasColumnType("varchar(2048)"); - - b.Property("StorageLocationId") - .HasColumnType("char(36)"); - - b.Property("ThumbnailId") - .HasColumnType("char(36)"); - - b.Property("Type") - .HasColumnType("int"); - - b.Property("UpdatedById") - .HasColumnType("char(36)"); - - b.Property("UpdatedOn") - .HasColumnType("datetime(6)"); - - b.Property("UserId") - .HasColumnType("char(36)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("GameId"); - - b.HasIndex("StorageLocationId"); - - b.HasIndex("ThumbnailId") - .IsUnique(); - - b.HasIndex("UpdatedById"); - - b.HasIndex("UserId"); - - b.ToTable("Media"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.MultiplayerMode", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("char(36)"); - - b.Property("CreatedById") - .HasColumnType("char(36)"); - - b.Property("CreatedOn") - .HasColumnType("datetime(6)"); - - b.Property("Description") - .HasColumnType("longtext"); - - b.Property("GameId") - .HasColumnType("char(36)"); - - b.Property("MaxPlayers") - .HasColumnType("int"); - - b.Property("MinPlayers") - .HasColumnType("int"); - - b.Property("NetworkProtocol") - .HasColumnType("int"); - - b.Property("Spectators") - .HasColumnType("int"); - - b.Property("Type") - .HasColumnType("int"); - - b.Property("UpdatedById") - .HasColumnType("char(36)"); - - b.Property("UpdatedOn") - .HasColumnType("datetime(6)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("GameId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("MultiplayerModes"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Page", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("char(36)"); - - b.Property("Contents") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("CreatedById") - .HasColumnType("char(36)"); - - b.Property("CreatedOn") - .HasColumnType("datetime(6)"); - - b.Property("ParentId") - .HasColumnType("char(36)"); - - b.Property("Route") - .IsRequired() - .HasMaxLength(2048) - .HasColumnType("varchar(2048)"); - - b.Property("Slug") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.Property("SortOrder") - .HasColumnType("int"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.Property("UpdatedById") - .HasColumnType("char(36)"); - - b.Property("UpdatedOn") - .HasColumnType("datetime(6)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ParentId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Pages"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Platform", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("char(36)"); - - b.Property("CreatedById") - .HasColumnType("char(36)"); - - b.Property("CreatedOn") - .HasColumnType("datetime(6)"); - - b.Property("Name") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("UpdatedById") - .HasColumnType("char(36)"); - - b.Property("UpdatedOn") - .HasColumnType("datetime(6)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Platforms"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.PlaySession", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("char(36)"); - - b.Property("CreatedById") - .HasColumnType("char(36)"); - - b.Property("CreatedOn") - .HasColumnType("datetime(6)"); - - b.Property("End") - .HasColumnType("datetime(6)"); - - b.Property("GameId") - .HasColumnType("char(36)"); - - b.Property("Start") - .HasColumnType("datetime(6)"); - - b.Property("UpdatedById") - .HasColumnType("char(36)"); - - b.Property("UpdatedOn") - .HasColumnType("datetime(6)"); - - b.Property("UserId") - .HasColumnType("char(36)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("GameId"); - - b.HasIndex("UpdatedById"); - - b.HasIndex("UserId"); - - b.ToTable("PlaySessions"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Redistributable", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("char(36)"); - - b.Property("CreatedById") - .HasColumnType("char(36)"); - - b.Property("CreatedOn") - .HasColumnType("datetime(6)"); - - b.Property("Description") - .HasColumnType("longtext"); - - b.Property("Name") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("Notes") - .HasColumnType("longtext"); - - b.Property("UpdatedById") - .HasColumnType("char(36)"); - - b.Property("UpdatedOn") - .HasColumnType("datetime(6)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Redistributables"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Role", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("char(36)"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasColumnType("longtext"); - - b.Property("CreatedById") - .HasColumnType("char(36)"); - - b.Property("CreatedOn") - .HasColumnType("datetime(6)"); - - b.Property("Name") - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.Property("NormalizedName") - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.Property("UpdatedById") - .HasColumnType("char(36)"); - - b.Property("UpdatedOn") - .HasColumnType("datetime(6)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("NormalizedName") - .IsUnique() - .HasDatabaseName("RoleNameIndex"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Roles", (string)null); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.SavePath", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("char(36)"); - - b.Property("CreatedById") - .HasColumnType("char(36)"); - - b.Property("CreatedOn") - .HasColumnType("datetime(6)"); - - b.Property("GameId") - .HasColumnType("char(36)"); - - b.Property("IsRegex") - .HasColumnType("tinyint(1)"); - - b.Property("Path") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("Type") - .HasColumnType("int"); - - b.Property("UpdatedById") - .HasColumnType("char(36)"); - - b.Property("UpdatedOn") - .HasColumnType("datetime(6)"); - - b.Property("WorkingDirectory") - .HasColumnType("longtext"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("GameId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("SavePaths"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Script", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("char(36)"); - - b.Property("Contents") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("CreatedById") - .HasColumnType("char(36)"); - - b.Property("CreatedOn") - .HasColumnType("datetime(6)"); - - b.Property("Description") - .HasColumnType("longtext"); - - b.Property("GameId") - .HasColumnType("char(36)"); - - b.Property("Name") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("RedistributableId") - .HasColumnType("char(36)"); - - b.Property("RequiresAdmin") - .HasColumnType("tinyint(1)"); - - b.Property("ServerId") - .HasColumnType("char(36)"); - - b.Property("Type") - .HasColumnType("int"); - - b.Property("UpdatedById") - .HasColumnType("char(36)"); - - b.Property("UpdatedOn") - .HasColumnType("datetime(6)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("GameId"); - - b.HasIndex("RedistributableId"); - - b.HasIndex("ServerId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Scripts"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Server", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("char(36)"); - - b.Property("Arguments") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("Autostart") - .HasColumnType("tinyint(1)"); - - b.Property("AutostartDelay") - .HasColumnType("int"); - - b.Property("AutostartMethod") - .HasColumnType("int"); - - b.Property("CreatedById") - .HasColumnType("char(36)"); - - b.Property("CreatedOn") - .HasColumnType("datetime(6)"); - - b.Property("GameId") - .HasColumnType("char(36)"); - - b.Property("Host") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("Name") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("OnStartScriptPath") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("OnStopScriptPath") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("Path") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("Port") - .HasColumnType("int"); - - b.Property("ProcessTerminationMethod") - .HasColumnType("int"); - - b.Property("UpdatedById") - .HasColumnType("char(36)"); - - b.Property("UpdatedOn") - .HasColumnType("datetime(6)"); - - b.Property("UseShellExecute") - .HasColumnType("tinyint(1)"); - - b.Property("WorkingDirectory") - .IsRequired() - .HasColumnType("longtext"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("GameId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Servers"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.ServerConsole", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("char(36)"); - - b.Property("CreatedById") - .HasColumnType("char(36)"); - - b.Property("CreatedOn") - .HasColumnType("datetime(6)"); - - b.Property("Host") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("Name") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("Password") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("Path") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("Port") - .HasColumnType("int"); - - b.Property("ServerId") - .HasColumnType("char(36)"); - - b.Property("ServerId1") - .HasColumnType("char(36)"); - - b.Property("Type") - .HasColumnType("int"); - - b.Property("UpdatedById") - .HasColumnType("char(36)"); - - b.Property("UpdatedOn") - .HasColumnType("datetime(6)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ServerId"); - - b.HasIndex("ServerId1"); - - b.HasIndex("UpdatedById"); - - b.ToTable("ServerConsoles"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.ServerHttpPath", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("char(36)"); - - b.Property("CreatedById") - .HasColumnType("char(36)"); - - b.Property("CreatedOn") - .HasColumnType("datetime(6)"); - - b.Property("LocalPath") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("Path") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("ServerId") - .HasColumnType("char(36)"); - - b.Property("ServerId1") - .HasColumnType("char(36)"); - - b.Property("UpdatedById") - .HasColumnType("char(36)"); - - b.Property("UpdatedOn") - .HasColumnType("datetime(6)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ServerId"); - - b.HasIndex("ServerId1"); - - b.HasIndex("UpdatedById"); - - b.ToTable("ServerHttpPath"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.StorageLocation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("char(36)"); - - b.Property("CreatedById") - .HasColumnType("char(36)"); - - b.Property("CreatedOn") - .HasColumnType("datetime(6)"); - - b.Property("Default") - .HasColumnType("tinyint(1)"); - - b.Property("Path") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("Type") - .HasColumnType("int"); - - b.Property("UpdatedById") - .HasColumnType("char(36)"); - - b.Property("UpdatedOn") - .HasColumnType("datetime(6)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("UpdatedById"); - - b.ToTable("StorageLocations"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Tag", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("char(36)"); - - b.Property("CreatedById") - .HasColumnType("char(36)"); - - b.Property("CreatedOn") - .HasColumnType("datetime(6)"); - - b.Property("Name") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("UpdatedById") - .HasColumnType("char(36)"); - - b.Property("UpdatedOn") - .HasColumnType("datetime(6)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Tags"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("char(36)"); - - b.Property("AccessFailedCount") - .HasColumnType("int"); - - b.Property("Alias") - .HasColumnType("longtext"); - - b.Property("Approved") - .HasColumnType("tinyint(1)"); - - b.Property("ApprovedOn") - .HasColumnType("datetime(6)"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasColumnType("longtext"); - - b.Property("CreatedById") - .HasColumnType("char(36)"); - - b.Property("CreatedOn") - .HasColumnType("datetime(6)"); - - b.Property("Email") - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.Property("EmailConfirmed") - .HasColumnType("tinyint(1)"); - - b.Property("LockoutEnabled") - .HasColumnType("tinyint(1)"); - - b.Property("LockoutEnd") - .HasColumnType("datetime(6)"); - - b.Property("NormalizedEmail") - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.Property("NormalizedUserName") - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.Property("PasswordHash") - .HasColumnType("longtext"); - - b.Property("PhoneNumber") - .HasColumnType("longtext"); - - b.Property("PhoneNumberConfirmed") - .HasColumnType("tinyint(1)"); - - b.Property("RefreshToken") - .HasColumnType("longtext"); - - b.Property("RefreshTokenExpiration") - .HasColumnType("datetime(6)"); - - b.Property("SecurityStamp") - .HasColumnType("longtext"); - - b.Property("TwoFactorEnabled") - .HasColumnType("tinyint(1)"); - - b.Property("UpdatedById") - .HasColumnType("char(36)"); - - b.Property("UpdatedOn") - .HasColumnType("datetime(6)"); - - b.Property("UserName") - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("NormalizedEmail") - .HasDatabaseName("EmailIndex"); - - b.HasIndex("NormalizedUserName") - .IsUnique() - .HasDatabaseName("UserNameIndex"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Users", (string)null); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.UserCustomField", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("char(36)"); - - b.Property("CreatedById") - .HasColumnType("char(36)"); - - b.Property("CreatedOn") - .HasColumnType("datetime(6)"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("varchar(64)"); - - b.Property("UpdatedById") - .HasColumnType("char(36)"); - - b.Property("UpdatedOn") - .HasColumnType("datetime(6)"); - - b.Property("UserId") - .HasColumnType("char(36)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(1024) - .HasColumnType("varchar(1024)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("UpdatedById"); - - b.HasIndex("UserId"); - - b.ToTable("UserCustomField"); - }); - - modelBuilder.Entity("LibraryGame", b => - { - b.Property("GameId") - .HasColumnType("char(36)"); - - b.Property("LibraryId") - .HasColumnType("char(36)"); - - b.HasKey("GameId", "LibraryId"); - - b.HasIndex("LibraryId"); - - b.ToTable("LibraryGame"); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id")); - - b.Property("ClaimType") - .HasColumnType("longtext"); - - b.Property("ClaimValue") - .HasColumnType("longtext"); - - b.Property("RoleId") - .HasColumnType("char(36)"); - - b.HasKey("Id"); - - b.HasIndex("RoleId"); - - b.ToTable("RoleClaims", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id")); - - b.Property("ClaimType") - .HasColumnType("longtext"); - - b.Property("ClaimValue") - .HasColumnType("longtext"); - - b.Property("UserId") - .HasColumnType("char(36)"); - - b.HasKey("Id"); - - b.HasIndex("UserId"); - - b.ToTable("UserClaims", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => - { - b.Property("LoginProvider") - .HasColumnType("varchar(255)"); - - b.Property("ProviderKey") - .HasColumnType("varchar(255)"); - - b.Property("ProviderDisplayName") - .HasColumnType("longtext"); - - b.Property("UserId") - .HasColumnType("char(36)"); - - b.HasKey("LoginProvider", "ProviderKey"); - - b.HasIndex("UserId"); - - b.ToTable("UserLogins", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => - { - b.Property("UserId") - .HasColumnType("char(36)"); - - b.Property("RoleId") - .HasColumnType("char(36)"); - - b.HasKey("UserId", "RoleId"); - - b.HasIndex("RoleId"); - - b.ToTable("UserRoles", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => - { - b.Property("UserId") - .HasColumnType("char(36)"); - - b.Property("LoginProvider") - .HasColumnType("varchar(255)"); - - b.Property("Name") - .HasColumnType("varchar(255)"); - - b.Property("Value") - .HasColumnType("longtext"); - - b.HasKey("UserId", "LoginProvider", "Name"); - - b.ToTable("UserTokens", (string)null); - }); - - modelBuilder.Entity("PageGame", b => - { - b.Property("GameId") - .HasColumnType("char(36)"); - - b.Property("PageId") - .HasColumnType("char(36)"); - - b.HasKey("GameId", "PageId"); - - b.HasIndex("PageId"); - - b.ToTable("PageGame"); - }); - - modelBuilder.Entity("PageRedistributable", b => - { - b.Property("PageId") - .HasColumnType("char(36)"); - - b.Property("RedistributableId") - .HasColumnType("char(36)"); - - b.HasKey("PageId", "RedistributableId"); - - b.HasIndex("RedistributableId"); - - b.ToTable("PageRedistributable"); - }); - - modelBuilder.Entity("PageServer", b => - { - b.Property("PageId") - .HasColumnType("char(36)"); - - b.Property("ServerId") - .HasColumnType("char(36)"); - - b.HasKey("PageId", "ServerId"); - - b.HasIndex("ServerId"); - - b.ToTable("PageServer"); - }); - - modelBuilder.Entity("RoleCollection", b => - { - b.Property("CollectionId") - .HasColumnType("char(36)"); - - b.Property("RoleId") - .HasColumnType("char(36)"); - - b.HasKey("CollectionId", "RoleId"); - - b.HasIndex("RoleId"); - - b.ToTable("RoleCollection"); - }); - - modelBuilder.Entity("CategoryGame", b => - { - b.HasOne("LANCommander.Server.Data.Models.Category", null) - .WithMany() - .HasForeignKey("CategoriesId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("LANCommander.Server.Data.Models.Game", null) - .WithMany() - .HasForeignKey("GamesId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("CollectionGame", b => - { - b.HasOne("LANCommander.Server.Data.Models.Collection", null) - .WithMany() - .HasForeignKey("CollectionId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("LANCommander.Server.Data.Models.Game", null) - .WithMany() - .HasForeignKey("GameId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("GameDeveloper", b => - { - b.HasOne("LANCommander.Server.Data.Models.Company", null) - .WithMany() - .HasForeignKey("DeveloperId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("LANCommander.Server.Data.Models.Game", null) - .WithMany() - .HasForeignKey("GameId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("GameGenre", b => - { - b.HasOne("LANCommander.Server.Data.Models.Game", null) - .WithMany() - .HasForeignKey("GamesId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("LANCommander.Server.Data.Models.Genre", null) - .WithMany() - .HasForeignKey("GenresId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("GamePlatform", b => - { - b.HasOne("LANCommander.Server.Data.Models.Game", null) - .WithMany() - .HasForeignKey("GamesId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("LANCommander.Server.Data.Models.Platform", null) - .WithMany() - .HasForeignKey("PlatformsId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("GamePublisher", b => - { - b.HasOne("LANCommander.Server.Data.Models.Game", null) - .WithMany() - .HasForeignKey("GameId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("LANCommander.Server.Data.Models.Company", null) - .WithMany() - .HasForeignKey("PublisherId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("GameRedistributable", b => - { - b.HasOne("LANCommander.Server.Data.Models.Game", null) - .WithMany() - .HasForeignKey("GameId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("LANCommander.Server.Data.Models.Redistributable", null) - .WithMany() - .HasForeignKey("RedistributableId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("GameTag", b => - { - b.HasOne("LANCommander.Server.Data.Models.Game", null) - .WithMany() - .HasForeignKey("GamesId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("LANCommander.Server.Data.Models.Tag", null) - .WithMany() - .HasForeignKey("TagsId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Action", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.Game", "Game") - .WithMany("Actions") - .HasForeignKey("GameId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("LANCommander.Server.Data.Models.Server", "Server") - .WithMany("Actions") - .HasForeignKey("ServerId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("CreatedBy"); - - b.Navigation("Game"); - - b.Navigation("Server"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Archive", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.Game", "Game") - .WithMany("Archives") - .HasForeignKey("GameId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("LANCommander.Server.Data.Models.Archive", "LastVersion") - .WithMany() - .HasForeignKey("LastVersionId"); - - b.HasOne("LANCommander.Server.Data.Models.Redistributable", "Redistributable") - .WithMany("Archives") - .HasForeignKey("RedistributableId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("LANCommander.Server.Data.Models.StorageLocation", "StorageLocation") - .WithMany("Archives") - .HasForeignKey("StorageLocationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("CreatedBy"); - - b.Navigation("Game"); - - b.Navigation("LastVersion"); - - b.Navigation("Redistributable"); - - b.Navigation("StorageLocation"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Category", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.Category", "Parent") - .WithMany("Children") - .HasForeignKey("ParentId"); - - b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("CreatedBy"); - - b.Navigation("Parent"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Collection", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("CreatedBy"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Company", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("CreatedBy"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Engine", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById"); - - b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById"); - - b.Navigation("CreatedBy"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Game", b => - { - b.HasOne("LANCommander.Server.Data.Models.Game", "BaseGame") - .WithMany("DependentGames") - .HasForeignKey("BaseGameId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.Engine", "Engine") - .WithMany("Games") - .HasForeignKey("EngineId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("BaseGame"); - - b.Navigation("CreatedBy"); - - b.Navigation("Engine"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.GameCustomField", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById"); - - b.HasOne("LANCommander.Server.Data.Models.Game", "Game") - .WithMany("CustomFields") - .HasForeignKey("GameId"); - - b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById"); - - b.Navigation("CreatedBy"); - - b.Navigation("Game"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.GameSave", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.Game", "Game") - .WithMany("GameSaves") - .HasForeignKey("GameId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.StorageLocation", "StorageLocation") - .WithMany("GameSaves") - .HasForeignKey("StorageLocationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.User", "User") - .WithMany("GameSaves") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("Game"); - - b.Navigation("StorageLocation"); - - b.Navigation("UpdatedBy"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Genre", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("CreatedBy"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Issue", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.Game", "Game") - .WithMany("Issues") - .HasForeignKey("GameId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("LANCommander.Server.Data.Models.User", "ResolvedBy") - .WithMany() - .HasForeignKey("ResolvedById"); - - b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("CreatedBy"); - - b.Navigation("Game"); - - b.Navigation("ResolvedBy"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Key", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", "ClaimedByUser") - .WithMany() - .HasForeignKey("ClaimedByUserId"); - - b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.Game", "Game") - .WithMany("Keys") - .HasForeignKey("GameId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("ClaimedByUser"); - - b.Navigation("CreatedBy"); - - b.Navigation("Game"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Library", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.User", "User") - .WithOne("Library") - .HasForeignKey("LANCommander.Server.Data.Models.Library", "UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("UpdatedBy"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Media", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.Game", "Game") - .WithMany("Media") - .HasForeignKey("GameId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("LANCommander.Server.Data.Models.StorageLocation", "StorageLocation") - .WithMany("Media") - .HasForeignKey("StorageLocationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("LANCommander.Server.Data.Models.Media", "Thumbnail") - .WithOne("Parent") - .HasForeignKey("LANCommander.Server.Data.Models.Media", "ThumbnailId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.User", "User") - .WithMany("Media") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade); - - b.Navigation("CreatedBy"); - - b.Navigation("Game"); - - b.Navigation("StorageLocation"); - - b.Navigation("Thumbnail"); - - b.Navigation("UpdatedBy"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.MultiplayerMode", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.Game", "Game") - .WithMany("MultiplayerModes") - .HasForeignKey("GameId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("CreatedBy"); - - b.Navigation("Game"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Page", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.Page", "Parent") - .WithMany("Children") - .HasForeignKey("ParentId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("CreatedBy"); - - b.Navigation("Parent"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Platform", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("CreatedBy"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.PlaySession", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.Game", "Game") - .WithMany("PlaySessions") - .HasForeignKey("GameId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.User", "User") - .WithMany("PlaySessions") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("Game"); - - b.Navigation("UpdatedBy"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Redistributable", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("CreatedBy"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Role", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("CreatedBy"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.SavePath", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.Game", "Game") - .WithMany("SavePaths") - .HasForeignKey("GameId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("CreatedBy"); - - b.Navigation("Game"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Script", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.Game", "Game") - .WithMany("Scripts") - .HasForeignKey("GameId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("LANCommander.Server.Data.Models.Redistributable", "Redistributable") - .WithMany("Scripts") - .HasForeignKey("RedistributableId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("LANCommander.Server.Data.Models.Server", "Server") - .WithMany("Scripts") - .HasForeignKey("ServerId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("CreatedBy"); - - b.Navigation("Game"); - - b.Navigation("Redistributable"); - - b.Navigation("Server"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Server", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.Game", "Game") - .WithMany("Servers") - .HasForeignKey("GameId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("CreatedBy"); - - b.Navigation("Game"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.ServerConsole", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.Server", "Server") - .WithMany() - .HasForeignKey("ServerId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("LANCommander.Server.Data.Models.Server", null) - .WithMany("ServerConsoles") - .HasForeignKey("ServerId1"); - - b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("CreatedBy"); - - b.Navigation("Server"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.ServerHttpPath", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.Server", "Server") - .WithMany() - .HasForeignKey("ServerId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("LANCommander.Server.Data.Models.Server", null) - .WithMany("HttpPaths") - .HasForeignKey("ServerId1"); - - b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("CreatedBy"); - - b.Navigation("Server"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.StorageLocation", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById"); - - b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById"); - - b.Navigation("CreatedBy"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Tag", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("CreatedBy"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.User", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("CreatedBy"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.UserCustomField", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.User", "User") - .WithMany("CustomFields") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("UpdatedBy"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("LibraryGame", b => - { - b.HasOne("LANCommander.Server.Data.Models.Game", null) - .WithMany() - .HasForeignKey("GameId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("LANCommander.Server.Data.Models.Library", null) - .WithMany() - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => - { - b.HasOne("LANCommander.Server.Data.Models.Role", null) - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => - { - b.HasOne("LANCommander.Server.Data.Models.Role", null) - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("LANCommander.Server.Data.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("PageGame", b => - { - b.HasOne("LANCommander.Server.Data.Models.Game", null) - .WithMany() - .HasForeignKey("GameId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("LANCommander.Server.Data.Models.Page", null) - .WithMany() - .HasForeignKey("PageId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("PageRedistributable", b => - { - b.HasOne("LANCommander.Server.Data.Models.Page", null) - .WithMany() - .HasForeignKey("PageId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("LANCommander.Server.Data.Models.Redistributable", null) - .WithMany() - .HasForeignKey("RedistributableId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("PageServer", b => - { - b.HasOne("LANCommander.Server.Data.Models.Page", null) - .WithMany() - .HasForeignKey("PageId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("LANCommander.Server.Data.Models.Server", null) - .WithMany() - .HasForeignKey("ServerId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("RoleCollection", b => - { - b.HasOne("LANCommander.Server.Data.Models.Collection", null) - .WithMany() - .HasForeignKey("CollectionId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("LANCommander.Server.Data.Models.Role", null) - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Category", b => - { - b.Navigation("Children"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Engine", b => - { - b.Navigation("Games"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Game", b => - { - b.Navigation("Actions"); - - b.Navigation("Archives"); - - b.Navigation("CustomFields"); - - b.Navigation("DependentGames"); - - b.Navigation("GameSaves"); - - b.Navigation("Issues"); - - b.Navigation("Keys"); - - b.Navigation("Media"); - - b.Navigation("MultiplayerModes"); - - b.Navigation("PlaySessions"); - - b.Navigation("SavePaths"); - - b.Navigation("Scripts"); - - b.Navigation("Servers"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Media", b => - { - b.Navigation("Parent"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Page", b => - { - b.Navigation("Children"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Redistributable", b => - { - b.Navigation("Archives"); - - b.Navigation("Scripts"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Server", b => - { - b.Navigation("Actions"); - - b.Navigation("HttpPaths"); - - b.Navigation("Scripts"); - - b.Navigation("ServerConsoles"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.StorageLocation", b => - { - b.Navigation("Archives"); - - b.Navigation("GameSaves"); - - b.Navigation("Media"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.User", b => - { - b.Navigation("CustomFields"); - - b.Navigation("GameSaves"); - - b.Navigation("Library") - .IsRequired(); - - b.Navigation("Media"); - - b.Navigation("PlaySessions"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/LANCommander.Server.Data.MySQL/Migrations/20250213030614_FixServerShadowProperties.Designer.cs b/LANCommander.Server.Data.MySQL/Migrations/20250213030614_FixServerShadowProperties.Designer.cs deleted file mode 100644 index 36fe46dc..00000000 --- a/LANCommander.Server.Data.MySQL/Migrations/20250213030614_FixServerShadowProperties.Designer.cs +++ /dev/null @@ -1,2788 +0,0 @@ -// -using System; -using LANCommander.Server.Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace LANCommander.Server.Data.MySQL.Migrations -{ - [DbContext(typeof(DatabaseContext))] - [Migration("20250213030614_FixServerShadowProperties")] - partial class FixServerShadowProperties - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "9.0.2") - .HasAnnotation("Relational:MaxIdentifierLength", 64); - - MySqlModelBuilderExtensions.AutoIncrementColumns(modelBuilder); - - modelBuilder.Entity("CategoryGame", b => - { - b.Property("CategoriesId") - .HasColumnType("char(36)"); - - b.Property("GamesId") - .HasColumnType("char(36)"); - - b.HasKey("CategoriesId", "GamesId"); - - b.HasIndex("GamesId"); - - b.ToTable("CategoryGame"); - }); - - modelBuilder.Entity("CollectionGame", b => - { - b.Property("CollectionId") - .HasColumnType("char(36)"); - - b.Property("GameId") - .HasColumnType("char(36)"); - - b.HasKey("CollectionId", "GameId"); - - b.HasIndex("GameId"); - - b.ToTable("CollectionGame"); - }); - - modelBuilder.Entity("GameDeveloper", b => - { - b.Property("GameId") - .HasColumnType("char(36)"); - - b.Property("DeveloperId") - .HasColumnType("char(36)"); - - b.HasKey("GameId", "DeveloperId"); - - b.HasIndex("DeveloperId"); - - b.ToTable("GameDeveloper"); - }); - - modelBuilder.Entity("GameGenre", b => - { - b.Property("GamesId") - .HasColumnType("char(36)"); - - b.Property("GenresId") - .HasColumnType("char(36)"); - - b.HasKey("GamesId", "GenresId"); - - b.HasIndex("GenresId"); - - b.ToTable("GameGenre"); - }); - - modelBuilder.Entity("GamePlatform", b => - { - b.Property("GamesId") - .HasColumnType("char(36)"); - - b.Property("PlatformsId") - .HasColumnType("char(36)"); - - b.HasKey("GamesId", "PlatformsId"); - - b.HasIndex("PlatformsId"); - - b.ToTable("GamePlatform"); - }); - - modelBuilder.Entity("GamePublisher", b => - { - b.Property("GameId") - .HasColumnType("char(36)"); - - b.Property("PublisherId") - .HasColumnType("char(36)"); - - b.HasKey("GameId", "PublisherId"); - - b.HasIndex("PublisherId"); - - b.ToTable("GamePublisher"); - }); - - modelBuilder.Entity("GameRedistributable", b => - { - b.Property("GameId") - .HasColumnType("char(36)"); - - b.Property("RedistributableId") - .HasColumnType("char(36)"); - - b.HasKey("GameId", "RedistributableId"); - - b.HasIndex("RedistributableId"); - - b.ToTable("GameRedistributable"); - }); - - modelBuilder.Entity("GameTag", b => - { - b.Property("GamesId") - .HasColumnType("char(36)"); - - b.Property("TagsId") - .HasColumnType("char(36)"); - - b.HasKey("GamesId", "TagsId"); - - b.HasIndex("TagsId"); - - b.ToTable("GameTag"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Action", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("char(36)"); - - b.Property("Arguments") - .HasColumnType("longtext"); - - b.Property("CreatedById") - .HasColumnType("char(36)"); - - b.Property("CreatedOn") - .HasColumnType("datetime(6)"); - - b.Property("GameId") - .HasColumnType("char(36)"); - - b.Property("Name") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("Path") - .HasColumnType("longtext"); - - b.Property("PrimaryAction") - .HasColumnType("tinyint(1)"); - - b.Property("ServerId") - .HasColumnType("char(36)"); - - b.Property("SortOrder") - .HasColumnType("int"); - - b.Property("UpdatedById") - .HasColumnType("char(36)"); - - b.Property("UpdatedOn") - .HasColumnType("datetime(6)"); - - b.Property("WorkingDirectory") - .HasColumnType("longtext"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("GameId"); - - b.HasIndex("ServerId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Actions"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Archive", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("char(36)"); - - b.Property("Changelog") - .HasColumnType("longtext"); - - b.Property("CompressedSize") - .HasColumnType("bigint"); - - b.Property("CreatedById") - .HasColumnType("char(36)"); - - b.Property("CreatedOn") - .HasColumnType("datetime(6)"); - - b.Property("GameId") - .HasColumnType("char(36)"); - - b.Property("LastVersionId") - .HasColumnType("char(36)"); - - b.Property("ObjectKey") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("RedistributableId") - .HasColumnType("char(36)"); - - b.Property("StorageLocationId") - .HasColumnType("char(36)"); - - b.Property("UncompressedSize") - .HasColumnType("bigint"); - - b.Property("UpdatedById") - .HasColumnType("char(36)"); - - b.Property("UpdatedOn") - .HasColumnType("datetime(6)"); - - b.Property("Version") - .IsRequired() - .HasColumnType("longtext"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("GameId"); - - b.HasIndex("LastVersionId"); - - b.HasIndex("RedistributableId"); - - b.HasIndex("StorageLocationId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Archive"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Category", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("char(36)"); - - b.Property("CreatedById") - .HasColumnType("char(36)"); - - b.Property("CreatedOn") - .HasColumnType("datetime(6)"); - - b.Property("Name") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("ParentId") - .HasColumnType("char(36)"); - - b.Property("UpdatedById") - .HasColumnType("char(36)"); - - b.Property("UpdatedOn") - .HasColumnType("datetime(6)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ParentId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Categories"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Collection", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("char(36)"); - - b.Property("CreatedById") - .HasColumnType("char(36)"); - - b.Property("CreatedOn") - .HasColumnType("datetime(6)"); - - b.Property("Name") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("UpdatedById") - .HasColumnType("char(36)"); - - b.Property("UpdatedOn") - .HasColumnType("datetime(6)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Collections"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Company", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("char(36)"); - - b.Property("CreatedById") - .HasColumnType("char(36)"); - - b.Property("CreatedOn") - .HasColumnType("datetime(6)"); - - b.Property("Name") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("UpdatedById") - .HasColumnType("char(36)"); - - b.Property("UpdatedOn") - .HasColumnType("datetime(6)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Companies"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Engine", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("char(36)"); - - b.Property("CreatedById") - .HasColumnType("char(36)"); - - b.Property("CreatedOn") - .HasColumnType("datetime(6)"); - - b.Property("Name") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("UpdatedById") - .HasColumnType("char(36)"); - - b.Property("UpdatedOn") - .HasColumnType("datetime(6)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Engines"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Game", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("char(36)"); - - b.Property("BaseGameId") - .HasColumnType("char(36)"); - - b.Property("CreatedById") - .HasColumnType("char(36)"); - - b.Property("CreatedOn") - .HasColumnType("datetime(6)"); - - b.Property("Description") - .HasColumnType("longtext"); - - b.Property("DirectoryName") - .HasColumnType("longtext"); - - b.Property("EngineId") - .HasColumnType("char(36)"); - - b.Property("IGDBId") - .HasColumnType("bigint"); - - b.Property("KeyAllocationMethod") - .HasColumnType("int"); - - b.Property("Notes") - .HasColumnType("longtext"); - - b.Property("ReleasedOn") - .HasColumnType("datetime(6)"); - - b.Property("Singleplayer") - .HasColumnType("tinyint(1)"); - - b.Property("SortTitle") - .HasColumnType("longtext"); - - b.Property("Title") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("Type") - .HasColumnType("int"); - - b.Property("UpdatedById") - .HasColumnType("char(36)"); - - b.Property("UpdatedOn") - .HasColumnType("datetime(6)"); - - b.Property("ValidKeyRegex") - .HasColumnType("longtext"); - - b.HasKey("Id"); - - b.HasIndex("BaseGameId"); - - b.HasIndex("CreatedById"); - - b.HasIndex("EngineId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Games"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.GameCustomField", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("char(36)"); - - b.Property("CreatedById") - .HasColumnType("char(36)"); - - b.Property("CreatedOn") - .HasColumnType("datetime(6)"); - - b.Property("GameId") - .HasColumnType("char(36)"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("varchar(64)"); - - b.Property("UpdatedById") - .HasColumnType("char(36)"); - - b.Property("UpdatedOn") - .HasColumnType("datetime(6)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(1024) - .HasColumnType("varchar(1024)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("GameId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("GameCustomField"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.GameSave", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("char(36)"); - - b.Property("CreatedById") - .HasColumnType("char(36)"); - - b.Property("CreatedOn") - .HasColumnType("datetime(6)"); - - b.Property("GameId") - .HasColumnType("char(36)"); - - b.Property("Size") - .HasColumnType("bigint"); - - b.Property("StorageLocationId") - .HasColumnType("char(36)"); - - b.Property("UpdatedById") - .HasColumnType("char(36)"); - - b.Property("UpdatedOn") - .HasColumnType("datetime(6)"); - - b.Property("UserId") - .HasColumnType("char(36)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("GameId"); - - b.HasIndex("StorageLocationId"); - - b.HasIndex("UpdatedById"); - - b.HasIndex("UserId"); - - b.ToTable("GameSaves"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Genre", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("char(36)"); - - b.Property("CreatedById") - .HasColumnType("char(36)"); - - b.Property("CreatedOn") - .HasColumnType("datetime(6)"); - - b.Property("Name") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("UpdatedById") - .HasColumnType("char(36)"); - - b.Property("UpdatedOn") - .HasColumnType("datetime(6)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Genres"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Issue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("char(36)"); - - b.Property("CreatedById") - .HasColumnType("char(36)"); - - b.Property("CreatedOn") - .HasColumnType("datetime(6)"); - - b.Property("Description") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("GameId") - .HasColumnType("char(36)"); - - b.Property("ResolvedById") - .HasColumnType("char(36)"); - - b.Property("ResolvedOn") - .HasColumnType("datetime(6)"); - - b.Property("UpdatedById") - .HasColumnType("char(36)"); - - b.Property("UpdatedOn") - .HasColumnType("datetime(6)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("GameId"); - - b.HasIndex("ResolvedById"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Issues"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Key", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("char(36)"); - - b.Property("AllocationMethod") - .HasColumnType("int"); - - b.Property("ClaimedByComputerName") - .HasMaxLength(255) - .HasColumnType("varchar(255)"); - - b.Property("ClaimedByIpv4Address") - .HasMaxLength(15) - .HasColumnType("varchar(15)"); - - b.Property("ClaimedByMacAddress") - .HasMaxLength(17) - .HasColumnType("varchar(17)"); - - b.Property("ClaimedByUserId") - .HasColumnType("char(36)"); - - b.Property("ClaimedOn") - .HasColumnType("datetime(6)"); - - b.Property("CreatedById") - .HasColumnType("char(36)"); - - b.Property("CreatedOn") - .HasColumnType("datetime(6)"); - - b.Property("GameId") - .HasColumnType("char(36)"); - - b.Property("UpdatedById") - .HasColumnType("char(36)"); - - b.Property("UpdatedOn") - .HasColumnType("datetime(6)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(255) - .HasColumnType("varchar(255)"); - - b.HasKey("Id"); - - b.HasIndex("ClaimedByUserId"); - - b.HasIndex("CreatedById"); - - b.HasIndex("GameId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Keys"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Library", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("char(36)"); - - b.Property("CreatedById") - .HasColumnType("char(36)"); - - b.Property("CreatedOn") - .HasColumnType("datetime(6)"); - - b.Property("UpdatedById") - .HasColumnType("char(36)"); - - b.Property("UpdatedOn") - .HasColumnType("datetime(6)"); - - b.Property("UserId") - .HasColumnType("char(36)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("UpdatedById"); - - b.HasIndex("UserId") - .IsUnique(); - - b.ToTable("Libraries"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Media", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("char(36)"); - - b.Property("Crc32") - .IsRequired() - .HasMaxLength(8) - .HasColumnType("varchar(8)"); - - b.Property("CreatedById") - .HasColumnType("char(36)"); - - b.Property("CreatedOn") - .HasColumnType("datetime(6)"); - - b.Property("FileId") - .HasColumnType("char(36)"); - - b.Property("GameId") - .HasColumnType("char(36)"); - - b.Property("MimeType") - .HasMaxLength(255) - .HasColumnType("varchar(255)"); - - b.Property("Name") - .HasMaxLength(64) - .HasColumnType("varchar(64)"); - - b.Property("SourceUrl") - .HasMaxLength(2048) - .HasColumnType("varchar(2048)"); - - b.Property("StorageLocationId") - .HasColumnType("char(36)"); - - b.Property("ThumbnailId") - .HasColumnType("char(36)"); - - b.Property("Type") - .HasColumnType("int"); - - b.Property("UpdatedById") - .HasColumnType("char(36)"); - - b.Property("UpdatedOn") - .HasColumnType("datetime(6)"); - - b.Property("UserId") - .HasColumnType("char(36)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("GameId"); - - b.HasIndex("StorageLocationId"); - - b.HasIndex("ThumbnailId") - .IsUnique(); - - b.HasIndex("UpdatedById"); - - b.HasIndex("UserId"); - - b.ToTable("Media"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.MultiplayerMode", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("char(36)"); - - b.Property("CreatedById") - .HasColumnType("char(36)"); - - b.Property("CreatedOn") - .HasColumnType("datetime(6)"); - - b.Property("Description") - .HasColumnType("longtext"); - - b.Property("GameId") - .HasColumnType("char(36)"); - - b.Property("MaxPlayers") - .HasColumnType("int"); - - b.Property("MinPlayers") - .HasColumnType("int"); - - b.Property("NetworkProtocol") - .HasColumnType("int"); - - b.Property("Spectators") - .HasColumnType("int"); - - b.Property("Type") - .HasColumnType("int"); - - b.Property("UpdatedById") - .HasColumnType("char(36)"); - - b.Property("UpdatedOn") - .HasColumnType("datetime(6)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("GameId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("MultiplayerModes"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Page", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("char(36)"); - - b.Property("Contents") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("CreatedById") - .HasColumnType("char(36)"); - - b.Property("CreatedOn") - .HasColumnType("datetime(6)"); - - b.Property("ParentId") - .HasColumnType("char(36)"); - - b.Property("Route") - .IsRequired() - .HasMaxLength(2048) - .HasColumnType("varchar(2048)"); - - b.Property("Slug") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.Property("SortOrder") - .HasColumnType("int"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.Property("UpdatedById") - .HasColumnType("char(36)"); - - b.Property("UpdatedOn") - .HasColumnType("datetime(6)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ParentId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Pages"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Platform", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("char(36)"); - - b.Property("CreatedById") - .HasColumnType("char(36)"); - - b.Property("CreatedOn") - .HasColumnType("datetime(6)"); - - b.Property("Name") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("UpdatedById") - .HasColumnType("char(36)"); - - b.Property("UpdatedOn") - .HasColumnType("datetime(6)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Platforms"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.PlaySession", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("char(36)"); - - b.Property("CreatedById") - .HasColumnType("char(36)"); - - b.Property("CreatedOn") - .HasColumnType("datetime(6)"); - - b.Property("End") - .HasColumnType("datetime(6)"); - - b.Property("GameId") - .HasColumnType("char(36)"); - - b.Property("Start") - .HasColumnType("datetime(6)"); - - b.Property("UpdatedById") - .HasColumnType("char(36)"); - - b.Property("UpdatedOn") - .HasColumnType("datetime(6)"); - - b.Property("UserId") - .HasColumnType("char(36)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("GameId"); - - b.HasIndex("UpdatedById"); - - b.HasIndex("UserId"); - - b.ToTable("PlaySessions"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Redistributable", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("char(36)"); - - b.Property("CreatedById") - .HasColumnType("char(36)"); - - b.Property("CreatedOn") - .HasColumnType("datetime(6)"); - - b.Property("Description") - .HasColumnType("longtext"); - - b.Property("Name") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("Notes") - .HasColumnType("longtext"); - - b.Property("UpdatedById") - .HasColumnType("char(36)"); - - b.Property("UpdatedOn") - .HasColumnType("datetime(6)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Redistributables"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Role", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("char(36)"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasColumnType("longtext"); - - b.Property("CreatedById") - .HasColumnType("char(36)"); - - b.Property("CreatedOn") - .HasColumnType("datetime(6)"); - - b.Property("Name") - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.Property("NormalizedName") - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.Property("UpdatedById") - .HasColumnType("char(36)"); - - b.Property("UpdatedOn") - .HasColumnType("datetime(6)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("NormalizedName") - .IsUnique() - .HasDatabaseName("RoleNameIndex"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Roles", (string)null); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.SavePath", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("char(36)"); - - b.Property("CreatedById") - .HasColumnType("char(36)"); - - b.Property("CreatedOn") - .HasColumnType("datetime(6)"); - - b.Property("GameId") - .HasColumnType("char(36)"); - - b.Property("IsRegex") - .HasColumnType("tinyint(1)"); - - b.Property("Path") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("Type") - .HasColumnType("int"); - - b.Property("UpdatedById") - .HasColumnType("char(36)"); - - b.Property("UpdatedOn") - .HasColumnType("datetime(6)"); - - b.Property("WorkingDirectory") - .HasColumnType("longtext"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("GameId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("SavePaths"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Script", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("char(36)"); - - b.Property("Contents") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("CreatedById") - .HasColumnType("char(36)"); - - b.Property("CreatedOn") - .HasColumnType("datetime(6)"); - - b.Property("Description") - .HasColumnType("longtext"); - - b.Property("GameId") - .HasColumnType("char(36)"); - - b.Property("Name") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("RedistributableId") - .HasColumnType("char(36)"); - - b.Property("RequiresAdmin") - .HasColumnType("tinyint(1)"); - - b.Property("ServerId") - .HasColumnType("char(36)"); - - b.Property("Type") - .HasColumnType("int"); - - b.Property("UpdatedById") - .HasColumnType("char(36)"); - - b.Property("UpdatedOn") - .HasColumnType("datetime(6)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("GameId"); - - b.HasIndex("RedistributableId"); - - b.HasIndex("ServerId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Scripts"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Server", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("char(36)"); - - b.Property("Arguments") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("Autostart") - .HasColumnType("tinyint(1)"); - - b.Property("AutostartDelay") - .HasColumnType("int"); - - b.Property("AutostartMethod") - .HasColumnType("int"); - - b.Property("CreatedById") - .HasColumnType("char(36)"); - - b.Property("CreatedOn") - .HasColumnType("datetime(6)"); - - b.Property("GameId") - .HasColumnType("char(36)"); - - b.Property("Host") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("Name") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("OnStartScriptPath") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("OnStopScriptPath") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("Path") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("Port") - .HasColumnType("int"); - - b.Property("ProcessTerminationMethod") - .HasColumnType("int"); - - b.Property("UpdatedById") - .HasColumnType("char(36)"); - - b.Property("UpdatedOn") - .HasColumnType("datetime(6)"); - - b.Property("UseShellExecute") - .HasColumnType("tinyint(1)"); - - b.Property("WorkingDirectory") - .IsRequired() - .HasColumnType("longtext"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("GameId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Servers"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.ServerConsole", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("char(36)"); - - b.Property("CreatedById") - .HasColumnType("char(36)"); - - b.Property("CreatedOn") - .HasColumnType("datetime(6)"); - - b.Property("Host") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("varchar(64)"); - - b.Property("Password") - .IsRequired() - .HasMaxLength(128) - .HasColumnType("varchar(128)"); - - b.Property("Path") - .IsRequired() - .HasMaxLength(1024) - .HasColumnType("varchar(1024)"); - - b.Property("Port") - .HasColumnType("int"); - - b.Property("ServerId") - .HasColumnType("char(36)"); - - b.Property("Type") - .HasColumnType("int"); - - b.Property("UpdatedById") - .HasColumnType("char(36)"); - - b.Property("UpdatedOn") - .HasColumnType("datetime(6)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ServerId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("ServerConsoles"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.ServerHttpPath", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("char(36)"); - - b.Property("CreatedById") - .HasColumnType("char(36)"); - - b.Property("CreatedOn") - .HasColumnType("datetime(6)"); - - b.Property("LocalPath") - .IsRequired() - .HasMaxLength(1024) - .HasColumnType("varchar(1024)"); - - b.Property("Path") - .IsRequired() - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.Property("ServerId") - .HasColumnType("char(36)"); - - b.Property("UpdatedById") - .HasColumnType("char(36)"); - - b.Property("UpdatedOn") - .HasColumnType("datetime(6)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ServerId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("ServerHttpPath"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.StorageLocation", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("char(36)"); - - b.Property("CreatedById") - .HasColumnType("char(36)"); - - b.Property("CreatedOn") - .HasColumnType("datetime(6)"); - - b.Property("Default") - .HasColumnType("tinyint(1)"); - - b.Property("Path") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("Type") - .HasColumnType("int"); - - b.Property("UpdatedById") - .HasColumnType("char(36)"); - - b.Property("UpdatedOn") - .HasColumnType("datetime(6)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("UpdatedById"); - - b.ToTable("StorageLocations"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Tag", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("char(36)"); - - b.Property("CreatedById") - .HasColumnType("char(36)"); - - b.Property("CreatedOn") - .HasColumnType("datetime(6)"); - - b.Property("Name") - .IsRequired() - .HasColumnType("longtext"); - - b.Property("UpdatedById") - .HasColumnType("char(36)"); - - b.Property("UpdatedOn") - .HasColumnType("datetime(6)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Tags"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("char(36)"); - - b.Property("AccessFailedCount") - .HasColumnType("int"); - - b.Property("Alias") - .HasColumnType("longtext"); - - b.Property("Approved") - .HasColumnType("tinyint(1)"); - - b.Property("ApprovedOn") - .HasColumnType("datetime(6)"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasColumnType("longtext"); - - b.Property("CreatedById") - .HasColumnType("char(36)"); - - b.Property("CreatedOn") - .HasColumnType("datetime(6)"); - - b.Property("Email") - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.Property("EmailConfirmed") - .HasColumnType("tinyint(1)"); - - b.Property("LockoutEnabled") - .HasColumnType("tinyint(1)"); - - b.Property("LockoutEnd") - .HasColumnType("datetime(6)"); - - b.Property("NormalizedEmail") - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.Property("NormalizedUserName") - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.Property("PasswordHash") - .HasColumnType("longtext"); - - b.Property("PhoneNumber") - .HasColumnType("longtext"); - - b.Property("PhoneNumberConfirmed") - .HasColumnType("tinyint(1)"); - - b.Property("RefreshToken") - .HasColumnType("longtext"); - - b.Property("RefreshTokenExpiration") - .HasColumnType("datetime(6)"); - - b.Property("SecurityStamp") - .HasColumnType("longtext"); - - b.Property("TwoFactorEnabled") - .HasColumnType("tinyint(1)"); - - b.Property("UpdatedById") - .HasColumnType("char(36)"); - - b.Property("UpdatedOn") - .HasColumnType("datetime(6)"); - - b.Property("UserName") - .HasMaxLength(256) - .HasColumnType("varchar(256)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("NormalizedEmail") - .HasDatabaseName("EmailIndex"); - - b.HasIndex("NormalizedUserName") - .IsUnique() - .HasDatabaseName("UserNameIndex"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Users", (string)null); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.UserCustomField", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("char(36)"); - - b.Property("CreatedById") - .HasColumnType("char(36)"); - - b.Property("CreatedOn") - .HasColumnType("datetime(6)"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(64) - .HasColumnType("varchar(64)"); - - b.Property("UpdatedById") - .HasColumnType("char(36)"); - - b.Property("UpdatedOn") - .HasColumnType("datetime(6)"); - - b.Property("UserId") - .HasColumnType("char(36)"); - - b.Property("Value") - .IsRequired() - .HasMaxLength(1024) - .HasColumnType("varchar(1024)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("UpdatedById"); - - b.HasIndex("UserId"); - - b.ToTable("UserCustomField"); - }); - - modelBuilder.Entity("LibraryGame", b => - { - b.Property("GameId") - .HasColumnType("char(36)"); - - b.Property("LibraryId") - .HasColumnType("char(36)"); - - b.HasKey("GameId", "LibraryId"); - - b.HasIndex("LibraryId"); - - b.ToTable("LibraryGame"); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id")); - - b.Property("ClaimType") - .HasColumnType("longtext"); - - b.Property("ClaimValue") - .HasColumnType("longtext"); - - b.Property("RoleId") - .HasColumnType("char(36)"); - - b.HasKey("Id"); - - b.HasIndex("RoleId"); - - b.ToTable("RoleClaims", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id")); - - b.Property("ClaimType") - .HasColumnType("longtext"); - - b.Property("ClaimValue") - .HasColumnType("longtext"); - - b.Property("UserId") - .HasColumnType("char(36)"); - - b.HasKey("Id"); - - b.HasIndex("UserId"); - - b.ToTable("UserClaims", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => - { - b.Property("LoginProvider") - .HasColumnType("varchar(255)"); - - b.Property("ProviderKey") - .HasColumnType("varchar(255)"); - - b.Property("ProviderDisplayName") - .HasColumnType("longtext"); - - b.Property("UserId") - .HasColumnType("char(36)"); - - b.HasKey("LoginProvider", "ProviderKey"); - - b.HasIndex("UserId"); - - b.ToTable("UserLogins", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => - { - b.Property("UserId") - .HasColumnType("char(36)"); - - b.Property("RoleId") - .HasColumnType("char(36)"); - - b.HasKey("UserId", "RoleId"); - - b.HasIndex("RoleId"); - - b.ToTable("UserRoles", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => - { - b.Property("UserId") - .HasColumnType("char(36)"); - - b.Property("LoginProvider") - .HasColumnType("varchar(255)"); - - b.Property("Name") - .HasColumnType("varchar(255)"); - - b.Property("Value") - .HasColumnType("longtext"); - - b.HasKey("UserId", "LoginProvider", "Name"); - - b.ToTable("UserTokens", (string)null); - }); - - modelBuilder.Entity("PageGame", b => - { - b.Property("GameId") - .HasColumnType("char(36)"); - - b.Property("PageId") - .HasColumnType("char(36)"); - - b.HasKey("GameId", "PageId"); - - b.HasIndex("PageId"); - - b.ToTable("PageGame"); - }); - - modelBuilder.Entity("PageRedistributable", b => - { - b.Property("PageId") - .HasColumnType("char(36)"); - - b.Property("RedistributableId") - .HasColumnType("char(36)"); - - b.HasKey("PageId", "RedistributableId"); - - b.HasIndex("RedistributableId"); - - b.ToTable("PageRedistributable"); - }); - - modelBuilder.Entity("PageServer", b => - { - b.Property("PageId") - .HasColumnType("char(36)"); - - b.Property("ServerId") - .HasColumnType("char(36)"); - - b.HasKey("PageId", "ServerId"); - - b.HasIndex("ServerId"); - - b.ToTable("PageServer"); - }); - - modelBuilder.Entity("RoleCollection", b => - { - b.Property("CollectionId") - .HasColumnType("char(36)"); - - b.Property("RoleId") - .HasColumnType("char(36)"); - - b.HasKey("CollectionId", "RoleId"); - - b.HasIndex("RoleId"); - - b.ToTable("RoleCollection"); - }); - - modelBuilder.Entity("CategoryGame", b => - { - b.HasOne("LANCommander.Server.Data.Models.Category", null) - .WithMany() - .HasForeignKey("CategoriesId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("LANCommander.Server.Data.Models.Game", null) - .WithMany() - .HasForeignKey("GamesId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("CollectionGame", b => - { - b.HasOne("LANCommander.Server.Data.Models.Collection", null) - .WithMany() - .HasForeignKey("CollectionId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("LANCommander.Server.Data.Models.Game", null) - .WithMany() - .HasForeignKey("GameId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("GameDeveloper", b => - { - b.HasOne("LANCommander.Server.Data.Models.Company", null) - .WithMany() - .HasForeignKey("DeveloperId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("LANCommander.Server.Data.Models.Game", null) - .WithMany() - .HasForeignKey("GameId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("GameGenre", b => - { - b.HasOne("LANCommander.Server.Data.Models.Game", null) - .WithMany() - .HasForeignKey("GamesId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("LANCommander.Server.Data.Models.Genre", null) - .WithMany() - .HasForeignKey("GenresId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("GamePlatform", b => - { - b.HasOne("LANCommander.Server.Data.Models.Game", null) - .WithMany() - .HasForeignKey("GamesId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("LANCommander.Server.Data.Models.Platform", null) - .WithMany() - .HasForeignKey("PlatformsId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("GamePublisher", b => - { - b.HasOne("LANCommander.Server.Data.Models.Game", null) - .WithMany() - .HasForeignKey("GameId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("LANCommander.Server.Data.Models.Company", null) - .WithMany() - .HasForeignKey("PublisherId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("GameRedistributable", b => - { - b.HasOne("LANCommander.Server.Data.Models.Game", null) - .WithMany() - .HasForeignKey("GameId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("LANCommander.Server.Data.Models.Redistributable", null) - .WithMany() - .HasForeignKey("RedistributableId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("GameTag", b => - { - b.HasOne("LANCommander.Server.Data.Models.Game", null) - .WithMany() - .HasForeignKey("GamesId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("LANCommander.Server.Data.Models.Tag", null) - .WithMany() - .HasForeignKey("TagsId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Action", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.Game", "Game") - .WithMany("Actions") - .HasForeignKey("GameId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("LANCommander.Server.Data.Models.Server", "Server") - .WithMany("Actions") - .HasForeignKey("ServerId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("CreatedBy"); - - b.Navigation("Game"); - - b.Navigation("Server"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Archive", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.Game", "Game") - .WithMany("Archives") - .HasForeignKey("GameId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("LANCommander.Server.Data.Models.Archive", "LastVersion") - .WithMany() - .HasForeignKey("LastVersionId"); - - b.HasOne("LANCommander.Server.Data.Models.Redistributable", "Redistributable") - .WithMany("Archives") - .HasForeignKey("RedistributableId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("LANCommander.Server.Data.Models.StorageLocation", "StorageLocation") - .WithMany("Archives") - .HasForeignKey("StorageLocationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("CreatedBy"); - - b.Navigation("Game"); - - b.Navigation("LastVersion"); - - b.Navigation("Redistributable"); - - b.Navigation("StorageLocation"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Category", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.Category", "Parent") - .WithMany("Children") - .HasForeignKey("ParentId"); - - b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("CreatedBy"); - - b.Navigation("Parent"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Collection", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("CreatedBy"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Company", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("CreatedBy"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Engine", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById"); - - b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById"); - - b.Navigation("CreatedBy"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Game", b => - { - b.HasOne("LANCommander.Server.Data.Models.Game", "BaseGame") - .WithMany("DependentGames") - .HasForeignKey("BaseGameId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.Engine", "Engine") - .WithMany("Games") - .HasForeignKey("EngineId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("BaseGame"); - - b.Navigation("CreatedBy"); - - b.Navigation("Engine"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.GameCustomField", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById"); - - b.HasOne("LANCommander.Server.Data.Models.Game", "Game") - .WithMany("CustomFields") - .HasForeignKey("GameId"); - - b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById"); - - b.Navigation("CreatedBy"); - - b.Navigation("Game"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.GameSave", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.Game", "Game") - .WithMany("GameSaves") - .HasForeignKey("GameId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.StorageLocation", "StorageLocation") - .WithMany("GameSaves") - .HasForeignKey("StorageLocationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.User", "User") - .WithMany("GameSaves") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("Game"); - - b.Navigation("StorageLocation"); - - b.Navigation("UpdatedBy"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Genre", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("CreatedBy"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Issue", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.Game", "Game") - .WithMany("Issues") - .HasForeignKey("GameId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("LANCommander.Server.Data.Models.User", "ResolvedBy") - .WithMany() - .HasForeignKey("ResolvedById"); - - b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("CreatedBy"); - - b.Navigation("Game"); - - b.Navigation("ResolvedBy"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Key", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", "ClaimedByUser") - .WithMany() - .HasForeignKey("ClaimedByUserId"); - - b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.Game", "Game") - .WithMany("Keys") - .HasForeignKey("GameId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("ClaimedByUser"); - - b.Navigation("CreatedBy"); - - b.Navigation("Game"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Library", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.User", "User") - .WithOne("Library") - .HasForeignKey("LANCommander.Server.Data.Models.Library", "UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("UpdatedBy"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Media", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.Game", "Game") - .WithMany("Media") - .HasForeignKey("GameId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("LANCommander.Server.Data.Models.StorageLocation", "StorageLocation") - .WithMany("Media") - .HasForeignKey("StorageLocationId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("LANCommander.Server.Data.Models.Media", "Thumbnail") - .WithOne("Parent") - .HasForeignKey("LANCommander.Server.Data.Models.Media", "ThumbnailId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.User", "User") - .WithMany("Media") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade); - - b.Navigation("CreatedBy"); - - b.Navigation("Game"); - - b.Navigation("StorageLocation"); - - b.Navigation("Thumbnail"); - - b.Navigation("UpdatedBy"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.MultiplayerMode", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.Game", "Game") - .WithMany("MultiplayerModes") - .HasForeignKey("GameId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("CreatedBy"); - - b.Navigation("Game"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Page", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.Page", "Parent") - .WithMany("Children") - .HasForeignKey("ParentId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("CreatedBy"); - - b.Navigation("Parent"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Platform", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("CreatedBy"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.PlaySession", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.Game", "Game") - .WithMany("PlaySessions") - .HasForeignKey("GameId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.User", "User") - .WithMany("PlaySessions") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("Game"); - - b.Navigation("UpdatedBy"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Redistributable", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("CreatedBy"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Role", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("CreatedBy"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.SavePath", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.Game", "Game") - .WithMany("SavePaths") - .HasForeignKey("GameId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("CreatedBy"); - - b.Navigation("Game"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Script", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.Game", "Game") - .WithMany("Scripts") - .HasForeignKey("GameId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("LANCommander.Server.Data.Models.Redistributable", "Redistributable") - .WithMany("Scripts") - .HasForeignKey("RedistributableId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("LANCommander.Server.Data.Models.Server", "Server") - .WithMany("Scripts") - .HasForeignKey("ServerId") - .OnDelete(DeleteBehavior.Cascade); - - b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("CreatedBy"); - - b.Navigation("Game"); - - b.Navigation("Redistributable"); - - b.Navigation("Server"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Server", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.Game", "Game") - .WithMany("Servers") - .HasForeignKey("GameId") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("CreatedBy"); - - b.Navigation("Game"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.ServerConsole", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.Server", "Server") - .WithMany("ServerConsoles") - .HasForeignKey("ServerId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("CreatedBy"); - - b.Navigation("Server"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.ServerHttpPath", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.Server", "Server") - .WithMany("HttpPaths") - .HasForeignKey("ServerId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("CreatedBy"); - - b.Navigation("Server"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.StorageLocation", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById"); - - b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById"); - - b.Navigation("CreatedBy"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Tag", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("CreatedBy"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.User", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.Navigation("CreatedBy"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.UserCustomField", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.SetNull); - - b.HasOne("LANCommander.Server.Data.Models.User", "User") - .WithMany("CustomFields") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("UpdatedBy"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("LibraryGame", b => - { - b.HasOne("LANCommander.Server.Data.Models.Game", null) - .WithMany() - .HasForeignKey("GameId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("LANCommander.Server.Data.Models.Library", null) - .WithMany() - .HasForeignKey("LibraryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => - { - b.HasOne("LANCommander.Server.Data.Models.Role", null) - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => - { - b.HasOne("LANCommander.Server.Data.Models.Role", null) - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("LANCommander.Server.Data.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("PageGame", b => - { - b.HasOne("LANCommander.Server.Data.Models.Game", null) - .WithMany() - .HasForeignKey("GameId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("LANCommander.Server.Data.Models.Page", null) - .WithMany() - .HasForeignKey("PageId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("PageRedistributable", b => - { - b.HasOne("LANCommander.Server.Data.Models.Page", null) - .WithMany() - .HasForeignKey("PageId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("LANCommander.Server.Data.Models.Redistributable", null) - .WithMany() - .HasForeignKey("RedistributableId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("PageServer", b => - { - b.HasOne("LANCommander.Server.Data.Models.Page", null) - .WithMany() - .HasForeignKey("PageId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("LANCommander.Server.Data.Models.Server", null) - .WithMany() - .HasForeignKey("ServerId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("RoleCollection", b => - { - b.HasOne("LANCommander.Server.Data.Models.Collection", null) - .WithMany() - .HasForeignKey("CollectionId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("LANCommander.Server.Data.Models.Role", null) - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Category", b => - { - b.Navigation("Children"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Engine", b => - { - b.Navigation("Games"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Game", b => - { - b.Navigation("Actions"); - - b.Navigation("Archives"); - - b.Navigation("CustomFields"); - - b.Navigation("DependentGames"); - - b.Navigation("GameSaves"); - - b.Navigation("Issues"); - - b.Navigation("Keys"); - - b.Navigation("Media"); - - b.Navigation("MultiplayerModes"); - - b.Navigation("PlaySessions"); - - b.Navigation("SavePaths"); - - b.Navigation("Scripts"); - - b.Navigation("Servers"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Media", b => - { - b.Navigation("Parent"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Page", b => - { - b.Navigation("Children"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Redistributable", b => - { - b.Navigation("Archives"); - - b.Navigation("Scripts"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.Server", b => - { - b.Navigation("Actions"); - - b.Navigation("HttpPaths"); - - b.Navigation("Scripts"); - - b.Navigation("ServerConsoles"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.StorageLocation", b => - { - b.Navigation("Archives"); - - b.Navigation("GameSaves"); - - b.Navigation("Media"); - }); - - modelBuilder.Entity("LANCommander.Server.Data.Models.User", b => - { - b.Navigation("CustomFields"); - - b.Navigation("GameSaves"); - - b.Navigation("Library") - .IsRequired(); - - b.Navigation("Media"); - - b.Navigation("PlaySessions"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/LANCommander.Server.Data.MySQL/Migrations/20250213030614_FixServerShadowProperties.cs b/LANCommander.Server.Data.MySQL/Migrations/20250213030614_FixServerShadowProperties.cs deleted file mode 100644 index c0d0a027..00000000 --- a/LANCommander.Server.Data.MySQL/Migrations/20250213030614_FixServerShadowProperties.cs +++ /dev/null @@ -1,213 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace LANCommander.Server.Data.MySQL.Migrations -{ - /// - public partial class FixServerShadowProperties : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropForeignKey( - name: "FK_ServerConsoles_Servers_ServerId1", - table: "ServerConsoles"); - - migrationBuilder.DropForeignKey( - name: "FK_ServerHttpPath_Servers_ServerId1", - table: "ServerHttpPath"); - - migrationBuilder.DropIndex( - name: "IX_ServerHttpPath_ServerId1", - table: "ServerHttpPath"); - - migrationBuilder.DropIndex( - name: "IX_ServerConsoles_ServerId1", - table: "ServerConsoles"); - - migrationBuilder.DropColumn( - name: "ServerId1", - table: "ServerHttpPath"); - - migrationBuilder.DropColumn( - name: "ServerId1", - table: "ServerConsoles"); - - migrationBuilder.AlterColumn( - name: "Path", - table: "ServerHttpPath", - type: "varchar(256)", - maxLength: 256, - nullable: false, - oldClrType: typeof(string), - oldType: "longtext") - .Annotation("MySql:CharSet", "utf8mb4") - .OldAnnotation("MySql:CharSet", "utf8mb4"); - - migrationBuilder.AlterColumn( - name: "LocalPath", - table: "ServerHttpPath", - type: "varchar(1024)", - maxLength: 1024, - nullable: false, - oldClrType: typeof(string), - oldType: "longtext") - .Annotation("MySql:CharSet", "utf8mb4") - .OldAnnotation("MySql:CharSet", "utf8mb4"); - - migrationBuilder.AlterColumn( - name: "Path", - table: "ServerConsoles", - type: "varchar(1024)", - maxLength: 1024, - nullable: false, - oldClrType: typeof(string), - oldType: "longtext") - .Annotation("MySql:CharSet", "utf8mb4") - .OldAnnotation("MySql:CharSet", "utf8mb4"); - - migrationBuilder.AlterColumn( - name: "Password", - table: "ServerConsoles", - type: "varchar(128)", - maxLength: 128, - nullable: false, - oldClrType: typeof(string), - oldType: "longtext") - .Annotation("MySql:CharSet", "utf8mb4") - .OldAnnotation("MySql:CharSet", "utf8mb4"); - - migrationBuilder.AlterColumn( - name: "Name", - table: "ServerConsoles", - type: "varchar(64)", - maxLength: 64, - nullable: false, - oldClrType: typeof(string), - oldType: "longtext") - .Annotation("MySql:CharSet", "utf8mb4") - .OldAnnotation("MySql:CharSet", "utf8mb4"); - - migrationBuilder.AlterColumn( - name: "Host", - table: "ServerConsoles", - type: "varchar(256)", - maxLength: 256, - nullable: false, - oldClrType: typeof(string), - oldType: "longtext") - .Annotation("MySql:CharSet", "utf8mb4") - .OldAnnotation("MySql:CharSet", "utf8mb4"); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.AlterColumn( - name: "Path", - table: "ServerHttpPath", - type: "longtext", - nullable: false, - oldClrType: typeof(string), - oldType: "varchar(256)", - oldMaxLength: 256) - .Annotation("MySql:CharSet", "utf8mb4") - .OldAnnotation("MySql:CharSet", "utf8mb4"); - - migrationBuilder.AlterColumn( - name: "LocalPath", - table: "ServerHttpPath", - type: "longtext", - nullable: false, - oldClrType: typeof(string), - oldType: "varchar(1024)", - oldMaxLength: 1024) - .Annotation("MySql:CharSet", "utf8mb4") - .OldAnnotation("MySql:CharSet", "utf8mb4"); - - migrationBuilder.AddColumn( - name: "ServerId1", - table: "ServerHttpPath", - type: "char(36)", - nullable: true, - collation: "ascii_general_ci"); - - migrationBuilder.AlterColumn( - name: "Path", - table: "ServerConsoles", - type: "longtext", - nullable: false, - oldClrType: typeof(string), - oldType: "varchar(1024)", - oldMaxLength: 1024) - .Annotation("MySql:CharSet", "utf8mb4") - .OldAnnotation("MySql:CharSet", "utf8mb4"); - - migrationBuilder.AlterColumn( - name: "Password", - table: "ServerConsoles", - type: "longtext", - nullable: false, - oldClrType: typeof(string), - oldType: "varchar(128)", - oldMaxLength: 128) - .Annotation("MySql:CharSet", "utf8mb4") - .OldAnnotation("MySql:CharSet", "utf8mb4"); - - migrationBuilder.AlterColumn( - name: "Name", - table: "ServerConsoles", - type: "longtext", - nullable: false, - oldClrType: typeof(string), - oldType: "varchar(64)", - oldMaxLength: 64) - .Annotation("MySql:CharSet", "utf8mb4") - .OldAnnotation("MySql:CharSet", "utf8mb4"); - - migrationBuilder.AlterColumn( - name: "Host", - table: "ServerConsoles", - type: "longtext", - nullable: false, - oldClrType: typeof(string), - oldType: "varchar(256)", - oldMaxLength: 256) - .Annotation("MySql:CharSet", "utf8mb4") - .OldAnnotation("MySql:CharSet", "utf8mb4"); - - migrationBuilder.AddColumn( - name: "ServerId1", - table: "ServerConsoles", - type: "char(36)", - nullable: true, - collation: "ascii_general_ci"); - - migrationBuilder.CreateIndex( - name: "IX_ServerHttpPath_ServerId1", - table: "ServerHttpPath", - column: "ServerId1"); - - migrationBuilder.CreateIndex( - name: "IX_ServerConsoles_ServerId1", - table: "ServerConsoles", - column: "ServerId1"); - - migrationBuilder.AddForeignKey( - name: "FK_ServerConsoles_Servers_ServerId1", - table: "ServerConsoles", - column: "ServerId1", - principalTable: "Servers", - principalColumn: "Id"); - - migrationBuilder.AddForeignKey( - name: "FK_ServerHttpPath_Servers_ServerId1", - table: "ServerHttpPath", - column: "ServerId1", - principalTable: "Servers", - principalColumn: "Id"); - } - } -} diff --git a/LANCommander.Server.Data.MySQL/Migrations/20260423000000_AddMediaSortOrder.cs b/LANCommander.Server.Data.MySQL/Migrations/20260423000000_AddMediaSortOrder.cs deleted file mode 100644 index 6b0a24fe..00000000 --- a/LANCommander.Server.Data.MySQL/Migrations/20260423000000_AddMediaSortOrder.cs +++ /dev/null @@ -1,29 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace LANCommander.Server.Data.MySQL.Migrations -{ - /// - public partial class AddMediaSortOrder : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.AddColumn( - name: "SortOrder", - table: "Media", - type: "int", - nullable: false, - defaultValue: 0); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropColumn( - name: "SortOrder", - table: "Media"); - } - } -} diff --git a/LANCommander.Server.Data.MySQL/Migrations/20260513000000_AddGameExternalIds.cs b/LANCommander.Server.Data.MySQL/Migrations/20260513000000_AddGameExternalIds.cs deleted file mode 100644 index ed640d73..00000000 --- a/LANCommander.Server.Data.MySQL/Migrations/20260513000000_AddGameExternalIds.cs +++ /dev/null @@ -1,98 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace LANCommander.Server.Data.MySQL.Migrations -{ - /// - public partial class AddGameExternalIds : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "GameExternalIds", - columns: table => new - { - Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - GameId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), - Provider = table.Column(type: "varchar(64)", maxLength: 64, nullable: false), - ExternalId = table.Column(type: "varchar(256)", maxLength: 256, nullable: false), - CreatedOn = table.Column(type: "datetime(6)", nullable: false), - CreatedById = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), - UpdatedOn = table.Column(type: "datetime(6)", nullable: false), - UpdatedById = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci") - }, - constraints: table => - { - table.PrimaryKey("PK_GameExternalIds", x => x.Id); - table.ForeignKey( - name: "FK_GameExternalIds_Games_GameId", - column: x => x.GameId, - principalTable: "Games", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_GameExternalIds_Users_CreatedById", - column: x => x.CreatedById, - principalTable: "Users", - principalColumn: "Id", - onDelete: ReferentialAction.SetNull); - table.ForeignKey( - name: "FK_GameExternalIds_Users_UpdatedById", - column: x => x.UpdatedById, - principalTable: "Users", - principalColumn: "Id", - onDelete: ReferentialAction.SetNull); - }); - - migrationBuilder.CreateIndex( - name: "IX_GameExternalIds_CreatedById", - table: "GameExternalIds", - column: "CreatedById"); - - migrationBuilder.CreateIndex( - name: "IX_GameExternalIds_GameId", - table: "GameExternalIds", - column: "GameId"); - - migrationBuilder.CreateIndex( - name: "IX_GameExternalIds_UpdatedById", - table: "GameExternalIds", - column: "UpdatedById"); - - // Migrate existing IGDBId data - migrationBuilder.Sql(@" - INSERT INTO GameExternalIds (Id, GameId, Provider, ExternalId, CreatedOn, UpdatedOn) - SELECT UUID(), Id, 'IGDB', CAST(IGDBId AS CHAR), CreatedOn, UpdatedOn - FROM Games - WHERE IGDBId IS NOT NULL - "); - - migrationBuilder.DropColumn( - name: "IGDBId", - table: "Games"); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.AddColumn( - name: "IGDBId", - table: "Games", - type: "bigint", - nullable: true); - - // Migrate data back - migrationBuilder.Sql(@" - UPDATE Games g - INNER JOIN GameExternalIds e ON e.GameId = g.Id AND e.Provider = 'IGDB' - SET g.IGDBId = CAST(e.ExternalId AS SIGNED) - "); - - migrationBuilder.DropTable( - name: "GameExternalIds"); - } - } -} diff --git a/LANCommander.Server.Data.MySQL/Migrations/20260423000000_AddMediaSortOrder.Designer.cs b/LANCommander.Server.Data.MySQL/Migrations/20260612003743_InitialMigration.Designer.cs similarity index 83% rename from LANCommander.Server.Data.MySQL/Migrations/20260423000000_AddMediaSortOrder.Designer.cs rename to LANCommander.Server.Data.MySQL/Migrations/20260612003743_InitialMigration.Designer.cs index c326f725..03222359 100644 --- a/LANCommander.Server.Data.MySQL/Migrations/20260423000000_AddMediaSortOrder.Designer.cs +++ b/LANCommander.Server.Data.MySQL/Migrations/20260612003743_InitialMigration.Designer.cs @@ -12,15 +12,15 @@ using Microsoft.EntityFrameworkCore.Storage.ValueConversion; namespace LANCommander.Server.Data.MySQL.Migrations { [DbContext(typeof(DatabaseContext))] - [Migration("20260423000000_AddMediaSortOrder")] - partial class AddMediaSortOrder + [Migration("20260612003743_InitialMigration")] + partial class InitialMigration { /// protected override void BuildTargetModel(ModelBuilder modelBuilder) { #pragma warning disable 612, 618 modelBuilder - .HasAnnotation("ProductVersion", "9.0.2") + .HasAnnotation("ProductVersion", "9.0.9") .HasAnnotation("Relational:MaxIdentifierLength", 64); MySqlModelBuilderExtensions.AutoIncrementColumns(modelBuilder); @@ -40,6 +40,21 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.ToTable("CategoryGame"); }); + modelBuilder.Entity("ChatThreadUser", b => + { + b.Property("ChatThreadsId") + .HasColumnType("char(36)"); + + b.Property("ParticipantsId") + .HasColumnType("char(36)"); + + b.HasKey("ChatThreadsId", "ParticipantsId"); + + b.HasIndex("ParticipantsId"); + + b.ToTable("ChatThreadUser"); + }); + modelBuilder.Entity("CollectionGame", b => { b.Property("CollectionId") @@ -123,6 +138,9 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.Property("RedistributableId") .HasColumnType("char(36)"); + b.Property("Options") + .HasColumnType("longtext"); + b.HasKey("GameId", "RedistributableId"); b.HasIndex("RedistributableId"); @@ -145,6 +163,21 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.ToTable("GameTag"); }); + modelBuilder.Entity("GameTool", b => + { + b.Property("GamesId") + .HasColumnType("char(36)"); + + b.Property("ToolsId") + .HasColumnType("char(36)"); + + b.HasKey("GamesId", "ToolsId"); + + b.HasIndex("ToolsId"); + + b.ToTable("GameTool"); + }); + modelBuilder.Entity("LANCommander.Server.Data.Models.Action", b => { b.Property("Id") @@ -167,6 +200,9 @@ namespace LANCommander.Server.Data.MySQL.Migrations .IsRequired() .HasColumnType("longtext"); + b.Property("OptionOverrides") + .HasColumnType("longtext"); + b.Property("Path") .HasColumnType("longtext"); @@ -179,6 +215,9 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.Property("SortOrder") .HasColumnType("int"); + b.Property("ToolId") + .HasColumnType("char(36)"); + b.Property("UpdatedById") .HasColumnType("char(36)"); @@ -196,6 +235,8 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.HasIndex("ServerId"); + b.HasIndex("ToolId"); + b.HasIndex("UpdatedById"); b.ToTable("Actions"); @@ -235,6 +276,9 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.Property("StorageLocationId") .HasColumnType("char(36)"); + b.Property("ToolId") + .HasColumnType("char(36)"); + b.Property("UncompressedSize") .HasColumnType("bigint"); @@ -260,6 +304,8 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.HasIndex("StorageLocationId"); + b.HasIndex("ToolId"); + b.HasIndex("UpdatedById"); b.ToTable("Archive"); @@ -301,6 +347,94 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.ToTable("Categories"); }); + modelBuilder.Entity("LANCommander.Server.Data.Models.ChatMessage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("Content") + .IsRequired() + .HasMaxLength(2000) + .HasColumnType("varchar(2000)"); + + b.Property("CreatedById") + .HasColumnType("char(36)"); + + b.Property("CreatedOn") + .HasColumnType("datetime(6)"); + + b.Property("ThreadId") + .HasColumnType("char(36)"); + + b.Property("UpdatedById") + .HasColumnType("char(36)"); + + b.Property("UpdatedOn") + .HasColumnType("datetime(6)"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ThreadId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("ChatMessages"); + }); + + modelBuilder.Entity("LANCommander.Server.Data.Models.ChatThread", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("CreatedById") + .HasColumnType("char(36)"); + + b.Property("CreatedOn") + .HasColumnType("datetime(6)"); + + b.Property("Name") + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("UpdatedById") + .HasColumnType("char(36)"); + + b.Property("UpdatedOn") + .HasColumnType("datetime(6)"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("UpdatedById"); + + b.ToTable("ChatThreads"); + }); + + modelBuilder.Entity("LANCommander.Server.Data.Models.ChatThreadReadStatus", b => + { + b.Property("ThreadId") + .HasColumnType("char(36)"); + + b.Property("UserId") + .HasColumnType("char(36)"); + + b.Property("LastReadMessageId") + .HasColumnType("char(36)"); + + b.HasKey("ThreadId", "UserId"); + + b.HasIndex("LastReadMessageId"); + + b.HasIndex("UserId"); + + b.ToTable("ChatThreadReadStatuses"); + }); + modelBuilder.Entity("LANCommander.Server.Data.Models.Collection", b => { b.Property("Id") @@ -418,9 +552,6 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.Property("EngineId") .HasColumnType("char(36)"); - b.Property("IGDBId") - .HasColumnType("bigint"); - b.Property("KeyAllocationMethod") .HasColumnType("int"); @@ -507,6 +638,48 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.ToTable("GameCustomField"); }); + modelBuilder.Entity("LANCommander.Server.Data.Models.GameExternalId", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("CreatedById") + .HasColumnType("char(36)"); + + b.Property("CreatedOn") + .HasColumnType("datetime(6)"); + + b.Property("ExternalId") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("GameId") + .HasColumnType("char(36)"); + + b.Property("Provider") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("UpdatedById") + .HasColumnType("char(36)"); + + b.Property("UpdatedOn") + .HasColumnType("datetime(6)"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("GameId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("GameExternalIds"); + }); + modelBuilder.Entity("LANCommander.Server.Data.Models.GameSave", b => { b.Property("Id") @@ -633,7 +806,7 @@ namespace LANCommander.Server.Data.MySQL.Migrations .ValueGeneratedOnAdd() .HasColumnType("char(36)"); - b.Property("AllocationMethod") + b.Property("AllocationMethod") .HasColumnType("int"); b.Property("ClaimedByComputerName") @@ -751,13 +924,13 @@ namespace LANCommander.Server.Data.MySQL.Migrations .HasMaxLength(64) .HasColumnType("varchar(64)"); + b.Property("SortOrder") + .HasColumnType("int"); + b.Property("SourceUrl") .HasMaxLength(2048) .HasColumnType("varchar(2048)"); - b.Property("SortOrder") - .HasColumnType("int"); - b.Property("StorageLocationId") .HasColumnType("char(36)"); @@ -881,6 +1054,9 @@ namespace LANCommander.Server.Data.MySQL.Migrations .HasMaxLength(256) .HasColumnType("varchar(256)"); + b.Property("ToolId") + .HasColumnType("char(36)"); + b.Property("UpdatedById") .HasColumnType("char(36)"); @@ -893,6 +1069,8 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.HasIndex("ParentId"); + b.HasIndex("ToolId"); + b.HasIndex("UpdatedById"); b.ToTable("Pages"); @@ -972,6 +1150,45 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.ToTable("PlaySessions"); }); + modelBuilder.Entity("LANCommander.Server.Data.Models.Rating", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("CreatedById") + .HasColumnType("char(36)"); + + b.Property("CreatedOn") + .HasColumnType("datetime(6)"); + + b.Property("GameId") + .HasColumnType("char(36)"); + + b.Property("Source") + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("UpdatedById") + .HasColumnType("char(36)"); + + b.Property("UpdatedOn") + .HasColumnType("datetime(6)"); + + b.Property("Value") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("GameId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Ratings"); + }); + modelBuilder.Entity("LANCommander.Server.Data.Models.Redistributable", b => { b.Property("Id") @@ -994,6 +1211,9 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.Property("Notes") .HasColumnType("longtext"); + b.Property("OptionSchema") + .HasColumnType("longtext"); + b.Property("UpdatedById") .HasColumnType("char(36)"); @@ -1052,6 +1272,30 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.ToTable("Roles", (string)null); }); + modelBuilder.Entity("LANCommander.Server.Data.Models.RoleClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id")); + + b.Property("ClaimType") + .HasColumnType("longtext"); + + b.Property("ClaimValue") + .HasColumnType("longtext"); + + b.Property("RoleId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("RoleClaims", (string)null); + }); + modelBuilder.Entity("LANCommander.Server.Data.Models.SavePath", b => { b.Property("Id") @@ -1132,6 +1376,9 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.Property("ServerId") .HasColumnType("char(36)"); + b.Property("ToolId") + .HasColumnType("char(36)"); + b.Property("Type") .HasColumnType("int"); @@ -1151,6 +1398,8 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.HasIndex("ServerId"); + b.HasIndex("ToolId"); + b.HasIndex("UpdatedById"); b.ToTable("Scripts"); @@ -1175,12 +1424,23 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.Property("AutostartMethod") .HasColumnType("int"); + b.Property("ContainerId") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + b.Property("CreatedById") .HasColumnType("char(36)"); b.Property("CreatedOn") .HasColumnType("datetime(6)"); + b.Property("DockerHostId") + .HasColumnType("char(36)"); + + b.Property("Engine") + .HasColumnType("int"); + b.Property("GameId") .HasColumnType("char(36)"); @@ -1210,6 +1470,12 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.Property("ProcessTerminationMethod") .HasColumnType("int"); + b.Property("RemoteHostId") + .HasColumnType("char(36)"); + + b.Property("RemoteServerId") + .HasColumnType("char(36)"); + b.Property("UpdatedById") .HasColumnType("char(36)"); @@ -1402,6 +1668,43 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.ToTable("Tags"); }); + modelBuilder.Entity("LANCommander.Server.Data.Models.Tool", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("CreatedById") + .HasColumnType("char(36)"); + + b.Property("CreatedOn") + .HasColumnType("datetime(6)"); + + b.Property("Description") + .HasColumnType("longtext"); + + b.Property("Name") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Notes") + .HasColumnType("longtext"); + + b.Property("UpdatedById") + .HasColumnType("char(36)"); + + b.Property("UpdatedOn") + .HasColumnType("datetime(6)"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Tools"); + }); + modelBuilder.Entity("LANCommander.Server.Data.Models.User", b => { b.Property("Id") @@ -1498,6 +1801,30 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.ToTable("Users", (string)null); }); + modelBuilder.Entity("LANCommander.Server.Data.Models.UserClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id")); + + b.Property("ClaimType") + .HasColumnType("longtext"); + + b.Property("ClaimValue") + .HasColumnType("longtext"); + + b.Property("UserId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("UserClaims", (string)null); + }); + modelBuilder.Entity("LANCommander.Server.Data.Models.UserCustomField", b => { b.Property("Id") @@ -1540,70 +1867,7 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.ToTable("UserCustomField"); }); - modelBuilder.Entity("LibraryGame", b => - { - b.Property("GameId") - .HasColumnType("char(36)"); - - b.Property("LibraryId") - .HasColumnType("char(36)"); - - b.HasKey("GameId", "LibraryId"); - - b.HasIndex("LibraryId"); - - b.ToTable("LibraryGame"); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id")); - - b.Property("ClaimType") - .HasColumnType("longtext"); - - b.Property("ClaimValue") - .HasColumnType("longtext"); - - b.Property("RoleId") - .HasColumnType("char(36)"); - - b.HasKey("Id"); - - b.HasIndex("RoleId"); - - b.ToTable("RoleClaims", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id")); - - b.Property("ClaimType") - .HasColumnType("longtext"); - - b.Property("ClaimValue") - .HasColumnType("longtext"); - - b.Property("UserId") - .HasColumnType("char(36)"); - - b.HasKey("Id"); - - b.HasIndex("UserId"); - - b.ToTable("UserClaims", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + modelBuilder.Entity("LANCommander.Server.Data.Models.UserLogin", b => { b.Property("LoginProvider") .HasColumnType("varchar(255)"); @@ -1624,7 +1888,7 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.ToTable("UserLogins", (string)null); }); - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + modelBuilder.Entity("LANCommander.Server.Data.Models.UserRole", b => { b.Property("UserId") .HasColumnType("char(36)"); @@ -1639,7 +1903,7 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.ToTable("UserRoles", (string)null); }); - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + modelBuilder.Entity("LANCommander.Server.Data.Models.UserToken", b => { b.Property("UserId") .HasColumnType("char(36)"); @@ -1658,6 +1922,21 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.ToTable("UserTokens", (string)null); }); + modelBuilder.Entity("LibraryGame", b => + { + b.Property("GameId") + .HasColumnType("char(36)"); + + b.Property("LibraryId") + .HasColumnType("char(36)"); + + b.HasKey("GameId", "LibraryId"); + + b.HasIndex("LibraryId"); + + b.ToTable("LibraryGame"); + }); + modelBuilder.Entity("PageGame", b => { b.Property("GameId") @@ -1733,6 +2012,21 @@ namespace LANCommander.Server.Data.MySQL.Migrations .IsRequired(); }); + modelBuilder.Entity("ChatThreadUser", b => + { + b.HasOne("LANCommander.Server.Data.Models.ChatThread", null) + .WithMany() + .HasForeignKey("ChatThreadsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("LANCommander.Server.Data.Models.User", null) + .WithMany() + .HasForeignKey("ParticipantsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + modelBuilder.Entity("CollectionGame", b => { b.HasOne("LANCommander.Server.Data.Models.Collection", null) @@ -1838,6 +2132,21 @@ namespace LANCommander.Server.Data.MySQL.Migrations .IsRequired(); }); + modelBuilder.Entity("GameTool", b => + { + b.HasOne("LANCommander.Server.Data.Models.Game", null) + .WithMany() + .HasForeignKey("GamesId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("LANCommander.Server.Data.Models.Tool", null) + .WithMany() + .HasForeignKey("ToolsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + modelBuilder.Entity("LANCommander.Server.Data.Models.Action", b => { b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") @@ -1855,6 +2164,11 @@ namespace LANCommander.Server.Data.MySQL.Migrations .HasForeignKey("ServerId") .OnDelete(DeleteBehavior.Cascade); + b.HasOne("LANCommander.Server.Data.Models.Tool", "Tool") + .WithMany("Actions") + .HasForeignKey("ToolId") + .OnDelete(DeleteBehavior.Cascade); + b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") .WithMany() .HasForeignKey("UpdatedById") @@ -1866,6 +2180,8 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.Navigation("Server"); + b.Navigation("Tool"); + b.Navigation("UpdatedBy"); }); @@ -1896,6 +2212,11 @@ namespace LANCommander.Server.Data.MySQL.Migrations .OnDelete(DeleteBehavior.Cascade) .IsRequired(); + b.HasOne("LANCommander.Server.Data.Models.Tool", "Tool") + .WithMany("Archives") + .HasForeignKey("ToolId") + .OnDelete(DeleteBehavior.Cascade); + b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") .WithMany() .HasForeignKey("UpdatedById") @@ -1911,6 +2232,8 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.Navigation("StorageLocation"); + b.Navigation("Tool"); + b.Navigation("UpdatedBy"); }); @@ -1937,6 +2260,74 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.Navigation("UpdatedBy"); }); + modelBuilder.Entity("LANCommander.Server.Data.Models.ChatMessage", b => + { + b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.SetNull); + + b.HasOne("LANCommander.Server.Data.Models.ChatThread", "Thread") + .WithMany("Messages") + .HasForeignKey("ThreadId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.SetNull); + + b.Navigation("CreatedBy"); + + b.Navigation("Thread"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("LANCommander.Server.Data.Models.ChatThread", b => + { + b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.SetNull); + + b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.SetNull); + + b.Navigation("CreatedBy"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("LANCommander.Server.Data.Models.ChatThreadReadStatus", b => + { + b.HasOne("LANCommander.Server.Data.Models.ChatMessage", "LastReadMessage") + .WithMany() + .HasForeignKey("LastReadMessageId") + .OnDelete(DeleteBehavior.SetNull); + + b.HasOne("LANCommander.Server.Data.Models.ChatThread", "Thread") + .WithMany() + .HasForeignKey("ThreadId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("LANCommander.Server.Data.Models.User", "User") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("LastReadMessage"); + + b.Navigation("Thread"); + + b.Navigation("User"); + }); + modelBuilder.Entity("LANCommander.Server.Data.Models.Collection", b => { b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") @@ -2038,6 +2429,30 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.Navigation("UpdatedBy"); }); + modelBuilder.Entity("LANCommander.Server.Data.Models.GameExternalId", b => + { + b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.SetNull); + + b.HasOne("LANCommander.Server.Data.Models.Game", "Game") + .WithMany("ExternalIds") + .HasForeignKey("GameId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.SetNull); + + b.Navigation("CreatedBy"); + + b.Navigation("Game"); + + b.Navigation("UpdatedBy"); + }); + modelBuilder.Entity("LANCommander.Server.Data.Models.GameSave", b => { b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") @@ -2265,6 +2680,10 @@ namespace LANCommander.Server.Data.MySQL.Migrations .HasForeignKey("ParentId") .OnDelete(DeleteBehavior.Cascade); + b.HasOne("LANCommander.Server.Data.Models.Tool", null) + .WithMany("Pages") + .HasForeignKey("ToolId"); + b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") .WithMany() .HasForeignKey("UpdatedById") @@ -2326,6 +2745,30 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.Navigation("User"); }); + modelBuilder.Entity("LANCommander.Server.Data.Models.Rating", b => + { + b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.SetNull); + + b.HasOne("LANCommander.Server.Data.Models.Game", "Game") + .WithMany("Ratings") + .HasForeignKey("GameId") + .OnDelete(DeleteBehavior.SetNull); + + b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.SetNull); + + b.Navigation("CreatedBy"); + + b.Navigation("Game"); + + b.Navigation("UpdatedBy"); + }); + modelBuilder.Entity("LANCommander.Server.Data.Models.Redistributable", b => { b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") @@ -2360,6 +2803,15 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.Navigation("UpdatedBy"); }); + modelBuilder.Entity("LANCommander.Server.Data.Models.RoleClaim", b => + { + b.HasOne("LANCommander.Server.Data.Models.Role", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + modelBuilder.Entity("LANCommander.Server.Data.Models.SavePath", b => { b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") @@ -2406,6 +2858,11 @@ namespace LANCommander.Server.Data.MySQL.Migrations .HasForeignKey("ServerId") .OnDelete(DeleteBehavior.Cascade); + b.HasOne("LANCommander.Server.Data.Models.Tool", "Tool") + .WithMany("Scripts") + .HasForeignKey("ToolId") + .OnDelete(DeleteBehavior.Cascade); + b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") .WithMany() .HasForeignKey("UpdatedById") @@ -2419,6 +2876,8 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.Navigation("Server"); + b.Navigation("Tool"); + b.Navigation("UpdatedBy"); }); @@ -2528,6 +2987,23 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.Navigation("UpdatedBy"); }); + modelBuilder.Entity("LANCommander.Server.Data.Models.Tool", b => + { + b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.SetNull); + + b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.SetNull); + + b.Navigation("CreatedBy"); + + b.Navigation("UpdatedBy"); + }); + modelBuilder.Entity("LANCommander.Server.Data.Models.User", b => { b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") @@ -2545,6 +3021,15 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.Navigation("UpdatedBy"); }); + modelBuilder.Entity("LANCommander.Server.Data.Models.UserClaim", b => + { + b.HasOne("LANCommander.Server.Data.Models.User", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + modelBuilder.Entity("LANCommander.Server.Data.Models.UserCustomField", b => { b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") @@ -2570,6 +3055,43 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.Navigation("User"); }); + modelBuilder.Entity("LANCommander.Server.Data.Models.UserLogin", b => + { + b.HasOne("LANCommander.Server.Data.Models.User", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("LANCommander.Server.Data.Models.UserRole", b => + { + b.HasOne("LANCommander.Server.Data.Models.Role", "Role") + .WithMany("UserRoles") + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("LANCommander.Server.Data.Models.User", "User") + .WithMany("UserRoles") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Role"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("LANCommander.Server.Data.Models.UserToken", b => + { + b.HasOne("LANCommander.Server.Data.Models.User", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + modelBuilder.Entity("LibraryGame", b => { b.HasOne("LANCommander.Server.Data.Models.Game", null) @@ -2585,57 +3107,6 @@ namespace LANCommander.Server.Data.MySQL.Migrations .IsRequired(); }); - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => - { - b.HasOne("LANCommander.Server.Data.Models.Role", null) - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => - { - b.HasOne("LANCommander.Server.Data.Models.Role", null) - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("LANCommander.Server.Data.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - modelBuilder.Entity("PageGame", b => { b.HasOne("LANCommander.Server.Data.Models.Game", null) @@ -2701,6 +3172,11 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.Navigation("Children"); }); + modelBuilder.Entity("LANCommander.Server.Data.Models.ChatThread", b => + { + b.Navigation("Messages"); + }); + modelBuilder.Entity("LANCommander.Server.Data.Models.Engine", b => { b.Navigation("Games"); @@ -2716,6 +3192,8 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.Navigation("DependentGames"); + b.Navigation("ExternalIds"); + b.Navigation("GameSaves"); b.Navigation("Issues"); @@ -2728,6 +3206,8 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.Navigation("PlaySessions"); + b.Navigation("Ratings"); + b.Navigation("SavePaths"); b.Navigation("Scripts"); @@ -2752,6 +3232,11 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.Navigation("Scripts"); }); + modelBuilder.Entity("LANCommander.Server.Data.Models.Role", b => + { + b.Navigation("UserRoles"); + }); + modelBuilder.Entity("LANCommander.Server.Data.Models.Server", b => { b.Navigation("Actions"); @@ -2772,6 +3257,17 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.Navigation("Media"); }); + modelBuilder.Entity("LANCommander.Server.Data.Models.Tool", b => + { + b.Navigation("Actions"); + + b.Navigation("Archives"); + + b.Navigation("Pages"); + + b.Navigation("Scripts"); + }); + modelBuilder.Entity("LANCommander.Server.Data.Models.User", b => { b.Navigation("CustomFields"); @@ -2784,6 +3280,8 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.Navigation("Media"); b.Navigation("PlaySessions"); + + b.Navigation("UserRoles"); }); #pragma warning restore 612, 618 } diff --git a/LANCommander.Server.Data.MySQL/Migrations/20250213023250_InitialMigration.cs b/LANCommander.Server.Data.MySQL/Migrations/20260612003743_InitialMigration.cs similarity index 84% rename from LANCommander.Server.Data.MySQL/Migrations/20250213023250_InitialMigration.cs rename to LANCommander.Server.Data.MySQL/Migrations/20260612003743_InitialMigration.cs index c17a39f9..45f05f6d 100644 --- a/LANCommander.Server.Data.MySQL/Migrations/20250213023250_InitialMigration.cs +++ b/LANCommander.Server.Data.MySQL/Migrations/20260612003743_InitialMigration.cs @@ -108,6 +108,36 @@ namespace LANCommander.Server.Data.MySQL.Migrations }) .Annotation("MySql:CharSet", "utf8mb4"); + migrationBuilder.CreateTable( + name: "ChatThreads", + columns: table => new + { + Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), + Name = table.Column(type: "varchar(64)", maxLength: 64, nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + CreatedOn = table.Column(type: "datetime(6)", nullable: false), + CreatedById = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), + UpdatedOn = table.Column(type: "datetime(6)", nullable: false), + UpdatedById = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci") + }, + constraints: table => + { + table.PrimaryKey("PK_ChatThreads", x => x.Id); + table.ForeignKey( + name: "FK_ChatThreads_Users_CreatedById", + column: x => x.CreatedById, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.SetNull); + table.ForeignKey( + name: "FK_ChatThreads_Users_UpdatedById", + column: x => x.UpdatedById, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.SetNull); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + migrationBuilder.CreateTable( name: "Collections", columns: table => new @@ -143,12 +173,12 @@ namespace LANCommander.Server.Data.MySQL.Migrations columns: table => new { Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - Name = table.Column(type: "longtext", nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), CreatedOn = table.Column(type: "datetime(6)", nullable: false), CreatedById = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), UpdatedOn = table.Column(type: "datetime(6)", nullable: false), - UpdatedById = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci") + UpdatedById = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), + Name = table.Column(type: "longtext", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4") }, constraints: table => { @@ -261,50 +291,6 @@ namespace LANCommander.Server.Data.MySQL.Migrations }) .Annotation("MySql:CharSet", "utf8mb4"); - migrationBuilder.CreateTable( - name: "Pages", - columns: table => new - { - Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - Title = table.Column(type: "varchar(256)", maxLength: 256, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - Slug = table.Column(type: "varchar(256)", maxLength: 256, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - Route = table.Column(type: "varchar(2048)", maxLength: 2048, nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - Contents = table.Column(type: "longtext", nullable: false) - .Annotation("MySql:CharSet", "utf8mb4"), - SortOrder = table.Column(type: "int", nullable: false), - ParentId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), - CreatedOn = table.Column(type: "datetime(6)", nullable: false), - CreatedById = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), - UpdatedOn = table.Column(type: "datetime(6)", nullable: false), - UpdatedById = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci") - }, - constraints: table => - { - table.PrimaryKey("PK_Pages", x => x.Id); - table.ForeignKey( - name: "FK_Pages_Pages_ParentId", - column: x => x.ParentId, - principalTable: "Pages", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_Pages_Users_CreatedById", - column: x => x.CreatedById, - principalTable: "Users", - principalColumn: "Id", - onDelete: ReferentialAction.SetNull); - table.ForeignKey( - name: "FK_Pages_Users_UpdatedById", - column: x => x.UpdatedById, - principalTable: "Users", - principalColumn: "Id", - onDelete: ReferentialAction.SetNull); - }) - .Annotation("MySql:CharSet", "utf8mb4"); - migrationBuilder.CreateTable( name: "Platforms", columns: table => new @@ -346,6 +332,8 @@ namespace LANCommander.Server.Data.MySQL.Migrations .Annotation("MySql:CharSet", "utf8mb4"), Notes = table.Column(type: "longtext", nullable: true) .Annotation("MySql:CharSet", "utf8mb4"), + OptionSchema = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), CreatedOn = table.Column(type: "datetime(6)", nullable: false), CreatedById = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), UpdatedOn = table.Column(type: "datetime(6)", nullable: false), @@ -463,6 +451,40 @@ namespace LANCommander.Server.Data.MySQL.Migrations }) .Annotation("MySql:CharSet", "utf8mb4"); + migrationBuilder.CreateTable( + name: "Tools", + columns: table => new + { + Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), + Name = table.Column(type: "longtext", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + Description = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + Notes = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + CreatedOn = table.Column(type: "datetime(6)", nullable: false), + CreatedById = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), + UpdatedOn = table.Column(type: "datetime(6)", nullable: false), + UpdatedById = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci") + }, + constraints: table => + { + table.PrimaryKey("PK_Tools", x => x.Id); + table.ForeignKey( + name: "FK_Tools_Users_CreatedById", + column: x => x.CreatedById, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.SetNull); + table.ForeignKey( + name: "FK_Tools_Users_UpdatedById", + column: x => x.UpdatedById, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.SetNull); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + migrationBuilder.CreateTable( name: "UserClaims", columns: table => new @@ -574,12 +596,73 @@ namespace LANCommander.Server.Data.MySQL.Migrations }) .Annotation("MySql:CharSet", "utf8mb4"); + migrationBuilder.CreateTable( + name: "ChatMessages", + columns: table => new + { + Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), + ThreadId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), + Content = table.Column(type: "varchar(2000)", maxLength: 2000, nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + CreatedOn = table.Column(type: "datetime(6)", nullable: false), + CreatedById = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), + UpdatedOn = table.Column(type: "datetime(6)", nullable: false), + UpdatedById = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci") + }, + constraints: table => + { + table.PrimaryKey("PK_ChatMessages", x => x.Id); + table.ForeignKey( + name: "FK_ChatMessages_ChatThreads_ThreadId", + column: x => x.ThreadId, + principalTable: "ChatThreads", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_ChatMessages_Users_CreatedById", + column: x => x.CreatedById, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.SetNull); + table.ForeignKey( + name: "FK_ChatMessages_Users_UpdatedById", + column: x => x.UpdatedById, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.SetNull); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateTable( + name: "ChatThreadUser", + columns: table => new + { + ChatThreadsId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), + ParticipantsId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci") + }, + constraints: table => + { + table.PrimaryKey("PK_ChatThreadUser", x => new { x.ChatThreadsId, x.ParticipantsId }); + table.ForeignKey( + name: "FK_ChatThreadUser_ChatThreads_ChatThreadsId", + column: x => x.ChatThreadsId, + principalTable: "ChatThreads", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_ChatThreadUser_Users_ParticipantsId", + column: x => x.ParticipantsId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + migrationBuilder.CreateTable( name: "Games", columns: table => new { Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - IGDBId = table.Column(type: "bigint", nullable: true), Title = table.Column(type: "longtext", nullable: false) .Annotation("MySql:CharSet", "utf8mb4"), SortTitle = table.Column(type: "longtext", nullable: true) @@ -633,31 +716,6 @@ namespace LANCommander.Server.Data.MySQL.Migrations }) .Annotation("MySql:CharSet", "utf8mb4"); - migrationBuilder.CreateTable( - name: "PageRedistributable", - columns: table => new - { - PageId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - RedistributableId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci") - }, - constraints: table => - { - table.PrimaryKey("PK_PageRedistributable", x => new { x.PageId, x.RedistributableId }); - table.ForeignKey( - name: "FK_PageRedistributable_Pages_PageId", - column: x => x.PageId, - principalTable: "Pages", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_PageRedistributable_Redistributables_RedistributableId", - column: x => x.RedistributableId, - principalTable: "Redistributables", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }) - .Annotation("MySql:CharSet", "utf8mb4"); - migrationBuilder.CreateTable( name: "RoleClaims", columns: table => new @@ -732,6 +790,88 @@ namespace LANCommander.Server.Data.MySQL.Migrations }) .Annotation("MySql:CharSet", "utf8mb4"); + migrationBuilder.CreateTable( + name: "Pages", + columns: table => new + { + Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), + Title = table.Column(type: "varchar(256)", maxLength: 256, nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + Slug = table.Column(type: "varchar(256)", maxLength: 256, nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + Route = table.Column(type: "varchar(2048)", maxLength: 2048, nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + Contents = table.Column(type: "longtext", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + SortOrder = table.Column(type: "int", nullable: false), + ParentId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), + ToolId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), + CreatedOn = table.Column(type: "datetime(6)", nullable: false), + CreatedById = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), + UpdatedOn = table.Column(type: "datetime(6)", nullable: false), + UpdatedById = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci") + }, + constraints: table => + { + table.PrimaryKey("PK_Pages", x => x.Id); + table.ForeignKey( + name: "FK_Pages_Pages_ParentId", + column: x => x.ParentId, + principalTable: "Pages", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_Pages_Tools_ToolId", + column: x => x.ToolId, + principalTable: "Tools", + principalColumn: "Id"); + table.ForeignKey( + name: "FK_Pages_Users_CreatedById", + column: x => x.CreatedById, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.SetNull); + table.ForeignKey( + name: "FK_Pages_Users_UpdatedById", + column: x => x.UpdatedById, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.SetNull); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateTable( + name: "ChatThreadReadStatuses", + columns: table => new + { + ThreadId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), + UserId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), + LastReadMessageId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci") + }, + constraints: table => + { + table.PrimaryKey("PK_ChatThreadReadStatuses", x => new { x.ThreadId, x.UserId }); + table.ForeignKey( + name: "FK_ChatThreadReadStatuses_ChatMessages_LastReadMessageId", + column: x => x.LastReadMessageId, + principalTable: "ChatMessages", + principalColumn: "Id", + onDelete: ReferentialAction.SetNull); + table.ForeignKey( + name: "FK_ChatThreadReadStatuses_ChatThreads_ThreadId", + column: x => x.ThreadId, + principalTable: "ChatThreads", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_ChatThreadReadStatuses_Users_UserId", + column: x => x.UserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + migrationBuilder.CreateTable( name: "Archive", columns: table => new @@ -746,6 +886,7 @@ namespace LANCommander.Server.Data.MySQL.Migrations StorageLocationId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), GameId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), RedistributableId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), + ToolId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), LastVersionId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), UncompressedSize = table.Column(type: "bigint", nullable: false), CompressedSize = table.Column(type: "bigint", nullable: false), @@ -780,6 +921,12 @@ namespace LANCommander.Server.Data.MySQL.Migrations principalTable: "StorageLocations", principalColumn: "Id", onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_Archive_Tools_ToolId", + column: x => x.ToolId, + principalTable: "Tools", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); table.ForeignKey( name: "FK_Archive_Users_CreatedById", column: x => x.CreatedById, @@ -906,6 +1053,45 @@ namespace LANCommander.Server.Data.MySQL.Migrations }) .Annotation("MySql:CharSet", "utf8mb4"); + migrationBuilder.CreateTable( + name: "GameExternalIds", + columns: table => new + { + Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), + GameId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), + Provider = table.Column(type: "varchar(64)", maxLength: 64, nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + ExternalId = table.Column(type: "varchar(256)", maxLength: 256, nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + CreatedOn = table.Column(type: "datetime(6)", nullable: false), + CreatedById = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), + UpdatedOn = table.Column(type: "datetime(6)", nullable: false), + UpdatedById = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci") + }, + constraints: table => + { + table.PrimaryKey("PK_GameExternalIds", x => x.Id); + table.ForeignKey( + name: "FK_GameExternalIds_Games_GameId", + column: x => x.GameId, + principalTable: "Games", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_GameExternalIds_Users_CreatedById", + column: x => x.CreatedById, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.SetNull); + table.ForeignKey( + name: "FK_GameExternalIds_Users_UpdatedById", + column: x => x.UpdatedById, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.SetNull); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + migrationBuilder.CreateTable( name: "GameGenre", columns: table => new @@ -986,7 +1172,9 @@ namespace LANCommander.Server.Data.MySQL.Migrations columns: table => new { GameId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - RedistributableId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci") + RedistributableId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), + Options = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4") }, constraints: table => { @@ -1081,6 +1269,31 @@ namespace LANCommander.Server.Data.MySQL.Migrations }) .Annotation("MySql:CharSet", "utf8mb4"); + migrationBuilder.CreateTable( + name: "GameTool", + columns: table => new + { + GamesId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), + ToolsId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci") + }, + constraints: table => + { + table.PrimaryKey("PK_GameTool", x => new { x.GamesId, x.ToolsId }); + table.ForeignKey( + name: "FK_GameTool_Games_GamesId", + column: x => x.GamesId, + principalTable: "Games", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_GameTool_Tools_ToolsId", + column: x => x.ToolsId, + principalTable: "Tools", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + migrationBuilder.CreateTable( name: "Issues", columns: table => new @@ -1133,7 +1346,7 @@ namespace LANCommander.Server.Data.MySQL.Migrations Value = table.Column(type: "varchar(255)", maxLength: 255, nullable: false) .Annotation("MySql:CharSet", "utf8mb4"), GameId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - AllocationMethod = table.Column(type: "int", nullable: false), + AllocationMethod = table.Column(type: "int", nullable: true), ClaimedByMacAddress = table.Column(type: "varchar(17)", maxLength: 17, nullable: true) .Annotation("MySql:CharSet", "utf8mb4"), ClaimedByIpv4Address = table.Column(type: "varchar(15)", maxLength: 15, nullable: true) @@ -1216,6 +1429,7 @@ namespace LANCommander.Server.Data.MySQL.Migrations .Annotation("MySql:CharSet", "utf8mb4"), Crc32 = table.Column(type: "varchar(8)", maxLength: 8, nullable: false) .Annotation("MySql:CharSet", "utf8mb4"), + SortOrder = table.Column(type: "int", nullable: false), ThumbnailId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), StorageLocationId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), GameId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), @@ -1309,31 +1523,6 @@ namespace LANCommander.Server.Data.MySQL.Migrations }) .Annotation("MySql:CharSet", "utf8mb4"); - migrationBuilder.CreateTable( - name: "PageGame", - columns: table => new - { - GameId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - PageId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci") - }, - constraints: table => - { - table.PrimaryKey("PK_PageGame", x => new { x.GameId, x.PageId }); - table.ForeignKey( - name: "FK_PageGame_Games_GameId", - column: x => x.GameId, - principalTable: "Games", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_PageGame_Pages_PageId", - column: x => x.PageId, - principalTable: "Pages", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }) - .Annotation("MySql:CharSet", "utf8mb4"); - migrationBuilder.CreateTable( name: "PlaySessions", columns: table => new @@ -1378,6 +1567,44 @@ namespace LANCommander.Server.Data.MySQL.Migrations }) .Annotation("MySql:CharSet", "utf8mb4"); + migrationBuilder.CreateTable( + name: "Ratings", + columns: table => new + { + Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), + GameId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), + Source = table.Column(type: "varchar(128)", maxLength: 128, nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + Value = table.Column(type: "float", nullable: false), + CreatedOn = table.Column(type: "datetime(6)", nullable: false), + CreatedById = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), + UpdatedOn = table.Column(type: "datetime(6)", nullable: false), + UpdatedById = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci") + }, + constraints: table => + { + table.PrimaryKey("PK_Ratings", x => x.Id); + table.ForeignKey( + name: "FK_Ratings_Games_GameId", + column: x => x.GameId, + principalTable: "Games", + principalColumn: "Id", + onDelete: ReferentialAction.SetNull); + table.ForeignKey( + name: "FK_Ratings_Users_CreatedById", + column: x => x.CreatedById, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.SetNull); + table.ForeignKey( + name: "FK_Ratings_Users_UpdatedById", + column: x => x.UpdatedById, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.SetNull); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + migrationBuilder.CreateTable( name: "SavePaths", columns: table => new @@ -1426,6 +1653,7 @@ namespace LANCommander.Server.Data.MySQL.Migrations Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), Name = table.Column(type: "longtext", nullable: false) .Annotation("MySql:CharSet", "utf8mb4"), + Engine = table.Column(type: "int", nullable: false), Path = table.Column(type: "longtext", nullable: false) .Annotation("MySql:CharSet", "utf8mb4"), Arguments = table.Column(type: "longtext", nullable: false) @@ -1436,6 +1664,11 @@ namespace LANCommander.Server.Data.MySQL.Migrations .Annotation("MySql:CharSet", "utf8mb4"), OnStopScriptPath = table.Column(type: "longtext", nullable: false) .Annotation("MySql:CharSet", "utf8mb4"), + DockerHostId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), + RemoteHostId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), + RemoteServerId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), + ContainerId = table.Column(type: "varchar(64)", maxLength: 64, nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), Host = table.Column(type: "longtext", nullable: false) .Annotation("MySql:CharSet", "utf8mb4"), Port = table.Column(type: "int", nullable: false), @@ -1474,6 +1707,56 @@ namespace LANCommander.Server.Data.MySQL.Migrations }) .Annotation("MySql:CharSet", "utf8mb4"); + migrationBuilder.CreateTable( + name: "PageGame", + columns: table => new + { + GameId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), + PageId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci") + }, + constraints: table => + { + table.PrimaryKey("PK_PageGame", x => new { x.GameId, x.PageId }); + table.ForeignKey( + name: "FK_PageGame_Games_GameId", + column: x => x.GameId, + principalTable: "Games", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_PageGame_Pages_PageId", + column: x => x.PageId, + principalTable: "Pages", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateTable( + name: "PageRedistributable", + columns: table => new + { + PageId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), + RedistributableId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci") + }, + constraints: table => + { + table.PrimaryKey("PK_PageRedistributable", x => new { x.PageId, x.RedistributableId }); + table.ForeignKey( + name: "FK_PageRedistributable_Pages_PageId", + column: x => x.PageId, + principalTable: "Pages", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_PageRedistributable_Redistributables_RedistributableId", + column: x => x.RedistributableId, + principalTable: "Redistributables", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + migrationBuilder.CreateTable( name: "Actions", columns: table => new @@ -1489,8 +1772,11 @@ namespace LANCommander.Server.Data.MySQL.Migrations .Annotation("MySql:CharSet", "utf8mb4"), PrimaryAction = table.Column(type: "tinyint(1)", nullable: false), SortOrder = table.Column(type: "int", nullable: false), + OptionOverrides = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), GameId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), ServerId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), + ToolId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), CreatedOn = table.Column(type: "datetime(6)", nullable: false), CreatedById = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), UpdatedOn = table.Column(type: "datetime(6)", nullable: false), @@ -1511,6 +1797,12 @@ namespace LANCommander.Server.Data.MySQL.Migrations principalTable: "Servers", principalColumn: "Id", onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_Actions_Tools_ToolId", + column: x => x.ToolId, + principalTable: "Tools", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); table.ForeignKey( name: "FK_Actions_Users_CreatedById", column: x => x.CreatedById, @@ -1566,6 +1858,7 @@ namespace LANCommander.Server.Data.MySQL.Migrations RequiresAdmin = table.Column(type: "tinyint(1)", nullable: false), GameId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), RedistributableId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), + ToolId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), ServerId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), CreatedOn = table.Column(type: "datetime(6)", nullable: false), CreatedById = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), @@ -1593,6 +1886,12 @@ namespace LANCommander.Server.Data.MySQL.Migrations principalTable: "Servers", principalColumn: "Id", onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_Scripts_Tools_ToolId", + column: x => x.ToolId, + principalTable: "Tools", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); table.ForeignKey( name: "FK_Scripts_Users_CreatedById", column: x => x.CreatedById, @@ -1613,18 +1912,17 @@ namespace LANCommander.Server.Data.MySQL.Migrations columns: table => new { Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - Name = table.Column(type: "longtext", nullable: false) + Name = table.Column(type: "varchar(64)", maxLength: 64, nullable: false) .Annotation("MySql:CharSet", "utf8mb4"), Type = table.Column(type: "int", nullable: false), - Path = table.Column(type: "longtext", nullable: false) + Path = table.Column(type: "varchar(1024)", maxLength: 1024, nullable: false) .Annotation("MySql:CharSet", "utf8mb4"), - Host = table.Column(type: "longtext", nullable: false) + Host = table.Column(type: "varchar(256)", maxLength: 256, nullable: false) .Annotation("MySql:CharSet", "utf8mb4"), Port = table.Column(type: "int", nullable: true), - Password = table.Column(type: "longtext", nullable: false) + Password = table.Column(type: "varchar(128)", maxLength: 128, nullable: false) .Annotation("MySql:CharSet", "utf8mb4"), ServerId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - ServerId1 = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), CreatedOn = table.Column(type: "datetime(6)", nullable: false), CreatedById = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), UpdatedOn = table.Column(type: "datetime(6)", nullable: false), @@ -1639,11 +1937,6 @@ namespace LANCommander.Server.Data.MySQL.Migrations principalTable: "Servers", principalColumn: "Id", onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_ServerConsoles_Servers_ServerId1", - column: x => x.ServerId1, - principalTable: "Servers", - principalColumn: "Id"); table.ForeignKey( name: "FK_ServerConsoles_Users_CreatedById", column: x => x.CreatedById, @@ -1664,12 +1957,11 @@ namespace LANCommander.Server.Data.MySQL.Migrations columns: table => new { Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - LocalPath = table.Column(type: "longtext", nullable: false) + LocalPath = table.Column(type: "varchar(1024)", maxLength: 1024, nullable: false) .Annotation("MySql:CharSet", "utf8mb4"), - Path = table.Column(type: "longtext", nullable: false) + Path = table.Column(type: "varchar(256)", maxLength: 256, nullable: false) .Annotation("MySql:CharSet", "utf8mb4"), ServerId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), - ServerId1 = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), CreatedOn = table.Column(type: "datetime(6)", nullable: false), CreatedById = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), UpdatedOn = table.Column(type: "datetime(6)", nullable: false), @@ -1684,11 +1976,6 @@ namespace LANCommander.Server.Data.MySQL.Migrations principalTable: "Servers", principalColumn: "Id", onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_ServerHttpPath_Servers_ServerId1", - column: x => x.ServerId1, - principalTable: "Servers", - principalColumn: "Id"); table.ForeignKey( name: "FK_ServerHttpPath_Users_CreatedById", column: x => x.CreatedById, @@ -1719,6 +2006,11 @@ namespace LANCommander.Server.Data.MySQL.Migrations table: "Actions", column: "ServerId"); + migrationBuilder.CreateIndex( + name: "IX_Actions_ToolId", + table: "Actions", + column: "ToolId"); + migrationBuilder.CreateIndex( name: "IX_Actions_UpdatedById", table: "Actions", @@ -1749,6 +2041,11 @@ namespace LANCommander.Server.Data.MySQL.Migrations table: "Archive", column: "StorageLocationId"); + migrationBuilder.CreateIndex( + name: "IX_Archive_ToolId", + table: "Archive", + column: "ToolId"); + migrationBuilder.CreateIndex( name: "IX_Archive_UpdatedById", table: "Archive", @@ -1774,6 +2071,46 @@ namespace LANCommander.Server.Data.MySQL.Migrations table: "CategoryGame", column: "GamesId"); + migrationBuilder.CreateIndex( + name: "IX_ChatMessages_CreatedById", + table: "ChatMessages", + column: "CreatedById"); + + migrationBuilder.CreateIndex( + name: "IX_ChatMessages_ThreadId", + table: "ChatMessages", + column: "ThreadId"); + + migrationBuilder.CreateIndex( + name: "IX_ChatMessages_UpdatedById", + table: "ChatMessages", + column: "UpdatedById"); + + migrationBuilder.CreateIndex( + name: "IX_ChatThreadReadStatuses_LastReadMessageId", + table: "ChatThreadReadStatuses", + column: "LastReadMessageId"); + + migrationBuilder.CreateIndex( + name: "IX_ChatThreadReadStatuses_UserId", + table: "ChatThreadReadStatuses", + column: "UserId"); + + migrationBuilder.CreateIndex( + name: "IX_ChatThreads_CreatedById", + table: "ChatThreads", + column: "CreatedById"); + + migrationBuilder.CreateIndex( + name: "IX_ChatThreads_UpdatedById", + table: "ChatThreads", + column: "UpdatedById"); + + migrationBuilder.CreateIndex( + name: "IX_ChatThreadUser_ParticipantsId", + table: "ChatThreadUser", + column: "ParticipantsId"); + migrationBuilder.CreateIndex( name: "IX_CollectionGame_GameId", table: "CollectionGame", @@ -1829,6 +2166,21 @@ namespace LANCommander.Server.Data.MySQL.Migrations table: "GameDeveloper", column: "DeveloperId"); + migrationBuilder.CreateIndex( + name: "IX_GameExternalIds_CreatedById", + table: "GameExternalIds", + column: "CreatedById"); + + migrationBuilder.CreateIndex( + name: "IX_GameExternalIds_GameId", + table: "GameExternalIds", + column: "GameId"); + + migrationBuilder.CreateIndex( + name: "IX_GameExternalIds_UpdatedById", + table: "GameExternalIds", + column: "UpdatedById"); + migrationBuilder.CreateIndex( name: "IX_GameGenre_GenresId", table: "GameGenre", @@ -1899,6 +2251,11 @@ namespace LANCommander.Server.Data.MySQL.Migrations table: "GameTag", column: "TagsId"); + migrationBuilder.CreateIndex( + name: "IX_GameTool_ToolsId", + table: "GameTool", + column: "ToolsId"); + migrationBuilder.CreateIndex( name: "IX_Genres_CreatedById", table: "Genres", @@ -2036,6 +2393,11 @@ namespace LANCommander.Server.Data.MySQL.Migrations table: "Pages", column: "ParentId"); + migrationBuilder.CreateIndex( + name: "IX_Pages_ToolId", + table: "Pages", + column: "ToolId"); + migrationBuilder.CreateIndex( name: "IX_Pages_UpdatedById", table: "Pages", @@ -2076,6 +2438,21 @@ namespace LANCommander.Server.Data.MySQL.Migrations table: "PlaySessions", column: "UserId"); + migrationBuilder.CreateIndex( + name: "IX_Ratings_CreatedById", + table: "Ratings", + column: "CreatedById"); + + migrationBuilder.CreateIndex( + name: "IX_Ratings_GameId", + table: "Ratings", + column: "GameId"); + + migrationBuilder.CreateIndex( + name: "IX_Ratings_UpdatedById", + table: "Ratings", + column: "UpdatedById"); + migrationBuilder.CreateIndex( name: "IX_Redistributables_CreatedById", table: "Redistributables", @@ -2147,6 +2524,11 @@ namespace LANCommander.Server.Data.MySQL.Migrations table: "Scripts", column: "ServerId"); + migrationBuilder.CreateIndex( + name: "IX_Scripts_ToolId", + table: "Scripts", + column: "ToolId"); + migrationBuilder.CreateIndex( name: "IX_Scripts_UpdatedById", table: "Scripts", @@ -2162,11 +2544,6 @@ namespace LANCommander.Server.Data.MySQL.Migrations table: "ServerConsoles", column: "ServerId"); - migrationBuilder.CreateIndex( - name: "IX_ServerConsoles_ServerId1", - table: "ServerConsoles", - column: "ServerId1"); - migrationBuilder.CreateIndex( name: "IX_ServerConsoles_UpdatedById", table: "ServerConsoles", @@ -2182,11 +2559,6 @@ namespace LANCommander.Server.Data.MySQL.Migrations table: "ServerHttpPath", column: "ServerId"); - migrationBuilder.CreateIndex( - name: "IX_ServerHttpPath_ServerId1", - table: "ServerHttpPath", - column: "ServerId1"); - migrationBuilder.CreateIndex( name: "IX_ServerHttpPath_UpdatedById", table: "ServerHttpPath", @@ -2227,6 +2599,16 @@ namespace LANCommander.Server.Data.MySQL.Migrations table: "Tags", column: "UpdatedById"); + migrationBuilder.CreateIndex( + name: "IX_Tools_CreatedById", + table: "Tools", + column: "CreatedById"); + + migrationBuilder.CreateIndex( + name: "IX_Tools_UpdatedById", + table: "Tools", + column: "UpdatedById"); + migrationBuilder.CreateIndex( name: "IX_UserClaims_UserId", table: "UserClaims", @@ -2291,6 +2673,12 @@ namespace LANCommander.Server.Data.MySQL.Migrations migrationBuilder.DropTable( name: "CategoryGame"); + migrationBuilder.DropTable( + name: "ChatThreadReadStatuses"); + + migrationBuilder.DropTable( + name: "ChatThreadUser"); + migrationBuilder.DropTable( name: "CollectionGame"); @@ -2300,6 +2688,9 @@ namespace LANCommander.Server.Data.MySQL.Migrations migrationBuilder.DropTable( name: "GameDeveloper"); + migrationBuilder.DropTable( + name: "GameExternalIds"); + migrationBuilder.DropTable( name: "GameGenre"); @@ -2318,6 +2709,9 @@ namespace LANCommander.Server.Data.MySQL.Migrations migrationBuilder.DropTable( name: "GameTag"); + migrationBuilder.DropTable( + name: "GameTool"); + migrationBuilder.DropTable( name: "Issues"); @@ -2345,6 +2739,9 @@ namespace LANCommander.Server.Data.MySQL.Migrations migrationBuilder.DropTable( name: "PlaySessions"); + migrationBuilder.DropTable( + name: "Ratings"); + migrationBuilder.DropTable( name: "RoleClaims"); @@ -2381,6 +2778,9 @@ namespace LANCommander.Server.Data.MySQL.Migrations migrationBuilder.DropTable( name: "Categories"); + migrationBuilder.DropTable( + name: "ChatMessages"); + migrationBuilder.DropTable( name: "Genres"); @@ -2414,6 +2814,12 @@ namespace LANCommander.Server.Data.MySQL.Migrations migrationBuilder.DropTable( name: "Roles"); + migrationBuilder.DropTable( + name: "ChatThreads"); + + migrationBuilder.DropTable( + name: "Tools"); + migrationBuilder.DropTable( name: "Games"); diff --git a/LANCommander.Server.Data.MySQL/Migrations/DatabaseContextModelSnapshot.cs b/LANCommander.Server.Data.MySQL/Migrations/DatabaseContextModelSnapshot.cs index 3d34a7cc..022d02b3 100644 --- a/LANCommander.Server.Data.MySQL/Migrations/DatabaseContextModelSnapshot.cs +++ b/LANCommander.Server.Data.MySQL/Migrations/DatabaseContextModelSnapshot.cs @@ -17,7 +17,7 @@ namespace LANCommander.Server.Data.MySQL.Migrations { #pragma warning disable 612, 618 modelBuilder - .HasAnnotation("ProductVersion", "9.0.2") + .HasAnnotation("ProductVersion", "9.0.9") .HasAnnotation("Relational:MaxIdentifierLength", 64); MySqlModelBuilderExtensions.AutoIncrementColumns(modelBuilder); @@ -37,6 +37,21 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.ToTable("CategoryGame"); }); + modelBuilder.Entity("ChatThreadUser", b => + { + b.Property("ChatThreadsId") + .HasColumnType("char(36)"); + + b.Property("ParticipantsId") + .HasColumnType("char(36)"); + + b.HasKey("ChatThreadsId", "ParticipantsId"); + + b.HasIndex("ParticipantsId"); + + b.ToTable("ChatThreadUser"); + }); + modelBuilder.Entity("CollectionGame", b => { b.Property("CollectionId") @@ -120,6 +135,9 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.Property("RedistributableId") .HasColumnType("char(36)"); + b.Property("Options") + .HasColumnType("longtext"); + b.HasKey("GameId", "RedistributableId"); b.HasIndex("RedistributableId"); @@ -142,6 +160,21 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.ToTable("GameTag"); }); + modelBuilder.Entity("GameTool", b => + { + b.Property("GamesId") + .HasColumnType("char(36)"); + + b.Property("ToolsId") + .HasColumnType("char(36)"); + + b.HasKey("GamesId", "ToolsId"); + + b.HasIndex("ToolsId"); + + b.ToTable("GameTool"); + }); + modelBuilder.Entity("LANCommander.Server.Data.Models.Action", b => { b.Property("Id") @@ -164,6 +197,9 @@ namespace LANCommander.Server.Data.MySQL.Migrations .IsRequired() .HasColumnType("longtext"); + b.Property("OptionOverrides") + .HasColumnType("longtext"); + b.Property("Path") .HasColumnType("longtext"); @@ -176,6 +212,9 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.Property("SortOrder") .HasColumnType("int"); + b.Property("ToolId") + .HasColumnType("char(36)"); + b.Property("UpdatedById") .HasColumnType("char(36)"); @@ -193,6 +232,8 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.HasIndex("ServerId"); + b.HasIndex("ToolId"); + b.HasIndex("UpdatedById"); b.ToTable("Actions"); @@ -232,6 +273,9 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.Property("StorageLocationId") .HasColumnType("char(36)"); + b.Property("ToolId") + .HasColumnType("char(36)"); + b.Property("UncompressedSize") .HasColumnType("bigint"); @@ -257,6 +301,8 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.HasIndex("StorageLocationId"); + b.HasIndex("ToolId"); + b.HasIndex("UpdatedById"); b.ToTable("Archive"); @@ -298,6 +344,94 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.ToTable("Categories"); }); + modelBuilder.Entity("LANCommander.Server.Data.Models.ChatMessage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("Content") + .IsRequired() + .HasMaxLength(2000) + .HasColumnType("varchar(2000)"); + + b.Property("CreatedById") + .HasColumnType("char(36)"); + + b.Property("CreatedOn") + .HasColumnType("datetime(6)"); + + b.Property("ThreadId") + .HasColumnType("char(36)"); + + b.Property("UpdatedById") + .HasColumnType("char(36)"); + + b.Property("UpdatedOn") + .HasColumnType("datetime(6)"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ThreadId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("ChatMessages"); + }); + + modelBuilder.Entity("LANCommander.Server.Data.Models.ChatThread", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("CreatedById") + .HasColumnType("char(36)"); + + b.Property("CreatedOn") + .HasColumnType("datetime(6)"); + + b.Property("Name") + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("UpdatedById") + .HasColumnType("char(36)"); + + b.Property("UpdatedOn") + .HasColumnType("datetime(6)"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("UpdatedById"); + + b.ToTable("ChatThreads"); + }); + + modelBuilder.Entity("LANCommander.Server.Data.Models.ChatThreadReadStatus", b => + { + b.Property("ThreadId") + .HasColumnType("char(36)"); + + b.Property("UserId") + .HasColumnType("char(36)"); + + b.Property("LastReadMessageId") + .HasColumnType("char(36)"); + + b.HasKey("ThreadId", "UserId"); + + b.HasIndex("LastReadMessageId"); + + b.HasIndex("UserId"); + + b.ToTable("ChatThreadReadStatuses"); + }); + modelBuilder.Entity("LANCommander.Server.Data.Models.Collection", b => { b.Property("Id") @@ -415,9 +549,6 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.Property("EngineId") .HasColumnType("char(36)"); - b.Property("IGDBId") - .HasColumnType("bigint"); - b.Property("KeyAllocationMethod") .HasColumnType("int"); @@ -504,6 +635,48 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.ToTable("GameCustomField"); }); + modelBuilder.Entity("LANCommander.Server.Data.Models.GameExternalId", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("CreatedById") + .HasColumnType("char(36)"); + + b.Property("CreatedOn") + .HasColumnType("datetime(6)"); + + b.Property("ExternalId") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("GameId") + .HasColumnType("char(36)"); + + b.Property("Provider") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("UpdatedById") + .HasColumnType("char(36)"); + + b.Property("UpdatedOn") + .HasColumnType("datetime(6)"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("GameId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("GameExternalIds"); + }); + modelBuilder.Entity("LANCommander.Server.Data.Models.GameSave", b => { b.Property("Id") @@ -630,7 +803,7 @@ namespace LANCommander.Server.Data.MySQL.Migrations .ValueGeneratedOnAdd() .HasColumnType("char(36)"); - b.Property("AllocationMethod") + b.Property("AllocationMethod") .HasColumnType("int"); b.Property("ClaimedByComputerName") @@ -748,13 +921,13 @@ namespace LANCommander.Server.Data.MySQL.Migrations .HasMaxLength(64) .HasColumnType("varchar(64)"); + b.Property("SortOrder") + .HasColumnType("int"); + b.Property("SourceUrl") .HasMaxLength(2048) .HasColumnType("varchar(2048)"); - b.Property("SortOrder") - .HasColumnType("int"); - b.Property("StorageLocationId") .HasColumnType("char(36)"); @@ -878,6 +1051,9 @@ namespace LANCommander.Server.Data.MySQL.Migrations .HasMaxLength(256) .HasColumnType("varchar(256)"); + b.Property("ToolId") + .HasColumnType("char(36)"); + b.Property("UpdatedById") .HasColumnType("char(36)"); @@ -890,6 +1066,8 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.HasIndex("ParentId"); + b.HasIndex("ToolId"); + b.HasIndex("UpdatedById"); b.ToTable("Pages"); @@ -969,6 +1147,45 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.ToTable("PlaySessions"); }); + modelBuilder.Entity("LANCommander.Server.Data.Models.Rating", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("CreatedById") + .HasColumnType("char(36)"); + + b.Property("CreatedOn") + .HasColumnType("datetime(6)"); + + b.Property("GameId") + .HasColumnType("char(36)"); + + b.Property("Source") + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("UpdatedById") + .HasColumnType("char(36)"); + + b.Property("UpdatedOn") + .HasColumnType("datetime(6)"); + + b.Property("Value") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("GameId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Ratings"); + }); + modelBuilder.Entity("LANCommander.Server.Data.Models.Redistributable", b => { b.Property("Id") @@ -991,6 +1208,9 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.Property("Notes") .HasColumnType("longtext"); + b.Property("OptionSchema") + .HasColumnType("longtext"); + b.Property("UpdatedById") .HasColumnType("char(36)"); @@ -1049,6 +1269,30 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.ToTable("Roles", (string)null); }); + modelBuilder.Entity("LANCommander.Server.Data.Models.RoleClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id")); + + b.Property("ClaimType") + .HasColumnType("longtext"); + + b.Property("ClaimValue") + .HasColumnType("longtext"); + + b.Property("RoleId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("RoleClaims", (string)null); + }); + modelBuilder.Entity("LANCommander.Server.Data.Models.SavePath", b => { b.Property("Id") @@ -1129,6 +1373,9 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.Property("ServerId") .HasColumnType("char(36)"); + b.Property("ToolId") + .HasColumnType("char(36)"); + b.Property("Type") .HasColumnType("int"); @@ -1148,6 +1395,8 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.HasIndex("ServerId"); + b.HasIndex("ToolId"); + b.HasIndex("UpdatedById"); b.ToTable("Scripts"); @@ -1172,12 +1421,23 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.Property("AutostartMethod") .HasColumnType("int"); + b.Property("ContainerId") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + b.Property("CreatedById") .HasColumnType("char(36)"); b.Property("CreatedOn") .HasColumnType("datetime(6)"); + b.Property("DockerHostId") + .HasColumnType("char(36)"); + + b.Property("Engine") + .HasColumnType("int"); + b.Property("GameId") .HasColumnType("char(36)"); @@ -1207,6 +1467,12 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.Property("ProcessTerminationMethod") .HasColumnType("int"); + b.Property("RemoteHostId") + .HasColumnType("char(36)"); + + b.Property("RemoteServerId") + .HasColumnType("char(36)"); + b.Property("UpdatedById") .HasColumnType("char(36)"); @@ -1399,6 +1665,43 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.ToTable("Tags"); }); + modelBuilder.Entity("LANCommander.Server.Data.Models.Tool", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("CreatedById") + .HasColumnType("char(36)"); + + b.Property("CreatedOn") + .HasColumnType("datetime(6)"); + + b.Property("Description") + .HasColumnType("longtext"); + + b.Property("Name") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Notes") + .HasColumnType("longtext"); + + b.Property("UpdatedById") + .HasColumnType("char(36)"); + + b.Property("UpdatedOn") + .HasColumnType("datetime(6)"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Tools"); + }); + modelBuilder.Entity("LANCommander.Server.Data.Models.User", b => { b.Property("Id") @@ -1495,6 +1798,30 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.ToTable("Users", (string)null); }); + modelBuilder.Entity("LANCommander.Server.Data.Models.UserClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id")); + + b.Property("ClaimType") + .HasColumnType("longtext"); + + b.Property("ClaimValue") + .HasColumnType("longtext"); + + b.Property("UserId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("UserClaims", (string)null); + }); + modelBuilder.Entity("LANCommander.Server.Data.Models.UserCustomField", b => { b.Property("Id") @@ -1537,70 +1864,7 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.ToTable("UserCustomField"); }); - modelBuilder.Entity("LibraryGame", b => - { - b.Property("GameId") - .HasColumnType("char(36)"); - - b.Property("LibraryId") - .HasColumnType("char(36)"); - - b.HasKey("GameId", "LibraryId"); - - b.HasIndex("LibraryId"); - - b.ToTable("LibraryGame"); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id")); - - b.Property("ClaimType") - .HasColumnType("longtext"); - - b.Property("ClaimValue") - .HasColumnType("longtext"); - - b.Property("RoleId") - .HasColumnType("char(36)"); - - b.HasKey("Id"); - - b.HasIndex("RoleId"); - - b.ToTable("RoleClaims", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id")); - - b.Property("ClaimType") - .HasColumnType("longtext"); - - b.Property("ClaimValue") - .HasColumnType("longtext"); - - b.Property("UserId") - .HasColumnType("char(36)"); - - b.HasKey("Id"); - - b.HasIndex("UserId"); - - b.ToTable("UserClaims", (string)null); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + modelBuilder.Entity("LANCommander.Server.Data.Models.UserLogin", b => { b.Property("LoginProvider") .HasColumnType("varchar(255)"); @@ -1621,7 +1885,7 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.ToTable("UserLogins", (string)null); }); - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + modelBuilder.Entity("LANCommander.Server.Data.Models.UserRole", b => { b.Property("UserId") .HasColumnType("char(36)"); @@ -1636,7 +1900,7 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.ToTable("UserRoles", (string)null); }); - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + modelBuilder.Entity("LANCommander.Server.Data.Models.UserToken", b => { b.Property("UserId") .HasColumnType("char(36)"); @@ -1655,6 +1919,21 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.ToTable("UserTokens", (string)null); }); + modelBuilder.Entity("LibraryGame", b => + { + b.Property("GameId") + .HasColumnType("char(36)"); + + b.Property("LibraryId") + .HasColumnType("char(36)"); + + b.HasKey("GameId", "LibraryId"); + + b.HasIndex("LibraryId"); + + b.ToTable("LibraryGame"); + }); + modelBuilder.Entity("PageGame", b => { b.Property("GameId") @@ -1730,6 +2009,21 @@ namespace LANCommander.Server.Data.MySQL.Migrations .IsRequired(); }); + modelBuilder.Entity("ChatThreadUser", b => + { + b.HasOne("LANCommander.Server.Data.Models.ChatThread", null) + .WithMany() + .HasForeignKey("ChatThreadsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("LANCommander.Server.Data.Models.User", null) + .WithMany() + .HasForeignKey("ParticipantsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + modelBuilder.Entity("CollectionGame", b => { b.HasOne("LANCommander.Server.Data.Models.Collection", null) @@ -1835,6 +2129,21 @@ namespace LANCommander.Server.Data.MySQL.Migrations .IsRequired(); }); + modelBuilder.Entity("GameTool", b => + { + b.HasOne("LANCommander.Server.Data.Models.Game", null) + .WithMany() + .HasForeignKey("GamesId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("LANCommander.Server.Data.Models.Tool", null) + .WithMany() + .HasForeignKey("ToolsId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + modelBuilder.Entity("LANCommander.Server.Data.Models.Action", b => { b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") @@ -1852,6 +2161,11 @@ namespace LANCommander.Server.Data.MySQL.Migrations .HasForeignKey("ServerId") .OnDelete(DeleteBehavior.Cascade); + b.HasOne("LANCommander.Server.Data.Models.Tool", "Tool") + .WithMany("Actions") + .HasForeignKey("ToolId") + .OnDelete(DeleteBehavior.Cascade); + b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") .WithMany() .HasForeignKey("UpdatedById") @@ -1863,6 +2177,8 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.Navigation("Server"); + b.Navigation("Tool"); + b.Navigation("UpdatedBy"); }); @@ -1893,6 +2209,11 @@ namespace LANCommander.Server.Data.MySQL.Migrations .OnDelete(DeleteBehavior.Cascade) .IsRequired(); + b.HasOne("LANCommander.Server.Data.Models.Tool", "Tool") + .WithMany("Archives") + .HasForeignKey("ToolId") + .OnDelete(DeleteBehavior.Cascade); + b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") .WithMany() .HasForeignKey("UpdatedById") @@ -1908,6 +2229,8 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.Navigation("StorageLocation"); + b.Navigation("Tool"); + b.Navigation("UpdatedBy"); }); @@ -1934,6 +2257,74 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.Navigation("UpdatedBy"); }); + modelBuilder.Entity("LANCommander.Server.Data.Models.ChatMessage", b => + { + b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.SetNull); + + b.HasOne("LANCommander.Server.Data.Models.ChatThread", "Thread") + .WithMany("Messages") + .HasForeignKey("ThreadId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.SetNull); + + b.Navigation("CreatedBy"); + + b.Navigation("Thread"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("LANCommander.Server.Data.Models.ChatThread", b => + { + b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.SetNull); + + b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.SetNull); + + b.Navigation("CreatedBy"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("LANCommander.Server.Data.Models.ChatThreadReadStatus", b => + { + b.HasOne("LANCommander.Server.Data.Models.ChatMessage", "LastReadMessage") + .WithMany() + .HasForeignKey("LastReadMessageId") + .OnDelete(DeleteBehavior.SetNull); + + b.HasOne("LANCommander.Server.Data.Models.ChatThread", "Thread") + .WithMany() + .HasForeignKey("ThreadId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("LANCommander.Server.Data.Models.User", "User") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("LastReadMessage"); + + b.Navigation("Thread"); + + b.Navigation("User"); + }); + modelBuilder.Entity("LANCommander.Server.Data.Models.Collection", b => { b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") @@ -2035,6 +2426,30 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.Navigation("UpdatedBy"); }); + modelBuilder.Entity("LANCommander.Server.Data.Models.GameExternalId", b => + { + b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.SetNull); + + b.HasOne("LANCommander.Server.Data.Models.Game", "Game") + .WithMany("ExternalIds") + .HasForeignKey("GameId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.SetNull); + + b.Navigation("CreatedBy"); + + b.Navigation("Game"); + + b.Navigation("UpdatedBy"); + }); + modelBuilder.Entity("LANCommander.Server.Data.Models.GameSave", b => { b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") @@ -2262,6 +2677,10 @@ namespace LANCommander.Server.Data.MySQL.Migrations .HasForeignKey("ParentId") .OnDelete(DeleteBehavior.Cascade); + b.HasOne("LANCommander.Server.Data.Models.Tool", null) + .WithMany("Pages") + .HasForeignKey("ToolId"); + b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") .WithMany() .HasForeignKey("UpdatedById") @@ -2323,6 +2742,30 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.Navigation("User"); }); + modelBuilder.Entity("LANCommander.Server.Data.Models.Rating", b => + { + b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.SetNull); + + b.HasOne("LANCommander.Server.Data.Models.Game", "Game") + .WithMany("Ratings") + .HasForeignKey("GameId") + .OnDelete(DeleteBehavior.SetNull); + + b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.SetNull); + + b.Navigation("CreatedBy"); + + b.Navigation("Game"); + + b.Navigation("UpdatedBy"); + }); + modelBuilder.Entity("LANCommander.Server.Data.Models.Redistributable", b => { b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") @@ -2357,6 +2800,15 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.Navigation("UpdatedBy"); }); + modelBuilder.Entity("LANCommander.Server.Data.Models.RoleClaim", b => + { + b.HasOne("LANCommander.Server.Data.Models.Role", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + modelBuilder.Entity("LANCommander.Server.Data.Models.SavePath", b => { b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") @@ -2403,6 +2855,11 @@ namespace LANCommander.Server.Data.MySQL.Migrations .HasForeignKey("ServerId") .OnDelete(DeleteBehavior.Cascade); + b.HasOne("LANCommander.Server.Data.Models.Tool", "Tool") + .WithMany("Scripts") + .HasForeignKey("ToolId") + .OnDelete(DeleteBehavior.Cascade); + b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") .WithMany() .HasForeignKey("UpdatedById") @@ -2416,6 +2873,8 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.Navigation("Server"); + b.Navigation("Tool"); + b.Navigation("UpdatedBy"); }); @@ -2525,6 +2984,23 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.Navigation("UpdatedBy"); }); + modelBuilder.Entity("LANCommander.Server.Data.Models.Tool", b => + { + b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.SetNull); + + b.HasOne("LANCommander.Server.Data.Models.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.SetNull); + + b.Navigation("CreatedBy"); + + b.Navigation("UpdatedBy"); + }); + modelBuilder.Entity("LANCommander.Server.Data.Models.User", b => { b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") @@ -2542,6 +3018,15 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.Navigation("UpdatedBy"); }); + modelBuilder.Entity("LANCommander.Server.Data.Models.UserClaim", b => + { + b.HasOne("LANCommander.Server.Data.Models.User", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + modelBuilder.Entity("LANCommander.Server.Data.Models.UserCustomField", b => { b.HasOne("LANCommander.Server.Data.Models.User", "CreatedBy") @@ -2567,6 +3052,43 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.Navigation("User"); }); + modelBuilder.Entity("LANCommander.Server.Data.Models.UserLogin", b => + { + b.HasOne("LANCommander.Server.Data.Models.User", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("LANCommander.Server.Data.Models.UserRole", b => + { + b.HasOne("LANCommander.Server.Data.Models.Role", "Role") + .WithMany("UserRoles") + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("LANCommander.Server.Data.Models.User", "User") + .WithMany("UserRoles") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Role"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("LANCommander.Server.Data.Models.UserToken", b => + { + b.HasOne("LANCommander.Server.Data.Models.User", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + modelBuilder.Entity("LibraryGame", b => { b.HasOne("LANCommander.Server.Data.Models.Game", null) @@ -2582,57 +3104,6 @@ namespace LANCommander.Server.Data.MySQL.Migrations .IsRequired(); }); - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => - { - b.HasOne("LANCommander.Server.Data.Models.Role", null) - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => - { - b.HasOne("LANCommander.Server.Data.Models.Role", null) - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("LANCommander.Server.Data.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => - { - b.HasOne("LANCommander.Server.Data.Models.User", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - modelBuilder.Entity("PageGame", b => { b.HasOne("LANCommander.Server.Data.Models.Game", null) @@ -2698,6 +3169,11 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.Navigation("Children"); }); + modelBuilder.Entity("LANCommander.Server.Data.Models.ChatThread", b => + { + b.Navigation("Messages"); + }); + modelBuilder.Entity("LANCommander.Server.Data.Models.Engine", b => { b.Navigation("Games"); @@ -2713,6 +3189,8 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.Navigation("DependentGames"); + b.Navigation("ExternalIds"); + b.Navigation("GameSaves"); b.Navigation("Issues"); @@ -2725,6 +3203,8 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.Navigation("PlaySessions"); + b.Navigation("Ratings"); + b.Navigation("SavePaths"); b.Navigation("Scripts"); @@ -2749,6 +3229,11 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.Navigation("Scripts"); }); + modelBuilder.Entity("LANCommander.Server.Data.Models.Role", b => + { + b.Navigation("UserRoles"); + }); + modelBuilder.Entity("LANCommander.Server.Data.Models.Server", b => { b.Navigation("Actions"); @@ -2769,6 +3254,17 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.Navigation("Media"); }); + modelBuilder.Entity("LANCommander.Server.Data.Models.Tool", b => + { + b.Navigation("Actions"); + + b.Navigation("Archives"); + + b.Navigation("Pages"); + + b.Navigation("Scripts"); + }); + modelBuilder.Entity("LANCommander.Server.Data.Models.User", b => { b.Navigation("CustomFields"); @@ -2781,6 +3277,8 @@ namespace LANCommander.Server.Data.MySQL.Migrations b.Navigation("Media"); b.Navigation("PlaySessions"); + + b.Navigation("UserRoles"); }); #pragma warning restore 612, 618 } diff --git a/LANCommander.Server.Data/DatabaseContext.cs b/LANCommander.Server.Data/DatabaseContext.cs index 3b0716a5..13632fdb 100644 --- a/LANCommander.Server.Data/DatabaseContext.cs +++ b/LANCommander.Server.Data/DatabaseContext.cs @@ -36,11 +36,19 @@ namespace LANCommander.Server.Data break; case DatabaseProvider.MySQL: - optionsBuilder.UseMySql(ConnectionString, ServerVersion.AutoDetect(ConnectionString), options => options.MigrationsAssembly("LANCommander.Server.Data.MySQL")); + optionsBuilder.UseMySql(ConnectionString, ServerVersion.AutoDetect(ConnectionString), options => + { + options.MigrationsAssembly("LANCommander.Server.Data.MySQL"); + options.EnableRetryOnFailure(maxRetryCount: 3, maxRetryDelay: TimeSpan.FromSeconds(5), errorNumbersToAdd: null); + }); break; case DatabaseProvider.PostgreSQL: - optionsBuilder.UseNpgsql(ConnectionString, options => options.MigrationsAssembly("LANCommander.Server.Data.PostgreSQL")); + optionsBuilder.UseNpgsql(ConnectionString, options => + { + options.MigrationsAssembly("LANCommander.Server.Data.PostgreSQL"); + options.EnableRetryOnFailure(maxRetryCount: 3, maxRetryDelay: TimeSpan.FromSeconds(5), errorCodesToAdd: null); + }); break; } } diff --git a/LANCommander.Server.Services/Factories/IdentityContextFactory.cs b/LANCommander.Server.Services/Factories/IdentityContextFactory.cs index 1d9d91fc..e614aecd 100644 --- a/LANCommander.Server.Services/Factories/IdentityContextFactory.cs +++ b/LANCommander.Server.Services/Factories/IdentityContextFactory.cs @@ -1,4 +1,4 @@ -using LANCommander.Server.Data; +using LANCommander.Server.Data; using LANCommander.Server.Data.Models; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Identity.EntityFrameworkCore; @@ -61,23 +61,33 @@ namespace LANCommander.Server.Services.Factories public void Dispose() { + UserManager.Dispose(); + RoleManager.Dispose(); DatabaseContext.Dispose(); } } + public class IdentityContextFactory { - private readonly DatabaseContext DatabaseContext; + private readonly IDbContextFactory _dbContextFactory; private readonly IServiceProvider ServiceProvider; - public IdentityContextFactory(DatabaseContext databaseContext, IServiceProvider serviceProvider) + public IdentityContextFactory(IDbContextFactory dbContextFactory, IServiceProvider serviceProvider) { - DatabaseContext = databaseContext; + _dbContextFactory = dbContextFactory; ServiceProvider = serviceProvider; } public IdentityContext Create() { - return new IdentityContext(DatabaseContext, ServiceProvider); + var context = _dbContextFactory.CreateDbContext(); + return new IdentityContext(context, ServiceProvider); + } + + public async Task CreateAsync() + { + var context = await _dbContextFactory.CreateDbContextAsync(); + return new IdentityContext(context, ServiceProvider); } } } diff --git a/LANCommander.Server.Services/RoleService.cs b/LANCommander.Server.Services/RoleService.cs index b824d9c2..fccf5c65 100644 --- a/LANCommander.Server.Services/RoleService.cs +++ b/LANCommander.Server.Services/RoleService.cs @@ -1,4 +1,4 @@ -using AutoMapper; +using AutoMapper; using LANCommander.Server.Data; using LANCommander.Server.Data.Models; using LANCommander.Server.Services.Factories; @@ -20,25 +20,18 @@ namespace LANCommander.Server.Services IHttpContextAccessor httpContextAccessor, IDbContextFactory contextFactory, CollectionService collectionService, - IdentityContextFactory identityContextFactory, - RoleManager roleManager) : BaseDatabaseService(logger, settingsProvider, cache, mapper, httpContextAccessor, contextFactory) + IdentityContextFactory identityContextFactory) : BaseDatabaseService(logger, settingsProvider, cache, mapper, httpContextAccessor, contextFactory) { public const string AdministratorRoleName = "Administrator"; - private IdentityContext _identityContext; - - public override void Initialize() - { - _identityContext = identityContextFactory.Create(); - } - public override async Task AddAsync(Role role) { - var result = await roleManager.CreateAsync(role); + using var identityContext = await identityContextFactory.CreateAsync(); + var result = await identityContext.RoleManager.CreateAsync(role); if (result.Succeeded) return await GetAsync(role.Name); - + throw new AddRoleException(result, "Could not create role"); } diff --git a/LANCommander.Server.Services/SetupService.cs b/LANCommander.Server.Services/SetupService.cs index c4a957f0..e63b77e2 100644 --- a/LANCommander.Server.Services/SetupService.cs +++ b/LANCommander.Server.Services/SetupService.cs @@ -3,6 +3,7 @@ using LANCommander.SDK.Enums; using LANCommander.Server.Data; using LANCommander.Server.Data.Enums; using LANCommander.Server.Data.Models; +using LANCommander.Server.Services.Factories; using LANCommander.Server.Settings.Enums; using Microsoft.AspNetCore.Identity; using Microsoft.Data.Sqlite; @@ -17,7 +18,7 @@ namespace LANCommander.Server.Services public class SetupService( ILogger logger, SettingsProvider settingsProvider, - UserManager userManager, + IdentityContextFactory identityContextFactory, IServiceProvider serviceProvider) : BaseService(logger, settingsProvider), IDisposable { public async Task IsSetupInitialized() @@ -26,15 +27,16 @@ namespace LANCommander.Server.Services { if (DatabaseContext.Provider == DatabaseProvider.Unknown) return false; - - var admins = await userManager.GetUsersInRoleAsync(RoleService.AdministratorRoleName); + + using var identityContext = await identityContextFactory.CreateAsync(); + var admins = await identityContext.UserManager.GetUsersInRoleAsync(RoleService.AdministratorRoleName); return admins.Any(); } catch (Exception ex) { logger.LogError(ex, ex.Message); - + return false; } } diff --git a/LANCommander.Server.Services/UserService.cs b/LANCommander.Server.Services/UserService.cs index 5cc88734..2ee0919e 100644 --- a/LANCommander.Server.Services/UserService.cs +++ b/LANCommander.Server.Services/UserService.cs @@ -1,4 +1,4 @@ -using AutoMapper; +using AutoMapper; using AutoMapper.QueryableExtensions; using LANCommander.Server.Data.Enums; using LANCommander.Server.Data.Models; @@ -11,18 +11,20 @@ using System.Linq.Expressions; using LANCommander.Server.Services.Abstractions; using LANCommander.Server.Services.Exceptions; using LANCommander.Server.Data; +using Microsoft.Extensions.Options; using ZiggyCreatures.Caching.Fusion; namespace LANCommander.Server.Services { public class UserService : BaseService, IBaseDatabaseService { - private readonly IdentityContext IdentityContext; + private readonly IdentityContextFactory _identityContextFactory; private readonly CollectionService CollectionService; private readonly IDbContextFactory ContextFactory; private readonly IMapper Mapper; private readonly IFusionCache Cache; - + private readonly IOptions _identityOptions; + protected readonly List, IQueryable>> _modifiers = new(); public UserService( @@ -32,19 +34,21 @@ namespace LANCommander.Server.Services IFusionCache cache, CollectionService collectionService, IDbContextFactory contextFactory, - IdentityContextFactory identityContextFactory) : base(logger, settingsProvider) + IdentityContextFactory identityContextFactory, + IOptions identityOptions) : base(logger, settingsProvider) { - IdentityContext = identityContextFactory.Create(); + _identityContextFactory = identityContextFactory; CollectionService = collectionService; ContextFactory = contextFactory; Mapper = mapper; Cache = cache; + _identityOptions = identityOptions; } public void Reconfigure() { - var options = IdentityContext.UserManager.Options; - if (options == null) + var options = _identityOptions.Value; + if (options == null) return; options.Password.RequireNonAlphanumeric = _settingsProvider.CurrentValue.Server.Authentication.PasswordRequireNonAlphanumeric; @@ -92,7 +96,7 @@ namespace LANCommander.Server.Services public async Task IsInRoleAsync(User user, string roleName) { var roles = await GetRolesAsync(user); - + return roles.Any(r => r.Name == roleName); } @@ -116,10 +120,11 @@ namespace LANCommander.Server.Services return new List(); } } - + public async Task ExistsAsync(Expression> predicate) { - return await IdentityContext.DatabaseContext.Users.AnyAsync(predicate); + using var context = await ContextFactory.CreateDbContextAsync(); + return await context.Users.AnyAsync(predicate); } public Task AddAsync(User user) @@ -148,11 +153,15 @@ namespace LANCommander.Server.Services } else { - result = await IdentityContext.UserManager.CreateAsync(user); + using var identityContext = await _identityContextFactory.CreateAsync(); + result = await identityContext.UserManager.CreateAsync(user); } if (result.Succeeded) - return await IdentityContext.UserManager.FindByNameAsync(user.UserName); + { + using var findContext = await _identityContextFactory.CreateAsync(); + return await findContext.UserManager.FindByNameAsync(user.UserName); + } else throw new UserRegistrationException(result, "Could not create user"); } @@ -161,15 +170,17 @@ namespace LANCommander.Server.Services { var user = await GetAsync(userName); - await IdentityContext.UserManager.AddToRoleAsync(user, roleName); + using var identityContext = await _identityContextFactory.CreateAsync(); + await identityContext.UserManager.AddToRoleAsync(user, roleName); } public async Task AddToRolesAsync(string userName, IEnumerable roleNames) { var user = await GetAsync(userName); - var result = await IdentityContext.UserManager.AddToRolesAsync(user, roleNames); - + using var identityContext = await _identityContextFactory.CreateAsync(); + var result = await identityContext.UserManager.AddToRolesAsync(user, roleNames); + await Cache.RemoveByTagAsync(["User/Security", "User/Roles", $"User/{user.Id}", $"Library/{user.Id}"]); if (!result.Succeeded) @@ -180,20 +191,24 @@ namespace LANCommander.Server.Services { var user = await GetAsync(userName); - await IdentityContext.UserManager.RemoveFromRoleAsync(user, roleName); + using var identityContext = await _identityContextFactory.CreateAsync(); + await identityContext.UserManager.RemoveFromRoleAsync(user, roleName); } public async Task CheckPassword(string userName, string password) { var user = await GetAsync(userName); - return await IdentityContext.UserManager.CheckPasswordAsync(user, password); + using var identityContext = await _identityContextFactory.CreateAsync(); + return await identityContext.UserManager.CheckPasswordAsync(user, password); } public async Task CheckRegister(User user, string password) { var registerErrors = new List(); - var userManager = IdentityContext.UserManager; + + using var identityContext = await _identityContextFactory.CreateAsync(); + var userManager = identityContext.UserManager; foreach (var validator in userManager.UserValidators ?? []) { @@ -222,7 +237,8 @@ namespace LANCommander.Server.Services { var user = await GetAsync(userName); - var result = await IdentityContext.UserManager.ChangePasswordAsync(user, currentPassword, newPassword); + using var identityContext = await _identityContextFactory.CreateAsync(); + var result = await identityContext.UserManager.ChangePasswordAsync(user, currentPassword, newPassword); return result; } @@ -237,17 +253,19 @@ namespace LANCommander.Server.Services IdentityResult result; var user = await GetAsync(userName); - if (bypassPolicy && IdentityContext.UserManager.PasswordValidators.Any()) - { - await IdentityContext.UserManager.RemovePasswordAsync(user); + using var identityContext = await _identityContextFactory.CreateAsync(); - result = await IdentityContext.UserManager.AddPasswordAsync(user, newPassword); + if (bypassPolicy && identityContext.UserManager.PasswordValidators.Any()) + { + await identityContext.UserManager.RemovePasswordAsync(user); + + result = await identityContext.UserManager.AddPasswordAsync(user, newPassword); } else { - var token = await IdentityContext.UserManager.GeneratePasswordResetTokenAsync(user); + var token = await identityContext.UserManager.GeneratePasswordResetTokenAsync(user); - result = await IdentityContext.UserManager.ResetPasswordAsync(user, token, newPassword); + result = await identityContext.UserManager.ResetPasswordAsync(user, token, newPassword); } return result; @@ -285,11 +303,12 @@ namespace LANCommander.Server.Services { try { - var queryable = IdentityContext.UserManager.Users.AsQueryable(); - + using var context = await ContextFactory.CreateDbContextAsync(); + var queryable = context.Users.AsQueryable(); + foreach (var modifier in _modifiers) queryable = modifier.Invoke(queryable); - + return await queryable.ToListAsync(); } finally @@ -302,14 +321,12 @@ namespace LANCommander.Server.Services { try { - var queryable = IdentityContext - .UserManager - .Users - .AsQueryable(); - + using var context = await ContextFactory.CreateDbContextAsync(); + var queryable = context.Users.AsQueryable(); + foreach (var modifier in _modifiers) queryable = modifier.Invoke(queryable); - + return await queryable .ProjectTo(Mapper.ConfigurationProvider) .ToListAsync(); @@ -348,14 +365,12 @@ namespace LANCommander.Server.Services { try { - var queryable = IdentityContext - .UserManager - .Users - .AsQueryable(); - + using var context = await ContextFactory.CreateDbContextAsync(); + var queryable = context.Users.AsQueryable(); + foreach (var modifier in _modifiers) queryable = modifier.Invoke(queryable); - + return await queryable.Where(predicate).ToListAsync(); } finally @@ -368,14 +383,12 @@ namespace LANCommander.Server.Services { try { - var queryable = IdentityContext - .UserManager - .Users - .AsQueryable(); - + using var context = await ContextFactory.CreateDbContextAsync(); + var queryable = context.Users.AsQueryable(); + foreach (var modifier in _modifiers) queryable = modifier.Invoke(queryable); - + return await queryable .Where(predicate) .ProjectTo(Mapper.ConfigurationProvider) @@ -391,14 +404,12 @@ namespace LANCommander.Server.Services { try { - var queryable = IdentityContext - .UserManager - .Users - .AsQueryable(); - + using var context = await ContextFactory.CreateDbContextAsync(); + var queryable = context.Users.AsQueryable(); + foreach (var modifier in _modifiers) queryable = modifier.Invoke(queryable); - + return await queryable.FirstOrDefaultAsync(predicate); } finally @@ -411,14 +422,12 @@ namespace LANCommander.Server.Services { try { - var queryable = IdentityContext - .UserManager - .Users - .AsQueryable(); - + using var context = await ContextFactory.CreateDbContextAsync(); + var queryable = context.Users.AsQueryable(); + foreach (var modifier in _modifiers) queryable = modifier.Invoke(queryable); - + return await queryable .Where(predicate) .ProjectTo(Mapper.ConfigurationProvider) @@ -434,14 +443,12 @@ namespace LANCommander.Server.Services { try { - var queryable = IdentityContext - .UserManager - .Users - .AsQueryable(); - + using var context = await ContextFactory.CreateDbContextAsync(); + var queryable = context.Users.AsQueryable(); + foreach (var modifier in _modifiers) queryable = modifier.Invoke(queryable); - + return await queryable .Where(predicate) .OrderBy(orderKeySelector) @@ -457,14 +464,12 @@ namespace LANCommander.Server.Services { try { - var queryable = IdentityContext - .UserManager - .Users - .AsQueryable(); - + using var context = await ContextFactory.CreateDbContextAsync(); + var queryable = context.Users.AsQueryable(); + foreach (var modifier in _modifiers) queryable = modifier.Invoke(queryable); - + return await queryable .Where(predicate) .ProjectTo(Mapper.ConfigurationProvider) @@ -479,28 +484,23 @@ namespace LANCommander.Server.Services public async Task ExistsAsync(Guid id) { - var user = await IdentityContext - .UserManager - .FindByIdAsync(id.ToString()); - - return user != null; + using var context = await ContextFactory.CreateDbContextAsync(); + return await context.Users.AnyAsync(u => u.Id == id); } public async Task> AddMissingAsync(Expression> predicate, User entity) { var result = new ExistingEntityResult(); - var user = await IdentityContext - .UserManager - .Users - .FirstOrDefaultAsync(predicate); + var user = await FirstOrDefaultAsync(predicate); if (user == null) { - await IdentityContext.UserManager.CreateAsync(entity); + using var identityContext = await _identityContextFactory.CreateAsync(); + await identityContext.UserManager.CreateAsync(entity); result.Existing = false; - result.Value = await IdentityContext.UserManager.FindByNameAsync(user.UserName); + result.Value = await identityContext.UserManager.FindByNameAsync(entity.UserName); } else { @@ -513,9 +513,9 @@ namespace LANCommander.Server.Services public async Task UpdateAsync(User entity) { - var user = await IdentityContext - .UserManager - .FindByIdAsync(entity.Id.ToString()); + using var identityContext = await _identityContextFactory.CreateAsync(); + + var user = await identityContext.UserManager.FindByIdAsync(entity.Id.ToString()); user.UserName = entity.UserName; user.PhoneNumber = entity.PhoneNumber; @@ -525,20 +525,20 @@ namespace LANCommander.Server.Services user.Approved = entity.Approved; user.ApprovedOn = entity.ApprovedOn; - await IdentityContext.UserManager.UpdateAsync(user); + await identityContext.UserManager.UpdateAsync(user); return user; } public async Task DeleteAsync(User entity) { - var user = await IdentityContext - .UserManager - .FindByIdAsync(entity.Id.ToString()); + using var identityContext = await _identityContextFactory.CreateAsync(); - await IdentityContext.UserManager.DeleteAsync(user); + var user = await identityContext.UserManager.FindByIdAsync(entity.Id.ToString()); + + await identityContext.UserManager.DeleteAsync(user); } - + public IBaseDatabaseService AsNoTracking() { return Query((queryable) => @@ -592,7 +592,7 @@ namespace LANCommander.Server.Services }); } } - + protected void Reset() { _modifiers.Clear(); diff --git a/LANCommander.Server.Services/_BaseDatabaseService.cs b/LANCommander.Server.Services/_BaseDatabaseService.cs index 633f3de4..5e282bc2 100644 --- a/LANCommander.Server.Services/_BaseDatabaseService.cs +++ b/LANCommander.Server.Services/_BaseDatabaseService.cs @@ -271,7 +271,7 @@ namespace LANCommander.Server.Services public abstract Task AddAsync(T entity); - protected async Task AddAsync(T addedEntity, Action> additionalMapping = null) + protected async Task AddAsync(T addedEntity, Func, Task> additionalMapping = null) { try { @@ -290,7 +290,7 @@ namespace LANCommander.Server.Services { var updateContext = new UpdateEntityContext(context, newEntity, addedEntity); - additionalMapping?.Invoke(updateContext); + await additionalMapping(updateContext); } newEntity = (await context.AddAsync(newEntity)).Entity; @@ -339,7 +339,7 @@ namespace LANCommander.Server.Services public abstract Task UpdateAsync(T entity); - protected async Task UpdateAsync(T updatedEntity, Action> additionalMapping = null) + protected async Task UpdateAsync(T updatedEntity, Func, Task> additionalMapping = null) { using var context = await dbContextFactory.CreateDbContextAsync(); @@ -353,8 +353,8 @@ namespace LANCommander.Server.Services if (additionalMapping != null) { var updateContext = new UpdateEntityContext(context, existingEntity, updatedEntity); - - additionalMapping?.Invoke(updateContext); + + await additionalMapping(updateContext); } var currentUser = await GetCurrentUserAsync(context); diff --git a/LANCommander.Server/UI/Components/MainMenu.razor b/LANCommander.Server/UI/Components/MainMenu.razor index 546a56ed..0d84ae96 100644 --- a/LANCommander.Server/UI/Components/MainMenu.razor +++ b/LANCommander.Server/UI/Components/MainMenu.razor @@ -72,6 +72,7 @@ General + Database Users Roles Authentication diff --git a/LANCommander.Server/UI/Pages/Games/Components/GameEditView.razor b/LANCommander.Server/UI/Pages/Games/Components/GameEditView.razor index 029d673c..9bba080f 100644 --- a/LANCommander.Server/UI/Pages/Games/Components/GameEditView.razor +++ b/LANCommander.Server/UI/Pages/Games/Components/GameEditView.razor @@ -56,9 +56,12 @@
- - @ChildContent?.Invoke(Game) - + @if (Game?.Id == Id) + { + + @ChildContent?.Invoke(Game) + + }
diff --git a/LANCommander.Server/UI/Pages/Games/Edit/Actions.razor b/LANCommander.Server/UI/Pages/Games/Edit/Actions.razor index f6a87494..d979ac93 100644 --- a/LANCommander.Server/UI/Pages/Games/Edit/Actions.razor +++ b/LANCommander.Server/UI/Pages/Games/Edit/Actions.razor @@ -5,7 +5,7 @@ - + diff --git a/LANCommander.Server/UI/Pages/Games/Edit/CustomFields.razor b/LANCommander.Server/UI/Pages/Games/Edit/CustomFields.razor index e857c3d0..f4c2b078 100644 --- a/LANCommander.Server/UI/Pages/Games/Edit/CustomFields.razor +++ b/LANCommander.Server/UI/Pages/Games/Edit/CustomFields.razor @@ -4,7 +4,7 @@ - + diff --git a/LANCommander.Server/UI/Pages/Games/Edit/Multiplayer.razor b/LANCommander.Server/UI/Pages/Games/Edit/Multiplayer.razor index ec69a501..8cc7e582 100644 --- a/LANCommander.Server/UI/Pages/Games/Edit/Multiplayer.razor +++ b/LANCommander.Server/UI/Pages/Games/Edit/Multiplayer.razor @@ -4,7 +4,7 @@ - + diff --git a/LANCommander.Server/UI/Pages/Games/Edit/SavePaths.razor b/LANCommander.Server/UI/Pages/Games/Edit/SavePaths.razor index 834de8b8..6b82e25b 100644 --- a/LANCommander.Server/UI/Pages/Games/Edit/SavePaths.razor +++ b/LANCommander.Server/UI/Pages/Games/Edit/SavePaths.razor @@ -4,7 +4,7 @@ - + diff --git a/LANCommander.Server/UI/Pages/Redistributables/Components/RedistributableEditView.razor b/LANCommander.Server/UI/Pages/Redistributables/Components/RedistributableEditView.razor index be484cd9..d740b736 100644 --- a/LANCommander.Server/UI/Pages/Redistributables/Components/RedistributableEditView.razor +++ b/LANCommander.Server/UI/Pages/Redistributables/Components/RedistributableEditView.razor @@ -42,9 +42,12 @@
- - @ChildContent?.Invoke(Redistributable) - + @if (Redistributable?.Id == Id) + { + + @ChildContent?.Invoke(Redistributable) + + }
diff --git a/LANCommander.Server/UI/Pages/Servers/Components/ServerEditView.razor b/LANCommander.Server/UI/Pages/Servers/Components/ServerEditView.razor index 5ab8ce7a..c85bb306 100644 --- a/LANCommander.Server/UI/Pages/Servers/Components/ServerEditView.razor +++ b/LANCommander.Server/UI/Pages/Servers/Components/ServerEditView.razor @@ -40,9 +40,12 @@
- - @ChildContent?.Invoke(Server) - + @if (Server?.Id == Id) + { + + @ChildContent?.Invoke(Server) + + }
diff --git a/LANCommander.Server/UI/Pages/Servers/Edit/Actions.razor b/LANCommander.Server/UI/Pages/Servers/Edit/Actions.razor index 9885b3c1..7d695250 100644 --- a/LANCommander.Server/UI/Pages/Servers/Edit/Actions.razor +++ b/LANCommander.Server/UI/Pages/Servers/Edit/Actions.razor @@ -8,7 +8,7 @@ { - + } diff --git a/LANCommander.Server/UI/Pages/Servers/Edit/Consoles.razor b/LANCommander.Server/UI/Pages/Servers/Edit/Consoles.razor index fbafde11..cc43fe67 100644 --- a/LANCommander.Server/UI/Pages/Servers/Edit/Consoles.razor +++ b/LANCommander.Server/UI/Pages/Servers/Edit/Consoles.razor @@ -8,7 +8,7 @@ - + } diff --git a/LANCommander.Server/UI/Pages/Servers/Edit/HttpPaths.razor b/LANCommander.Server/UI/Pages/Servers/Edit/HttpPaths.razor index a001bee7..03da4e87 100644 --- a/LANCommander.Server/UI/Pages/Servers/Edit/HttpPaths.razor +++ b/LANCommander.Server/UI/Pages/Servers/Edit/HttpPaths.razor @@ -11,7 +11,7 @@ - + } diff --git a/LANCommander.Server/UI/Pages/Settings/Database.razor b/LANCommander.Server/UI/Pages/Settings/Database.razor new file mode 100644 index 00000000..4cec8ce0 --- /dev/null +++ b/LANCommander.Server/UI/Pages/Settings/Database.razor @@ -0,0 +1,123 @@ +@page "/Settings/Database" +@using LANCommander.SDK +@using LANCommander.Server.Settings +@using LANCommander.Server.Settings.Enums +@using Microsoft.Data.Sqlite +@using Microsoft.Extensions.Options +@using MySqlConnector +@using Npgsql +@inject IOptions Settings +@inject SettingsProvider SettingsProvider +@inject SetupService SetupService +@inject IMessageService MessageService +@inject ILogger Logger +@attribute [Authorize(Roles = RoleService.AdministratorRoleName)] + + + + +
+ + + + + + + + + + + +
+
+ +@code { + bool Loading = false; + + void OnDatabaseProviderChanged() + { + switch (Settings.Value.Server.Database.Provider) + { + case DatabaseProvider.SQLite: + var dbPath = AppPaths.GetConfigPath("LANCommander.db"); + Settings.Value.Server.Database.ConnectionString = $"Data Source={dbPath};Cache=Shared"; + break; + + case DatabaseProvider.MySQL: + Settings.Value.Server.Database.ConnectionString = "Server=localhost;Uid=root;Pwd=password;Database=LANCommander"; + break; + + case DatabaseProvider.PostgreSQL: + Settings.Value.Server.Database.ConnectionString = "Host=localhost;Port=5432;Database=LANCommander;User Id=postgres;Password=password"; + break; + } + } + + async Task ValidateDatabaseConnection() + { + bool valid = false; + + Loading = true; + StateHasChanged(); + await Task.Yield(); + + try + { + SetupService.ValidateConnectionString(Settings.Value.Server.Database.Provider, Settings.Value.Server.Database.ConnectionString); + valid = true; + } + catch (SqliteException ex) + { + Logger?.LogError(ex, "Could not use SQLite database connection"); + MessageService.Error($"Could not use SQLite database: {ex.Message}", 10); + } + catch (MySqlException ex) + { + Logger?.LogError(ex, "Could not connect to MySQL database"); + MessageService.Error($"Could not connect to MySQL database: {ex.Message}", 10); + } + catch (NpgsqlException ex) + { + Logger?.LogError(ex, "Could not connect to PostgreSQL database"); + MessageService.Error($"Could not connect to PostgreSQL database: {ex.Message}", 10); + } + catch (Exception ex) + { + Logger?.LogError(ex, "An unknown error occurred trying to access the database"); + MessageService.Error("Could not validate the connection string!"); + } + + if (valid) + { + try + { + await SetupService.ChangeProviderAsync(Settings.Value.Server.Database.Provider, Settings.Value.Server.Database.ConnectionString); + + SettingsProvider.Update(s => + { + s.Server.Database.Provider = Settings.Value.Server.Database.Provider; + s.Server.Database.ConnectionString = Settings.Value.Server.Database.ConnectionString; + }); + + MessageService.Success("Database settings saved!"); + } + catch (Exception ex) + { + Logger?.LogError(ex, "Could not initialize database!"); + MessageService.Error($"Could not initialize database: {ex.Message}", 10); + } + } + + Loading = false; + } +} diff --git a/LANCommander.Server/UI/Pages/Settings/General.razor b/LANCommander.Server/UI/Pages/Settings/General.razor index 6c62b1ed..1db94966 100644 --- a/LANCommander.Server/UI/Pages/Settings/General.razor +++ b/LANCommander.Server/UI/Pages/Settings/General.razor @@ -1,4 +1,4 @@ -@page "/Settings" +@page "/Settings" @page "/Settings/General" @using LANCommander.Server.Settings @using LANCommander.Server.Settings.Enums @@ -13,21 +13,10 @@
- - - - - - - - - + @@ -61,10 +50,9 @@ { SettingsProvider.Update(s => { - s.Server.Database = Settings.Value.Server.Database; s.Server.Http = Settings.Value.Server.Http; }); - + MessageService.Success("Settings saved!"); } catch (Exception ex) diff --git a/LANCommander.Server/UI/Pages/Tools/Components/ToolEditView.razor b/LANCommander.Server/UI/Pages/Tools/Components/ToolEditView.razor index f39df7c0..48c63db3 100644 --- a/LANCommander.Server/UI/Pages/Tools/Components/ToolEditView.razor +++ b/LANCommander.Server/UI/Pages/Tools/Components/ToolEditView.razor @@ -41,9 +41,12 @@
- - @ChildContent?.Invoke(Tool) - + @if (Tool?.Id == Id) + { + + @ChildContent?.Invoke(Tool) + + }
diff --git a/LANCommander.Server/UI/Pages/Tools/Edit/Actions.razor b/LANCommander.Server/UI/Pages/Tools/Edit/Actions.razor index 70594420..5aa06795 100644 --- a/LANCommander.Server/UI/Pages/Tools/Edit/Actions.razor +++ b/LANCommander.Server/UI/Pages/Tools/Edit/Actions.razor @@ -6,7 +6,7 @@ - +