Migrated database changes

This commit is contained in:
2026-08-15 20:30:51 +02:00
parent df7ba866f5
commit d4bb0cf7a8
24 changed files with 4394 additions and 28 deletions
@@ -15,7 +15,7 @@ public class Award : IEntityTypeConfiguration<Entities.Award>
builder.Property(f => f.ApprovedBy).IsRequired(false);
builder.Property(f => f.CreatedAt).IsRequired().HasDefaultValueSql("now()");
builder.Property(f => f.UpdatedAt).IsRequired(false);
builder.Property(f => f.Status).IsRequired().HasDefaultValue(ApprovalStatus.Pending);
builder.Property(f => f.Status).IsRequired().HasConversion<int>().HasDefaultValueSql("1");
builder.Property(f => f.Amount).IsRequired().HasPrecision(18, 2);
builder.HasOne(f => f.Organisation)
@@ -16,7 +16,7 @@ public sealed class ChangeRequest : IEntityTypeConfiguration<Entities.ChangeRequ
builder.Property(f => f.Justification).IsRequired().HasMaxLength(1024);
builder.Property(f => f.RevisedBudget).IsRequired(false).HasPrecision(18, 2);
builder.Property(f => f.RevisedEndedAt).IsRequired(false);
builder.Property(f => f.Status).IsRequired().HasDefaultValue(ApprovalStatus.Pending);
builder.Property(f => f.Status).IsRequired().HasConversion<int>().HasDefaultValueSql("1");
builder.HasOne(f => f.Project)
.WithMany()
@@ -14,7 +14,7 @@ public sealed class ComplianceItem : IEntityTypeConfiguration<Entities.Complianc
builder.Property(f => f.UpdatedAt).IsRequired(false);
builder.Property(f => f.Title).IsRequired().HasMaxLength(256);
builder.Property(f => f.Requirements).IsRequired().HasMaxLength(2048);
builder.Property(f => f.Status).IsRequired().HasDefaultValue(ApprovalStatus.Pending);
builder.Property(f => f.Status).IsRequired().HasConversion<int>().HasDefaultValueSql("1");
builder.HasOne(f => f.Project)
.WithMany()
@@ -17,7 +17,7 @@ public sealed class Contract : IEntityTypeConfiguration<Entities.Contract>
builder.Property(f => f.EffectiveAt).IsRequired(false);
builder.Property(f => f.ExpiresAt).IsRequired(false);
builder.Property(f => f.TotalValue).IsRequired().HasPrecision(18, 2);
builder.Property(f => f.Status).IsRequired().HasDefaultValue(ContractStatus.Draft);
builder.Property(f => f.Status).IsRequired().HasConversion<int>().HasDefaultValueSql("1");
builder.HasOne(f => f.Award)
.WithOne(f => f.Contract)
@@ -14,7 +14,7 @@ public sealed class Disbursement : IEntityTypeConfiguration<Entities.Disbursemen
builder.Property(f => f.CreatedAt).IsRequired().HasDefaultValueSql("now()");
builder.Property(f => f.UpdatedAt).IsRequired(false);
builder.Property(f => f.Amount).IsRequired().HasPrecision(18, 2);
builder.Property(f => f.Status).IsRequired().HasDefaultValue(ApprovalStatus.Pending);
builder.Property(f => f.Status).IsRequired().HasConversion<int>().HasDefaultValueSql("1");
builder.HasOne(f => f.Project)
.WithMany()
@@ -16,7 +16,7 @@ public sealed class Evidence : IEntityTypeConfiguration<Entities.Evidence>
builder.Property(f => f.UpdatedAt).IsRequired(false);
builder.Property(f => f.Version).IsRequired().HasDefaultValue(1);
builder.Property(f => f.DocumentUrl).IsRequired();
builder.Property(f => f.Status).IsRequired().HasDefaultValue(ApprovalStatus.Pending);
builder.Property(f => f.Status).IsRequired().HasConversion<int>().HasDefaultValueSql("1");
builder.HasOne(f => f.Project)
.WithMany()
@@ -11,7 +11,7 @@ public sealed class Indicator : IEntityTypeConfiguration<Entities.Indicator>
builder.Property(f => f.CreatedBy).IsRequired();
builder.Property(f => f.CreatedAt).IsRequired().HasDefaultValueSql("now()");
builder.Property(f => f.Name).IsRequired().HasMaxLength(256);
builder.Property(f => f.UnitOfMeasure).IsRequired().HasDefaultValue(UnitOfMeasure.Percentage);
builder.Property(f => f.UnitOfMeasure).IsRequired().HasConversion<int>().HasDefaultValueSql("2");
builder.Property(f => f.BaselineAmount).IsRequired().HasPrecision(18, 2);
builder.Property(f => f.TargetAmount).IsRequired().HasPrecision(18, 2);
builder.Property(f => f.ActualAmount).IsRequired().HasPrecision(18, 2);
@@ -10,7 +10,7 @@ public sealed class Instrument : IEntityTypeConfiguration<Entities.Instrument>
builder.Property(f => f.Code).IsRequired().HasMaxLength(50);
builder.Property(f => f.Name).IsRequired().HasMaxLength(256);
builder.Property(f => f.Description).IsRequired(false).HasMaxLength(1024);
builder.Property(f => f.Status).IsRequired().HasDefaultValue(ActivityStatus.Inactive);
builder.Property(f => f.Status).IsRequired().HasConversion<int>().HasDefaultValueSql("2");
builder.Property(f => f.CreatedBy).IsRequired();
builder.Property(f => f.CreatedAt).IsRequired().HasDefaultValueSql("now()");
@@ -13,8 +13,8 @@ public sealed class Issue : IEntityTypeConfiguration<Entities.Issue>
builder.Property(f => f.ResolvedAt).IsRequired(false);
builder.Property(f => f.Title).IsRequired().HasMaxLength(256);
builder.Property(f => f.Description).IsRequired().HasMaxLength(1024);
builder.Property(f => f.Priority).IsRequired().HasDefaultValue(Priority.Low);
builder.Property(f => f.Status).IsRequired().HasDefaultValue(ApprovalStatus.Pending);
builder.Property(f => f.Priority).IsRequired().HasConversion<int>().HasDefaultValueSql("1");
builder.Property(f => f.Status).IsRequired().HasConversion<int>().HasDefaultValueSql("1");
builder.HasOne(f => f.Project)
.WithMany()
@@ -14,7 +14,7 @@ public sealed class Milestone : IEntityTypeConfiguration<Entities.Milestone>
builder.Property(f => f.UpdatedAt).IsRequired(false);
builder.Property(f => f.DueAt).IsRequired();
builder.Property(f => f.Name).IsRequired().HasMaxLength(256);
builder.Property(f => f.Status).HasDefaultValue(ApprovalStatus.Pending);
builder.Property(f => f.Status).IsRequired().HasConversion<int>().HasDefaultValueSql("1");
builder.HasOne(f => f.Project)
.WithMany()
@@ -12,8 +12,8 @@ public sealed class Organisation : IEntityTypeConfiguration<Entities.Organisatio
builder.Property(f => f.RegistrationNo).IsRequired().HasMaxLength(256);
builder.Property(f => f.Name).IsRequired().HasMaxLength(256);
builder.Property(f => f.Email).IsRequired().HasMaxLength(256);
builder.Property(f => f.Type).IsRequired().HasDefaultValue(OrganisationType.PrivateLimitedCompany);
builder.Property(f => f.Status).IsRequired().HasDefaultValue(ActivityStatus.Active);
builder.Property(f => f.Type).IsRequired().HasConversion<int>().HasDefaultValueSql("5");
builder.Property(f => f.Status).IsRequired().HasConversion<int>().HasDefaultValueSql("1");
builder.HasOne(f => f.Creator)
.WithMany()
@@ -8,7 +8,7 @@ public sealed class Portfolio : IEntityTypeConfiguration<Entities.Portfolio>
builder.HasKey(pk => pk.Id);
builder.Property(f => f.CreatedBy).IsRequired();
builder.Property(f => f.OwnedBy).IsRequired(false);
builder.Property(f => f.OwnedBy).IsRequired();
builder.Property(f => f.CreatedAt).IsRequired().HasDefaultValueSql("now()");
builder.Property(f => f.Name).IsRequired().HasMaxLength(256);
builder.Property(f => f.Description).IsRequired(false).HasMaxLength(1024);
@@ -22,7 +22,7 @@ public sealed class Portfolio : IEntityTypeConfiguration<Entities.Portfolio>
builder.HasOne(f => f.Owner)
.WithMany()
.HasForeignKey(fk => fk.OwnedBy)
.IsRequired(false)
.IsRequired()
.OnDelete(DeleteBehavior.NoAction);
}
}
@@ -9,13 +9,13 @@ public sealed class Programme : IEntityTypeConfiguration<Entities.Programme>
builder.HasKey(pk => pk.Id);
builder.Property(f => f.PortfolioId).IsRequired();
builder.Property(f => f.InstrumentId).IsRequired();
builder.Property(f => f.OwnedBy).IsRequired(false);
builder.Property(f => f.OwnedBy).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.Status).IsRequired(false).HasDefaultValue(ApprovalStatus.Pending);
builder.Property(f => f.Status).IsRequired().HasConversion<int>().HasDefaultValueSql("1");
builder.HasOne(f => f.Portfolio)
.WithMany(f => f.Programmes)
@@ -37,7 +37,7 @@ public sealed class Programme : IEntityTypeConfiguration<Entities.Programme>
builder.HasOne(f => f.Owner)
.WithMany()
.IsRequired(false)
.IsRequired()
.HasForeignKey(fk => fk.OwnedBy)
.OnDelete(DeleteBehavior.NoAction);
}
@@ -16,7 +16,7 @@ public sealed class Project : IEntityTypeConfiguration<Entities.Project>
builder.Property(f => f.EndedAt).IsRequired(false);
builder.Property(f => f.Name).IsRequired().HasMaxLength(256);
builder.Property(f => f.Description).IsRequired().HasMaxLength(1024);
builder.Property(f => f.StartedAt).IsRequired().HasDefaultValue(ApprovalStatus.Pending);
builder.Property(f => f.Status).IsRequired().HasConversion<int>().HasDefaultValueSql("1");
builder.HasOne(f => f.Programme)
.WithMany(f => f.Projects)
@@ -10,8 +10,8 @@ public sealed class Risk : IEntityTypeConfiguration<Entities.Risk>
builder.Property(f => f.ProjectId).IsRequired();
builder.Property(f => f.CreatedBy).IsRequired();
builder.Property(f => f.CreatedAt).IsRequired().HasDefaultValueSql("now()");
builder.Property(f => f.Likelihood).IsRequired().HasDefaultValue(RiskLikelihood.Possible);
builder.Property(f => f.Impact).IsRequired().HasDefaultValue(RiskImpact.Negligible);
builder.Property(f => f.Likelihood).IsRequired().HasConversion<int>().HasDefaultValueSql("3");
builder.Property(f => f.Impact).IsRequired().HasConversion<int>().HasDefaultValueSql("1");
builder.Property(f => f.Name).IsRequired().HasMaxLength(256);
builder.Property(f => f.Description).IsRequired().HasMaxLength(1024);
@@ -14,7 +14,7 @@ public sealed class Rule : IEntityTypeConfiguration<Entities.Rule>
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.Property(f => f.Status).IsRequired().HasConversion<int>().HasDefaultValueSql("2");
builder.HasOne(f => f.Programme)
.WithMany(f => f.Rules)
@@ -10,10 +10,10 @@ public sealed class SiteVisit : IEntityTypeConfiguration<Entities.SiteVisit>
builder.Property(f => f.ProjectId).IsRequired();
builder.Property(f => f.CreatedBy).IsRequired();
builder.Property(f => f.CreatedAt).IsRequired().HasDefaultValueSql("now()");
builder.Property(f => f.VisitedAt).IsRequired(false);
builder.Property(f => f.VisitedAt).IsRequired();
builder.Property(f => f.InspectorName).IsRequired();
builder.Property(f => f.Findings).IsRequired(false).HasMaxLength(4096);
builder.Property(f => f.Status).IsRequired().HasDefaultValue(ApprovalStatus.Pending);
builder.Property(f => f.Status).IsRequired().HasConversion<int>().HasDefaultValueSql("1");
builder.HasOne(f => f.Project)
.WithMany()
@@ -8,7 +8,7 @@ public sealed class User : IEntityTypeConfiguration<Entities.User>
builder.HasKey(pk => pk.Id);
builder.Property(f => f.Email).IsRequired().HasMaxLength(256);
builder.Property(f => f.Status).IsRequired().HasDefaultValue(ActivityStatus.Inactive);
builder.Property(f => f.Status).IsRequired().HasConversion<int>().HasDefaultValueSql("2");
builder.Property(f => f.LastLoginAt).IsRequired(false);
}
}
+1 -1
View File
@@ -18,7 +18,7 @@ public class Award
public DateTime CreatedAt { get; set; }
public DateTime UpdatedAt { get; set; }
public DateTime? UpdatedAt { get; set; }
public ApprovalStatus Status { get; set; }
+1 -1
View File
@@ -4,7 +4,7 @@ public class User
{
public Guid Id { get; set; }
public DateTime LastLoginAt { get; set; }
public DateTime? LastLoginAt { get; set; }
public string? Email { get; set; }
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -9,8 +9,21 @@
<!-- Database -->
<ItemGroup>
<Using Include="Microsoft.EntityFrameworkCore" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="10.0.11" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Abstractions" Version="10.0.11" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Analyzers" Version="10.0.11" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="10.0.11">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="10.0.11" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="10.0.11">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="10.0.3" />
<Using Include="Microsoft.EntityFrameworkCore" />
<Using Include="Microsoft.EntityFrameworkCore.Design" />
</ItemGroup>