diff --git a/PostFundManagement.Domain/Configuration/Instrument.cs b/PostFundManagement.Domain/Configuration/Instrument.cs index 759baf4..27c38bd 100644 --- a/PostFundManagement.Domain/Configuration/Instrument.cs +++ b/PostFundManagement.Domain/Configuration/Instrument.cs @@ -16,7 +16,8 @@ public sealed class Instrument : IEntityTypeConfiguration builder.HasOne(f => f.Creator) .WithMany() - .HasForeignKey(f => f.CreatedBy) + .HasForeignKey(fk => fk.CreatedBy) + .IsRequired() .OnDelete(DeleteBehavior.NoAction); } } diff --git a/PostFundManagement.Domain/Configuration/Portfolio.cs b/PostFundManagement.Domain/Configuration/Portfolio.cs index 8fe363a..35f1e19 100644 --- a/PostFundManagement.Domain/Configuration/Portfolio.cs +++ b/PostFundManagement.Domain/Configuration/Portfolio.cs @@ -15,13 +15,14 @@ public sealed class Portfolio : IEntityTypeConfiguration builder.HasOne(f => f.Creator) .WithMany() - .HasForeignKey(f => f.CreatedBy) + .HasForeignKey(fk => fk.CreatedBy) .IsRequired() .OnDelete(DeleteBehavior.NoAction); builder.HasOne(f => f.Owner) .WithMany() - .HasForeignKey(f => f.OwnedBy) + .HasForeignKey(fk => fk.OwnedBy) + .IsRequired(false) .OnDelete(DeleteBehavior.NoAction); } } \ No newline at end of file diff --git a/PostFundManagement.Domain/Configuration/Programme.cs b/PostFundManagement.Domain/Configuration/Programme.cs index b69aec6..6555564 100644 --- a/PostFundManagement.Domain/Configuration/Programme.cs +++ b/PostFundManagement.Domain/Configuration/Programme.cs @@ -19,25 +19,26 @@ public sealed class Programme : IEntityTypeConfiguration builder.HasOne(f => f.Portfolio) .WithMany(f => f.Programmes) - .HasForeignKey(f => f.PortfolioId) + .HasForeignKey(fk => fk.PortfolioId) .IsRequired() .OnDelete(DeleteBehavior.NoAction); builder.HasOne(f => f.Instrument) .WithMany(f => f.Programmes) - .HasForeignKey(f => f.InstrumentId) + .HasForeignKey(fk => fk.InstrumentId) .IsRequired() .OnDelete(DeleteBehavior.NoAction); builder.HasOne(f => f.Creator) .WithMany() - .HasForeignKey(f => f.CreatedBy) + .HasForeignKey(fk => fk.CreatedBy) .IsRequired() .OnDelete(DeleteBehavior.NoAction); builder.HasOne(f => f.Owner) .WithMany() - .HasForeignKey(f => f.OwnedBy) + .IsRequired(false) + .HasForeignKey(fk => fk.OwnedBy) .OnDelete(DeleteBehavior.NoAction); } } \ No newline at end of file diff --git a/PostFundManagement.Domain/Configuration/Rule.cs b/PostFundManagement.Domain/Configuration/Rule.cs new file mode 100644 index 0000000..129a3f7 --- /dev/null +++ b/PostFundManagement.Domain/Configuration/Rule.cs @@ -0,0 +1,37 @@ +namespace PostFundManagement.Domain.Configuration; + +public sealed class Rule : IEntityTypeConfiguration +{ + public void Configure(EntityTypeBuilder builder) + { + builder.ToTable(nameof(Entities.Rule).Pluralize()); + + builder.HasKey(fk => fk.Id); + builder.Property(f => f.ProgrammeId).IsRequired(); + builder.Property(f => f.CreatedBy).IsRequired(); + builder.Property(f => f.UpdatedBy).IsRequired(false); + builder.Property(f => f.CreatedAt).IsRequired().HasDefaultValueSql("now()"); + builder.Property(f => f.UpdatedAt).IsRequired(false); + builder.Property(f => f.Name).IsRequired().HasMaxLength(256); + builder.Property(f => f.Version).IsRequired().HasDefaultValue(1); + builder.Property(f => f.Status).IsRequired().HasDefaultValue(ActivityStatus.Inactive); + + builder.HasOne(f => f.Programme) + .WithMany(f => f.Rules) + .HasForeignKey(fk => fk.ProgrammeId) + .IsRequired() + .OnDelete(DeleteBehavior.NoAction); + + builder.HasOne(f => f.Creator) + .WithMany() + .HasForeignKey(fk => fk.CreatedBy) + .IsRequired() + .OnDelete(DeleteBehavior.NoAction); + + builder.HasOne(f => f.Updator) + .WithMany() + .HasForeignKey(fk => fk.UpdatedBy) + .IsRequired(false) + .OnDelete(DeleteBehavior.NoAction); + } +} \ No newline at end of file diff --git a/PostFundManagement.Domain/Entities/Programme.cs b/PostFundManagement.Domain/Entities/Programme.cs index 7f3d4d2..096b712 100644 --- a/PostFundManagement.Domain/Entities/Programme.cs +++ b/PostFundManagement.Domain/Entities/Programme.cs @@ -10,4 +10,6 @@ public class Programme : Models.Programme public virtual Portfolio? Portfolio { get; set; } public virtual Instrument? Instrument { get; set; } + + public virtual ICollection Rules { get; set; } = []; } \ No newline at end of file diff --git a/PostFundManagement.Domain/Entities/Rule.cs b/PostFundManagement.Domain/Entities/Rule.cs new file mode 100644 index 0000000..f33401b --- /dev/null +++ b/PostFundManagement.Domain/Entities/Rule.cs @@ -0,0 +1,11 @@ +namespace PostFundManagement.Domain.Entities; + +[EntityTypeConfiguration] +public class Rule : Models.Rule +{ + public virtual User? Creator { get; set; } + + public virtual User? Updator { get; set; } + + public virtual Programme? Programme { get; set; } +} \ No newline at end of file diff --git a/PostFundManagement.Infrastructure/Database/ApplicationDbContext.cs b/PostFundManagement.Infrastructure/Database/ApplicationDbContext.cs index a80be6b..cbe8b49 100644 --- a/PostFundManagement.Infrastructure/Database/ApplicationDbContext.cs +++ b/PostFundManagement.Infrastructure/Database/ApplicationDbContext.cs @@ -4,6 +4,10 @@ namespace PostFundManagement.Infrastructure.Database; public sealed class ApplicationDbContext(DbContextOptions options) : DbContext(options) { + public DbSet Rules => Set(); + + public DbSet Programmes => Set(); + public DbSet Portfolios => Set(); public DbSet Instruments => Set();