diff --git a/MareSynchronosServer/MareSynchronosServer/Data/MareDbContext.cs b/MareSynchronosServer/MareSynchronosServer/Data/MareDbContext.cs index a0b1668..ebd8603 100644 --- a/MareSynchronosServer/MareSynchronosServer/Data/MareDbContext.cs +++ b/MareSynchronosServer/MareSynchronosServer/Data/MareDbContext.cs @@ -24,6 +24,9 @@ namespace MareSynchronosServer.Data modelBuilder.Entity().ToTable("Users"); modelBuilder.Entity().ToTable("FileCaches"); modelBuilder.Entity().ToTable("ClientPairs"); + modelBuilder.Entity().HasKey(u => new { u.UserUID, u.OtherUserUID }); + modelBuilder.Entity().HasIndex(c => c.UserUID); + modelBuilder.Entity().HasIndex(c => c.OtherUserUID); modelBuilder.Entity().ToTable("ForbiddenUploadEntries"); modelBuilder.Entity().ToTable("BannedUsers"); } diff --git a/MareSynchronosServer/MareSynchronosServer/Migrations/20220712102941_ClientPairKey.Designer.cs b/MareSynchronosServer/MareSynchronosServer/Migrations/20220712102941_ClientPairKey.Designer.cs new file mode 100644 index 0000000..f5c7073 --- /dev/null +++ b/MareSynchronosServer/MareSynchronosServer/Migrations/20220712102941_ClientPairKey.Designer.cs @@ -0,0 +1,175 @@ +// +using System; +using MareSynchronosServer.Data; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace MareSynchronosServer.Migrations +{ + [DbContext(typeof(MareDbContext))] + [Migration("20220712102941_ClientPairKey")] + partial class ClientPairKey + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "6.0.6") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder, 1L, 1); + + modelBuilder.Entity("MareSynchronosServer.Models.Banned", b => + { + b.Property("CharacterIdentification") + .HasColumnType("nvarchar(450)"); + + b.Property("Reason") + .HasColumnType("nvarchar(max)"); + + b.Property("Timestamp") + .IsConcurrencyToken() + .ValueGeneratedOnAddOrUpdate() + .HasColumnType("rowversion"); + + b.HasKey("CharacterIdentification"); + + b.ToTable("BannedUsers", (string)null); + }); + + modelBuilder.Entity("MareSynchronosServer.Models.ClientPair", b => + { + b.Property("UserUID") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("OtherUserUID") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("AllowReceivingMessages") + .HasColumnType("bit"); + + b.Property("IsPaused") + .HasColumnType("bit"); + + b.Property("Timestamp") + .IsConcurrencyToken() + .ValueGeneratedOnAddOrUpdate() + .HasColumnType("rowversion"); + + b.HasKey("UserUID", "OtherUserUID"); + + b.HasIndex("OtherUserUID"); + + b.HasIndex("UserUID"); + + b.ToTable("ClientPairs", (string)null); + }); + + modelBuilder.Entity("MareSynchronosServer.Models.FileCache", b => + { + b.Property("Hash") + .HasMaxLength(40) + .HasColumnType("nvarchar(40)"); + + b.Property("Timestamp") + .IsConcurrencyToken() + .ValueGeneratedOnAddOrUpdate() + .HasColumnType("rowversion"); + + b.Property("Uploaded") + .HasColumnType("bit"); + + b.Property("UploaderUID") + .HasColumnType("nvarchar(10)"); + + b.HasKey("Hash"); + + b.HasIndex("UploaderUID"); + + b.ToTable("FileCaches", (string)null); + }); + + modelBuilder.Entity("MareSynchronosServer.Models.ForbiddenUploadEntry", b => + { + b.Property("Hash") + .HasColumnType("nvarchar(450)"); + + b.Property("ForbiddenBy") + .HasColumnType("nvarchar(max)"); + + b.Property("Timestamp") + .IsConcurrencyToken() + .ValueGeneratedOnAddOrUpdate() + .HasColumnType("rowversion"); + + b.HasKey("Hash"); + + b.ToTable("ForbiddenUploadEntries", (string)null); + }); + + modelBuilder.Entity("MareSynchronosServer.Models.User", b => + { + b.Property("UID") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("CharacterIdentification") + .HasColumnType("nvarchar(max)"); + + b.Property("IsAdmin") + .HasColumnType("bit"); + + b.Property("IsModerator") + .HasColumnType("bit"); + + b.Property("SecretKey") + .HasColumnType("nvarchar(max)"); + + b.Property("Timestamp") + .IsConcurrencyToken() + .ValueGeneratedOnAddOrUpdate() + .HasColumnType("rowversion"); + + b.HasKey("UID"); + + b.ToTable("Users", (string)null); + }); + + modelBuilder.Entity("MareSynchronosServer.Models.ClientPair", b => + { + b.HasOne("MareSynchronosServer.Models.User", "OtherUser") + .WithMany() + .HasForeignKey("OtherUserUID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("MareSynchronosServer.Models.User", "User") + .WithMany() + .HasForeignKey("UserUID") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("OtherUser"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("MareSynchronosServer.Models.FileCache", b => + { + b.HasOne("MareSynchronosServer.Models.User", "Uploader") + .WithMany() + .HasForeignKey("UploaderUID"); + + b.Navigation("Uploader"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/MareSynchronosServer/MareSynchronosServer/Migrations/20220712102941_ClientPairKey.cs b/MareSynchronosServer/MareSynchronosServer/Migrations/20220712102941_ClientPairKey.cs new file mode 100644 index 0000000..a8dd7e2 --- /dev/null +++ b/MareSynchronosServer/MareSynchronosServer/Migrations/20220712102941_ClientPairKey.cs @@ -0,0 +1,132 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace MareSynchronosServer.Migrations +{ + public partial class ClientPairKey : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropForeignKey( + name: "FK_ClientPairs_Users_OtherUserUID", + table: "ClientPairs"); + + migrationBuilder.DropForeignKey( + name: "FK_ClientPairs_Users_UserUID", + table: "ClientPairs"); + + migrationBuilder.DropPrimaryKey( + name: "PK_ClientPairs", + table: "ClientPairs"); + + migrationBuilder.DropColumn( + name: "Id", + table: "ClientPairs"); + + + migrationBuilder.AlterColumn( + name: "UserUID", + table: "ClientPairs", + type: "nvarchar(10)", + maxLength: 10, + nullable: false, + defaultValue: "", + oldClrType: typeof(string), + oldType: "nvarchar(10)", + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "OtherUserUID", + table: "ClientPairs", + type: "nvarchar(10)", + maxLength: 10, + nullable: false, + defaultValue: "", + oldClrType: typeof(string), + oldType: "nvarchar(10)", + oldNullable: true); + + migrationBuilder.AddPrimaryKey( + name: "PK_ClientPairs", + table: "ClientPairs", + columns: new[] { "UserUID", "OtherUserUID" }); + + migrationBuilder.AddForeignKey( + name: "FK_ClientPairs_Users_OtherUserUID", + table: "ClientPairs", + column: "OtherUserUID", + principalTable: "Users", + principalColumn: "UID", + onDelete: ReferentialAction.NoAction); + + migrationBuilder.AddForeignKey( + name: "FK_ClientPairs_Users_UserUID", + table: "ClientPairs", + column: "UserUID", + principalTable: "Users", + principalColumn: "UID", + onDelete: ReferentialAction.NoAction); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropForeignKey( + name: "FK_ClientPairs_Users_OtherUserUID", + table: "ClientPairs"); + + migrationBuilder.DropForeignKey( + name: "FK_ClientPairs_Users_UserUID", + table: "ClientPairs"); + + migrationBuilder.DropPrimaryKey( + name: "PK_ClientPairs", + table: "ClientPairs"); + + migrationBuilder.AlterColumn( + name: "OtherUserUID", + table: "ClientPairs", + type: "nvarchar(10)", + nullable: true, + oldClrType: typeof(string), + oldType: "nvarchar(10)", + oldMaxLength: 10); + + migrationBuilder.AlterColumn( + name: "UserUID", + table: "ClientPairs", + type: "nvarchar(10)", + nullable: true, + oldClrType: typeof(string), + oldType: "nvarchar(10)", + oldMaxLength: 10); + + migrationBuilder.AddColumn( + name: "Id", + table: "ClientPairs", + type: "int", + nullable: false, + defaultValue: 0) + .Annotation("SqlServer:Identity", "1, 1"); + + migrationBuilder.AddPrimaryKey( + name: "PK_ClientPairs", + table: "ClientPairs", + column: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_ClientPairs_Users_OtherUserUID", + table: "ClientPairs", + column: "OtherUserUID", + principalTable: "Users", + principalColumn: "UID"); + + migrationBuilder.AddForeignKey( + name: "FK_ClientPairs_Users_UserUID", + table: "ClientPairs", + column: "UserUID", + principalTable: "Users", + principalColumn: "UID"); + } + } +} diff --git a/MareSynchronosServer/MareSynchronosServer/Migrations/MareDbContextModelSnapshot.cs b/MareSynchronosServer/MareSynchronosServer/Migrations/MareDbContextModelSnapshot.cs index bfcf123..5c79738 100644 --- a/MareSynchronosServer/MareSynchronosServer/Migrations/MareDbContextModelSnapshot.cs +++ b/MareSynchronosServer/MareSynchronosServer/Migrations/MareDbContextModelSnapshot.cs @@ -42,11 +42,13 @@ namespace MareSynchronosServer.Migrations modelBuilder.Entity("MareSynchronosServer.Models.ClientPair", b => { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); + b.Property("UserUID") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"), 1L, 1); + b.Property("OtherUserUID") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); b.Property("AllowReceivingMessages") .HasColumnType("bit"); @@ -54,18 +56,12 @@ namespace MareSynchronosServer.Migrations b.Property("IsPaused") .HasColumnType("bit"); - b.Property("OtherUserUID") - .HasColumnType("nvarchar(10)"); - b.Property("Timestamp") .IsConcurrencyToken() .ValueGeneratedOnAddOrUpdate() .HasColumnType("rowversion"); - b.Property("UserUID") - .HasColumnType("nvarchar(10)"); - - b.HasKey("Id"); + b.HasKey("UserUID", "OtherUserUID"); b.HasIndex("OtherUserUID"); @@ -77,7 +73,7 @@ namespace MareSynchronosServer.Migrations modelBuilder.Entity("MareSynchronosServer.Models.FileCache", b => { b.Property("Hash") - .HasMaxLength(20) + .HasMaxLength(40) .HasColumnType("nvarchar(40)"); b.Property("Timestamp") @@ -148,11 +144,15 @@ namespace MareSynchronosServer.Migrations { b.HasOne("MareSynchronosServer.Models.User", "OtherUser") .WithMany() - .HasForeignKey("OtherUserUID"); + .HasForeignKey("OtherUserUID") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); b.HasOne("MareSynchronosServer.Models.User", "User") .WithMany() - .HasForeignKey("UserUID"); + .HasForeignKey("UserUID") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); b.Navigation("OtherUser"); diff --git a/MareSynchronosServer/MareSynchronosServer/Models/ClientPair.cs b/MareSynchronosServer/MareSynchronosServer/Models/ClientPair.cs index 3bd5af1..0000630 100644 --- a/MareSynchronosServer/MareSynchronosServer/Models/ClientPair.cs +++ b/MareSynchronosServer/MareSynchronosServer/Models/ClientPair.cs @@ -4,8 +4,11 @@ namespace MareSynchronosServer.Models { public class ClientPair { - public int Id { get; set; } + [MaxLength(10)] + public string UserUID { get; set; } public User User { get; set; } + [MaxLength(10)] + public string OtherUserUID { get; set; } public User OtherUser { get; set; } public bool IsPaused { get; set; } public bool AllowReceivingMessages { get; set; } = false;