update auth for refresh tokens and token invalidation

This commit is contained in:
voltsrage
2026-06-26 04:32:01 +08:00
parent 9777a335c5
commit abb33de5c1
20 changed files with 1183 additions and 12 deletions
@@ -21,6 +21,44 @@ namespace VigilCareRecordsAPI.Data.Migrations
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
modelBuilder.Entity("AuthAuditEvent", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uuid")
.HasColumnName("id")
.HasDefaultValueSql("gen_random_uuid()");
b.Property<string>("EventType")
.IsRequired()
.HasMaxLength(30)
.HasColumnType("character varying(30)")
.HasColumnName("event_type");
b.Property<string>("MetadataJson")
.HasColumnType("jsonb")
.HasColumnName("metadata_json");
b.Property<DateTimeOffset>("OccurredAt")
.ValueGeneratedOnAdd()
.HasColumnType("timestamp with time zone")
.HasColumnName("occurred_at")
.HasDefaultValueSql("NOW()");
b.Property<Guid>("UserId")
.HasColumnType("uuid")
.HasColumnName("user_id");
b.HasKey("Id");
b.HasIndex("UserId", "OccurredAt");
b.ToTable("auth_audit_events", null, t =>
{
t.HasCheckConstraint("chk_auth_audit_events_event_type", "event_type IN ('USER_LOGOUT', 'TOKEN_REFRESHED')");
});
});
modelBuilder.Entity("DigitizationBatch", b =>
{
b.Property<Guid>("Id")
@@ -385,6 +423,54 @@ namespace VigilCareRecordsAPI.Data.Migrations
});
});
modelBuilder.Entity("RefreshToken", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uuid")
.HasColumnName("id")
.HasDefaultValueSql("gen_random_uuid()");
b.Property<DateTimeOffset>("CreatedAt")
.ValueGeneratedOnAdd()
.HasColumnType("timestamp with time zone")
.HasColumnName("created_at")
.HasDefaultValueSql("NOW()");
b.Property<DateTimeOffset>("ExpiresAt")
.HasColumnType("timestamp with time zone")
.HasColumnName("expires_at");
b.Property<Guid?>("ReplacedByTokenId")
.HasColumnType("uuid")
.HasColumnName("replaced_by_token_id");
b.Property<DateTimeOffset?>("RevokedAt")
.HasColumnType("timestamp with time zone")
.HasColumnName("revoked_at");
b.Property<string>("TokenHash")
.IsRequired()
.HasMaxLength(64)
.HasColumnType("character varying(64)")
.HasColumnName("token_hash");
b.Property<Guid>("UserId")
.HasColumnType("uuid")
.HasColumnName("user_id");
b.HasKey("Id");
b.HasIndex("ReplacedByTokenId");
b.HasIndex("TokenHash")
.IsUnique();
b.HasIndex("UserId", "RevokedAt");
b.ToTable("refresh_tokens", (string)null);
});
modelBuilder.Entity("ScannedDocument", b =>
{
b.Property<Guid>("Id")
@@ -490,6 +576,17 @@ namespace VigilCareRecordsAPI.Data.Migrations
});
});
modelBuilder.Entity("AuthAuditEvent", b =>
{
b.HasOne("User", "User")
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Restrict)
.IsRequired();
b.Navigation("User");
});
modelBuilder.Entity("DigitizationBatch", b =>
{
b.HasOne("User", "ApprovedByUser")
@@ -566,6 +663,24 @@ namespace VigilCareRecordsAPI.Data.Migrations
b.Navigation("Batch");
});
modelBuilder.Entity("RefreshToken", b =>
{
b.HasOne("RefreshToken", "ReplacedByToken")
.WithMany()
.HasForeignKey("ReplacedByTokenId")
.OnDelete(DeleteBehavior.SetNull);
b.HasOne("User", "User")
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("ReplacedByToken");
b.Navigation("User");
});
modelBuilder.Entity("ScannedDocument", b =>
{
b.HasOne("DigitizationBatch", "Batch")