Added entity-model mappers

Added and applied field size constants
This commit is contained in:
2026-08-16 10:08:33 +02:00
parent f7b30f89ea
commit 109fa0602e
20 changed files with 350 additions and 31 deletions
@@ -1,3 +1,5 @@
using static PostFundManagement.Domain.Extensions.Constants;
namespace PostFundManagement.Domain.Configuration; namespace PostFundManagement.Domain.Configuration;
public sealed class AuditLog : IEntityTypeConfiguration<Entities.AuditLog> public sealed class AuditLog : IEntityTypeConfiguration<Entities.AuditLog>
@@ -7,9 +9,9 @@ public sealed class AuditLog : IEntityTypeConfiguration<Entities.AuditLog>
builder.ToTable(nameof(Entities.AuditLog).Pluralize()); builder.ToTable(nameof(Entities.AuditLog).Pluralize());
builder.HasKey(pk => pk.Id); builder.HasKey(pk => pk.Id);
builder.Property(f => f.EntityName).IsRequired().HasMaxLength(128); builder.Property(f => f.EntityName).IsRequired().HasMaxLength(LabelLength);
builder.Property(f => f.EntityId).IsRequired(); builder.Property(f => f.EntityId).IsRequired();
builder.Property(f => f.Action).IsRequired().HasMaxLength(64); builder.Property(f => f.Action).IsRequired().HasMaxLength(ShortLabelLength);
builder.Property(f => f.Changes).IsRequired(false).HasColumnType("jsonb"); builder.Property(f => f.Changes).IsRequired(false).HasColumnType("jsonb");
builder.Property(f => f.PerformedBy).IsRequired(); builder.Property(f => f.PerformedBy).IsRequired();
builder.Property(f => f.Timestamp).IsRequired().HasDefaultValueSql("now()"); builder.Property(f => f.Timestamp).IsRequired().HasDefaultValueSql("now()");
@@ -1,3 +1,5 @@
using static PostFundManagement.Domain.Extensions.Constants;
namespace PostFundManagement.Domain.Configuration; namespace PostFundManagement.Domain.Configuration;
public sealed class Beneficiary : IEntityTypeConfiguration<Entities.Beneficiary> public sealed class Beneficiary : IEntityTypeConfiguration<Entities.Beneficiary>
@@ -11,8 +13,8 @@ public sealed class Beneficiary : IEntityTypeConfiguration<Entities.Beneficiary>
builder.Property(f => f.CreatedBy).IsRequired(); builder.Property(f => f.CreatedBy).IsRequired();
builder.Property(f => f.UserId).IsRequired(); builder.Property(f => f.UserId).IsRequired();
builder.Property(f => f.CreatedAt).IsRequired().HasDefaultValueSql("now()"); builder.Property(f => f.CreatedAt).IsRequired().HasDefaultValueSql("now()");
builder.Property(f => f.Name).IsRequired().HasMaxLength(256); builder.Property(f => f.Name).IsRequired().HasMaxLength(LabelLength);
builder.Property(f => f.Category).IsRequired().HasMaxLength(50); builder.Property(f => f.Category).IsRequired().HasMaxLength(ShortLabelLength);
builder.Property(f => f.TargetCount).IsRequired(); builder.Property(f => f.TargetCount).IsRequired();
builder.Property(f => f.ReachedCount).IsRequired(); builder.Property(f => f.ReachedCount).IsRequired();
builder.Property(f => f.Location).IsRequired(); builder.Property(f => f.Location).IsRequired();
@@ -1,3 +1,5 @@
using static PostFundManagement.Domain.Extensions.Constants;
namespace PostFundManagement.Domain.Configuration; namespace PostFundManagement.Domain.Configuration;
public sealed class Budget : IEntityTypeConfiguration<Entities.Budget> public sealed class Budget : IEntityTypeConfiguration<Entities.Budget>
@@ -12,7 +14,7 @@ public sealed class Budget : IEntityTypeConfiguration<Entities.Budget>
builder.Property(f => f.ApprovedBy).IsRequired(false); builder.Property(f => f.ApprovedBy).IsRequired(false);
builder.Property(f => f.CreatedAt).IsRequired().HasDefaultValueSql("now()"); builder.Property(f => f.CreatedAt).IsRequired().HasDefaultValueSql("now()");
builder.Property(f => f.UpdatedAt).IsRequired(false); builder.Property(f => f.UpdatedAt).IsRequired(false);
builder.Property(f => f.Name).IsRequired().HasMaxLength(256); builder.Property(f => f.Name).IsRequired().HasMaxLength(LabelLength);
builder.Property(f => f.Amount).IsRequired().HasPrecision(18, 2); builder.Property(f => f.Amount).IsRequired().HasPrecision(18, 2);
builder.HasOne(f => f.Project) builder.HasOne(f => f.Project)
@@ -1,3 +1,5 @@
using static PostFundManagement.Domain.Extensions.Constants;
namespace PostFundManagement.Domain.Configuration; namespace PostFundManagement.Domain.Configuration;
public sealed class ChangeRequest : IEntityTypeConfiguration<Entities.ChangeRequest> public sealed class ChangeRequest : IEntityTypeConfiguration<Entities.ChangeRequest>
@@ -12,8 +14,8 @@ public sealed class ChangeRequest : IEntityTypeConfiguration<Entities.ChangeRequ
builder.Property(f => f.ApprovedBy).IsRequired(false); builder.Property(f => f.ApprovedBy).IsRequired(false);
builder.Property(f => f.CreatedAt).IsRequired().HasDefaultValueSql("now()"); builder.Property(f => f.CreatedAt).IsRequired().HasDefaultValueSql("now()");
builder.Property(f => f.UpdatedAt).IsRequired(false); builder.Property(f => f.UpdatedAt).IsRequired(false);
builder.Property(f => f.Title).IsRequired().HasMaxLength(256); builder.Property(f => f.Title).IsRequired().HasMaxLength(LabelLength);
builder.Property(f => f.Justification).IsRequired().HasMaxLength(1024); builder.Property(f => f.Justification).IsRequired().HasMaxLength(TextLength);
builder.Property(f => f.RevisedBudget).IsRequired(false).HasPrecision(18, 2); builder.Property(f => f.RevisedBudget).IsRequired(false).HasPrecision(18, 2);
builder.Property(f => f.RevisedEndedAt).IsRequired(false); builder.Property(f => f.RevisedEndedAt).IsRequired(false);
builder.Property(f => f.Status).IsRequired().HasConversion<int>().HasDefaultValueSql("1"); builder.Property(f => f.Status).IsRequired().HasConversion<int>().HasDefaultValueSql("1");
@@ -1,3 +1,5 @@
using static PostFundManagement.Domain.Extensions.Constants;
namespace PostFundManagement.Domain.Configuration; namespace PostFundManagement.Domain.Configuration;
public sealed class ComplianceItem : IEntityTypeConfiguration<Entities.ComplianceItem> public sealed class ComplianceItem : IEntityTypeConfiguration<Entities.ComplianceItem>
@@ -12,8 +14,8 @@ public sealed class ComplianceItem : IEntityTypeConfiguration<Entities.Complianc
builder.Property(f => f.VerifiedBy).IsRequired(false); builder.Property(f => f.VerifiedBy).IsRequired(false);
builder.Property(f => f.CreatedAt).IsRequired().HasDefaultValueSql("now()"); builder.Property(f => f.CreatedAt).IsRequired().HasDefaultValueSql("now()");
builder.Property(f => f.UpdatedAt).IsRequired(false); builder.Property(f => f.UpdatedAt).IsRequired(false);
builder.Property(f => f.Title).IsRequired().HasMaxLength(256); builder.Property(f => f.Title).IsRequired().HasMaxLength(LabelLength);
builder.Property(f => f.Requirements).IsRequired().HasMaxLength(2048); builder.Property(f => f.Requirements).IsRequired().HasMaxLength(MediumTextLength);
builder.Property(f => f.Status).IsRequired().HasConversion<int>().HasDefaultValueSql("1"); builder.Property(f => f.Status).IsRequired().HasConversion<int>().HasDefaultValueSql("1");
builder.HasOne(f => f.Project) builder.HasOne(f => f.Project)
@@ -1,3 +1,5 @@
using static PostFundManagement.Domain.Extensions.Constants;
namespace PostFundManagement.Domain.Configuration; namespace PostFundManagement.Domain.Configuration;
public sealed class Indicator : IEntityTypeConfiguration<Entities.Indicator> public sealed class Indicator : IEntityTypeConfiguration<Entities.Indicator>
@@ -10,7 +12,7 @@ public sealed class Indicator : IEntityTypeConfiguration<Entities.Indicator>
builder.Property(f => f.ProjectId).IsRequired(); builder.Property(f => f.ProjectId).IsRequired();
builder.Property(f => f.CreatedBy).IsRequired(); builder.Property(f => f.CreatedBy).IsRequired();
builder.Property(f => f.CreatedAt).IsRequired().HasDefaultValueSql("now()"); builder.Property(f => f.CreatedAt).IsRequired().HasDefaultValueSql("now()");
builder.Property(f => f.Name).IsRequired().HasMaxLength(256); builder.Property(f => f.Name).IsRequired().HasMaxLength(LabelLength);
builder.Property(f => f.UnitOfMeasure).IsRequired().HasConversion<int>().HasDefaultValueSql("2"); builder.Property(f => f.UnitOfMeasure).IsRequired().HasConversion<int>().HasDefaultValueSql("2");
builder.Property(f => f.BaselineAmount).IsRequired().HasPrecision(18, 2); builder.Property(f => f.BaselineAmount).IsRequired().HasPrecision(18, 2);
builder.Property(f => f.TargetAmount).IsRequired().HasPrecision(18, 2); builder.Property(f => f.TargetAmount).IsRequired().HasPrecision(18, 2);
@@ -1,3 +1,5 @@
using static PostFundManagement.Domain.Extensions.Constants;
namespace PostFundManagement.Domain.Configuration; namespace PostFundManagement.Domain.Configuration;
public sealed class Instrument : IEntityTypeConfiguration<Entities.Instrument> public sealed class Instrument : IEntityTypeConfiguration<Entities.Instrument>
@@ -7,9 +9,9 @@ public sealed class Instrument : IEntityTypeConfiguration<Entities.Instrument>
builder.ToTable(nameof(Entities.Instrument).Pluralize()); builder.ToTable(nameof(Entities.Instrument).Pluralize());
builder.HasKey(pk => pk.Id); builder.HasKey(pk => pk.Id);
builder.Property(f => f.Code).IsRequired().HasMaxLength(50); builder.Property(f => f.Code).IsRequired().HasMaxLength(ShortLabelLength);
builder.Property(f => f.Name).IsRequired().HasMaxLength(256); builder.Property(f => f.Name).IsRequired().HasMaxLength(LabelLength);
builder.Property(f => f.Description).IsRequired(false).HasMaxLength(1024); builder.Property(f => f.Description).IsRequired(false).HasMaxLength(TextLength);
builder.Property(f => f.Status).IsRequired().HasConversion<int>().HasDefaultValueSql("2"); builder.Property(f => f.Status).IsRequired().HasConversion<int>().HasDefaultValueSql("2");
builder.Property(f => f.CreatedBy).IsRequired(); builder.Property(f => f.CreatedBy).IsRequired();
builder.Property(f => f.CreatedAt).IsRequired().HasDefaultValueSql("now()"); builder.Property(f => f.CreatedAt).IsRequired().HasDefaultValueSql("now()");
@@ -1,3 +1,5 @@
using static PostFundManagement.Domain.Extensions.Constants;
namespace PostFundManagement.Domain.Configuration; namespace PostFundManagement.Domain.Configuration;
public sealed class Issue : IEntityTypeConfiguration<Entities.Issue> public sealed class Issue : IEntityTypeConfiguration<Entities.Issue>
@@ -11,8 +13,8 @@ public sealed class Issue : IEntityTypeConfiguration<Entities.Issue>
builder.Property(f => f.CreatedBy).IsRequired(); builder.Property(f => f.CreatedBy).IsRequired();
builder.Property(f => f.CreatedAt).IsRequired().HasDefaultValueSql("now()"); builder.Property(f => f.CreatedAt).IsRequired().HasDefaultValueSql("now()");
builder.Property(f => f.ResolvedAt).IsRequired(false); builder.Property(f => f.ResolvedAt).IsRequired(false);
builder.Property(f => f.Title).IsRequired().HasMaxLength(256); builder.Property(f => f.Title).IsRequired().HasMaxLength(LabelLength);
builder.Property(f => f.Description).IsRequired().HasMaxLength(1024); builder.Property(f => f.Description).IsRequired().HasMaxLength(TextLength);
builder.Property(f => f.Priority).IsRequired().HasConversion<int>().HasDefaultValueSql("1"); builder.Property(f => f.Priority).IsRequired().HasConversion<int>().HasDefaultValueSql("1");
builder.Property(f => f.Status).IsRequired().HasConversion<int>().HasDefaultValueSql("1"); builder.Property(f => f.Status).IsRequired().HasConversion<int>().HasDefaultValueSql("1");
@@ -1,3 +1,5 @@
using static PostFundManagement.Domain.Extensions.Constants;
namespace PostFundManagement.Domain.Configuration; namespace PostFundManagement.Domain.Configuration;
public sealed class Milestone : IEntityTypeConfiguration<Entities.Milestone> public sealed class Milestone : IEntityTypeConfiguration<Entities.Milestone>
@@ -13,7 +15,7 @@ public sealed class Milestone : IEntityTypeConfiguration<Entities.Milestone>
builder.Property(f => f.CreatedAt).IsRequired().HasDefaultValueSql("now()"); builder.Property(f => f.CreatedAt).IsRequired().HasDefaultValueSql("now()");
builder.Property(f => f.UpdatedAt).IsRequired(false); builder.Property(f => f.UpdatedAt).IsRequired(false);
builder.Property(f => f.DueAt).IsRequired(); builder.Property(f => f.DueAt).IsRequired();
builder.Property(f => f.Name).IsRequired().HasMaxLength(256); builder.Property(f => f.Name).IsRequired().HasMaxLength(LabelLength);
builder.Property(f => f.Status).IsRequired().HasConversion<int>().HasDefaultValueSql("1"); builder.Property(f => f.Status).IsRequired().HasConversion<int>().HasDefaultValueSql("1");
builder.HasOne(f => f.Project) builder.HasOne(f => f.Project)
@@ -1,3 +1,5 @@
using static PostFundManagement.Domain.Extensions.Constants;
namespace PostFundManagement.Domain.Configuration; namespace PostFundManagement.Domain.Configuration;
public sealed class Organisation : IEntityTypeConfiguration<Entities.Organisation> public sealed class Organisation : IEntityTypeConfiguration<Entities.Organisation>
@@ -9,9 +11,9 @@ public sealed class Organisation : IEntityTypeConfiguration<Entities.Organisatio
builder.HasKey(pk => pk.Id); builder.HasKey(pk => pk.Id);
builder.Property(f => f.CreatedBy).IsRequired(); builder.Property(f => f.CreatedBy).IsRequired();
builder.Property(f => f.CreatedAt).IsRequired().HasDefaultValueSql("now()"); builder.Property(f => f.CreatedAt).IsRequired().HasDefaultValueSql("now()");
builder.Property(f => f.RegistrationNo).IsRequired().HasMaxLength(256); builder.Property(f => f.RegistrationNo).IsRequired().HasMaxLength(LabelLength);
builder.Property(f => f.Name).IsRequired().HasMaxLength(256); builder.Property(f => f.Name).IsRequired().HasMaxLength(LabelLength);
builder.Property(f => f.Email).IsRequired().HasMaxLength(256); builder.Property(f => f.Email).IsRequired().HasMaxLength(LabelLength);
builder.Property(f => f.Type).IsRequired().HasConversion<int>().HasDefaultValueSql("5"); builder.Property(f => f.Type).IsRequired().HasConversion<int>().HasDefaultValueSql("5");
builder.Property(f => f.Status).IsRequired().HasConversion<int>().HasDefaultValueSql("1"); builder.Property(f => f.Status).IsRequired().HasConversion<int>().HasDefaultValueSql("1");
@@ -1,3 +1,5 @@
using static PostFundManagement.Domain.Extensions.Constants;
namespace PostFundManagement.Domain.Configuration; namespace PostFundManagement.Domain.Configuration;
public sealed class Outcome : IEntityTypeConfiguration<Entities.Outcome> public sealed class Outcome : IEntityTypeConfiguration<Entities.Outcome>
@@ -10,8 +12,8 @@ public sealed class Outcome : IEntityTypeConfiguration<Entities.Outcome>
builder.Property(f => f.BeneficiaryId).IsRequired(); builder.Property(f => f.BeneficiaryId).IsRequired();
builder.Property(f => f.CreatedBy).IsRequired(); builder.Property(f => f.CreatedBy).IsRequired();
builder.Property(f => f.CreatedAt).IsRequired().HasDefaultValueSql("now()"); builder.Property(f => f.CreatedAt).IsRequired().HasDefaultValueSql("now()");
builder.Property(f => f.Name).IsRequired().HasMaxLength(256); builder.Property(f => f.Name).IsRequired().HasMaxLength(LabelLength);
builder.Property(f => f.Description).IsRequired().HasMaxLength(1024); builder.Property(f => f.Description).IsRequired().HasMaxLength(TextLength);
builder.HasOne(f => f.Beneficiary) builder.HasOne(f => f.Beneficiary)
.WithMany() .WithMany()
@@ -1,3 +1,5 @@
using static PostFundManagement.Domain.Extensions.Constants;
namespace PostFundManagement.Domain.Configuration; namespace PostFundManagement.Domain.Configuration;
public sealed class Portfolio : IEntityTypeConfiguration<Entities.Portfolio> public sealed class Portfolio : IEntityTypeConfiguration<Entities.Portfolio>
@@ -10,8 +12,8 @@ public sealed class Portfolio : IEntityTypeConfiguration<Entities.Portfolio>
builder.Property(f => f.CreatedBy).IsRequired(); builder.Property(f => f.CreatedBy).IsRequired();
builder.Property(f => f.OwnedBy).IsRequired(); builder.Property(f => f.OwnedBy).IsRequired();
builder.Property(f => f.CreatedAt).IsRequired().HasDefaultValueSql("now()"); builder.Property(f => f.CreatedAt).IsRequired().HasDefaultValueSql("now()");
builder.Property(f => f.Name).IsRequired().HasMaxLength(256); builder.Property(f => f.Name).IsRequired().HasMaxLength(LabelLength);
builder.Property(f => f.Description).IsRequired(false).HasMaxLength(1024); builder.Property(f => f.Description).IsRequired(false).HasMaxLength(TextLength);
builder.HasOne(f => f.Creator) builder.HasOne(f => f.Creator)
.WithMany() .WithMany()
@@ -1,3 +1,5 @@
using static PostFundManagement.Domain.Extensions.Constants;
namespace PostFundManagement.Domain.Configuration; namespace PostFundManagement.Domain.Configuration;
public sealed class Programme : IEntityTypeConfiguration<Entities.Programme> public sealed class Programme : IEntityTypeConfiguration<Entities.Programme>
@@ -14,7 +16,7 @@ public sealed class Programme : IEntityTypeConfiguration<Entities.Programme>
builder.Property(f => f.UpdatedBy).IsRequired(false); builder.Property(f => f.UpdatedBy).IsRequired(false);
builder.Property(f => f.CreatedAt).IsRequired().HasDefaultValueSql("now()"); builder.Property(f => f.CreatedAt).IsRequired().HasDefaultValueSql("now()");
builder.Property(f => f.UpdatedAt).IsRequired(false); builder.Property(f => f.UpdatedAt).IsRequired(false);
builder.Property(f => f.Name).IsRequired().HasMaxLength(256); builder.Property(f => f.Name).IsRequired().HasMaxLength(LabelLength);
builder.Property(f => f.Status).IsRequired().HasConversion<int>().HasDefaultValueSql("1"); builder.Property(f => f.Status).IsRequired().HasConversion<int>().HasDefaultValueSql("1");
builder.HasOne(f => f.Portfolio) builder.HasOne(f => f.Portfolio)
@@ -1,3 +1,5 @@
using static PostFundManagement.Domain.Extensions.Constants;
namespace PostFundManagement.Domain.Configuration; namespace PostFundManagement.Domain.Configuration;
public sealed class Project : IEntityTypeConfiguration<Entities.Project> public sealed class Project : IEntityTypeConfiguration<Entities.Project>
@@ -14,8 +16,8 @@ public sealed class Project : IEntityTypeConfiguration<Entities.Project>
builder.Property(f => f.UpdatedAt).IsRequired(false); builder.Property(f => f.UpdatedAt).IsRequired(false);
builder.Property(f => f.StartedAt).IsRequired(false); builder.Property(f => f.StartedAt).IsRequired(false);
builder.Property(f => f.EndedAt).IsRequired(false); builder.Property(f => f.EndedAt).IsRequired(false);
builder.Property(f => f.Name).IsRequired().HasMaxLength(256); builder.Property(f => f.Name).IsRequired().HasMaxLength(LabelLength);
builder.Property(f => f.Description).IsRequired().HasMaxLength(1024); builder.Property(f => f.Description).IsRequired().HasMaxLength(TextLength);
builder.Property(f => f.Status).IsRequired().HasConversion<int>().HasDefaultValueSql("1"); builder.Property(f => f.Status).IsRequired().HasConversion<int>().HasDefaultValueSql("1");
builder.HasOne(f => f.Programme) builder.HasOne(f => f.Programme)
@@ -1,3 +1,5 @@
using static PostFundManagement.Domain.Extensions.Constants;
namespace PostFundManagement.Domain.Configuration; namespace PostFundManagement.Domain.Configuration;
public sealed class Risk : IEntityTypeConfiguration<Entities.Risk> public sealed class Risk : IEntityTypeConfiguration<Entities.Risk>
@@ -12,8 +14,8 @@ public sealed class Risk : IEntityTypeConfiguration<Entities.Risk>
builder.Property(f => f.CreatedAt).IsRequired().HasDefaultValueSql("now()"); builder.Property(f => f.CreatedAt).IsRequired().HasDefaultValueSql("now()");
builder.Property(f => f.Likelihood).IsRequired().HasConversion<int>().HasDefaultValueSql("3"); builder.Property(f => f.Likelihood).IsRequired().HasConversion<int>().HasDefaultValueSql("3");
builder.Property(f => f.Impact).IsRequired().HasConversion<int>().HasDefaultValueSql("1"); builder.Property(f => f.Impact).IsRequired().HasConversion<int>().HasDefaultValueSql("1");
builder.Property(f => f.Name).IsRequired().HasMaxLength(256); builder.Property(f => f.Name).IsRequired().HasMaxLength(LabelLength);
builder.Property(f => f.Description).IsRequired().HasMaxLength(1024); builder.Property(f => f.Description).IsRequired().HasMaxLength(TextLength);
builder.HasOne(f => f.Project) builder.HasOne(f => f.Project)
.WithMany() .WithMany()
@@ -1,3 +1,5 @@
using static PostFundManagement.Domain.Extensions.Constants;
namespace PostFundManagement.Domain.Configuration; namespace PostFundManagement.Domain.Configuration;
public sealed class Rule : IEntityTypeConfiguration<Entities.Rule> public sealed class Rule : IEntityTypeConfiguration<Entities.Rule>
@@ -12,7 +14,7 @@ public sealed class Rule : IEntityTypeConfiguration<Entities.Rule>
builder.Property(f => f.UpdatedBy).IsRequired(false); builder.Property(f => f.UpdatedBy).IsRequired(false);
builder.Property(f => f.CreatedAt).IsRequired().HasDefaultValueSql("now()"); builder.Property(f => f.CreatedAt).IsRequired().HasDefaultValueSql("now()");
builder.Property(f => f.UpdatedAt).IsRequired(false); builder.Property(f => f.UpdatedAt).IsRequired(false);
builder.Property(f => f.Name).IsRequired().HasMaxLength(256); builder.Property(f => f.Name).IsRequired().HasMaxLength(LabelLength);
builder.Property(f => f.Version).IsRequired().HasDefaultValue(1); builder.Property(f => f.Version).IsRequired().HasDefaultValue(1);
builder.Property(f => f.Status).IsRequired().HasConversion<int>().HasDefaultValueSql("2"); builder.Property(f => f.Status).IsRequired().HasConversion<int>().HasDefaultValueSql("2");
@@ -1,3 +1,5 @@
using static PostFundManagement.Domain.Extensions.Constants;
namespace PostFundManagement.Domain.Configuration; namespace PostFundManagement.Domain.Configuration;
public sealed class SiteVisit : IEntityTypeConfiguration<Entities.SiteVisit> public sealed class SiteVisit : IEntityTypeConfiguration<Entities.SiteVisit>
@@ -12,7 +14,7 @@ public sealed class SiteVisit : IEntityTypeConfiguration<Entities.SiteVisit>
builder.Property(f => f.CreatedAt).IsRequired().HasDefaultValueSql("now()"); builder.Property(f => f.CreatedAt).IsRequired().HasDefaultValueSql("now()");
builder.Property(f => f.VisitedAt).IsRequired(); builder.Property(f => f.VisitedAt).IsRequired();
builder.Property(f => f.InspectorName).IsRequired(); builder.Property(f => f.InspectorName).IsRequired();
builder.Property(f => f.Findings).IsRequired(false).HasMaxLength(4096); builder.Property(f => f.Findings).IsRequired(false).HasMaxLength(LargeTextLength);
builder.Property(f => f.Status).IsRequired().HasConversion<int>().HasDefaultValueSql("1"); builder.Property(f => f.Status).IsRequired().HasConversion<int>().HasDefaultValueSql("1");
builder.HasOne(f => f.Project) builder.HasOne(f => f.Project)
@@ -1,3 +1,5 @@
using static PostFundManagement.Domain.Extensions.Constants;
namespace PostFundManagement.Domain.Configuration; namespace PostFundManagement.Domain.Configuration;
public sealed class User : IEntityTypeConfiguration<Entities.User> public sealed class User : IEntityTypeConfiguration<Entities.User>
@@ -7,7 +9,7 @@ public sealed class User : IEntityTypeConfiguration<Entities.User>
builder.ToTable(nameof(Entities.User).Pluralize()); builder.ToTable(nameof(Entities.User).Pluralize());
builder.HasKey(pk => pk.Id); builder.HasKey(pk => pk.Id);
builder.Property(f => f.Email).IsRequired().HasMaxLength(256); builder.Property(f => f.Email).IsRequired().HasMaxLength(LabelLength);
builder.Property(f => f.Status).IsRequired().HasConversion<int>().HasDefaultValueSql("2"); builder.Property(f => f.Status).IsRequired().HasConversion<int>().HasDefaultValueSql("2");
builder.Property(f => f.LastLoginAt).IsRequired(false); builder.Property(f => f.LastLoginAt).IsRequired(false);
} }
@@ -0,0 +1,14 @@
namespace PostFundManagement.Domain.Extensions;
public static class Constants
{
public const int LabelLength = 256;
public const int ShortLabelLength = 100;
public const int TextLength = 1024;
public const int MediumTextLength = 2048;
public const int LargeTextLength = 4096;
}
@@ -0,0 +1,269 @@
using PostFundManagement.Domain.Models;
namespace PostFundManagement.Domain.Extensions;
public static class Mappers
{
public static AuditLog Map(this Entities.AuditLog entity) => new()
{
Id = entity.Id,
Action = entity.Action,
Changes = entity.Changes,
EntityId = entity.EntityId,
EntityName = entity.EntityName,
PerformedBy = entity.PerformedBy,
Timestamp = entity.Timestamp
};
public static Award Map(this Entities.Award entity) => new()
{
Id = entity.Id,
Amount = entity.Amount,
ApprovedBy = entity.ApprovedBy,
CreatedAt = entity.CreatedAt,
CreatedBy = entity.CreatedBy,
OrganisationId = entity.OrganisationId,
ProgrammeId = entity.ProgrammeId,
ProjectId = entity.ProjectId,
Status = entity.Status,
UpdatedAt = entity.UpdatedAt,
UpdatedBy = entity.UpdatedBy
};
public static Beneficiary Map(this Entities.Beneficiary entity) => new()
{
Id = entity.Id,
Category = entity.Category,
CreatedAt = entity.CreatedAt,
CreatedBy = entity.CreatedBy,
Location = entity.Location,
Name = entity.Name,
ProjectId = entity.ProjectId,
ReachedCount = entity.ReachedCount,
TargetCount = entity.TargetCount,
UserId = entity.UserId
};
public static Budget Map(this Entities.Budget entity) => new()
{
Id = entity.Id,
Amount = entity.Amount,
ApprovedBy = entity.ApprovedBy,
CreatedAt = entity.CreatedAt,
CreatedBy = entity.CreatedBy,
Name = entity.Name,
ProjectId = entity.ProjectId,
UpdatedAt = entity.UpdatedAt
};
public static ComplianceItem Map(this Entities.ComplianceItem entity) => new()
{
Id = entity.Id,
CreatedAt = entity.CreatedAt,
CreatedBy = entity.CreatedBy,
ProjectId = entity.ProjectId,
Requirements = entity.Requirements,
Status = entity.Status,
Title = entity.Title,
UpdatedAt = entity.UpdatedAt,
VerifiedBy = entity.VerifiedBy
};
public static Contract Map(this Entities.Contract entity) => new()
{
Id = entity.Id,
AwardId = entity.AwardId,
CreatedAt = entity.CreatedAt,
CreatedBy = entity.CreatedBy,
EffectiveAt = entity.EffectiveAt,
ExpiresAt = entity.ExpiresAt,
ExternalSignatureId = entity.ExternalSignatureId,
SignedDocumentUrl = entity.SignedDocumentUrl,
Status = entity.Status,
TotalValue = entity.TotalValue
};
public static Disbursement Map(this Entities.Disbursement entity) => new()
{
Id = entity.Id,
Amount = entity.Amount,
CreatedAt = entity.CreatedAt,
CreatedBy = entity.CreatedBy,
MilestoneId = entity.MilestoneId,
ProjectId = entity.ProjectId,
Status = entity.Status,
UpdatedAt = entity.UpdatedAt,
UpdatedBy = entity.UpdatedBy
};
public static Evidence Map(this Entities.Evidence entity) => new()
{
Id = entity.Id,
CreatedAt = entity.CreatedAt,
CreatedBy = entity.CreatedBy,
DocumentUrl = entity.DocumentUrl,
IndicatorId = entity.IndicatorId,
MilestoneId = entity.MilestoneId,
ProjectId = entity.ProjectId,
Status = entity.Status,
UpdatedAt = entity.UpdatedAt,
UpdatedBy = entity.UpdatedBy,
Version = entity.Version
};
public static Indicator Map(this Entities.Indicator entity) => new()
{
Id = entity.Id,
ActualAmount = entity.ActualAmount,
BaselineAmount = entity.BaselineAmount,
CreatedAt = entity.CreatedAt,
CreatedBy = entity.CreatedBy,
Name = entity.Name,
ProjectId = entity.ProjectId,
TargetAmount = entity.TargetAmount,
UnitOfMeasure = entity.UnitOfMeasure
};
public static Instrument Map(this Entities.Instrument entity) => new()
{
Id = entity.Id,
Code = entity.Code,
CreatedAt = entity.CreatedAt,
CreatedBy = entity.CreatedBy,
Description = entity.Description,
Name = entity.Name,
Status = entity.Status
};
public static Issue Map(this Entities.Issue entity) => new()
{
Id = entity.Id,
CreatedAt = entity.CreatedAt,
CreatedBy = entity.CreatedBy,
Description = entity.Description,
Priority = entity.Priority,
ProjectId = entity.ProjectId,
ResolvedAt = entity.ResolvedAt,
Status = entity.Status,
Title = entity.Title
};
public static Milestone Map(this Entities.Milestone entity) => new()
{
Id = entity.Id,
CreatedAt = entity.CreatedAt,
CreatedBy = entity.CreatedBy,
DueAt = entity.DueAt,
Name = entity.Name,
ProjectId = entity.ProjectId,
Status = entity.Status,
UpdatedAt = entity.UpdatedAt,
UpdatedBy = entity.UpdatedBy
};
public static Organisation Map(this Entities.Organisation entity) => new()
{
Id = entity.Id,
CreatedAt = entity.CreatedAt,
CreatedBy = entity.CreatedBy,
Email = entity.Email,
Name = entity.Name,
RegistrationNo = entity.RegistrationNo,
Status = entity.Status,
Type = entity.Type
};
public static Outcome Map(this Entities.Outcome entity) => new()
{
Id = entity.Id,
BeneficiaryId = entity.BeneficiaryId,
CreatedAt = entity.CreatedAt,
CreatedBy = entity.CreatedBy,
Description = entity.Description,
Name = entity.Name
};
public static Portfolio Map(this Entities.Portfolio entity) => new()
{
Id = entity.Id,
CreatedAt = entity.CreatedAt,
CreatedBy = entity.CreatedBy,
Description = entity.Description,
Name = entity.Name,
OwnedBy = entity.OwnedBy
};
public static Programme Map(this Entities.Programme entity) => new()
{
Id = entity.Id,
CreatedAt = entity.CreatedAt,
CreatedBy = entity.CreatedBy,
InstrumentId = entity.InstrumentId,
Name = entity.Name,
OwnedBy = entity.OwnedBy,
PortfolioId = entity.PortfolioId,
Status = entity.Status,
UpdatedAt = entity.UpdatedAt,
UpdatedBy = entity.UpdatedBy
};
public static Project Map(this Entities.Project entity) => new()
{
Id = entity.Id,
CreatedAt = entity.CreatedAt,
CreatedBy = entity.CreatedBy,
Description = entity.Description,
EndedAt = entity.EndedAt,
Name = entity.Name,
ProgrammeId = entity.ProgrammeId,
StartedAt = entity.StartedAt,
Status = entity.Status,
UpdatedAt = entity.UpdatedAt,
UpdatedBy = entity.UpdatedBy
};
public static Risk Map(this Entities.Risk entity) => new()
{
Id = entity.Id,
CreatedAt = entity.CreatedAt,
CreatedBy = entity.CreatedBy,
Description = entity.Description,
Impact = entity.Impact,
Likelihood = entity.Likelihood,
Name = entity.Name,
ProjectId = entity.ProjectId
};
public static Rule Map(this Entities.Rule entity) => new()
{
Id = entity.Id,
CreatedAt = entity.CreatedAt,
CreatedBy = entity.CreatedBy,
Name = entity.Name,
ProgrammeId = entity.ProgrammeId,
Status = entity.Status,
UpdatedAt = entity.UpdatedAt,
UpdatedBy = entity.UpdatedBy,
Version = entity.Version
};
public static SiteVisit Map(this Entities.SiteVisit entity) => new()
{
Id = entity.Id,
ProjectId = entity.ProjectId,
CreatedAt = entity.CreatedAt,
CreatedBy = entity.CreatedBy,
Findings = entity.Findings,
InspectorName = entity.InspectorName,
Status = entity.Status,
VisitedAt = entity.VisitedAt
};
public static User Map(this Entities.User entity) => new()
{
Id = entity.Id,
Email = entity.Email,
LastLoginAt = entity.LastLoginAt,
Status = entity.Status
};
}