feat: add pocketbase import audit persistence

This commit is contained in:
xiong
2026-07-26 06:05:24 +08:00
parent a2b10fb05b
commit 2451c4b7a8
7 changed files with 15843 additions and 1 deletions

View File

@@ -7262,6 +7262,196 @@ namespace Tiku.Infrastructure.Persistence.Migrations
b.ToTable("user_identities", (string)null);
});
modelBuilder.Entity("Tiku.Domain.Import.PocketBaseImportIssue", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uuid")
.HasColumnName("id")
.HasDefaultValueSql("gen_random_uuid()");
b.Property<string>("CollectionName")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("character varying(100)")
.HasColumnName("collection_name");
b.Property<DateTimeOffset>("CreatedAt")
.ValueGeneratedOnAdd()
.HasColumnType("timestamp with time zone")
.HasColumnName("created_at")
.HasDefaultValueSql("now()");
b.Property<string>("FieldPath")
.HasMaxLength(500)
.HasColumnType("character varying(500)")
.HasColumnName("field_path");
b.Property<string>("IssueCode")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("character varying(100)")
.HasColumnName("issue_code");
b.Property<string>("LegacyId")
.HasMaxLength(100)
.HasColumnType("character varying(100)")
.HasColumnName("legacy_id");
b.Property<string>("Message")
.IsRequired()
.HasColumnType("text")
.HasColumnName("message");
b.Property<string>("RawValueSample")
.HasMaxLength(2000)
.HasColumnType("character varying(2000)")
.HasColumnName("raw_value_sample");
b.Property<Guid?>("RunId")
.HasColumnType("uuid")
.HasColumnName("run_id");
b.Property<string>("Severity")
.IsRequired()
.HasMaxLength(32)
.HasColumnType("character varying(32)")
.HasColumnName("severity");
b.Property<Guid>("TenantId")
.HasColumnType("uuid")
.HasColumnName("tenant_id");
b.HasKey("Id")
.HasName("pk_pb_import_issues");
b.HasAlternateKey("TenantId", "Id")
.HasName("ak_pb_import_issues_tenant_id_id");
b.HasIndex("TenantId", "RunId")
.HasDatabaseName("ix_pb_import_issues_tenant_id_run_id");
b.HasIndex("RunId", "Severity", "CollectionName")
.HasDatabaseName("ix_pb_import_issues_run_id_severity_collection_name");
b.HasIndex("TenantId", "CollectionName", "LegacyId")
.HasDatabaseName("ix_pb_import_issues_tenant_id_collection_name_legacy_id");
b.ToTable("pb_import_issues", (string)null);
});
modelBuilder.Entity("Tiku.Domain.Import.PocketBaseImportRun", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uuid")
.HasColumnName("id")
.HasDefaultValueSql("gen_random_uuid()");
b.Property<DateTimeOffset?>("FinishedAt")
.HasColumnType("timestamp with time zone")
.HasColumnName("finished_at");
b.Property<string>("SourceKind")
.IsRequired()
.HasMaxLength(32)
.HasColumnType("character varying(32)")
.HasColumnName("source_kind");
b.Property<string>("SourceName")
.IsRequired()
.HasMaxLength(500)
.HasColumnType("character varying(500)")
.HasColumnName("source_name");
b.Property<DateTimeOffset>("StartedAt")
.ValueGeneratedOnAdd()
.HasColumnType("timestamp with time zone")
.HasColumnName("started_at")
.HasDefaultValueSql("now()");
b.Property<JsonElement>("Stats")
.ValueGeneratedOnAdd()
.HasColumnType("jsonb")
.HasColumnName("stats")
.HasDefaultValueSql("'{}'::jsonb");
b.Property<string>("Status")
.IsRequired()
.HasMaxLength(32)
.HasColumnType("character varying(32)")
.HasColumnName("status");
b.Property<Guid>("TenantId")
.HasColumnType("uuid")
.HasColumnName("tenant_id");
b.HasKey("Id")
.HasName("pk_pb_import_runs");
b.HasAlternateKey("TenantId", "Id")
.HasName("ak_pb_import_runs_tenant_id_id");
b.HasIndex("TenantId", "Status", "StartedAt")
.HasDatabaseName("ix_pb_import_runs_tenant_id_status_started_at");
b.ToTable("pb_import_runs", (string)null);
});
modelBuilder.Entity("Tiku.Domain.Import.PocketBaseRawRecord", b =>
{
b.Property<Guid>("RunId")
.HasColumnType("uuid")
.HasColumnName("run_id");
b.Property<string>("CollectionName")
.HasMaxLength(100)
.HasColumnType("character varying(100)")
.HasColumnName("collection_name");
b.Property<string>("LegacyId")
.HasMaxLength(100)
.HasColumnType("character varying(100)")
.HasColumnName("legacy_id");
b.Property<JsonElement>("Errors")
.ValueGeneratedOnAdd()
.HasColumnType("jsonb")
.HasColumnName("errors")
.HasDefaultValueSql("'[]'::jsonb");
b.Property<DateTimeOffset>("ImportedAt")
.ValueGeneratedOnAdd()
.HasColumnType("timestamp with time zone")
.HasColumnName("imported_at")
.HasDefaultValueSql("now()");
b.Property<bool>("Normalized")
.HasColumnType("boolean")
.HasColumnName("normalized");
b.Property<JsonElement>("Record")
.ValueGeneratedOnAdd()
.HasColumnType("jsonb")
.HasColumnName("record")
.HasDefaultValueSql("'{}'::jsonb");
b.Property<Guid>("TenantId")
.HasColumnType("uuid")
.HasColumnName("tenant_id");
b.HasKey("RunId", "CollectionName", "LegacyId")
.HasName("pk_pb_raw_records");
b.HasIndex("TenantId", "RunId")
.HasDatabaseName("ix_pb_raw_records_tenant_id_run_id");
b.HasIndex("TenantId", "CollectionName", "LegacyId")
.HasDatabaseName("ix_pb_raw_records_tenant_id_collection_name_legacy_id");
b.ToTable("pb_raw_records", (string)null);
});
modelBuilder.Entity("Tiku.Domain.Learning.AnswerRecord", b =>
{
b.Property<Guid>("Id")
@@ -13955,6 +14145,51 @@ namespace Tiku.Infrastructure.Persistence.Migrations
.HasConstraintName("fk_user_identities_users_user_id");
});
modelBuilder.Entity("Tiku.Domain.Import.PocketBaseImportIssue", b =>
{
b.HasOne("Tiku.Domain.Tenancy.Tenant", null)
.WithMany()
.HasForeignKey("TenantId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired()
.HasConstraintName("fk_pb_import_issues_tenants_tenant_id");
b.HasOne("Tiku.Domain.Import.PocketBaseImportRun", null)
.WithMany()
.HasForeignKey("TenantId", "RunId")
.HasPrincipalKey("TenantId", "Id")
.OnDelete(DeleteBehavior.Cascade)
.HasConstraintName("fk_pb_import_issues_pb_import_runs_tenant_id_run_id");
});
modelBuilder.Entity("Tiku.Domain.Import.PocketBaseImportRun", b =>
{
b.HasOne("Tiku.Domain.Tenancy.Tenant", null)
.WithMany()
.HasForeignKey("TenantId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired()
.HasConstraintName("fk_pb_import_runs_tenants_tenant_id");
});
modelBuilder.Entity("Tiku.Domain.Import.PocketBaseRawRecord", b =>
{
b.HasOne("Tiku.Domain.Tenancy.Tenant", null)
.WithMany()
.HasForeignKey("TenantId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired()
.HasConstraintName("fk_pb_raw_records_tenants_tenant_id");
b.HasOne("Tiku.Domain.Import.PocketBaseImportRun", null)
.WithMany()
.HasForeignKey("TenantId", "RunId")
.HasPrincipalKey("TenantId", "Id")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired()
.HasConstraintName("fk_pb_raw_records_pb_import_runs_tenant_id_run_id");
});
modelBuilder.Entity("Tiku.Domain.Learning.AnswerRecord", b =>
{
b.HasOne("Tiku.Domain.Tenancy.Tenant", null)