From 39781397c3aeafab51b2a3ecd903a09bd32f8c85 Mon Sep 17 00:00:00 2001 From: Adam R Grey Date: Thu, 30 Nov 2023 15:59:49 -0500 Subject: [PATCH] database update - doesn't work if there's already data T_T but at least now I can say it was a good idea to have waited all this stupidly goddamn long --- ...1130204741_Feature Permissions.Designer.cs | 349 ++++++++++++++++++ .../20231130204741_Feature Permissions.cs | 211 +++++++++++ Migrations/ChattingContextModelSnapshot.cs | 127 +++++-- Models/ChattingContext.cs | 3 +- 4 files changed, 652 insertions(+), 38 deletions(-) create mode 100644 Migrations/20231130204741_Feature Permissions.Designer.cs create mode 100644 Migrations/20231130204741_Feature Permissions.cs diff --git a/Migrations/20231130204741_Feature Permissions.Designer.cs b/Migrations/20231130204741_Feature Permissions.Designer.cs new file mode 100644 index 0000000..bde3b8e --- /dev/null +++ b/Migrations/20231130204741_Feature Permissions.Designer.cs @@ -0,0 +1,349 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; +using vassago.Models; + +#nullable disable + +namespace vassago.Migrations +{ + [DbContext(typeof(ChattingContext))] + [Migration("20231130204741_Feature Permissions")] + partial class FeaturePermissions + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "7.0.5") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("vassago.Models.Account", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("DisplayName") + .HasColumnType("text"); + + b.Property("ExternalId") + .HasColumnType("text"); + + b.Property("FeaturePermissionId") + .HasColumnType("uuid"); + + b.Property("IsBot") + .HasColumnType("boolean"); + + b.Property("IsUserId") + .HasColumnType("uuid"); + + b.Property("Protocol") + .HasColumnType("text"); + + b.Property("SeenInChannelId") + .HasColumnType("uuid"); + + b.Property("Username") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("FeaturePermissionId"); + + b.HasIndex("IsUserId"); + + b.HasIndex("SeenInChannelId"); + + b.ToTable("Accounts"); + }); + + modelBuilder.Entity("vassago.Models.Attachment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Content") + .HasColumnType("bytea"); + + b.Property("ContentType") + .HasColumnType("text"); + + b.Property("Description") + .HasColumnType("text"); + + b.Property("ExternalId") + .HasColumnType("numeric(20,0)"); + + b.Property("Filename") + .HasColumnType("text"); + + b.Property("MessageId") + .HasColumnType("uuid"); + + b.Property("Size") + .HasColumnType("integer"); + + b.Property("Source") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("MessageId"); + + b.ToTable("Attachments"); + }); + + modelBuilder.Entity("vassago.Models.Channel", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("DisplayName") + .HasColumnType("text"); + + b.Property("ExternalId") + .HasColumnType("text"); + + b.Property("FeaturePermissionId") + .HasColumnType("uuid"); + + b.Property("IsDM") + .HasColumnType("boolean"); + + b.Property("ParentChannelId") + .HasColumnType("uuid"); + + b.Property("PermissionsId") + .HasColumnType("integer"); + + b.Property("Protocol") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("FeaturePermissionId"); + + b.HasIndex("ParentChannelId"); + + b.HasIndex("PermissionsId"); + + b.ToTable("Channels"); + }); + + modelBuilder.Entity("vassago.Models.ChannelPermissions", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("LewdnessFilterLevel") + .HasColumnType("integer"); + + b.Property("LinksAllowed") + .HasColumnType("boolean"); + + b.Property("MaxAttachmentBytes") + .HasColumnType("numeric(20,0)"); + + b.Property("MaxTextChars") + .HasColumnType("bigint"); + + b.Property("MeannessFilterLevel") + .HasColumnType("integer"); + + b.Property("ReactionsPossible") + .HasColumnType("boolean"); + + b.HasKey("Id"); + + b.ToTable("ChannelPermissions"); + }); + + modelBuilder.Entity("vassago.Models.FeaturePermission", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Inheritable") + .HasColumnType("boolean"); + + b.Property("InternalName") + .HasColumnType("text"); + + b.Property("InternalTag") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.ToTable("FeaturePermissions"); + }); + + modelBuilder.Entity("vassago.Models.Message", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("ActedOn") + .HasColumnType("boolean"); + + b.Property("AuthorId") + .HasColumnType("uuid"); + + b.Property("ChannelId") + .HasColumnType("uuid"); + + b.Property("Content") + .HasColumnType("text"); + + b.Property("ExternalId") + .HasColumnType("text"); + + b.Property("MentionsMe") + .HasColumnType("boolean"); + + b.Property("Protocol") + .HasColumnType("text"); + + b.Property("Timestamp") + .HasColumnType("timestamp with time zone"); + + b.HasKey("Id"); + + b.HasIndex("AuthorId"); + + b.HasIndex("ChannelId"); + + b.ToTable("Messages"); + }); + + modelBuilder.Entity("vassago.Models.User", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("FeaturePermissionId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("FeaturePermissionId"); + + b.ToTable("Users"); + }); + + modelBuilder.Entity("vassago.Models.Account", b => + { + b.HasOne("vassago.Models.FeaturePermission", null) + .WithMany("RestrictedToAccounts") + .HasForeignKey("FeaturePermissionId"); + + b.HasOne("vassago.Models.User", "IsUser") + .WithMany("Accounts") + .HasForeignKey("IsUserId"); + + b.HasOne("vassago.Models.Channel", "SeenInChannel") + .WithMany("Users") + .HasForeignKey("SeenInChannelId"); + + b.Navigation("IsUser"); + + b.Navigation("SeenInChannel"); + }); + + modelBuilder.Entity("vassago.Models.Attachment", b => + { + b.HasOne("vassago.Models.Message", "Message") + .WithMany("Attachments") + .HasForeignKey("MessageId"); + + b.Navigation("Message"); + }); + + modelBuilder.Entity("vassago.Models.Channel", b => + { + b.HasOne("vassago.Models.FeaturePermission", null) + .WithMany("RestrictedToChannels") + .HasForeignKey("FeaturePermissionId"); + + b.HasOne("vassago.Models.Channel", "ParentChannel") + .WithMany("SubChannels") + .HasForeignKey("ParentChannelId"); + + b.HasOne("vassago.Models.ChannelPermissions", "Permissions") + .WithMany() + .HasForeignKey("PermissionsId"); + + b.Navigation("ParentChannel"); + + b.Navigation("Permissions"); + }); + + modelBuilder.Entity("vassago.Models.Message", b => + { + b.HasOne("vassago.Models.Account", "Author") + .WithMany() + .HasForeignKey("AuthorId"); + + b.HasOne("vassago.Models.Channel", "Channel") + .WithMany("Messages") + .HasForeignKey("ChannelId"); + + b.Navigation("Author"); + + b.Navigation("Channel"); + }); + + modelBuilder.Entity("vassago.Models.User", b => + { + b.HasOne("vassago.Models.FeaturePermission", null) + .WithMany("RestrictedToUsers") + .HasForeignKey("FeaturePermissionId"); + }); + + modelBuilder.Entity("vassago.Models.Channel", b => + { + b.Navigation("Messages"); + + b.Navigation("SubChannels"); + + b.Navigation("Users"); + }); + + modelBuilder.Entity("vassago.Models.FeaturePermission", b => + { + b.Navigation("RestrictedToAccounts"); + + b.Navigation("RestrictedToChannels"); + + b.Navigation("RestrictedToUsers"); + }); + + modelBuilder.Entity("vassago.Models.Message", b => + { + b.Navigation("Attachments"); + }); + + modelBuilder.Entity("vassago.Models.User", b => + { + b.Navigation("Accounts"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Migrations/20231130204741_Feature Permissions.cs b/Migrations/20231130204741_Feature Permissions.cs new file mode 100644 index 0000000..e9d704c --- /dev/null +++ b/Migrations/20231130204741_Feature Permissions.cs @@ -0,0 +1,211 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace vassago.Migrations +{ + /// + public partial class FeaturePermissions : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropForeignKey( + name: "FK_Channels_PermissionSettings_PermissionsId", + table: "Channels"); + + migrationBuilder.DropTable( + name: "PermissionSettings"); + + migrationBuilder.DropColumn( + name: "PermissionTags", + table: "Users"); + + migrationBuilder.DropColumn( + name: "PermissionTags", + table: "Accounts"); + + migrationBuilder.AddColumn( + name: "FeaturePermissionId", + table: "Users", + type: "uuid", + nullable: true); + + migrationBuilder.AddColumn( + name: "FeaturePermissionId", + table: "Channels", + type: "uuid", + nullable: true); + + migrationBuilder.AddColumn( + name: "FeaturePermissionId", + table: "Accounts", + type: "uuid", + nullable: true); + + migrationBuilder.CreateTable( + name: "ChannelPermissions", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + MaxAttachmentBytes = table.Column(type: "numeric(20,0)", nullable: true), + MaxTextChars = table.Column(type: "bigint", nullable: true), + LinksAllowed = table.Column(type: "boolean", nullable: true), + ReactionsPossible = table.Column(type: "boolean", nullable: true), + LewdnessFilterLevel = table.Column(type: "integer", nullable: true), + MeannessFilterLevel = table.Column(type: "integer", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_ChannelPermissions", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "FeaturePermissions", + columns: table => new + { + Id = table.Column(type: "uuid", nullable: false), + InternalName = table.Column(type: "text", nullable: true), + InternalTag = table.Column(type: "integer", nullable: true), + Inheritable = table.Column(type: "boolean", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_FeaturePermissions", x => x.Id); + }); + + migrationBuilder.CreateIndex( + name: "IX_Users_FeaturePermissionId", + table: "Users", + column: "FeaturePermissionId"); + + migrationBuilder.CreateIndex( + name: "IX_Channels_FeaturePermissionId", + table: "Channels", + column: "FeaturePermissionId"); + + migrationBuilder.CreateIndex( + name: "IX_Accounts_FeaturePermissionId", + table: "Accounts", + column: "FeaturePermissionId"); + + migrationBuilder.AddForeignKey( + name: "FK_Accounts_FeaturePermissions_FeaturePermissionId", + table: "Accounts", + column: "FeaturePermissionId", + principalTable: "FeaturePermissions", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Channels_ChannelPermissions_PermissionsId", + table: "Channels", + column: "PermissionsId", + principalTable: "ChannelPermissions", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Channels_FeaturePermissions_FeaturePermissionId", + table: "Channels", + column: "FeaturePermissionId", + principalTable: "FeaturePermissions", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Users_FeaturePermissions_FeaturePermissionId", + table: "Users", + column: "FeaturePermissionId", + principalTable: "FeaturePermissions", + principalColumn: "Id"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropForeignKey( + name: "FK_Accounts_FeaturePermissions_FeaturePermissionId", + table: "Accounts"); + + migrationBuilder.DropForeignKey( + name: "FK_Channels_ChannelPermissions_PermissionsId", + table: "Channels"); + + migrationBuilder.DropForeignKey( + name: "FK_Channels_FeaturePermissions_FeaturePermissionId", + table: "Channels"); + + migrationBuilder.DropForeignKey( + name: "FK_Users_FeaturePermissions_FeaturePermissionId", + table: "Users"); + + migrationBuilder.DropTable( + name: "ChannelPermissions"); + + migrationBuilder.DropTable( + name: "FeaturePermissions"); + + migrationBuilder.DropIndex( + name: "IX_Users_FeaturePermissionId", + table: "Users"); + + migrationBuilder.DropIndex( + name: "IX_Channels_FeaturePermissionId", + table: "Channels"); + + migrationBuilder.DropIndex( + name: "IX_Accounts_FeaturePermissionId", + table: "Accounts"); + + migrationBuilder.DropColumn( + name: "FeaturePermissionId", + table: "Users"); + + migrationBuilder.DropColumn( + name: "FeaturePermissionId", + table: "Channels"); + + migrationBuilder.DropColumn( + name: "FeaturePermissionId", + table: "Accounts"); + + migrationBuilder.AddColumn( + name: "PermissionTags", + table: "Users", + type: "integer[]", + nullable: true); + + migrationBuilder.AddColumn( + name: "PermissionTags", + table: "Accounts", + type: "integer[]", + nullable: true); + + migrationBuilder.CreateTable( + name: "PermissionSettings", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + LewdnessFilterLevel = table.Column(type: "integer", nullable: true), + LinksAllowed = table.Column(type: "boolean", nullable: true), + MaxAttachmentBytes = table.Column(type: "numeric(20,0)", nullable: true), + MaxTextChars = table.Column(type: "bigint", nullable: true), + MeannessFilterLevel = table.Column(type: "integer", nullable: true), + ReactionsPossible = table.Column(type: "boolean", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_PermissionSettings", x => x.Id); + }); + + migrationBuilder.AddForeignKey( + name: "FK_Channels_PermissionSettings_PermissionsId", + table: "Channels", + column: "PermissionsId", + principalTable: "PermissionSettings", + principalColumn: "Id"); + } + } +} diff --git a/Migrations/ChattingContextModelSnapshot.cs b/Migrations/ChattingContextModelSnapshot.cs index cf5df66..026e761 100644 --- a/Migrations/ChattingContextModelSnapshot.cs +++ b/Migrations/ChattingContextModelSnapshot.cs @@ -34,15 +34,15 @@ namespace vassago.Migrations b.Property("ExternalId") .HasColumnType("text"); + b.Property("FeaturePermissionId") + .HasColumnType("uuid"); + b.Property("IsBot") .HasColumnType("boolean"); b.Property("IsUserId") .HasColumnType("uuid"); - b.Property("PermissionTags") - .HasColumnType("integer[]"); - b.Property("Protocol") .HasColumnType("text"); @@ -54,6 +54,8 @@ namespace vassago.Migrations b.HasKey("Id"); + b.HasIndex("FeaturePermissionId"); + b.HasIndex("IsUserId"); b.HasIndex("SeenInChannelId"); @@ -110,6 +112,9 @@ namespace vassago.Migrations b.Property("ExternalId") .HasColumnType("text"); + b.Property("FeaturePermissionId") + .HasColumnType("uuid"); + b.Property("IsDM") .HasColumnType("boolean"); @@ -124,6 +129,8 @@ namespace vassago.Migrations b.HasKey("Id"); + b.HasIndex("FeaturePermissionId"); + b.HasIndex("ParentChannelId"); b.HasIndex("PermissionsId"); @@ -131,6 +138,57 @@ namespace vassago.Migrations b.ToTable("Channels"); }); + modelBuilder.Entity("vassago.Models.ChannelPermissions", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("LewdnessFilterLevel") + .HasColumnType("integer"); + + b.Property("LinksAllowed") + .HasColumnType("boolean"); + + b.Property("MaxAttachmentBytes") + .HasColumnType("numeric(20,0)"); + + b.Property("MaxTextChars") + .HasColumnType("bigint"); + + b.Property("MeannessFilterLevel") + .HasColumnType("integer"); + + b.Property("ReactionsPossible") + .HasColumnType("boolean"); + + b.HasKey("Id"); + + b.ToTable("ChannelPermissions"); + }); + + modelBuilder.Entity("vassago.Models.FeaturePermission", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Inheritable") + .HasColumnType("boolean"); + + b.Property("InternalName") + .HasColumnType("text"); + + b.Property("InternalTag") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.ToTable("FeaturePermissions"); + }); + modelBuilder.Entity("vassago.Models.Message", b => { b.Property("Id") @@ -170,53 +228,28 @@ namespace vassago.Migrations b.ToTable("Messages"); }); - modelBuilder.Entity("vassago.Models.PermissionSettings", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer"); - - NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); - - b.Property("LewdnessFilterLevel") - .HasColumnType("integer"); - - b.Property("LinksAllowed") - .HasColumnType("boolean"); - - b.Property("MaxAttachmentBytes") - .HasColumnType("numeric(20,0)"); - - b.Property("MaxTextChars") - .HasColumnType("bigint"); - - b.Property("MeannessFilterLevel") - .HasColumnType("integer"); - - b.Property("ReactionsPossible") - .HasColumnType("boolean"); - - b.HasKey("Id"); - - b.ToTable("PermissionSettings"); - }); - modelBuilder.Entity("vassago.Models.User", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("uuid"); - b.Property("PermissionTags") - .HasColumnType("integer[]"); + b.Property("FeaturePermissionId") + .HasColumnType("uuid"); b.HasKey("Id"); + b.HasIndex("FeaturePermissionId"); + b.ToTable("Users"); }); modelBuilder.Entity("vassago.Models.Account", b => { + b.HasOne("vassago.Models.FeaturePermission", null) + .WithMany("RestrictedToAccounts") + .HasForeignKey("FeaturePermissionId"); + b.HasOne("vassago.Models.User", "IsUser") .WithMany("Accounts") .HasForeignKey("IsUserId"); @@ -241,11 +274,15 @@ namespace vassago.Migrations modelBuilder.Entity("vassago.Models.Channel", b => { + b.HasOne("vassago.Models.FeaturePermission", null) + .WithMany("RestrictedToChannels") + .HasForeignKey("FeaturePermissionId"); + b.HasOne("vassago.Models.Channel", "ParentChannel") .WithMany("SubChannels") .HasForeignKey("ParentChannelId"); - b.HasOne("vassago.Models.PermissionSettings", "Permissions") + b.HasOne("vassago.Models.ChannelPermissions", "Permissions") .WithMany() .HasForeignKey("PermissionsId"); @@ -269,6 +306,13 @@ namespace vassago.Migrations b.Navigation("Channel"); }); + modelBuilder.Entity("vassago.Models.User", b => + { + b.HasOne("vassago.Models.FeaturePermission", null) + .WithMany("RestrictedToUsers") + .HasForeignKey("FeaturePermissionId"); + }); + modelBuilder.Entity("vassago.Models.Channel", b => { b.Navigation("Messages"); @@ -278,6 +322,15 @@ namespace vassago.Migrations b.Navigation("Users"); }); + modelBuilder.Entity("vassago.Models.FeaturePermission", b => + { + b.Navigation("RestrictedToAccounts"); + + b.Navigation("RestrictedToChannels"); + + b.Navigation("RestrictedToUsers"); + }); + modelBuilder.Entity("vassago.Models.Message", b => { b.Navigation("Attachments"); diff --git a/Models/ChattingContext.cs b/Models/ChattingContext.cs index e1195bb..f666d1d 100644 --- a/Models/ChattingContext.cs +++ b/Models/ChattingContext.cs @@ -9,7 +9,8 @@ public class ChattingContext : DbContext public DbSet Channels { get; set; } //public DbSet Emoji {get;set;} public DbSet Messages { get; set; } - public DbSet PermissionSettings{get;set;} + public DbSet ChannelPermissions{get;set;} + public DbSet FeaturePermissions{get;set;} public DbSet Accounts { get; set; } public DbSet Users { get; set; }