diff --git a/Oqtane.Server/Migrations/EntityBuilders/AspNetUserPasskeysEntityBuilder.cs b/Oqtane.Server/Migrations/EntityBuilders/AspNetUserPasskeysEntityBuilder.cs new file mode 100644 index 00000000..32219746 --- /dev/null +++ b/Oqtane.Server/Migrations/EntityBuilders/AspNetUserPasskeysEntityBuilder.cs @@ -0,0 +1,39 @@ +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Migrations.Operations; +using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders; +using Oqtane.Databases.Interfaces; + +// ReSharper disable MemberCanBePrivate.Global +// ReSharper disable UnusedAutoPropertyAccessor.Global + +namespace Oqtane.Migrations.EntityBuilders +{ + public class AspNetUserPasskeysEntityBuilder : BaseEntityBuilder + { + private const string _entityTableName = "AspNetUserPasskeys"; + private readonly PrimaryKey _primaryKey = new("PK_AspNetUserPasskeys", x => x.CredentialId); + private readonly ForeignKey _aspNetUsersForeignKey = new("FK_AspNetUserPasskeys_AspNetUsers_UserId", x => x.UserId, "AspNetUsers", "Id", ReferentialAction.Cascade); + + public AspNetUserPasskeysEntityBuilder(MigrationBuilder migrationBuilder, IDatabase database) : base(migrationBuilder, database) + { + EntityTableName = _entityTableName; + PrimaryKey = _primaryKey; + ForeignKeys.Add(_aspNetUsersForeignKey); + } + + protected override AspNetUserPasskeysEntityBuilder BuildTable(ColumnsBuilder table) + { + CredentialId = AddBinaryColumn(table, "CredentialId", 1024); + UserId = AddStringColumn(table, "UserId", 450); + Data = AddMaxStringColumn(table, "Data"); + + return this; + } + + public OperationBuilder CredentialId { get; set; } + + public OperationBuilder UserId { get; set; } + + public OperationBuilder Data { get; set; } + } +} diff --git a/Oqtane.Server/Migrations/EntityBuilders/BaseEntityBuilder.cs b/Oqtane.Server/Migrations/EntityBuilders/BaseEntityBuilder.cs index e5ac664b..42342138 100644 --- a/Oqtane.Server/Migrations/EntityBuilders/BaseEntityBuilder.cs +++ b/Oqtane.Server/Migrations/EntityBuilders/BaseEntityBuilder.cs @@ -299,6 +299,27 @@ namespace Oqtane.Migrations.EntityBuilders return table.Column(name: RewriteName(name), nullable: nullable, defaultValue: defaultValue); } + // binary + public void AddBinaryColumn(string name, int length, bool nullable = false, bool unicode = true) + { + _migrationBuilder.AddColumn(RewriteName(name), RewriteName(EntityTableName), maxLength: length, nullable: nullable, unicode: unicode, schema: Schema); + } + + public void AddBinaryColumn(string name, int length, bool nullable, bool unicode, string defaultValue) + { + _migrationBuilder.AddColumn(RewriteName(name), RewriteName(EntityTableName), maxLength: length, nullable: nullable, unicode: unicode, defaultValue: defaultValue, schema: Schema); + } + + protected OperationBuilder AddBinaryColumn(ColumnsBuilder table, string name, int length, bool nullable = false, bool unicode = true) + { + return table.Column(name: RewriteName(name), maxLength: length, nullable: nullable, unicode: unicode); + } + + protected OperationBuilder AddBinaryColumn(ColumnsBuilder table, string name, int length, bool nullable, bool unicode, string defaultValue) + { + return table.Column(name: RewriteName(name), maxLength: length, nullable: nullable, unicode: unicode, defaultValue: defaultValue); + } + // alter string public void AlterStringColumn(string name, int length, bool nullable = false, bool unicode = true, string index = "") { diff --git a/Oqtane.Server/Migrations/Tenant/10000001_AddAspNetUserPasskeys.cs b/Oqtane.Server/Migrations/Tenant/10000001_AddAspNetUserPasskeys.cs new file mode 100644 index 00000000..bb184b86 --- /dev/null +++ b/Oqtane.Server/Migrations/Tenant/10000001_AddAspNetUserPasskeys.cs @@ -0,0 +1,28 @@ +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Oqtane.Databases.Interfaces; +using Oqtane.Migrations.EntityBuilders; +using Oqtane.Repository; + +namespace Oqtane.Migrations.Tenant +{ + [DbContext(typeof(TenantDBContext))] + [Migration("Tenant.10.00.00.01")] + public class AddAspNetUserPasskeys : MultiDatabaseMigration + { + public AddAspNetUserPasskeys(IDatabase database) : base(database) + { + } + + protected override void Up(MigrationBuilder migrationBuilder) + { + var aspNetUserPasskeysEntityBuilder = new AspNetUserPasskeysEntityBuilder(migrationBuilder, ActiveDatabase); + aspNetUserPasskeysEntityBuilder.Create(); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + // not implemented + } + } +}