Phase 3
This commit is contained in:
parent
9321f5a370
commit
25c2ce53cd
23 changed files with 1746 additions and 68 deletions
|
|
@ -9,6 +9,12 @@ public class AppDbContext(DbContextOptions<AppDbContext> options) : DbContext(op
|
|||
|
||||
public DbSet<DocumentVersion> DocumentVersions => Set<DocumentVersion>();
|
||||
|
||||
public DbSet<Template> Templates => Set<Template>();
|
||||
|
||||
public DbSet<TemplateField> TemplateFields => Set<TemplateField>();
|
||||
|
||||
public DbSet<DocumentFieldValue> DocumentFieldValues => Set<DocumentFieldValue>();
|
||||
|
||||
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
||||
{
|
||||
modelBuilder.Entity<Document>(entity =>
|
||||
|
|
@ -16,6 +22,13 @@ public class AppDbContext(DbContextOptions<AppDbContext> options) : DbContext(op
|
|||
entity.HasKey(x => x.Id);
|
||||
entity.Property(x => x.FileName).HasMaxLength(512);
|
||||
entity.Property(x => x.AddInSignature).HasMaxLength(64);
|
||||
|
||||
// FR-10: เอกสารผูกกับ template — Restrict เพราะ template ต้อง soft-delete เท่านั้น
|
||||
// (แถว Template ไม่ควรถูกลบจริงตรงๆ แต่กันไว้เผื่อมือสั่น)
|
||||
entity.HasOne(x => x.Template)
|
||||
.WithMany(t => t.Documents)
|
||||
.HasForeignKey(x => x.TemplateId)
|
||||
.OnDelete(DeleteBehavior.Restrict);
|
||||
});
|
||||
|
||||
modelBuilder.Entity<DocumentVersion>(entity =>
|
||||
|
|
@ -32,5 +45,47 @@ public class AppDbContext(DbContextOptions<AppDbContext> options) : DbContext(op
|
|||
.WithMany(d => d.Versions)
|
||||
.HasForeignKey(x => x.DocumentId);
|
||||
});
|
||||
|
||||
modelBuilder.Entity<Template>(entity =>
|
||||
{
|
||||
entity.HasKey(x => x.Id);
|
||||
entity.Property(x => x.Name).HasMaxLength(256);
|
||||
entity.Property(x => x.Description).HasMaxLength(2048);
|
||||
entity.Property(x => x.ObjectKey).HasMaxLength(1024);
|
||||
|
||||
entity.HasMany(x => x.Documents)
|
||||
.WithOne(d => d.Template)
|
||||
.HasForeignKey(d => d.TemplateId);
|
||||
});
|
||||
|
||||
modelBuilder.Entity<TemplateField>(entity =>
|
||||
{
|
||||
entity.HasKey(x => x.Id);
|
||||
|
||||
// Key = SDT tag ต้อง unique ต่อ template (spec ส่วน 9 เพิ่มเติม v2)
|
||||
entity.HasIndex(x => new { x.TemplateId, x.Key }).IsUnique();
|
||||
|
||||
entity.Property(x => x.Key).HasMaxLength(256);
|
||||
entity.Property(x => x.Label).HasMaxLength(512);
|
||||
entity.Property(x => x.Type).HasMaxLength(16);
|
||||
|
||||
entity.HasOne(x => x.Template)
|
||||
.WithMany(t => t.Fields)
|
||||
.HasForeignKey(x => x.TemplateId)
|
||||
.OnDelete(DeleteBehavior.Cascade);
|
||||
});
|
||||
|
||||
modelBuilder.Entity<DocumentFieldValue>(entity =>
|
||||
{
|
||||
// latest value ต่อ (document, field) — ตาม spec ส่วน 7 ไม่มี Id แยก
|
||||
entity.HasKey(x => new { x.DocumentId, x.FieldKey });
|
||||
|
||||
entity.Property(x => x.FieldKey).HasMaxLength(256);
|
||||
|
||||
entity.HasOne<Document>()
|
||||
.WithMany()
|
||||
.HasForeignKey(x => x.DocumentId)
|
||||
.OnDelete(DeleteBehavior.Cascade);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue