Migrate to Blazor WASM, MSSQL platform DB, and durable audio PVC.
build-and-deploy / deploy (push) Failing after 15m11s

Remove in-cluster Postgres; serve WASM via nginx; add audio import job for Gooya archives.
This commit is contained in:
2026-10-09 22:40:53 +03:30
parent 7f06856f45
commit ae746d65ba
32 changed files with 760 additions and 525 deletions
@@ -2,8 +2,8 @@
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
using TafsirQuran.Infrastructure.Persistence;
#nullable disable
@@ -18,32 +18,32 @@ namespace TafsirQuran.Infrastructure.Persistence.Migrations
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "9.0.10")
.HasAnnotation("Relational:MaxIdentifierLength", 63);
.HasAnnotation("Relational:MaxIdentifierLength", 128);
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
modelBuilder.Entity("TafsirQuran.Domain.Entities.AppUser", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uuid");
.HasColumnType("uniqueidentifier");
b.Property<DateTimeOffset>("CreatedAt")
.HasColumnType("timestamp with time zone");
.HasColumnType("datetimeoffset");
b.Property<string>("DisplayName")
.IsRequired()
.HasMaxLength(128)
.HasColumnType("character varying(128)");
.HasColumnType("nvarchar(128)");
b.Property<string>("Email")
.IsRequired()
.HasMaxLength(256)
.HasColumnType("character varying(256)");
.HasColumnType("nvarchar(256)");
b.Property<string>("PasswordHash")
.IsRequired()
.HasColumnType("text");
.HasColumnType("nvarchar(max)");
b.HasKey("Id");
@@ -57,20 +57,20 @@ namespace TafsirQuran.Infrastructure.Persistence.Migrations
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uuid");
.HasColumnType("uniqueidentifier");
b.Property<int>("Number")
.HasColumnType("integer");
.HasColumnType("int");
b.Property<int>("SurahId")
.HasColumnType("integer");
.HasColumnType("int");
b.Property<string>("TextAr")
.IsRequired()
.HasColumnType("text");
.HasColumnType("nvarchar(max)");
b.Property<string>("TextFa")
.HasColumnType("text");
.HasColumnType("nvarchar(max)");
b.HasKey("Id");
@@ -84,25 +84,25 @@ namespace TafsirQuran.Infrastructure.Persistence.Migrations
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uuid");
.HasColumnType("uniqueidentifier");
b.Property<DateTimeOffset>("CreatedAt")
.HasColumnType("timestamp with time zone");
.HasColumnType("datetimeoffset");
b.Property<string>("DeviceId")
.IsRequired()
.HasMaxLength(64)
.HasColumnType("character varying(64)");
.HasColumnType("nvarchar(64)");
b.Property<Guid>("EpisodeId")
.HasColumnType("uuid");
.HasColumnType("uniqueidentifier");
b.Property<string>("Note")
.HasMaxLength(500)
.HasColumnType("character varying(500)");
.HasColumnType("nvarchar(500)");
b.Property<Guid?>("UserId")
.HasColumnType("uuid");
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
@@ -111,7 +111,8 @@ namespace TafsirQuran.Infrastructure.Persistence.Migrations
b.HasIndex("UserId");
b.HasIndex("DeviceId", "UserId", "EpisodeId")
.IsUnique();
.IsUnique()
.HasFilter("[UserId] IS NOT NULL");
b.ToTable("Bookmarks");
});
@@ -120,21 +121,21 @@ namespace TafsirQuran.Infrastructure.Persistence.Migrations
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uuid");
.HasColumnType("uniqueidentifier");
b.Property<DateTimeOffset>("CreatedAt")
.HasColumnType("timestamp with time zone");
.HasColumnType("datetimeoffset");
b.Property<string>("DeviceId")
.IsRequired()
.HasMaxLength(64)
.HasColumnType("character varying(64)");
.HasColumnType("nvarchar(64)");
b.Property<Guid>("EpisodeId")
.HasColumnType("uuid");
.HasColumnType("uniqueidentifier");
b.Property<Guid?>("UserId")
.HasColumnType("uuid");
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
@@ -143,7 +144,8 @@ namespace TafsirQuran.Infrastructure.Persistence.Migrations
b.HasIndex("UserId");
b.HasIndex("DeviceId", "UserId", "EpisodeId")
.IsUnique();
.IsUnique()
.HasFilter("[UserId] IS NOT NULL");
b.ToTable("Favorites");
});
@@ -152,24 +154,24 @@ namespace TafsirQuran.Infrastructure.Persistence.Migrations
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uuid");
.HasColumnType("uniqueidentifier");
b.Property<string>("DeviceId")
.IsRequired()
.HasMaxLength(64)
.HasColumnType("character varying(64)");
.HasColumnType("nvarchar(64)");
b.Property<Guid>("EpisodeId")
.HasColumnType("uuid");
.HasColumnType("uniqueidentifier");
b.Property<double>("PositionSeconds")
.HasColumnType("double precision");
.HasColumnType("float");
b.Property<DateTimeOffset>("UpdatedAt")
.HasColumnType("timestamp with time zone");
.HasColumnType("datetimeoffset");
b.Property<Guid?>("UserId")
.HasColumnType("uuid");
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
@@ -186,22 +188,22 @@ namespace TafsirQuran.Infrastructure.Persistence.Migrations
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
.HasColumnType("int");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<string>("NameAr")
.IsRequired()
.HasMaxLength(80)
.HasColumnType("character varying(80)");
.HasColumnType("nvarchar(80)");
b.Property<string>("NameFa")
.IsRequired()
.HasMaxLength(80)
.HasColumnType("character varying(80)");
.HasColumnType("nvarchar(80)");
b.Property<int>("Number")
.HasColumnType("integer");
.HasColumnType("int");
b.HasKey("Id");
@@ -215,28 +217,28 @@ namespace TafsirQuran.Infrastructure.Persistence.Migrations
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uuid");
.HasColumnType("uniqueidentifier");
b.Property<string>("Author")
.IsRequired()
.HasMaxLength(120)
.HasColumnType("character varying(120)");
.HasColumnType("nvarchar(120)");
b.Property<string>("CoverUrl")
.HasColumnType("text");
.HasColumnType("nvarchar(max)");
b.Property<bool>("IsPublished")
.HasColumnType("boolean");
.HasColumnType("bit");
b.Property<string>("Slug")
.IsRequired()
.HasMaxLength(120)
.HasColumnType("character varying(120)");
.HasColumnType("nvarchar(120)");
b.Property<string>("Title")
.IsRequired()
.HasMaxLength(200)
.HasColumnType("character varying(200)");
.HasColumnType("nvarchar(200)");
b.HasKey("Id");
@@ -250,34 +252,34 @@ namespace TafsirQuran.Infrastructure.Persistence.Migrations
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uuid");
.HasColumnType("uniqueidentifier");
b.Property<string>("AudioUrl")
.IsRequired()
.HasColumnType("text");
.HasColumnType("nvarchar(max)");
b.Property<int>("AyahNumber")
.HasColumnType("integer");
.HasColumnType("int");
b.Property<int>("DurationSeconds")
.HasColumnType("integer");
.HasColumnType("int");
b.Property<int>("SortOrder")
.HasColumnType("integer");
.HasColumnType("int");
b.Property<string>("Summary")
.HasColumnType("text");
.HasColumnType("nvarchar(max)");
b.Property<int>("SurahId")
.HasColumnType("integer");
.HasColumnType("int");
b.Property<Guid>("TafsirId")
.HasColumnType("uuid");
.HasColumnType("uniqueidentifier");
b.Property<string>("Title")
.IsRequired()
.HasMaxLength(300)
.HasColumnType("character varying(300)");
.HasColumnType("nvarchar(300)");
b.HasKey("Id");