From 020bdee36f29175912cbbca380077c71ab50cdfa Mon Sep 17 00:00:00 2001 From: Hermes Agent Date: Thu, 24 Sep 2026 12:00:47 +0200 Subject: [PATCH] Stable run using Multi tenancy across entire estate Audit logging and error logging active --- .../Extensions/Services.cs | 31 +- .../Filters/ActiveUserFilter.cs | 6 +- .../Interceptors/LoggingInterceptor.cs | 4 +- .../Services/Shared/AuditService.cs | 2 +- .../Entities/Activity.cs | 1 + .../Entities/AuditLog.cs | 6 +- PostFundManagement.Domain/Entities/Award.cs | 1 + .../Entities/Beneficiary.cs | 1 + PostFundManagement.Domain/Entities/Budget.cs | 1 + .../Entities/ChangeRequest.cs | 1 + .../Entities/ComplianceItem.cs | 1 + .../Entities/Contract.cs | 1 + .../Entities/Disbursement.cs | 1 + .../Entities/Evidence.cs | 1 + .../Entities/Indicator.cs | 1 + .../Entities/Instrument.cs | 1 + PostFundManagement.Domain/Entities/Invite.cs | 1 + PostFundManagement.Domain/Entities/Issue.cs | 1 + .../Entities/Milestone.cs | 1 + .../Entities/Notification.cs | 1 + .../Entities/Organisation.cs | 1 + PostFundManagement.Domain/Entities/Outcome.cs | 13 +- .../Entities/Portfolio.cs | 1 + .../Entities/Programme.cs | 1 + PostFundManagement.Domain/Entities/Project.cs | 1 + PostFundManagement.Domain/Entities/Risk.cs | 1 + PostFundManagement.Domain/Entities/Rule.cs | 1 + .../Entities/SiteVisit.cs | 1 + PostFundManagement.Domain/Entities/Tenant.cs | 1 + .../Entities/TenantOrganisation.cs | 3 +- .../Entities/TenantUser.cs | 5 +- PostFundManagement.Domain/Entities/User.cs | 1 + PostFundManagement.Domain/Models/AuditLog.cs | 3 +- PostFundManagement.Domain/Models/Outcome.cs | 2 + .../Database/ApplicationDbContext.cs | 9 +- ...090154_AddedTenantIdToOutcomes.Designer.cs | 2285 +++++++ .../20260924090154_AddedTenantIdToOutcomes.cs | 50 + ...gesColumnToTestArrayOnAuditLog.Designer.cs | 2445 +++++++ ...1_SetChangesColumnToTestArrayOnAuditLog.cs | 5599 +++++++++++++++++ .../ApplicationDbContextModelSnapshot.cs | 911 +-- 40 files changed, 11004 insertions(+), 394 deletions(-) create mode 100644 PostFundManagement.Infrastructure/Database/Migrations/20260924090154_AddedTenantIdToOutcomes.Designer.cs create mode 100644 PostFundManagement.Infrastructure/Database/Migrations/20260924090154_AddedTenantIdToOutcomes.cs create mode 100644 PostFundManagement.Infrastructure/Database/Migrations/20260924094641_SetChangesColumnToTestArrayOnAuditLog.Designer.cs create mode 100644 PostFundManagement.Infrastructure/Database/Migrations/20260924094641_SetChangesColumnToTestArrayOnAuditLog.cs diff --git a/PostFundManagement.Application/Extensions/Services.cs b/PostFundManagement.Application/Extensions/Services.cs index ff98689..7005798 100644 --- a/PostFundManagement.Application/Extensions/Services.cs +++ b/PostFundManagement.Application/Extensions/Services.cs @@ -16,6 +16,30 @@ namespace PostFundManagement.Application.Extensions; public static class Services { + public static IServiceCollection AddLoggedCachedServiceScoped(this IServiceCollection services) + where TInterface : class + where TImplementation : class, TInterface + where TCacheDecorator : class, TInterface + { + services.AddScoped(); + services.AddScoped(); + + services.AddScoped(sp => + { + var proxyGenerator = sp.GetRequiredService(); + var loggingInterceptor = sp.GetRequiredService(); + + var actual = sp.GetRequiredService(); + + var cached = ActivatorUtilities.CreateInstance(sp, actual); + + return proxyGenerator.CreateInterfaceProxyWithTarget(cached, + loggingInterceptor.ToInterceptor()); + }); + + return services; + } + public static IServiceCollection AddLoggedAuditedCachedServiceScoped(this IServiceCollection services) where TInterface : class where TImplementation : class, TInterface @@ -56,11 +80,8 @@ public static class Services services.AddLoggedAuditedCachedServiceScoped(); services.AddLoggedAuditedCachedServiceScoped(); - services.AddScoped(); - services.Decorate(); - - services.AddScoped(); - services.Decorate(); + services.AddLoggedCachedServiceScoped(); + services.AddLoggedCachedServiceScoped(); services.AddStackExchangeRedisCache(options => { diff --git a/PostFundManagement.Application/Filters/ActiveUserFilter.cs b/PostFundManagement.Application/Filters/ActiveUserFilter.cs index 0bd8ecd..d085b18 100644 --- a/PostFundManagement.Application/Filters/ActiveUserFilter.cs +++ b/PostFundManagement.Application/Filters/ActiveUserFilter.cs @@ -25,8 +25,12 @@ public sealed class ActiveUserFilter(IIdentityService identityService) : IEndpoi var path = context.HttpContext.Request.Path.Value; if (!string.IsNullOrWhiteSpace(path) && !path!.EndsWith("integration/sync", StringComparison.InvariantCultureIgnoreCase)) - if ((await identityService.UserIsAuthorisedAsync(userId, context.HttpContext.RequestAborted)).IsFailed) + { + var userAuthResult = await identityService.UserIsAuthorisedAsync(userId, context.HttpContext.RequestAborted); + + if (userAuthResult.IsFailed) return Results.Json(new { message = "Account approval is pending or inactive." }, statusCode: StatusCodes.Status403Forbidden); + } context.HttpContext.Items[UserIdItemKey] = userId; context.HttpContext.Items[EmailtemKey] = email; diff --git a/PostFundManagement.Application/Interceptors/LoggingInterceptor.cs b/PostFundManagement.Application/Interceptors/LoggingInterceptor.cs index f36df0b..8148895 100644 --- a/PostFundManagement.Application/Interceptors/LoggingInterceptor.cs +++ b/PostFundManagement.Application/Interceptors/LoggingInterceptor.cs @@ -64,8 +64,8 @@ public sealed class LoggingInterceptor(ILogger logger) : IAs var errorsString = string.Join("; ", errorMessages); - logger.LogError("Method {MethodName} failed. Errors: {Errors}. Parameters: {@Parameters}", - method.Name, errorsString, parameters); + logger.LogError("Method {MethodName} failed. Errors: [{ErrorType}] {Errors}. Parameters: {@Parameters}", + method.Name, result.Reasons?.FirstOrDefault()?.GetType().Name.Replace("Error", string.Empty), errorsString, parameters); } catch (Exception ex) { diff --git a/PostFundManagement.Application/Services/Shared/AuditService.cs b/PostFundManagement.Application/Services/Shared/AuditService.cs index 045dfe5..25ce543 100644 --- a/PostFundManagement.Application/Services/Shared/AuditService.cs +++ b/PostFundManagement.Application/Services/Shared/AuditService.cs @@ -15,7 +15,7 @@ public sealed class AuditService(IDbContextFactory context { EntityId = entityId, Action = action, - Changes = new Domain.Models.AuditChanges { Logs = changes }, + Changes = changes, EntityName = entityName, PerformedBy = performedBy, Timestamp = DateTime.UtcNow, diff --git a/PostFundManagement.Domain/Entities/Activity.cs b/PostFundManagement.Domain/Entities/Activity.cs index 872af35..b2c059f 100644 --- a/PostFundManagement.Domain/Entities/Activity.cs +++ b/PostFundManagement.Domain/Entities/Activity.cs @@ -3,6 +3,7 @@ using static PostFundManagement.Domain.Extensions.Constants; namespace PostFundManagement.Domain.Entities; +[EntityTypeConfiguration] public class Activity : Models.Activity, ITenantEntity { public virtual Tenant? Tenant { get; set; } diff --git a/PostFundManagement.Domain/Entities/AuditLog.cs b/PostFundManagement.Domain/Entities/AuditLog.cs index c93bf36..cb70df6 100644 --- a/PostFundManagement.Domain/Entities/AuditLog.cs +++ b/PostFundManagement.Domain/Entities/AuditLog.cs @@ -1,8 +1,8 @@ -using PostFundManagement.Domain.Models; using static PostFundManagement.Domain.Extensions.Constants; namespace PostFundManagement.Domain.Entities; +[EntityTypeConfiguration] public sealed class AuditLog : Models.AuditLog; public sealed class AuditLogConfiguration : IEntityTypeConfiguration @@ -16,9 +16,7 @@ public sealed class AuditLogConfiguration : IEntityTypeConfiguration builder.Property(f => f.EntityName).IsRequired().HasMaxLength(LabelLength); builder.Property(f => f.EntityId).IsRequired(); builder.Property(f => f.Action).IsRequired().HasMaxLength(ShortLabelLength); - builder.Property(f => f.Changes).IsRequired(false).HasColumnType("jsonb") - .HasConversion(model => JsonSerializer.Serialize(model, JsonSerializerOptions.Default), - provider => JsonSerializer.Deserialize(provider, JsonSerializerOptions.Default)); + builder.Property(f => f.Changes).IsRequired(false); builder.Property(f => f.PerformedBy).IsRequired(); builder.Property(f => f.Timestamp).IsRequired().HasDefaultValueSql("now()"); } diff --git a/PostFundManagement.Domain/Entities/Award.cs b/PostFundManagement.Domain/Entities/Award.cs index a8cdd43..e63adbf 100644 --- a/PostFundManagement.Domain/Entities/Award.cs +++ b/PostFundManagement.Domain/Entities/Award.cs @@ -2,6 +2,7 @@ using PostFundManagement.Domain.Abstractions; namespace PostFundManagement.Domain.Entities; +[EntityTypeConfiguration] public class Award : Models.Award, ITenantEntity { public virtual User? Creator { get; set; } diff --git a/PostFundManagement.Domain/Entities/Beneficiary.cs b/PostFundManagement.Domain/Entities/Beneficiary.cs index d9dcb6a..e9e2d0f 100644 --- a/PostFundManagement.Domain/Entities/Beneficiary.cs +++ b/PostFundManagement.Domain/Entities/Beneficiary.cs @@ -3,6 +3,7 @@ using static PostFundManagement.Domain.Extensions.Constants; namespace PostFundManagement.Domain.Entities; +[EntityTypeConfiguration] public class Beneficiary : Models.Beneficiary, ITenantEntity { public virtual Tenant? Tenant { get; set; } diff --git a/PostFundManagement.Domain/Entities/Budget.cs b/PostFundManagement.Domain/Entities/Budget.cs index 6fedde7..5ffc5cd 100644 --- a/PostFundManagement.Domain/Entities/Budget.cs +++ b/PostFundManagement.Domain/Entities/Budget.cs @@ -3,6 +3,7 @@ using static PostFundManagement.Domain.Extensions.Constants; namespace PostFundManagement.Domain.Entities; +[EntityTypeConfiguration] public class Budget : Models.Budget, ITenantEntity { public virtual Tenant? Tenant { get; set; } diff --git a/PostFundManagement.Domain/Entities/ChangeRequest.cs b/PostFundManagement.Domain/Entities/ChangeRequest.cs index 6698a69..a95c84a 100644 --- a/PostFundManagement.Domain/Entities/ChangeRequest.cs +++ b/PostFundManagement.Domain/Entities/ChangeRequest.cs @@ -3,6 +3,7 @@ using static PostFundManagement.Domain.Extensions.Constants; namespace PostFundManagement.Domain.Entities; +[EntityTypeConfiguration] public class ChangeRequest : Models.ChangeRequest, ITenantEntity { public virtual Tenant? Tenant { get; set; } diff --git a/PostFundManagement.Domain/Entities/ComplianceItem.cs b/PostFundManagement.Domain/Entities/ComplianceItem.cs index e6654f6..e67faa2 100644 --- a/PostFundManagement.Domain/Entities/ComplianceItem.cs +++ b/PostFundManagement.Domain/Entities/ComplianceItem.cs @@ -3,6 +3,7 @@ using static PostFundManagement.Domain.Extensions.Constants; namespace PostFundManagement.Domain.Entities; +[EntityTypeConfiguration] public class ComplianceItem : Models.ComplianceItem, ITenantEntity { public virtual Tenant? Tenant { get; set; } diff --git a/PostFundManagement.Domain/Entities/Contract.cs b/PostFundManagement.Domain/Entities/Contract.cs index 7029f46..9c08f27 100644 --- a/PostFundManagement.Domain/Entities/Contract.cs +++ b/PostFundManagement.Domain/Entities/Contract.cs @@ -2,6 +2,7 @@ using PostFundManagement.Domain.Abstractions; namespace PostFundManagement.Domain.Entities; +[EntityTypeConfiguration] public class Contract : Models.Contract, ITenantEntity { public virtual Tenant? Tenant { get; set; } diff --git a/PostFundManagement.Domain/Entities/Disbursement.cs b/PostFundManagement.Domain/Entities/Disbursement.cs index 7eb1387..a9a008a 100644 --- a/PostFundManagement.Domain/Entities/Disbursement.cs +++ b/PostFundManagement.Domain/Entities/Disbursement.cs @@ -2,6 +2,7 @@ using PostFundManagement.Domain.Abstractions; namespace PostFundManagement.Domain.Entities; +[EntityTypeConfiguration] public class Disbursement : Models.Disbursement, ITenantEntity { public virtual Tenant? Tenant { get; set; } diff --git a/PostFundManagement.Domain/Entities/Evidence.cs b/PostFundManagement.Domain/Entities/Evidence.cs index 670917d..3d21aa1 100644 --- a/PostFundManagement.Domain/Entities/Evidence.cs +++ b/PostFundManagement.Domain/Entities/Evidence.cs @@ -2,6 +2,7 @@ using PostFundManagement.Domain.Abstractions; namespace PostFundManagement.Domain.Entities; +[EntityTypeConfiguration] public class Evidence : Models.Evidence, ITenantEntity { public virtual Tenant? Tenant { get; set; } diff --git a/PostFundManagement.Domain/Entities/Indicator.cs b/PostFundManagement.Domain/Entities/Indicator.cs index c46fbc6..1215875 100644 --- a/PostFundManagement.Domain/Entities/Indicator.cs +++ b/PostFundManagement.Domain/Entities/Indicator.cs @@ -3,6 +3,7 @@ using static PostFundManagement.Domain.Extensions.Constants; namespace PostFundManagement.Domain.Entities; +[EntityTypeConfiguration] public class Indicator : Models.Indicator, ITenantEntity { public virtual Tenant? Tenant { get; set; } diff --git a/PostFundManagement.Domain/Entities/Instrument.cs b/PostFundManagement.Domain/Entities/Instrument.cs index b317780..85453ed 100644 --- a/PostFundManagement.Domain/Entities/Instrument.cs +++ b/PostFundManagement.Domain/Entities/Instrument.cs @@ -3,6 +3,7 @@ using static PostFundManagement.Domain.Extensions.Constants; namespace PostFundManagement.Domain.Entities; +[EntityTypeConfiguration] public class Instrument : Models.Instrument, ITenantEntity { public virtual Tenant? Tenant { get; set; } diff --git a/PostFundManagement.Domain/Entities/Invite.cs b/PostFundManagement.Domain/Entities/Invite.cs index c89c51e..c1ef287 100644 --- a/PostFundManagement.Domain/Entities/Invite.cs +++ b/PostFundManagement.Domain/Entities/Invite.cs @@ -2,6 +2,7 @@ using PostFundManagement.Domain.Abstractions; namespace PostFundManagement.Domain.Entities; +[EntityTypeConfiguration] public class Invite : Models.Invite, ITenantEntity { public virtual Tenant? Tenant { get; set; } diff --git a/PostFundManagement.Domain/Entities/Issue.cs b/PostFundManagement.Domain/Entities/Issue.cs index 7b97825..7518084 100644 --- a/PostFundManagement.Domain/Entities/Issue.cs +++ b/PostFundManagement.Domain/Entities/Issue.cs @@ -3,6 +3,7 @@ using static PostFundManagement.Domain.Extensions.Constants; namespace PostFundManagement.Domain.Entities; +[EntityTypeConfiguration] public class Issue : Models.Issue, ITenantEntity { public virtual Tenant? Tenant { get; set; } diff --git a/PostFundManagement.Domain/Entities/Milestone.cs b/PostFundManagement.Domain/Entities/Milestone.cs index b3d2056..85a9581 100644 --- a/PostFundManagement.Domain/Entities/Milestone.cs +++ b/PostFundManagement.Domain/Entities/Milestone.cs @@ -3,6 +3,7 @@ using static PostFundManagement.Domain.Extensions.Constants; namespace PostFundManagement.Domain.Entities; +[EntityTypeConfiguration] public class Milestone : Models.Milestone, ITenantEntity { public virtual Tenant? Tenant { get; set; } diff --git a/PostFundManagement.Domain/Entities/Notification.cs b/PostFundManagement.Domain/Entities/Notification.cs index 29df920..1da94a1 100644 --- a/PostFundManagement.Domain/Entities/Notification.cs +++ b/PostFundManagement.Domain/Entities/Notification.cs @@ -3,6 +3,7 @@ using static PostFundManagement.Domain.Extensions.Constants; namespace PostFundManagement.Domain.Entities; +[EntityTypeConfiguration] public class Notification : Models.Notification, ITenantEntity { public virtual Tenant? Tenant { get; set; } diff --git a/PostFundManagement.Domain/Entities/Organisation.cs b/PostFundManagement.Domain/Entities/Organisation.cs index 3da43f3..eb8a2ef 100644 --- a/PostFundManagement.Domain/Entities/Organisation.cs +++ b/PostFundManagement.Domain/Entities/Organisation.cs @@ -2,6 +2,7 @@ using static PostFundManagement.Domain.Extensions.Constants; namespace PostFundManagement.Domain.Entities; +[EntityTypeConfiguration] public class Organisation : Models.Organisation { public virtual User? Creator { get; set; } diff --git a/PostFundManagement.Domain/Entities/Outcome.cs b/PostFundManagement.Domain/Entities/Outcome.cs index 7b0697c..fbd8358 100644 --- a/PostFundManagement.Domain/Entities/Outcome.cs +++ b/PostFundManagement.Domain/Entities/Outcome.cs @@ -1,9 +1,13 @@ +using PostFundManagement.Domain.Abstractions; using static PostFundManagement.Domain.Extensions.Constants; namespace PostFundManagement.Domain.Entities; -public class Outcome : Models.Outcome +[EntityTypeConfiguration] +public class Outcome : Models.Outcome, ITenantEntity { + public virtual Tenant? Tenant { get; set; } + public virtual Beneficiary? Beneficiary { get; set; } public virtual User? Creator { get; set; } @@ -16,12 +20,19 @@ public sealed class OutcomeConfiguration : IEntityTypeConfiguration builder.ToTable(nameof(Outcome).Pluralize()); builder.HasKey(pk => pk.Id); + builder.Property(f => f.TenantId).IsRequired(); builder.Property(f => f.BeneficiaryId).IsRequired(); builder.Property(f => f.CreatedBy).IsRequired(); builder.Property(f => f.CreatedAt).IsRequired().HasDefaultValueSql("now()"); builder.Property(f => f.Name).IsRequired().HasMaxLength(LabelLength); builder.Property(f => f.Description).IsRequired().HasMaxLength(TextLength); + builder.HasOne(f => f.Tenant) + .WithMany() + .HasForeignKey(fk => fk.TenantId) + .IsRequired() + .OnDelete(DeleteBehavior.NoAction); + builder.HasOne(f => f.Beneficiary) .WithMany() .HasForeignKey(fk => fk.BeneficiaryId) diff --git a/PostFundManagement.Domain/Entities/Portfolio.cs b/PostFundManagement.Domain/Entities/Portfolio.cs index 02b5c93..76643b2 100644 --- a/PostFundManagement.Domain/Entities/Portfolio.cs +++ b/PostFundManagement.Domain/Entities/Portfolio.cs @@ -3,6 +3,7 @@ using static PostFundManagement.Domain.Extensions.Constants; namespace PostFundManagement.Domain.Entities; +[EntityTypeConfiguration] public class Portfolio : Models.Portfolio, ITenantEntity { public virtual User? Creator { get; set; } diff --git a/PostFundManagement.Domain/Entities/Programme.cs b/PostFundManagement.Domain/Entities/Programme.cs index 7a0ef6b..7f5f25f 100644 --- a/PostFundManagement.Domain/Entities/Programme.cs +++ b/PostFundManagement.Domain/Entities/Programme.cs @@ -3,6 +3,7 @@ using static PostFundManagement.Domain.Extensions.Constants; namespace PostFundManagement.Domain.Entities; +[EntityTypeConfiguration] public class Programme : Models.Programme, ITenantEntity { public virtual User? Creator { get; set; } diff --git a/PostFundManagement.Domain/Entities/Project.cs b/PostFundManagement.Domain/Entities/Project.cs index 60a9ff4..fb4612f 100644 --- a/PostFundManagement.Domain/Entities/Project.cs +++ b/PostFundManagement.Domain/Entities/Project.cs @@ -3,6 +3,7 @@ using static PostFundManagement.Domain.Extensions.Constants; namespace PostFundManagement.Domain.Entities; +[EntityTypeConfiguration] public class Project : Models.Project, ITenantEntity { public virtual User? Creator { get; set; } diff --git a/PostFundManagement.Domain/Entities/Risk.cs b/PostFundManagement.Domain/Entities/Risk.cs index 1be7a3f..0591cc6 100644 --- a/PostFundManagement.Domain/Entities/Risk.cs +++ b/PostFundManagement.Domain/Entities/Risk.cs @@ -3,6 +3,7 @@ using static PostFundManagement.Domain.Extensions.Constants; namespace PostFundManagement.Domain.Entities; +[EntityTypeConfiguration] public class Risk : Models.Risk, ITenantEntity { public virtual Tenant? Tenant { get; set; } diff --git a/PostFundManagement.Domain/Entities/Rule.cs b/PostFundManagement.Domain/Entities/Rule.cs index bfe9435..0608b5f 100644 --- a/PostFundManagement.Domain/Entities/Rule.cs +++ b/PostFundManagement.Domain/Entities/Rule.cs @@ -3,6 +3,7 @@ using static PostFundManagement.Domain.Extensions.Constants; namespace PostFundManagement.Domain.Entities; +[EntityTypeConfiguration] public class Rule : Models.Rule, ITenantEntity { public virtual Tenant? Tenant { get; set; } diff --git a/PostFundManagement.Domain/Entities/SiteVisit.cs b/PostFundManagement.Domain/Entities/SiteVisit.cs index ec5782b..eee8e43 100644 --- a/PostFundManagement.Domain/Entities/SiteVisit.cs +++ b/PostFundManagement.Domain/Entities/SiteVisit.cs @@ -3,6 +3,7 @@ using static PostFundManagement.Domain.Extensions.Constants; namespace PostFundManagement.Domain.Entities; +[EntityTypeConfiguration] public class SiteVisit : Models.SiteVisit, ITenantEntity { public virtual Tenant? Tenant { get; set; } diff --git a/PostFundManagement.Domain/Entities/Tenant.cs b/PostFundManagement.Domain/Entities/Tenant.cs index cd38fc8..6bab5aa 100644 --- a/PostFundManagement.Domain/Entities/Tenant.cs +++ b/PostFundManagement.Domain/Entities/Tenant.cs @@ -2,6 +2,7 @@ namespace PostFundManagement.Domain.Entities; +[EntityTypeConfiguration] public class Tenant : Models.Tenant { public virtual User? Creator { get; set; } diff --git a/PostFundManagement.Domain/Entities/TenantOrganisation.cs b/PostFundManagement.Domain/Entities/TenantOrganisation.cs index 28c3a75..bf3cc15 100644 --- a/PostFundManagement.Domain/Entities/TenantOrganisation.cs +++ b/PostFundManagement.Domain/Entities/TenantOrganisation.cs @@ -1,5 +1,6 @@ namespace PostFundManagement.Domain.Entities; +[EntityTypeConfiguration] public class TenantOrganisation : Models.TenantOrganisation { public virtual Tenant? Tenant { get; set; } @@ -16,8 +17,6 @@ public sealed class TenantOrganisationConfiguration : IEntityTypeConfiguration pk.Id); - builder.HasIndex(to => new { to.TenantId, to.OrganisationId }).IsUnique(); - builder.Property(f => f.CreatedAt).IsRequired().HasDefaultValueSql("now()"); builder.Property(f => f.CreatedBy).IsRequired(); builder.Property(f => f.TenantId).IsRequired(); diff --git a/PostFundManagement.Domain/Entities/TenantUser.cs b/PostFundManagement.Domain/Entities/TenantUser.cs index fc66292..bac1337 100644 --- a/PostFundManagement.Domain/Entities/TenantUser.cs +++ b/PostFundManagement.Domain/Entities/TenantUser.cs @@ -1,5 +1,6 @@ namespace PostFundManagement.Domain.Entities; +[EntityTypeConfiguration] public class TenantUser : Models.TenantUser { public virtual Tenant? Tenant { get; set; } @@ -17,9 +18,7 @@ public sealed class TenantUserConfiguration : IEntityTypeConfiguration pk.Id); - builder.HasIndex(tu => new { tu.TenantId, tu.UserId }).IsUnique(); - + builder.HasKey(pk => pk.Id); builder.Property(f => f.CreatedAt).IsRequired().HasDefaultValueSql("now()"); builder.Property(f => f.CreatedBy).IsRequired(); builder.Property(f => f.UserId).IsRequired(); diff --git a/PostFundManagement.Domain/Entities/User.cs b/PostFundManagement.Domain/Entities/User.cs index eaaa510..da7a74e 100644 --- a/PostFundManagement.Domain/Entities/User.cs +++ b/PostFundManagement.Domain/Entities/User.cs @@ -2,6 +2,7 @@ using static PostFundManagement.Domain.Extensions.Constants; namespace PostFundManagement.Domain.Entities; +[EntityTypeConfiguration] public sealed class User : Models.User; public sealed class UserConfiguration : IEntityTypeConfiguration diff --git a/PostFundManagement.Domain/Models/AuditLog.cs b/PostFundManagement.Domain/Models/AuditLog.cs index 3bfbfbb..1bcd1a2 100644 --- a/PostFundManagement.Domain/Models/AuditLog.cs +++ b/PostFundManagement.Domain/Models/AuditLog.cs @@ -12,8 +12,7 @@ public class AuditLog public string? Action { get; set; } - [NotMapped] - public AuditChanges? Changes { get; set; } + public string[]? Changes { get; set; } public Guid PerformedBy { get; set; } diff --git a/PostFundManagement.Domain/Models/Outcome.cs b/PostFundManagement.Domain/Models/Outcome.cs index 768b91d..a541337 100644 --- a/PostFundManagement.Domain/Models/Outcome.cs +++ b/PostFundManagement.Domain/Models/Outcome.cs @@ -4,6 +4,8 @@ public class Outcome { public long Id { get; set; } + public long TenantId { get; set; } + public long BeneficiaryId { get; set; } public Guid CreatedBy { get; set; } diff --git a/PostFundManagement.Infrastructure/Database/ApplicationDbContext.cs b/PostFundManagement.Infrastructure/Database/ApplicationDbContext.cs index e7dbaf5..658d995 100644 --- a/PostFundManagement.Infrastructure/Database/ApplicationDbContext.cs +++ b/PostFundManagement.Infrastructure/Database/ApplicationDbContext.cs @@ -73,8 +73,6 @@ public sealed class ApplicationDbContext(DbContextOptions { base.OnModelCreating(modelBuilder); - modelBuilder.ApplyConfigurationsFromAssembly(Assembly.GetExecutingAssembly()); - foreach (var entityType in modelBuilder.Model.GetEntityTypes()) { if (typeof(ITenantEntity).IsAssignableFrom(entityType.ClrType)) @@ -89,8 +87,11 @@ public sealed class ApplicationDbContext(DbContextOptions modelBuilder.Entity().HasQueryFilter(o => BypassFilter || Set().Any(to => to.TenantId == CurrentTenantId && to.OrganisationId == o.Id)); - modelBuilder.Entity().HasQueryFilter(o => BypassFilter || - Set().Any(to => to.TenantId == CurrentTenantId && to.UserId == o.Id)); + modelBuilder.Entity() + .HasQueryFilter(to => BypassFilter || to.TenantId == CurrentTenantId); + + modelBuilder.Entity() + .HasQueryFilter(to => BypassFilter || to.TenantId == CurrentTenantId); } public override Task SaveChangesAsync(CancellationToken cancellationToken = default) diff --git a/PostFundManagement.Infrastructure/Database/Migrations/20260924090154_AddedTenantIdToOutcomes.Designer.cs b/PostFundManagement.Infrastructure/Database/Migrations/20260924090154_AddedTenantIdToOutcomes.Designer.cs new file mode 100644 index 0000000..35df212 --- /dev/null +++ b/PostFundManagement.Infrastructure/Database/Migrations/20260924090154_AddedTenantIdToOutcomes.Designer.cs @@ -0,0 +1,2285 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; +using PostFundManagement.Infrastructure.Database; + +#nullable disable + +namespace PostFundManagement.Infrastructure.Database.Migrations +{ + [DbContext(typeof(ApplicationDbContext))] + [Migration("20260924090154_AddedTenantIdToOutcomes")] + partial class AddedTenantIdToOutcomes + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "10.0.12") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Activity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Amount") + .HasColumnType("numeric"); + + b.Property("ApprovedBy") + .HasColumnType("uuid"); + + b.Property("ApproverId") + .HasColumnType("uuid"); + + b.Property("Category") + .HasColumnType("text"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("CreatorId") + .HasColumnType("uuid"); + + b.Property("Description") + .HasColumnType("text"); + + b.Property("MilestoneId") + .HasColumnType("bigint"); + + b.Property("PerformedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("ProjectId") + .HasColumnType("bigint"); + + b.Property("Status") + .HasColumnType("integer"); + + b.Property("TenantId") + .HasColumnType("bigint"); + + b.Property("Title") + .HasColumnType("text"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UpdatedBy") + .HasColumnType("uuid"); + + b.Property("UpdatorId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("ApproverId"); + + b.HasIndex("CreatorId"); + + b.HasIndex("MilestoneId"); + + b.HasIndex("ProjectId"); + + b.HasIndex("TenantId"); + + b.HasIndex("UpdatorId"); + + b.ToTable("Activities"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.AuditLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Action") + .HasColumnType("text"); + + b.Property("EntityId") + .HasColumnType("text"); + + b.Property("EntityName") + .HasColumnType("text"); + + b.Property("PerformedBy") + .HasColumnType("uuid"); + + b.Property("TenantId") + .HasColumnType("bigint"); + + b.Property("Timestamp") + .HasColumnType("timestamp with time zone"); + + b.HasKey("Id"); + + b.ToTable("AuditLogs"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Award", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Amount") + .HasColumnType("numeric"); + + b.Property("ApprovedBy") + .HasColumnType("uuid"); + + b.Property("ApproverId") + .HasColumnType("uuid"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("CreatorId") + .HasColumnType("uuid"); + + b.Property("OrganisationId") + .HasColumnType("bigint"); + + b.Property("ProgrammeId") + .HasColumnType("bigint"); + + b.Property("ProjectId") + .HasColumnType("bigint"); + + b.Property("Status") + .HasColumnType("integer"); + + b.Property("TenantId") + .HasColumnType("bigint"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UpdatedBy") + .HasColumnType("uuid"); + + b.Property("UpdatorId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("ApproverId"); + + b.HasIndex("CreatorId"); + + b.HasIndex("OrganisationId"); + + b.HasIndex("ProgrammeId"); + + b.HasIndex("ProjectId"); + + b.HasIndex("TenantId"); + + b.HasIndex("UpdatorId"); + + b.ToTable("Awards"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Beneficiary", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Category") + .HasColumnType("text"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("Location") + .HasColumnType("text"); + + b.Property("Name") + .HasColumnType("text"); + + b.Property("ProjectId") + .HasColumnType("bigint"); + + b.Property("ReachedCount") + .HasColumnType("integer"); + + b.Property("TargetCount") + .HasColumnType("integer"); + + b.Property("TenantId") + .HasColumnType("bigint"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("CreatedBy"); + + b.HasIndex("ProjectId"); + + b.HasIndex("TenantId"); + + b.HasIndex("UserId"); + + b.ToTable("Beneficiaries"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Budget", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Amount") + .HasColumnType("numeric"); + + b.Property("ApprovedBy") + .HasColumnType("uuid"); + + b.Property("ApproverId") + .HasColumnType("uuid"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("CreatorId") + .HasColumnType("uuid"); + + b.Property("Name") + .HasColumnType("text"); + + b.Property("ProjectId") + .HasColumnType("bigint"); + + b.Property("TenantId") + .HasColumnType("bigint"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.HasKey("Id"); + + b.HasIndex("ApproverId"); + + b.HasIndex("CreatorId"); + + b.HasIndex("ProjectId"); + + b.HasIndex("TenantId"); + + b.ToTable("Budgets"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.ChangeRequest", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ApprovedBy") + .HasColumnType("uuid"); + + b.Property("ApproverId") + .HasColumnType("uuid"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("CreatorId") + .HasColumnType("uuid"); + + b.Property("Justification") + .HasColumnType("text"); + + b.Property("ProjectId") + .HasColumnType("bigint"); + + b.Property("RevisedBudget") + .HasColumnType("numeric"); + + b.Property("RevisedEndedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Status") + .HasColumnType("integer"); + + b.Property("TenantId") + .HasColumnType("bigint"); + + b.Property("Title") + .HasColumnType("text"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.HasKey("Id"); + + b.HasIndex("ApproverId"); + + b.HasIndex("CreatorId"); + + b.HasIndex("ProjectId"); + + b.HasIndex("TenantId"); + + b.ToTable("ChangeRequests"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.ComplianceItem", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("CreatorId") + .HasColumnType("uuid"); + + b.Property("ProjectId") + .HasColumnType("bigint"); + + b.Property("Requirements") + .HasColumnType("text"); + + b.Property("Status") + .HasColumnType("integer"); + + b.Property("TenantId") + .HasColumnType("bigint"); + + b.Property("Title") + .HasColumnType("text"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("VerifiedBy") + .HasColumnType("uuid"); + + b.Property("VerifierId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("CreatorId"); + + b.HasIndex("ProjectId"); + + b.HasIndex("TenantId"); + + b.HasIndex("VerifierId"); + + b.ToTable("ComplianceItems"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Contract", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AwardId") + .HasColumnType("bigint"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("CreatorId") + .HasColumnType("uuid"); + + b.Property("EffectiveAt") + .HasColumnType("timestamp with time zone"); + + b.Property("ExpiresAt") + .HasColumnType("timestamp with time zone"); + + b.Property("ExternalSignatureId") + .HasColumnType("text"); + + b.Property("SignedDocumentUrl") + .HasColumnType("text"); + + b.Property("Status") + .HasColumnType("integer"); + + b.Property("TenantId") + .HasColumnType("bigint"); + + b.Property("TotalValue") + .HasColumnType("numeric"); + + b.HasKey("Id"); + + b.HasIndex("AwardId") + .IsUnique(); + + b.HasIndex("CreatorId"); + + b.HasIndex("TenantId"); + + b.ToTable("Contracts"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Disbursement", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Amount") + .HasColumnType("numeric"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("CreatorId") + .HasColumnType("uuid"); + + b.Property("MilestoneId") + .HasColumnType("bigint"); + + b.Property("ProjectId") + .HasColumnType("bigint"); + + b.Property("Status") + .HasColumnType("integer"); + + b.Property("TenantId") + .HasColumnType("bigint"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UpdatedBy") + .HasColumnType("uuid"); + + b.Property("UpdatorId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("CreatorId"); + + b.HasIndex("MilestoneId"); + + b.HasIndex("ProjectId"); + + b.HasIndex("TenantId"); + + b.HasIndex("UpdatorId"); + + b.ToTable("Disbursements"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Evidence", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ActivityId") + .HasColumnType("bigint"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("CreatorId") + .HasColumnType("uuid"); + + b.Property("DocumentUrl") + .HasColumnType("text"); + + b.Property("IndicatorId") + .HasColumnType("bigint"); + + b.Property("MilestoneId") + .HasColumnType("bigint"); + + b.Property("ProjectId") + .HasColumnType("bigint"); + + b.Property("Status") + .HasColumnType("integer"); + + b.Property("TenantId") + .HasColumnType("bigint"); + + b.Property("Type") + .HasColumnType("integer"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UpdatedBy") + .HasColumnType("uuid"); + + b.Property("UpdatorId") + .HasColumnType("uuid"); + + b.Property("Version") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("ActivityId"); + + b.HasIndex("CreatorId"); + + b.HasIndex("IndicatorId"); + + b.HasIndex("MilestoneId"); + + b.HasIndex("ProjectId"); + + b.HasIndex("TenantId"); + + b.HasIndex("UpdatorId"); + + b.ToTable("Evidences"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Indicator", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ActualAmount") + .HasColumnType("numeric"); + + b.Property("BaselineAmount") + .HasColumnType("numeric"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("CreatorId") + .HasColumnType("uuid"); + + b.Property("Name") + .HasColumnType("text"); + + b.Property("ProjectId") + .HasColumnType("bigint"); + + b.Property("TargetAmount") + .HasColumnType("numeric"); + + b.Property("TenantId") + .HasColumnType("bigint"); + + b.Property("UnitOfMeasure") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("CreatorId"); + + b.HasIndex("ProjectId"); + + b.HasIndex("TenantId"); + + b.ToTable("Indicators"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Instrument", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Code") + .HasColumnType("text"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("CreatorId") + .HasColumnType("uuid"); + + b.Property("Description") + .HasColumnType("text"); + + b.Property("Name") + .HasColumnType("text"); + + b.Property("ProgrammeId") + .HasColumnType("bigint"); + + b.Property("Status") + .HasColumnType("integer"); + + b.Property("TenantId") + .HasColumnType("bigint"); + + b.HasKey("Id"); + + b.HasIndex("CreatorId"); + + b.HasIndex("ProgrammeId"); + + b.HasIndex("TenantId"); + + b.ToTable("Instruments"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Invite", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AwardId") + .HasColumnType("bigint"); + + b.Property("ContractId") + .HasColumnType("bigint"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("InvitedOrganisationId") + .HasColumnType("bigint"); + + b.Property("OrganisationId") + .HasColumnType("bigint"); + + b.Property("Recipient") + .HasColumnType("uuid"); + + b.Property("RecipientUserId") + .HasColumnType("uuid"); + + b.Property("TenantId") + .HasColumnType("bigint"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UpdatedBy") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("AwardId"); + + b.HasIndex("ContractId"); + + b.HasIndex("InvitedOrganisationId"); + + b.HasIndex("OrganisationId"); + + b.HasIndex("RecipientUserId"); + + b.HasIndex("TenantId"); + + b.ToTable("Invites"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Issue", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AssignedTo") + .HasColumnType("uuid"); + + b.Property("AssigneeId") + .HasColumnType("uuid"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("CreatorId") + .HasColumnType("uuid"); + + b.Property("Description") + .HasColumnType("text"); + + b.Property("Priority") + .HasColumnType("integer"); + + b.Property("ProjectId") + .HasColumnType("bigint"); + + b.Property("Resolution") + .HasColumnType("text"); + + b.Property("ResolvedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Status") + .HasColumnType("integer"); + + b.Property("TenantId") + .HasColumnType("bigint"); + + b.Property("Title") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("AssigneeId"); + + b.HasIndex("CreatorId"); + + b.HasIndex("ProjectId"); + + b.HasIndex("TenantId"); + + b.ToTable("Issues"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Milestone", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("CreatorId") + .HasColumnType("uuid"); + + b.Property("DueAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Name") + .HasColumnType("text"); + + b.Property("Priority") + .HasColumnType("integer"); + + b.Property("ProjectId") + .HasColumnType("bigint"); + + b.Property("Status") + .HasColumnType("integer"); + + b.Property("TenantId") + .HasColumnType("bigint"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UpdatedBy") + .HasColumnType("uuid"); + + b.Property("UpdatorId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("CreatorId"); + + b.HasIndex("ProjectId"); + + b.HasIndex("TenantId"); + + b.HasIndex("UpdatorId"); + + b.ToTable("Milestones"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Notification", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Destination") + .HasColumnType("text"); + + b.Property("Error") + .HasColumnType("text"); + + b.Property("Message") + .HasColumnType("text"); + + b.Property("OrganisationId") + .HasColumnType("bigint"); + + b.Property("Platform") + .HasColumnType("integer"); + + b.Property("Recipient") + .HasColumnType("uuid"); + + b.Property("RecipientUserId") + .HasColumnType("uuid"); + + b.Property("SentAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Status") + .HasColumnType("integer"); + + b.Property("Subject") + .HasColumnType("text"); + + b.Property("TenantId") + .HasColumnType("bigint"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.HasKey("Id"); + + b.HasIndex("OrganisationId"); + + b.HasIndex("RecipientUserId"); + + b.HasIndex("TenantId"); + + b.ToTable("Notifications"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Organisation", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("CreatorId") + .HasColumnType("uuid"); + + b.Property("Email") + .HasColumnType("text"); + + b.Property("Name") + .HasColumnType("text"); + + b.Property("RegistrationNo") + .HasColumnType("text"); + + b.Property("Status") + .HasColumnType("integer"); + + b.Property("Type") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("CreatorId"); + + b.ToTable("Organisations"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Outcome", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("BeneficiaryId") + .HasColumnType("bigint"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("CreatorId") + .HasColumnType("uuid"); + + b.Property("Description") + .HasColumnType("text"); + + b.Property("Name") + .HasColumnType("text"); + + b.Property("TenantId") + .HasColumnType("bigint"); + + b.HasKey("Id"); + + b.HasIndex("BeneficiaryId"); + + b.HasIndex("CreatorId"); + + b.HasIndex("TenantId"); + + b.ToTable("Outcomes"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Portfolio", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("CreatorId") + .HasColumnType("uuid"); + + b.Property("Description") + .HasColumnType("text"); + + b.Property("Name") + .HasColumnType("text"); + + b.Property("OrganisationId") + .HasColumnType("bigint"); + + b.Property("OwnedBy") + .HasColumnType("uuid"); + + b.Property("OwnerId") + .HasColumnType("uuid"); + + b.Property("TenantId") + .HasColumnType("bigint"); + + b.HasKey("Id"); + + b.HasIndex("CreatorId"); + + b.HasIndex("OrganisationId"); + + b.HasIndex("OwnerId"); + + b.HasIndex("TenantId"); + + b.ToTable("Portfolios"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Programme", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("CreatorId") + .HasColumnType("uuid"); + + b.Property("Name") + .HasColumnType("text"); + + b.Property("OwnedBy") + .HasColumnType("uuid"); + + b.Property("OwnerId") + .HasColumnType("uuid"); + + b.Property("PortfolioId") + .HasColumnType("bigint"); + + b.Property("Status") + .HasColumnType("integer"); + + b.Property("TenantId") + .HasColumnType("bigint"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UpdatedBy") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("CreatorId"); + + b.HasIndex("OwnerId"); + + b.HasIndex("PortfolioId"); + + b.HasIndex("TenantId"); + + b.ToTable("Programmes"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Project", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("CreatorId") + .HasColumnType("uuid"); + + b.Property("Description") + .HasColumnType("text"); + + b.Property("EndedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Name") + .HasColumnType("text"); + + b.Property("ProgrammeId") + .HasColumnType("bigint"); + + b.Property("ProjectType") + .HasColumnType("integer"); + + b.Property("Sector") + .HasColumnType("integer"); + + b.Property("StartedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Status") + .HasColumnType("integer"); + + b.Property("TenantId") + .HasColumnType("bigint"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UpdatedBy") + .HasColumnType("uuid"); + + b.Property("UpdatorId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("CreatorId"); + + b.HasIndex("ProgrammeId"); + + b.HasIndex("TenantId"); + + b.HasIndex("UpdatorId"); + + b.ToTable("Projects"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Risk", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("CreatorId") + .HasColumnType("uuid"); + + b.Property("Description") + .HasColumnType("text"); + + b.Property("Impact") + .HasColumnType("integer"); + + b.Property("Likelihood") + .HasColumnType("integer"); + + b.Property("Name") + .HasColumnType("text"); + + b.Property("ProjectId") + .HasColumnType("bigint"); + + b.Property("TenantId") + .HasColumnType("bigint"); + + b.HasKey("Id"); + + b.HasIndex("CreatorId"); + + b.HasIndex("ProjectId"); + + b.HasIndex("TenantId"); + + b.ToTable("Risks"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Rule", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("CreatorId") + .HasColumnType("uuid"); + + b.Property("Name") + .HasColumnType("text"); + + b.Property("ProgrammeId") + .HasColumnType("bigint"); + + b.Property("Status") + .HasColumnType("integer"); + + b.Property("TenantId") + .HasColumnType("bigint"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UpdatedBy") + .HasColumnType("uuid"); + + b.Property("UpdatorId") + .HasColumnType("uuid"); + + b.Property("Version") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("CreatorId"); + + b.HasIndex("ProgrammeId"); + + b.HasIndex("TenantId"); + + b.HasIndex("UpdatorId"); + + b.ToTable("Rules"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.SiteVisit", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("CreatorId") + .HasColumnType("uuid"); + + b.Property("Findings") + .HasColumnType("text"); + + b.Property("InspectorName") + .HasColumnType("text"); + + b.Property("ProjectId") + .HasColumnType("bigint"); + + b.Property("Status") + .HasColumnType("integer"); + + b.Property("TenantId") + .HasColumnType("bigint"); + + b.Property("VisitedAt") + .HasColumnType("timestamp with time zone"); + + b.HasKey("Id"); + + b.HasIndex("CreatorId"); + + b.HasIndex("ProjectId"); + + b.HasIndex("TenantId"); + + b.ToTable("SiteVisits"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Tenant", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("CreatorId") + .HasColumnType("uuid"); + + b.Property("Name") + .HasColumnType("text"); + + b.Property("Status") + .HasColumnType("integer"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UpdatedBy") + .HasColumnType("uuid"); + + b.Property("UpdatorId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("CreatorId"); + + b.HasIndex("UpdatorId"); + + b.ToTable("Tenants"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.TenantOrganisation", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("CreatorId") + .HasColumnType("uuid"); + + b.Property("OrganisationId") + .HasColumnType("bigint"); + + b.Property("Status") + .HasColumnType("integer"); + + b.Property("TenantId") + .HasColumnType("bigint"); + + b.HasKey("Id"); + + b.HasIndex("CreatorId"); + + b.HasIndex("OrganisationId"); + + b.HasIndex("TenantId"); + + b.ToTable("TenantOrganisations"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.TenantUser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("Status") + .HasColumnType("integer"); + + b.Property("TenantId") + .HasColumnType("bigint"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("CreatedBy"); + + b.HasIndex("TenantId"); + + b.HasIndex("UserId"); + + b.ToTable("TenantUsers"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.User", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Email") + .HasColumnType("text"); + + b.Property("LastLoginAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Status") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.ToTable("Users"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Activity", b => + { + b.HasOne("PostFundManagement.Domain.Entities.User", "Approver") + .WithMany() + .HasForeignKey("ApproverId"); + + b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") + .WithMany() + .HasForeignKey("CreatorId"); + + b.HasOne("PostFundManagement.Domain.Entities.Milestone", "Milestone") + .WithMany() + .HasForeignKey("MilestoneId"); + + b.HasOne("PostFundManagement.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId"); + + b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") + .WithMany() + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.User", "Updator") + .WithMany() + .HasForeignKey("UpdatorId"); + + b.Navigation("Approver"); + + b.Navigation("Creator"); + + b.Navigation("Milestone"); + + b.Navigation("Project"); + + b.Navigation("Tenant"); + + b.Navigation("Updator"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Award", b => + { + b.HasOne("PostFundManagement.Domain.Entities.User", "Approver") + .WithMany() + .HasForeignKey("ApproverId"); + + b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") + .WithMany() + .HasForeignKey("CreatorId"); + + b.HasOne("PostFundManagement.Domain.Entities.Organisation", "Organisation") + .WithMany() + .HasForeignKey("OrganisationId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Programme", "Programme") + .WithMany("Awards") + .HasForeignKey("ProgrammeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Project", "Project") + .WithMany("Awards") + .HasForeignKey("ProjectId"); + + b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") + .WithMany() + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.User", "Updator") + .WithMany() + .HasForeignKey("UpdatorId"); + + b.Navigation("Approver"); + + b.Navigation("Creator"); + + b.Navigation("Organisation"); + + b.Navigation("Programme"); + + b.Navigation("Project"); + + b.Navigation("Tenant"); + + b.Navigation("Updator"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Beneficiary", b => + { + b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") + .WithMany() + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") + .WithMany() + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.User", "User") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Creator"); + + b.Navigation("Project"); + + b.Navigation("Tenant"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Budget", b => + { + b.HasOne("PostFundManagement.Domain.Entities.User", "Approver") + .WithMany() + .HasForeignKey("ApproverId"); + + b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") + .WithMany() + .HasForeignKey("CreatorId"); + + b.HasOne("PostFundManagement.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") + .WithMany() + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Approver"); + + b.Navigation("Creator"); + + b.Navigation("Project"); + + b.Navigation("Tenant"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.ChangeRequest", b => + { + b.HasOne("PostFundManagement.Domain.Entities.User", "Approver") + .WithMany() + .HasForeignKey("ApproverId"); + + b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") + .WithMany() + .HasForeignKey("CreatorId"); + + b.HasOne("PostFundManagement.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") + .WithMany() + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Approver"); + + b.Navigation("Creator"); + + b.Navigation("Project"); + + b.Navigation("Tenant"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.ComplianceItem", b => + { + b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") + .WithMany() + .HasForeignKey("CreatorId"); + + b.HasOne("PostFundManagement.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") + .WithMany() + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.User", "Verifier") + .WithMany() + .HasForeignKey("VerifierId"); + + b.Navigation("Creator"); + + b.Navigation("Project"); + + b.Navigation("Tenant"); + + b.Navigation("Verifier"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Contract", b => + { + b.HasOne("PostFundManagement.Domain.Entities.Award", "Award") + .WithOne("Contract") + .HasForeignKey("PostFundManagement.Domain.Entities.Contract", "AwardId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") + .WithMany() + .HasForeignKey("CreatorId"); + + b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") + .WithMany() + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Award"); + + b.Navigation("Creator"); + + b.Navigation("Tenant"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Disbursement", b => + { + b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") + .WithMany() + .HasForeignKey("CreatorId"); + + b.HasOne("PostFundManagement.Domain.Entities.Milestone", "Milestone") + .WithMany() + .HasForeignKey("MilestoneId"); + + b.HasOne("PostFundManagement.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") + .WithMany() + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.User", "Updator") + .WithMany() + .HasForeignKey("UpdatorId"); + + b.Navigation("Creator"); + + b.Navigation("Milestone"); + + b.Navigation("Project"); + + b.Navigation("Tenant"); + + b.Navigation("Updator"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Evidence", b => + { + b.HasOne("PostFundManagement.Domain.Entities.Activity", "Activity") + .WithMany("Evidences") + .HasForeignKey("ActivityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") + .WithMany() + .HasForeignKey("CreatorId"); + + b.HasOne("PostFundManagement.Domain.Entities.Indicator", "Indicator") + .WithMany() + .HasForeignKey("IndicatorId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Milestone", "Milestone") + .WithMany() + .HasForeignKey("MilestoneId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") + .WithMany() + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.User", "Updator") + .WithMany() + .HasForeignKey("UpdatorId"); + + b.Navigation("Activity"); + + b.Navigation("Creator"); + + b.Navigation("Indicator"); + + b.Navigation("Milestone"); + + b.Navigation("Project"); + + b.Navigation("Tenant"); + + b.Navigation("Updator"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Indicator", b => + { + b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") + .WithMany() + .HasForeignKey("CreatorId"); + + b.HasOne("PostFundManagement.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") + .WithMany() + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Creator"); + + b.Navigation("Project"); + + b.Navigation("Tenant"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Instrument", b => + { + b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") + .WithMany() + .HasForeignKey("CreatorId"); + + b.HasOne("PostFundManagement.Domain.Entities.Programme", "Programme") + .WithMany("Instruments") + .HasForeignKey("ProgrammeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") + .WithMany() + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Creator"); + + b.Navigation("Programme"); + + b.Navigation("Tenant"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Invite", b => + { + b.HasOne("PostFundManagement.Domain.Entities.Award", "Award") + .WithMany() + .HasForeignKey("AwardId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Contract", "Contract") + .WithMany() + .HasForeignKey("ContractId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Organisation", "InvitedOrganisation") + .WithMany() + .HasForeignKey("InvitedOrganisationId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Organisation", "Organisation") + .WithMany() + .HasForeignKey("OrganisationId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.User", "RecipientUser") + .WithMany() + .HasForeignKey("RecipientUserId"); + + b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") + .WithMany() + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Award"); + + b.Navigation("Contract"); + + b.Navigation("InvitedOrganisation"); + + b.Navigation("Organisation"); + + b.Navigation("RecipientUser"); + + b.Navigation("Tenant"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Issue", b => + { + b.HasOne("PostFundManagement.Domain.Entities.User", "Assignee") + .WithMany() + .HasForeignKey("AssigneeId"); + + b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") + .WithMany() + .HasForeignKey("CreatorId"); + + b.HasOne("PostFundManagement.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") + .WithMany() + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Assignee"); + + b.Navigation("Creator"); + + b.Navigation("Project"); + + b.Navigation("Tenant"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Milestone", b => + { + b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") + .WithMany() + .HasForeignKey("CreatorId"); + + b.HasOne("PostFundManagement.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") + .WithMany() + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.User", "Updator") + .WithMany() + .HasForeignKey("UpdatorId"); + + b.Navigation("Creator"); + + b.Navigation("Project"); + + b.Navigation("Tenant"); + + b.Navigation("Updator"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Notification", b => + { + b.HasOne("PostFundManagement.Domain.Entities.Organisation", "Organisation") + .WithMany() + .HasForeignKey("OrganisationId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.User", "RecipientUser") + .WithMany() + .HasForeignKey("RecipientUserId"); + + b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") + .WithMany() + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Organisation"); + + b.Navigation("RecipientUser"); + + b.Navigation("Tenant"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Organisation", b => + { + b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") + .WithMany() + .HasForeignKey("CreatorId"); + + b.Navigation("Creator"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Outcome", b => + { + b.HasOne("PostFundManagement.Domain.Entities.Beneficiary", "Beneficiary") + .WithMany() + .HasForeignKey("BeneficiaryId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") + .WithMany() + .HasForeignKey("CreatorId"); + + b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") + .WithMany() + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Beneficiary"); + + b.Navigation("Creator"); + + b.Navigation("Tenant"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Portfolio", b => + { + b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") + .WithMany() + .HasForeignKey("CreatorId"); + + b.HasOne("PostFundManagement.Domain.Entities.Organisation", "Organisation") + .WithMany() + .HasForeignKey("OrganisationId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.User", "Owner") + .WithMany() + .HasForeignKey("OwnerId"); + + b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") + .WithMany() + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Creator"); + + b.Navigation("Organisation"); + + b.Navigation("Owner"); + + b.Navigation("Tenant"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Programme", b => + { + b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") + .WithMany() + .HasForeignKey("CreatorId"); + + b.HasOne("PostFundManagement.Domain.Entities.User", "Owner") + .WithMany() + .HasForeignKey("OwnerId"); + + b.HasOne("PostFundManagement.Domain.Entities.Portfolio", "Portfolio") + .WithMany("Programmes") + .HasForeignKey("PortfolioId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") + .WithMany() + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Creator"); + + b.Navigation("Owner"); + + b.Navigation("Portfolio"); + + b.Navigation("Tenant"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Project", b => + { + b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") + .WithMany() + .HasForeignKey("CreatorId"); + + b.HasOne("PostFundManagement.Domain.Entities.Programme", "Programme") + .WithMany("Projects") + .HasForeignKey("ProgrammeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") + .WithMany() + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.User", "Updator") + .WithMany() + .HasForeignKey("UpdatorId"); + + b.Navigation("Creator"); + + b.Navigation("Programme"); + + b.Navigation("Tenant"); + + b.Navigation("Updator"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Risk", b => + { + b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") + .WithMany() + .HasForeignKey("CreatorId"); + + b.HasOne("PostFundManagement.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") + .WithMany() + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Creator"); + + b.Navigation("Project"); + + b.Navigation("Tenant"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Rule", b => + { + b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") + .WithMany() + .HasForeignKey("CreatorId"); + + b.HasOne("PostFundManagement.Domain.Entities.Programme", "Programme") + .WithMany("Rules") + .HasForeignKey("ProgrammeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") + .WithMany() + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.User", "Updator") + .WithMany() + .HasForeignKey("UpdatorId"); + + b.Navigation("Creator"); + + b.Navigation("Programme"); + + b.Navigation("Tenant"); + + b.Navigation("Updator"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.SiteVisit", b => + { + b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") + .WithMany() + .HasForeignKey("CreatorId"); + + b.HasOne("PostFundManagement.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") + .WithMany() + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Creator"); + + b.Navigation("Project"); + + b.Navigation("Tenant"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Tenant", b => + { + b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") + .WithMany() + .HasForeignKey("CreatorId"); + + b.HasOne("PostFundManagement.Domain.Entities.User", "Updator") + .WithMany() + .HasForeignKey("UpdatorId"); + + b.Navigation("Creator"); + + b.Navigation("Updator"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.TenantOrganisation", b => + { + b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") + .WithMany() + .HasForeignKey("CreatorId"); + + b.HasOne("PostFundManagement.Domain.Entities.Organisation", "Organisation") + .WithMany() + .HasForeignKey("OrganisationId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") + .WithMany() + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Creator"); + + b.Navigation("Organisation"); + + b.Navigation("Tenant"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.TenantUser", b => + { + b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") + .WithMany() + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") + .WithMany() + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.User", "User") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Creator"); + + b.Navigation("Tenant"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Activity", b => + { + b.Navigation("Evidences"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Award", b => + { + b.Navigation("Contract"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Portfolio", b => + { + b.Navigation("Programmes"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Programme", b => + { + b.Navigation("Awards"); + + b.Navigation("Instruments"); + + b.Navigation("Projects"); + + b.Navigation("Rules"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Project", b => + { + b.Navigation("Awards"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/PostFundManagement.Infrastructure/Database/Migrations/20260924090154_AddedTenantIdToOutcomes.cs b/PostFundManagement.Infrastructure/Database/Migrations/20260924090154_AddedTenantIdToOutcomes.cs new file mode 100644 index 0000000..d4ba117 --- /dev/null +++ b/PostFundManagement.Infrastructure/Database/Migrations/20260924090154_AddedTenantIdToOutcomes.cs @@ -0,0 +1,50 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace PostFundManagement.Infrastructure.Database.Migrations +{ + /// + public partial class AddedTenantIdToOutcomes : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "TenantId", + table: "Outcomes", + type: "bigint", + nullable: false, + defaultValue: 0L); + + migrationBuilder.CreateIndex( + name: "IX_Outcomes_TenantId", + table: "Outcomes", + column: "TenantId"); + + migrationBuilder.AddForeignKey( + name: "FK_Outcomes_Tenants_TenantId", + table: "Outcomes", + column: "TenantId", + principalTable: "Tenants", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropForeignKey( + name: "FK_Outcomes_Tenants_TenantId", + table: "Outcomes"); + + migrationBuilder.DropIndex( + name: "IX_Outcomes_TenantId", + table: "Outcomes"); + + migrationBuilder.DropColumn( + name: "TenantId", + table: "Outcomes"); + } + } +} diff --git a/PostFundManagement.Infrastructure/Database/Migrations/20260924094641_SetChangesColumnToTestArrayOnAuditLog.Designer.cs b/PostFundManagement.Infrastructure/Database/Migrations/20260924094641_SetChangesColumnToTestArrayOnAuditLog.Designer.cs new file mode 100644 index 0000000..6ee2583 --- /dev/null +++ b/PostFundManagement.Infrastructure/Database/Migrations/20260924094641_SetChangesColumnToTestArrayOnAuditLog.Designer.cs @@ -0,0 +1,2445 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; +using PostFundManagement.Infrastructure.Database; + +#nullable disable + +namespace PostFundManagement.Infrastructure.Database.Migrations +{ + [DbContext(typeof(ApplicationDbContext))] + [Migration("20260924094641_SetChangesColumnToTestArrayOnAuditLog")] + partial class SetChangesColumnToTestArrayOnAuditLog + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "10.0.12") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Activity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Amount") + .HasPrecision(18, 2) + .HasColumnType("numeric(18,2)"); + + b.Property("ApprovedBy") + .HasColumnType("uuid"); + + b.Property("Category") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("CreatedAt") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasDefaultValueSql("now()"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("character varying(1024)"); + + b.Property("MilestoneId") + .HasColumnType("bigint"); + + b.Property("PerformedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("ProjectId") + .HasColumnType("bigint"); + + b.Property("Status") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValueSql("1"); + + b.Property("TenantId") + .HasColumnType("bigint"); + + b.Property("Title") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UpdatedBy") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("ApprovedBy"); + + b.HasIndex("CreatedBy"); + + b.HasIndex("MilestoneId"); + + b.HasIndex("ProjectId"); + + b.HasIndex("TenantId"); + + b.HasIndex("UpdatedBy"); + + b.ToTable("Activities", (string)null); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.AuditLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Action") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.PrimitiveCollection("Changes") + .HasColumnType("text[]"); + + b.Property("EntityId") + .IsRequired() + .HasColumnType("text"); + + b.Property("EntityName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("PerformedBy") + .HasColumnType("uuid"); + + b.Property("TenantId") + .HasColumnType("bigint"); + + b.Property("Timestamp") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasDefaultValueSql("now()"); + + b.HasKey("Id"); + + b.ToTable("AuditLogs", (string)null); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Award", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Amount") + .HasPrecision(18, 2) + .HasColumnType("numeric(18,2)"); + + b.Property("ApprovedBy") + .HasColumnType("uuid"); + + b.Property("CreatedAt") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasDefaultValueSql("now()"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("OrganisationId") + .HasColumnType("bigint"); + + b.Property("ProgrammeId") + .HasColumnType("bigint"); + + b.Property("ProjectId") + .HasColumnType("bigint"); + + b.Property("Status") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValueSql("1"); + + b.Property("TenantId") + .HasColumnType("bigint"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UpdatedBy") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("ApprovedBy"); + + b.HasIndex("CreatedBy"); + + b.HasIndex("OrganisationId"); + + b.HasIndex("ProgrammeId"); + + b.HasIndex("ProjectId"); + + b.HasIndex("TenantId"); + + b.HasIndex("UpdatedBy"); + + b.ToTable("Awards", (string)null); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Beneficiary", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Category") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.Property("CreatedAt") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasDefaultValueSql("now()"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("Location") + .IsRequired() + .HasColumnType("text"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ProjectId") + .HasColumnType("bigint"); + + b.Property("ReachedCount") + .HasColumnType("integer"); + + b.Property("TargetCount") + .HasColumnType("integer"); + + b.Property("TenantId") + .HasColumnType("bigint"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("CreatedBy"); + + b.HasIndex("ProjectId"); + + b.HasIndex("TenantId"); + + b.HasIndex("UserId"); + + b.ToTable("Beneficiaries", (string)null); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Budget", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Amount") + .HasPrecision(18, 2) + .HasColumnType("numeric(18,2)"); + + b.Property("ApprovedBy") + .HasColumnType("uuid"); + + b.Property("CreatedAt") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasDefaultValueSql("now()"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ProjectId") + .HasColumnType("bigint"); + + b.Property("TenantId") + .HasColumnType("bigint"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.HasKey("Id"); + + b.HasIndex("ApprovedBy"); + + b.HasIndex("CreatedBy"); + + b.HasIndex("ProjectId"); + + b.HasIndex("TenantId"); + + b.ToTable("Budgets", (string)null); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.ChangeRequest", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ApprovedBy") + .HasColumnType("uuid"); + + b.Property("CreatedAt") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasDefaultValueSql("now()"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("Justification") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("character varying(1024)"); + + b.Property("ProjectId") + .HasColumnType("bigint"); + + b.Property("RevisedBudget") + .HasPrecision(18, 2) + .HasColumnType("numeric(18,2)"); + + b.Property("RevisedEndedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Status") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValueSql("1"); + + b.Property("TenantId") + .HasColumnType("bigint"); + + b.Property("Title") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.HasKey("Id"); + + b.HasIndex("ApprovedBy"); + + b.HasIndex("CreatedBy"); + + b.HasIndex("ProjectId"); + + b.HasIndex("TenantId"); + + b.ToTable("ChangeRequests", (string)null); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.ComplianceItem", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreatedAt") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasDefaultValueSql("now()"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("ProjectId") + .HasColumnType("bigint"); + + b.Property("Requirements") + .IsRequired() + .HasMaxLength(2048) + .HasColumnType("character varying(2048)"); + + b.Property("Status") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValueSql("1"); + + b.Property("TenantId") + .HasColumnType("bigint"); + + b.Property("Title") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("VerifiedBy") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("CreatedBy"); + + b.HasIndex("ProjectId"); + + b.HasIndex("TenantId"); + + b.HasIndex("VerifiedBy"); + + b.ToTable("ComplianceItems", (string)null); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Contract", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AwardId") + .HasColumnType("bigint"); + + b.Property("CreatedAt") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasDefaultValueSql("now()"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("EffectiveAt") + .HasColumnType("timestamp with time zone"); + + b.Property("ExpiresAt") + .HasColumnType("timestamp with time zone"); + + b.Property("ExternalSignatureId") + .HasColumnType("text"); + + b.Property("SignedDocumentUrl") + .HasColumnType("text"); + + b.Property("Status") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValueSql("1"); + + b.Property("TenantId") + .HasColumnType("bigint"); + + b.Property("TotalValue") + .HasPrecision(18, 2) + .HasColumnType("numeric(18,2)"); + + b.HasKey("Id"); + + b.HasIndex("AwardId") + .IsUnique(); + + b.HasIndex("CreatedBy"); + + b.HasIndex("TenantId"); + + b.ToTable("Contracts", (string)null); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Disbursement", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Amount") + .HasPrecision(18, 2) + .HasColumnType("numeric(18,2)"); + + b.Property("CreatedAt") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasDefaultValueSql("now()"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("MilestoneId") + .HasColumnType("bigint"); + + b.Property("ProjectId") + .HasColumnType("bigint"); + + b.Property("Status") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValueSql("1"); + + b.Property("TenantId") + .HasColumnType("bigint"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UpdatedBy") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("CreatedBy"); + + b.HasIndex("MilestoneId"); + + b.HasIndex("ProjectId"); + + b.HasIndex("TenantId"); + + b.HasIndex("UpdatedBy"); + + b.ToTable("Disbursements", (string)null); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Evidence", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ActivityId") + .HasColumnType("bigint"); + + b.Property("CreatedAt") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasDefaultValueSql("now()"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("DocumentUrl") + .IsRequired() + .HasColumnType("text"); + + b.Property("IndicatorId") + .HasColumnType("bigint"); + + b.Property("MilestoneId") + .HasColumnType("bigint"); + + b.Property("ProjectId") + .HasColumnType("bigint"); + + b.Property("Status") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValueSql("1"); + + b.Property("TenantId") + .HasColumnType("bigint"); + + b.Property("Type") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValueSql("9"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UpdatedBy") + .HasColumnType("uuid"); + + b.Property("Version") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(1); + + b.HasKey("Id"); + + b.HasIndex("ActivityId"); + + b.HasIndex("CreatedBy"); + + b.HasIndex("IndicatorId"); + + b.HasIndex("MilestoneId"); + + b.HasIndex("ProjectId"); + + b.HasIndex("TenantId"); + + b.HasIndex("UpdatedBy"); + + b.ToTable("Evidences", (string)null); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Indicator", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ActualAmount") + .HasPrecision(18, 2) + .HasColumnType("numeric(18,2)"); + + b.Property("BaselineAmount") + .HasPrecision(18, 2) + .HasColumnType("numeric(18,2)"); + + b.Property("CreatedAt") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasDefaultValueSql("now()"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ProjectId") + .HasColumnType("bigint"); + + b.Property("TargetAmount") + .HasPrecision(18, 2) + .HasColumnType("numeric(18,2)"); + + b.Property("TenantId") + .HasColumnType("bigint"); + + b.Property("UnitOfMeasure") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValueSql("2"); + + b.HasKey("Id"); + + b.HasIndex("CreatedBy"); + + b.HasIndex("ProjectId"); + + b.HasIndex("TenantId"); + + b.ToTable("Indicators", (string)null); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Instrument", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Code") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.Property("CreatedAt") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasDefaultValueSql("now()"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("Description") + .HasMaxLength(1024) + .HasColumnType("character varying(1024)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ProgrammeId") + .HasColumnType("bigint"); + + b.Property("Status") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValueSql("2"); + + b.Property("TenantId") + .HasColumnType("bigint"); + + b.HasKey("Id"); + + b.HasIndex("CreatedBy"); + + b.HasIndex("ProgrammeId"); + + b.HasIndex("TenantId"); + + b.ToTable("Instruments", (string)null); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Invite", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AwardId") + .HasColumnType("bigint"); + + b.Property("ContractId") + .HasColumnType("bigint"); + + b.Property("CreatedAt") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasDefaultValueSql("now()"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("InvitedOrganisationId") + .HasColumnType("bigint"); + + b.Property("OrganisationId") + .HasColumnType("bigint"); + + b.Property("Recipient") + .HasColumnType("uuid"); + + b.Property("TenantId") + .HasColumnType("bigint"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UpdatedBy") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("AwardId"); + + b.HasIndex("ContractId"); + + b.HasIndex("InvitedOrganisationId"); + + b.HasIndex("OrganisationId"); + + b.HasIndex("Recipient"); + + b.HasIndex("TenantId"); + + b.ToTable("Invites", (string)null); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Issue", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AssignedTo") + .HasColumnType("uuid"); + + b.Property("CreatedAt") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasDefaultValueSql("now()"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("character varying(1024)"); + + b.Property("Priority") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValueSql("1"); + + b.Property("ProjectId") + .HasColumnType("bigint"); + + b.Property("Resolution") + .IsRequired() + .HasColumnType("text"); + + b.Property("ResolvedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Status") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValueSql("1"); + + b.Property("TenantId") + .HasColumnType("bigint"); + + b.Property("Title") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.HasKey("Id"); + + b.HasIndex("AssignedTo"); + + b.HasIndex("CreatedBy"); + + b.HasIndex("ProjectId"); + + b.HasIndex("TenantId"); + + b.ToTable("Issues", (string)null); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Milestone", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreatedAt") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasDefaultValueSql("now()"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("DueAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("Priority") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValueSql("1"); + + b.Property("ProjectId") + .HasColumnType("bigint"); + + b.Property("Status") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValueSql("1"); + + b.Property("TenantId") + .HasColumnType("bigint"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UpdatedBy") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("CreatedBy"); + + b.HasIndex("ProjectId"); + + b.HasIndex("TenantId"); + + b.HasIndex("UpdatedBy"); + + b.ToTable("Milestones", (string)null); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Notification", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreatedAt") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasDefaultValueSql("now()"); + + b.Property("Destination") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("Error") + .HasColumnType("text"); + + b.Property("Message") + .IsRequired() + .HasMaxLength(4096) + .HasColumnType("character varying(4096)"); + + b.Property("OrganisationId") + .HasColumnType("bigint"); + + b.Property("Platform") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValueSql("1"); + + b.Property("Recipient") + .HasColumnType("uuid"); + + b.Property("SentAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Status") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValueSql("1"); + + b.Property("Subject") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("TenantId") + .HasColumnType("bigint"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.HasKey("Id"); + + b.HasIndex("OrganisationId"); + + b.HasIndex("Recipient"); + + b.HasIndex("TenantId"); + + b.ToTable("Notifications", (string)null); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Organisation", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreatedAt") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasDefaultValueSql("now()"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("Email") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("RegistrationNo") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("Status") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValueSql("1"); + + b.Property("Type") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValueSql("5"); + + b.HasKey("Id"); + + b.HasIndex("CreatedBy"); + + b.ToTable("Organisations", (string)null); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Outcome", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("BeneficiaryId") + .HasColumnType("bigint"); + + b.Property("CreatedAt") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasDefaultValueSql("now()"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("character varying(1024)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("TenantId") + .HasColumnType("bigint"); + + b.HasKey("Id"); + + b.HasIndex("BeneficiaryId"); + + b.HasIndex("CreatedBy"); + + b.HasIndex("TenantId"); + + b.ToTable("Outcomes", (string)null); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Portfolio", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreatedAt") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasDefaultValueSql("now()"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("Description") + .HasMaxLength(1024) + .HasColumnType("character varying(1024)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("OrganisationId") + .HasColumnType("bigint"); + + b.Property("OwnedBy") + .HasColumnType("uuid"); + + b.Property("TenantId") + .HasColumnType("bigint"); + + b.HasKey("Id"); + + b.HasIndex("CreatedBy"); + + b.HasIndex("OrganisationId"); + + b.HasIndex("OwnedBy"); + + b.HasIndex("TenantId"); + + b.ToTable("Portfolios", (string)null); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Programme", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreatedAt") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasDefaultValueSql("now()"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("OwnedBy") + .HasColumnType("uuid"); + + b.Property("PortfolioId") + .HasColumnType("bigint"); + + b.Property("Status") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValueSql("1"); + + b.Property("TenantId") + .HasColumnType("bigint"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UpdatedBy") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("CreatedBy"); + + b.HasIndex("OwnedBy"); + + b.HasIndex("PortfolioId"); + + b.HasIndex("TenantId"); + + b.ToTable("Programmes", (string)null); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Project", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreatedAt") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasDefaultValueSql("now()"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("character varying(1024)"); + + b.Property("EndedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ProgrammeId") + .HasColumnType("bigint"); + + b.Property("ProjectType") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValueSql("10"); + + b.Property("Sector") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValueSql("11"); + + b.Property("StartedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Status") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValueSql("1"); + + b.Property("TenantId") + .HasColumnType("bigint"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UpdatedBy") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("CreatedBy"); + + b.HasIndex("ProgrammeId"); + + b.HasIndex("TenantId"); + + b.HasIndex("UpdatedBy"); + + b.ToTable("Projects", (string)null); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Risk", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreatedAt") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasDefaultValueSql("now()"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("character varying(1024)"); + + b.Property("Impact") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValueSql("1"); + + b.Property("Likelihood") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValueSql("3"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ProjectId") + .HasColumnType("bigint"); + + b.Property("TenantId") + .HasColumnType("bigint"); + + b.HasKey("Id"); + + b.HasIndex("CreatedBy"); + + b.HasIndex("ProjectId"); + + b.HasIndex("TenantId"); + + b.ToTable("Risks", (string)null); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Rule", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreatedAt") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasDefaultValueSql("now()"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ProgrammeId") + .HasColumnType("bigint"); + + b.Property("Status") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValueSql("2"); + + b.Property("TenantId") + .HasColumnType("bigint"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UpdatedBy") + .HasColumnType("uuid"); + + b.Property("Version") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(1); + + b.HasKey("Id"); + + b.HasIndex("CreatedBy"); + + b.HasIndex("ProgrammeId"); + + b.HasIndex("TenantId"); + + b.HasIndex("UpdatedBy"); + + b.ToTable("Rules", (string)null); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.SiteVisit", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreatedAt") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasDefaultValueSql("now()"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("Findings") + .HasMaxLength(4096) + .HasColumnType("character varying(4096)"); + + b.Property("InspectorName") + .IsRequired() + .HasColumnType("text"); + + b.Property("ProjectId") + .HasColumnType("bigint"); + + b.Property("Status") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValueSql("1"); + + b.Property("TenantId") + .HasColumnType("bigint"); + + b.Property("VisitedAt") + .HasColumnType("timestamp with time zone"); + + b.HasKey("Id"); + + b.HasIndex("CreatedBy"); + + b.HasIndex("ProjectId"); + + b.HasIndex("TenantId"); + + b.ToTable("SiteVisits", (string)null); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Tenant", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreatedAt") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasDefaultValueSql("now()"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("Status") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValueSql("1"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("UpdatedBy") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("CreatedBy"); + + b.HasIndex("UpdatedBy"); + + b.ToTable("Tenants", (string)null); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.TenantOrganisation", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreatedAt") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasDefaultValueSql("now()"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("OrganisationId") + .HasColumnType("bigint"); + + b.Property("Status") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValueSql("1"); + + b.Property("TenantId") + .HasColumnType("bigint"); + + b.HasKey("Id"); + + b.HasIndex("CreatedBy"); + + b.HasIndex("OrganisationId"); + + b.HasIndex("TenantId"); + + b.ToTable("TenantOrganisations", (string)null); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.TenantUser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreatedAt") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasDefaultValueSql("now()"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("Status") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValueSql("1"); + + b.Property("TenantId") + .HasColumnType("bigint"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("CreatedBy"); + + b.HasIndex("TenantId"); + + b.HasIndex("UserId"); + + b.ToTable("TenantUsers", (string)null); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.User", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Email") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("LastLoginAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Status") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValueSql("2"); + + b.HasKey("Id"); + + b.ToTable("Users", (string)null); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Activity", b => + { + b.HasOne("PostFundManagement.Domain.Entities.User", "Approver") + .WithMany() + .HasForeignKey("ApprovedBy") + .OnDelete(DeleteBehavior.NoAction); + + b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") + .WithMany() + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Milestone", "Milestone") + .WithMany() + .HasForeignKey("MilestoneId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") + .WithMany() + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.User", "Updator") + .WithMany() + .HasForeignKey("UpdatedBy") + .OnDelete(DeleteBehavior.NoAction); + + b.Navigation("Approver"); + + b.Navigation("Creator"); + + b.Navigation("Milestone"); + + b.Navigation("Project"); + + b.Navigation("Tenant"); + + b.Navigation("Updator"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Award", b => + { + b.HasOne("PostFundManagement.Domain.Entities.User", "Approver") + .WithMany() + .HasForeignKey("ApprovedBy") + .OnDelete(DeleteBehavior.NoAction); + + b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") + .WithMany() + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Organisation", "Organisation") + .WithMany() + .HasForeignKey("OrganisationId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Programme", "Programme") + .WithMany("Awards") + .HasForeignKey("ProgrammeId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Project", "Project") + .WithMany("Awards") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.SetNull); + + b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") + .WithMany() + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.User", "Updator") + .WithMany() + .HasForeignKey("UpdatedBy") + .OnDelete(DeleteBehavior.NoAction); + + b.Navigation("Approver"); + + b.Navigation("Creator"); + + b.Navigation("Organisation"); + + b.Navigation("Programme"); + + b.Navigation("Project"); + + b.Navigation("Tenant"); + + b.Navigation("Updator"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Beneficiary", b => + { + b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") + .WithMany() + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") + .WithMany() + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.User", "User") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Creator"); + + b.Navigation("Project"); + + b.Navigation("Tenant"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Budget", b => + { + b.HasOne("PostFundManagement.Domain.Entities.User", "Approver") + .WithMany() + .HasForeignKey("ApprovedBy") + .OnDelete(DeleteBehavior.NoAction); + + b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") + .WithMany() + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") + .WithMany() + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Approver"); + + b.Navigation("Creator"); + + b.Navigation("Project"); + + b.Navigation("Tenant"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.ChangeRequest", b => + { + b.HasOne("PostFundManagement.Domain.Entities.User", "Approver") + .WithMany() + .HasForeignKey("ApprovedBy") + .OnDelete(DeleteBehavior.NoAction); + + b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") + .WithMany() + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") + .WithMany() + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Approver"); + + b.Navigation("Creator"); + + b.Navigation("Project"); + + b.Navigation("Tenant"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.ComplianceItem", b => + { + b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") + .WithMany() + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") + .WithMany() + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.User", "Verifier") + .WithMany() + .HasForeignKey("VerifiedBy") + .OnDelete(DeleteBehavior.NoAction); + + b.Navigation("Creator"); + + b.Navigation("Project"); + + b.Navigation("Tenant"); + + b.Navigation("Verifier"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Contract", b => + { + b.HasOne("PostFundManagement.Domain.Entities.Award", "Award") + .WithOne("Contract") + .HasForeignKey("PostFundManagement.Domain.Entities.Contract", "AwardId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") + .WithMany() + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") + .WithMany() + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Award"); + + b.Navigation("Creator"); + + b.Navigation("Tenant"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Disbursement", b => + { + b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") + .WithMany() + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Milestone", "Milestone") + .WithMany() + .HasForeignKey("MilestoneId") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("PostFundManagement.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") + .WithMany() + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.User", "Updator") + .WithMany() + .HasForeignKey("UpdatedBy") + .OnDelete(DeleteBehavior.NoAction); + + b.Navigation("Creator"); + + b.Navigation("Milestone"); + + b.Navigation("Project"); + + b.Navigation("Tenant"); + + b.Navigation("Updator"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Evidence", b => + { + b.HasOne("PostFundManagement.Domain.Entities.Activity", "Activity") + .WithMany("Evidences") + .HasForeignKey("ActivityId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") + .WithMany() + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Indicator", "Indicator") + .WithMany() + .HasForeignKey("IndicatorId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Milestone", "Milestone") + .WithMany() + .HasForeignKey("MilestoneId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") + .WithMany() + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.User", "Updator") + .WithMany() + .HasForeignKey("UpdatedBy") + .OnDelete(DeleteBehavior.NoAction); + + b.Navigation("Activity"); + + b.Navigation("Creator"); + + b.Navigation("Indicator"); + + b.Navigation("Milestone"); + + b.Navigation("Project"); + + b.Navigation("Tenant"); + + b.Navigation("Updator"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Indicator", b => + { + b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") + .WithMany() + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") + .WithMany() + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Creator"); + + b.Navigation("Project"); + + b.Navigation("Tenant"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Instrument", b => + { + b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") + .WithMany() + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Programme", "Programme") + .WithMany("Instruments") + .HasForeignKey("ProgrammeId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") + .WithMany() + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Creator"); + + b.Navigation("Programme"); + + b.Navigation("Tenant"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Invite", b => + { + b.HasOne("PostFundManagement.Domain.Entities.Award", "Award") + .WithMany() + .HasForeignKey("AwardId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Contract", "Contract") + .WithMany() + .HasForeignKey("ContractId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Organisation", "InvitedOrganisation") + .WithMany() + .HasForeignKey("InvitedOrganisationId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Organisation", "Organisation") + .WithMany() + .HasForeignKey("OrganisationId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.User", "RecipientUser") + .WithMany() + .HasForeignKey("Recipient") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") + .WithMany() + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Award"); + + b.Navigation("Contract"); + + b.Navigation("InvitedOrganisation"); + + b.Navigation("Organisation"); + + b.Navigation("RecipientUser"); + + b.Navigation("Tenant"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Issue", b => + { + b.HasOne("PostFundManagement.Domain.Entities.User", "Assignee") + .WithMany() + .HasForeignKey("AssignedTo") + .OnDelete(DeleteBehavior.SetNull) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") + .WithMany() + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") + .WithMany() + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Assignee"); + + b.Navigation("Creator"); + + b.Navigation("Project"); + + b.Navigation("Tenant"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Milestone", b => + { + b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") + .WithMany() + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") + .WithMany() + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.User", "Updator") + .WithMany() + .HasForeignKey("UpdatedBy") + .OnDelete(DeleteBehavior.NoAction); + + b.Navigation("Creator"); + + b.Navigation("Project"); + + b.Navigation("Tenant"); + + b.Navigation("Updator"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Notification", b => + { + b.HasOne("PostFundManagement.Domain.Entities.Organisation", "Organisation") + .WithMany() + .HasForeignKey("OrganisationId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.User", "RecipientUser") + .WithMany() + .HasForeignKey("Recipient") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") + .WithMany() + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("Organisation"); + + b.Navigation("RecipientUser"); + + b.Navigation("Tenant"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Organisation", b => + { + b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") + .WithMany() + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Creator"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Outcome", b => + { + b.HasOne("PostFundManagement.Domain.Entities.Beneficiary", "Beneficiary") + .WithMany() + .HasForeignKey("BeneficiaryId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") + .WithMany() + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") + .WithMany() + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Beneficiary"); + + b.Navigation("Creator"); + + b.Navigation("Tenant"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Portfolio", b => + { + b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") + .WithMany() + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Organisation", "Organisation") + .WithMany() + .HasForeignKey("OrganisationId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.User", "Owner") + .WithMany() + .HasForeignKey("OwnedBy") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") + .WithMany() + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("Creator"); + + b.Navigation("Organisation"); + + b.Navigation("Owner"); + + b.Navigation("Tenant"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Programme", b => + { + b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") + .WithMany() + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.User", "Owner") + .WithMany() + .HasForeignKey("OwnedBy") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Portfolio", "Portfolio") + .WithMany("Programmes") + .HasForeignKey("PortfolioId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") + .WithMany() + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Creator"); + + b.Navigation("Owner"); + + b.Navigation("Portfolio"); + + b.Navigation("Tenant"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Project", b => + { + b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") + .WithMany() + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Programme", "Programme") + .WithMany("Projects") + .HasForeignKey("ProgrammeId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") + .WithMany() + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.User", "Updator") + .WithMany() + .HasForeignKey("UpdatedBy") + .OnDelete(DeleteBehavior.NoAction); + + b.Navigation("Creator"); + + b.Navigation("Programme"); + + b.Navigation("Tenant"); + + b.Navigation("Updator"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Risk", b => + { + b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") + .WithMany() + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") + .WithMany() + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Creator"); + + b.Navigation("Project"); + + b.Navigation("Tenant"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Rule", b => + { + b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") + .WithMany() + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Programme", "Programme") + .WithMany("Rules") + .HasForeignKey("ProgrammeId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") + .WithMany() + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.User", "Updator") + .WithMany() + .HasForeignKey("UpdatedBy") + .OnDelete(DeleteBehavior.NoAction); + + b.Navigation("Creator"); + + b.Navigation("Programme"); + + b.Navigation("Tenant"); + + b.Navigation("Updator"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.SiteVisit", b => + { + b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") + .WithMany() + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") + .WithMany() + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Creator"); + + b.Navigation("Project"); + + b.Navigation("Tenant"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Tenant", b => + { + b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") + .WithMany() + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.User", "Updator") + .WithMany() + .HasForeignKey("UpdatedBy") + .OnDelete(DeleteBehavior.Restrict); + + b.Navigation("Creator"); + + b.Navigation("Updator"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.TenantOrganisation", b => + { + b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") + .WithMany() + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Organisation", "Organisation") + .WithMany() + .HasForeignKey("OrganisationId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") + .WithMany() + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("Creator"); + + b.Navigation("Organisation"); + + b.Navigation("Tenant"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.TenantUser", b => + { + b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") + .WithMany() + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") + .WithMany() + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.User", "User") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("Creator"); + + b.Navigation("Tenant"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Activity", b => + { + b.Navigation("Evidences"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Award", b => + { + b.Navigation("Contract"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Portfolio", b => + { + b.Navigation("Programmes"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Programme", b => + { + b.Navigation("Awards"); + + b.Navigation("Instruments"); + + b.Navigation("Projects"); + + b.Navigation("Rules"); + }); + + modelBuilder.Entity("PostFundManagement.Domain.Entities.Project", b => + { + b.Navigation("Awards"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/PostFundManagement.Infrastructure/Database/Migrations/20260924094641_SetChangesColumnToTestArrayOnAuditLog.cs b/PostFundManagement.Infrastructure/Database/Migrations/20260924094641_SetChangesColumnToTestArrayOnAuditLog.cs new file mode 100644 index 0000000..2e75b4e --- /dev/null +++ b/PostFundManagement.Infrastructure/Database/Migrations/20260924094641_SetChangesColumnToTestArrayOnAuditLog.cs @@ -0,0 +1,5599 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace PostFundManagement.Infrastructure.Database.Migrations +{ + /// + public partial class SetChangesColumnToTestArrayOnAuditLog : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropForeignKey( + name: "FK_Activities_Milestones_MilestoneId", + table: "Activities"); + + migrationBuilder.DropForeignKey( + name: "FK_Activities_Projects_ProjectId", + table: "Activities"); + + migrationBuilder.DropForeignKey( + name: "FK_Activities_Tenants_TenantId", + table: "Activities"); + + migrationBuilder.DropForeignKey( + name: "FK_Activities_Users_ApproverId", + table: "Activities"); + + migrationBuilder.DropForeignKey( + name: "FK_Activities_Users_CreatorId", + table: "Activities"); + + migrationBuilder.DropForeignKey( + name: "FK_Activities_Users_UpdatorId", + table: "Activities"); + + migrationBuilder.DropForeignKey( + name: "FK_Awards_Organisations_OrganisationId", + table: "Awards"); + + migrationBuilder.DropForeignKey( + name: "FK_Awards_Programmes_ProgrammeId", + table: "Awards"); + + migrationBuilder.DropForeignKey( + name: "FK_Awards_Projects_ProjectId", + table: "Awards"); + + migrationBuilder.DropForeignKey( + name: "FK_Awards_Tenants_TenantId", + table: "Awards"); + + migrationBuilder.DropForeignKey( + name: "FK_Awards_Users_ApproverId", + table: "Awards"); + + migrationBuilder.DropForeignKey( + name: "FK_Awards_Users_CreatorId", + table: "Awards"); + + migrationBuilder.DropForeignKey( + name: "FK_Awards_Users_UpdatorId", + table: "Awards"); + + migrationBuilder.DropForeignKey( + name: "FK_Beneficiaries_Projects_ProjectId", + table: "Beneficiaries"); + + migrationBuilder.DropForeignKey( + name: "FK_Beneficiaries_Tenants_TenantId", + table: "Beneficiaries"); + + migrationBuilder.DropForeignKey( + name: "FK_Beneficiaries_Users_CreatedBy", + table: "Beneficiaries"); + + migrationBuilder.DropForeignKey( + name: "FK_Beneficiaries_Users_UserId", + table: "Beneficiaries"); + + migrationBuilder.DropForeignKey( + name: "FK_Budgets_Projects_ProjectId", + table: "Budgets"); + + migrationBuilder.DropForeignKey( + name: "FK_Budgets_Tenants_TenantId", + table: "Budgets"); + + migrationBuilder.DropForeignKey( + name: "FK_Budgets_Users_ApproverId", + table: "Budgets"); + + migrationBuilder.DropForeignKey( + name: "FK_Budgets_Users_CreatorId", + table: "Budgets"); + + migrationBuilder.DropForeignKey( + name: "FK_ChangeRequests_Projects_ProjectId", + table: "ChangeRequests"); + + migrationBuilder.DropForeignKey( + name: "FK_ChangeRequests_Tenants_TenantId", + table: "ChangeRequests"); + + migrationBuilder.DropForeignKey( + name: "FK_ChangeRequests_Users_ApproverId", + table: "ChangeRequests"); + + migrationBuilder.DropForeignKey( + name: "FK_ChangeRequests_Users_CreatorId", + table: "ChangeRequests"); + + migrationBuilder.DropForeignKey( + name: "FK_ComplianceItems_Projects_ProjectId", + table: "ComplianceItems"); + + migrationBuilder.DropForeignKey( + name: "FK_ComplianceItems_Users_CreatorId", + table: "ComplianceItems"); + + migrationBuilder.DropForeignKey( + name: "FK_ComplianceItems_Users_VerifierId", + table: "ComplianceItems"); + + migrationBuilder.DropForeignKey( + name: "FK_Contracts_Awards_AwardId", + table: "Contracts"); + + migrationBuilder.DropForeignKey( + name: "FK_Contracts_Tenants_TenantId", + table: "Contracts"); + + migrationBuilder.DropForeignKey( + name: "FK_Contracts_Users_CreatorId", + table: "Contracts"); + + migrationBuilder.DropForeignKey( + name: "FK_Disbursements_Milestones_MilestoneId", + table: "Disbursements"); + + migrationBuilder.DropForeignKey( + name: "FK_Disbursements_Projects_ProjectId", + table: "Disbursements"); + + migrationBuilder.DropForeignKey( + name: "FK_Disbursements_Tenants_TenantId", + table: "Disbursements"); + + migrationBuilder.DropForeignKey( + name: "FK_Disbursements_Users_CreatorId", + table: "Disbursements"); + + migrationBuilder.DropForeignKey( + name: "FK_Disbursements_Users_UpdatorId", + table: "Disbursements"); + + migrationBuilder.DropForeignKey( + name: "FK_Evidences_Activities_ActivityId", + table: "Evidences"); + + migrationBuilder.DropForeignKey( + name: "FK_Evidences_Indicators_IndicatorId", + table: "Evidences"); + + migrationBuilder.DropForeignKey( + name: "FK_Evidences_Milestones_MilestoneId", + table: "Evidences"); + + migrationBuilder.DropForeignKey( + name: "FK_Evidences_Projects_ProjectId", + table: "Evidences"); + + migrationBuilder.DropForeignKey( + name: "FK_Evidences_Tenants_TenantId", + table: "Evidences"); + + migrationBuilder.DropForeignKey( + name: "FK_Evidences_Users_CreatorId", + table: "Evidences"); + + migrationBuilder.DropForeignKey( + name: "FK_Evidences_Users_UpdatorId", + table: "Evidences"); + + migrationBuilder.DropForeignKey( + name: "FK_Indicators_Projects_ProjectId", + table: "Indicators"); + + migrationBuilder.DropForeignKey( + name: "FK_Indicators_Tenants_TenantId", + table: "Indicators"); + + migrationBuilder.DropForeignKey( + name: "FK_Indicators_Users_CreatorId", + table: "Indicators"); + + migrationBuilder.DropForeignKey( + name: "FK_Instruments_Programmes_ProgrammeId", + table: "Instruments"); + + migrationBuilder.DropForeignKey( + name: "FK_Instruments_Tenants_TenantId", + table: "Instruments"); + + migrationBuilder.DropForeignKey( + name: "FK_Instruments_Users_CreatorId", + table: "Instruments"); + + migrationBuilder.DropForeignKey( + name: "FK_Invites_Awards_AwardId", + table: "Invites"); + + migrationBuilder.DropForeignKey( + name: "FK_Invites_Contracts_ContractId", + table: "Invites"); + + migrationBuilder.DropForeignKey( + name: "FK_Invites_Organisations_InvitedOrganisationId", + table: "Invites"); + + migrationBuilder.DropForeignKey( + name: "FK_Invites_Organisations_OrganisationId", + table: "Invites"); + + migrationBuilder.DropForeignKey( + name: "FK_Invites_Tenants_TenantId", + table: "Invites"); + + migrationBuilder.DropForeignKey( + name: "FK_Invites_Users_RecipientUserId", + table: "Invites"); + + migrationBuilder.DropForeignKey( + name: "FK_Issues_Projects_ProjectId", + table: "Issues"); + + migrationBuilder.DropForeignKey( + name: "FK_Issues_Tenants_TenantId", + table: "Issues"); + + migrationBuilder.DropForeignKey( + name: "FK_Issues_Users_AssigneeId", + table: "Issues"); + + migrationBuilder.DropForeignKey( + name: "FK_Issues_Users_CreatorId", + table: "Issues"); + + migrationBuilder.DropForeignKey( + name: "FK_Milestones_Projects_ProjectId", + table: "Milestones"); + + migrationBuilder.DropForeignKey( + name: "FK_Milestones_Tenants_TenantId", + table: "Milestones"); + + migrationBuilder.DropForeignKey( + name: "FK_Milestones_Users_CreatorId", + table: "Milestones"); + + migrationBuilder.DropForeignKey( + name: "FK_Milestones_Users_UpdatorId", + table: "Milestones"); + + migrationBuilder.DropForeignKey( + name: "FK_Notifications_Organisations_OrganisationId", + table: "Notifications"); + + migrationBuilder.DropForeignKey( + name: "FK_Notifications_Tenants_TenantId", + table: "Notifications"); + + migrationBuilder.DropForeignKey( + name: "FK_Notifications_Users_RecipientUserId", + table: "Notifications"); + + migrationBuilder.DropForeignKey( + name: "FK_Organisations_Users_CreatorId", + table: "Organisations"); + + migrationBuilder.DropForeignKey( + name: "FK_Outcomes_Beneficiaries_BeneficiaryId", + table: "Outcomes"); + + migrationBuilder.DropForeignKey( + name: "FK_Outcomes_Tenants_TenantId", + table: "Outcomes"); + + migrationBuilder.DropForeignKey( + name: "FK_Outcomes_Users_CreatorId", + table: "Outcomes"); + + migrationBuilder.DropForeignKey( + name: "FK_Portfolios_Organisations_OrganisationId", + table: "Portfolios"); + + migrationBuilder.DropForeignKey( + name: "FK_Portfolios_Tenants_TenantId", + table: "Portfolios"); + + migrationBuilder.DropForeignKey( + name: "FK_Portfolios_Users_CreatorId", + table: "Portfolios"); + + migrationBuilder.DropForeignKey( + name: "FK_Portfolios_Users_OwnerId", + table: "Portfolios"); + + migrationBuilder.DropForeignKey( + name: "FK_Programmes_Portfolios_PortfolioId", + table: "Programmes"); + + migrationBuilder.DropForeignKey( + name: "FK_Programmes_Tenants_TenantId", + table: "Programmes"); + + migrationBuilder.DropForeignKey( + name: "FK_Programmes_Users_CreatorId", + table: "Programmes"); + + migrationBuilder.DropForeignKey( + name: "FK_Programmes_Users_OwnerId", + table: "Programmes"); + + migrationBuilder.DropForeignKey( + name: "FK_Projects_Programmes_ProgrammeId", + table: "Projects"); + + migrationBuilder.DropForeignKey( + name: "FK_Projects_Tenants_TenantId", + table: "Projects"); + + migrationBuilder.DropForeignKey( + name: "FK_Projects_Users_CreatorId", + table: "Projects"); + + migrationBuilder.DropForeignKey( + name: "FK_Projects_Users_UpdatorId", + table: "Projects"); + + migrationBuilder.DropForeignKey( + name: "FK_Risks_Projects_ProjectId", + table: "Risks"); + + migrationBuilder.DropForeignKey( + name: "FK_Risks_Tenants_TenantId", + table: "Risks"); + + migrationBuilder.DropForeignKey( + name: "FK_Risks_Users_CreatorId", + table: "Risks"); + + migrationBuilder.DropForeignKey( + name: "FK_Rules_Programmes_ProgrammeId", + table: "Rules"); + + migrationBuilder.DropForeignKey( + name: "FK_Rules_Tenants_TenantId", + table: "Rules"); + + migrationBuilder.DropForeignKey( + name: "FK_Rules_Users_CreatorId", + table: "Rules"); + + migrationBuilder.DropForeignKey( + name: "FK_Rules_Users_UpdatorId", + table: "Rules"); + + migrationBuilder.DropForeignKey( + name: "FK_SiteVisits_Projects_ProjectId", + table: "SiteVisits"); + + migrationBuilder.DropForeignKey( + name: "FK_SiteVisits_Tenants_TenantId", + table: "SiteVisits"); + + migrationBuilder.DropForeignKey( + name: "FK_SiteVisits_Users_CreatorId", + table: "SiteVisits"); + + migrationBuilder.DropForeignKey( + name: "FK_TenantOrganisations_Organisations_OrganisationId", + table: "TenantOrganisations"); + + migrationBuilder.DropForeignKey( + name: "FK_TenantOrganisations_Tenants_TenantId", + table: "TenantOrganisations"); + + migrationBuilder.DropForeignKey( + name: "FK_TenantOrganisations_Users_CreatorId", + table: "TenantOrganisations"); + + migrationBuilder.DropForeignKey( + name: "FK_Tenants_Users_CreatorId", + table: "Tenants"); + + migrationBuilder.DropForeignKey( + name: "FK_Tenants_Users_UpdatorId", + table: "Tenants"); + + migrationBuilder.DropForeignKey( + name: "FK_TenantUsers_Tenants_TenantId", + table: "TenantUsers"); + + migrationBuilder.DropForeignKey( + name: "FK_TenantUsers_Users_CreatedBy", + table: "TenantUsers"); + + migrationBuilder.DropForeignKey( + name: "FK_TenantUsers_Users_UserId", + table: "TenantUsers"); + + migrationBuilder.DropIndex( + name: "IX_Tenants_CreatorId", + table: "Tenants"); + + migrationBuilder.DropIndex( + name: "IX_Tenants_UpdatorId", + table: "Tenants"); + + migrationBuilder.DropIndex( + name: "IX_TenantOrganisations_CreatorId", + table: "TenantOrganisations"); + + migrationBuilder.DropIndex( + name: "IX_SiteVisits_CreatorId", + table: "SiteVisits"); + + migrationBuilder.DropIndex( + name: "IX_Rules_CreatorId", + table: "Rules"); + + migrationBuilder.DropIndex( + name: "IX_Rules_UpdatorId", + table: "Rules"); + + migrationBuilder.DropIndex( + name: "IX_Risks_CreatorId", + table: "Risks"); + + migrationBuilder.DropIndex( + name: "IX_Projects_CreatorId", + table: "Projects"); + + migrationBuilder.DropIndex( + name: "IX_Projects_UpdatorId", + table: "Projects"); + + migrationBuilder.DropIndex( + name: "IX_Programmes_CreatorId", + table: "Programmes"); + + migrationBuilder.DropIndex( + name: "IX_Programmes_OwnerId", + table: "Programmes"); + + migrationBuilder.DropIndex( + name: "IX_Portfolios_CreatorId", + table: "Portfolios"); + + migrationBuilder.DropIndex( + name: "IX_Portfolios_OwnerId", + table: "Portfolios"); + + migrationBuilder.DropIndex( + name: "IX_Outcomes_CreatorId", + table: "Outcomes"); + + migrationBuilder.DropIndex( + name: "IX_Organisations_CreatorId", + table: "Organisations"); + + migrationBuilder.DropIndex( + name: "IX_Notifications_RecipientUserId", + table: "Notifications"); + + migrationBuilder.DropIndex( + name: "IX_Milestones_CreatorId", + table: "Milestones"); + + migrationBuilder.DropIndex( + name: "IX_Milestones_UpdatorId", + table: "Milestones"); + + migrationBuilder.DropIndex( + name: "IX_Issues_AssigneeId", + table: "Issues"); + + migrationBuilder.DropIndex( + name: "IX_Issues_CreatorId", + table: "Issues"); + + migrationBuilder.DropIndex( + name: "IX_Invites_RecipientUserId", + table: "Invites"); + + migrationBuilder.DropIndex( + name: "IX_Instruments_CreatorId", + table: "Instruments"); + + migrationBuilder.DropIndex( + name: "IX_Indicators_CreatorId", + table: "Indicators"); + + migrationBuilder.DropIndex( + name: "IX_Evidences_CreatorId", + table: "Evidences"); + + migrationBuilder.DropIndex( + name: "IX_Evidences_UpdatorId", + table: "Evidences"); + + migrationBuilder.DropIndex( + name: "IX_Disbursements_CreatorId", + table: "Disbursements"); + + migrationBuilder.DropIndex( + name: "IX_Disbursements_UpdatorId", + table: "Disbursements"); + + migrationBuilder.DropIndex( + name: "IX_Contracts_CreatorId", + table: "Contracts"); + + migrationBuilder.DropIndex( + name: "IX_ComplianceItems_CreatorId", + table: "ComplianceItems"); + + migrationBuilder.DropIndex( + name: "IX_ComplianceItems_VerifierId", + table: "ComplianceItems"); + + migrationBuilder.DropIndex( + name: "IX_ChangeRequests_ApproverId", + table: "ChangeRequests"); + + migrationBuilder.DropIndex( + name: "IX_ChangeRequests_CreatorId", + table: "ChangeRequests"); + + migrationBuilder.DropIndex( + name: "IX_Budgets_ApproverId", + table: "Budgets"); + + migrationBuilder.DropIndex( + name: "IX_Budgets_CreatorId", + table: "Budgets"); + + migrationBuilder.DropIndex( + name: "IX_Awards_ApproverId", + table: "Awards"); + + migrationBuilder.DropIndex( + name: "IX_Awards_CreatorId", + table: "Awards"); + + migrationBuilder.DropIndex( + name: "IX_Awards_UpdatorId", + table: "Awards"); + + migrationBuilder.DropIndex( + name: "IX_Activities_ApproverId", + table: "Activities"); + + migrationBuilder.DropIndex( + name: "IX_Activities_CreatorId", + table: "Activities"); + + migrationBuilder.DropIndex( + name: "IX_Activities_UpdatorId", + table: "Activities"); + + migrationBuilder.DropColumn( + name: "CreatorId", + table: "Tenants"); + + migrationBuilder.DropColumn( + name: "UpdatorId", + table: "Tenants"); + + migrationBuilder.DropColumn( + name: "CreatorId", + table: "TenantOrganisations"); + + migrationBuilder.DropColumn( + name: "CreatorId", + table: "SiteVisits"); + + migrationBuilder.DropColumn( + name: "CreatorId", + table: "Rules"); + + migrationBuilder.DropColumn( + name: "UpdatorId", + table: "Rules"); + + migrationBuilder.DropColumn( + name: "CreatorId", + table: "Risks"); + + migrationBuilder.DropColumn( + name: "CreatorId", + table: "Projects"); + + migrationBuilder.DropColumn( + name: "UpdatorId", + table: "Projects"); + + migrationBuilder.DropColumn( + name: "CreatorId", + table: "Programmes"); + + migrationBuilder.DropColumn( + name: "OwnerId", + table: "Programmes"); + + migrationBuilder.DropColumn( + name: "CreatorId", + table: "Portfolios"); + + migrationBuilder.DropColumn( + name: "OwnerId", + table: "Portfolios"); + + migrationBuilder.DropColumn( + name: "CreatorId", + table: "Outcomes"); + + migrationBuilder.DropColumn( + name: "CreatorId", + table: "Organisations"); + + migrationBuilder.DropColumn( + name: "RecipientUserId", + table: "Notifications"); + + migrationBuilder.DropColumn( + name: "CreatorId", + table: "Milestones"); + + migrationBuilder.DropColumn( + name: "UpdatorId", + table: "Milestones"); + + migrationBuilder.DropColumn( + name: "AssigneeId", + table: "Issues"); + + migrationBuilder.DropColumn( + name: "CreatorId", + table: "Issues"); + + migrationBuilder.DropColumn( + name: "RecipientUserId", + table: "Invites"); + + migrationBuilder.DropColumn( + name: "CreatorId", + table: "Instruments"); + + migrationBuilder.DropColumn( + name: "CreatorId", + table: "Indicators"); + + migrationBuilder.DropColumn( + name: "CreatorId", + table: "Evidences"); + + migrationBuilder.DropColumn( + name: "UpdatorId", + table: "Evidences"); + + migrationBuilder.DropColumn( + name: "CreatorId", + table: "Disbursements"); + + migrationBuilder.DropColumn( + name: "UpdatorId", + table: "Disbursements"); + + migrationBuilder.DropColumn( + name: "CreatorId", + table: "Contracts"); + + migrationBuilder.DropColumn( + name: "CreatorId", + table: "ComplianceItems"); + + migrationBuilder.DropColumn( + name: "VerifierId", + table: "ComplianceItems"); + + migrationBuilder.DropColumn( + name: "ApproverId", + table: "ChangeRequests"); + + migrationBuilder.DropColumn( + name: "CreatorId", + table: "ChangeRequests"); + + migrationBuilder.DropColumn( + name: "ApproverId", + table: "Budgets"); + + migrationBuilder.DropColumn( + name: "CreatorId", + table: "Budgets"); + + migrationBuilder.DropColumn( + name: "ApproverId", + table: "Awards"); + + migrationBuilder.DropColumn( + name: "CreatorId", + table: "Awards"); + + migrationBuilder.DropColumn( + name: "UpdatorId", + table: "Awards"); + + migrationBuilder.DropColumn( + name: "ApproverId", + table: "Activities"); + + migrationBuilder.DropColumn( + name: "CreatorId", + table: "Activities"); + + migrationBuilder.DropColumn( + name: "UpdatorId", + table: "Activities"); + + migrationBuilder.AlterColumn( + name: "Status", + table: "Users", + type: "integer", + nullable: false, + defaultValueSql: "2", + oldClrType: typeof(int), + oldType: "integer"); + + migrationBuilder.AlterColumn( + name: "Email", + table: "Users", + type: "character varying(256)", + maxLength: 256, + nullable: false, + defaultValue: "", + oldClrType: typeof(string), + oldType: "text", + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "Status", + table: "TenantUsers", + type: "integer", + nullable: false, + defaultValueSql: "1", + oldClrType: typeof(int), + oldType: "integer"); + + migrationBuilder.AlterColumn( + name: "CreatedAt", + table: "TenantUsers", + type: "timestamp with time zone", + nullable: false, + defaultValueSql: "now()", + oldClrType: typeof(DateTime), + oldType: "timestamp with time zone"); + + migrationBuilder.AlterColumn( + name: "Status", + table: "Tenants", + type: "integer", + nullable: false, + defaultValueSql: "1", + oldClrType: typeof(int), + oldType: "integer"); + + migrationBuilder.AlterColumn( + name: "Name", + table: "Tenants", + type: "character varying(256)", + maxLength: 256, + nullable: false, + defaultValue: "", + oldClrType: typeof(string), + oldType: "text", + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "CreatedAt", + table: "Tenants", + type: "timestamp with time zone", + nullable: false, + defaultValueSql: "now()", + oldClrType: typeof(DateTime), + oldType: "timestamp with time zone"); + + migrationBuilder.AlterColumn( + name: "Status", + table: "TenantOrganisations", + type: "integer", + nullable: false, + defaultValueSql: "1", + oldClrType: typeof(int), + oldType: "integer"); + + migrationBuilder.AlterColumn( + name: "CreatedAt", + table: "TenantOrganisations", + type: "timestamp with time zone", + nullable: false, + defaultValueSql: "now()", + oldClrType: typeof(DateTime), + oldType: "timestamp with time zone"); + + migrationBuilder.AlterColumn( + name: "Status", + table: "SiteVisits", + type: "integer", + nullable: false, + defaultValueSql: "1", + oldClrType: typeof(int), + oldType: "integer"); + + migrationBuilder.AlterColumn( + name: "InspectorName", + table: "SiteVisits", + type: "text", + nullable: false, + defaultValue: "", + oldClrType: typeof(string), + oldType: "text", + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "Findings", + table: "SiteVisits", + type: "character varying(4096)", + maxLength: 4096, + nullable: true, + oldClrType: typeof(string), + oldType: "text", + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "CreatedAt", + table: "SiteVisits", + type: "timestamp with time zone", + nullable: false, + defaultValueSql: "now()", + oldClrType: typeof(DateTime), + oldType: "timestamp with time zone"); + + migrationBuilder.AlterColumn( + name: "Version", + table: "Rules", + type: "integer", + nullable: false, + defaultValue: 1, + oldClrType: typeof(int), + oldType: "integer"); + + migrationBuilder.AlterColumn( + name: "Status", + table: "Rules", + type: "integer", + nullable: false, + defaultValueSql: "2", + oldClrType: typeof(int), + oldType: "integer"); + + migrationBuilder.AlterColumn( + name: "Name", + table: "Rules", + type: "character varying(256)", + maxLength: 256, + nullable: false, + defaultValue: "", + oldClrType: typeof(string), + oldType: "text", + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "CreatedAt", + table: "Rules", + type: "timestamp with time zone", + nullable: false, + defaultValueSql: "now()", + oldClrType: typeof(DateTime), + oldType: "timestamp with time zone"); + + migrationBuilder.AlterColumn( + name: "Name", + table: "Risks", + type: "character varying(256)", + maxLength: 256, + nullable: false, + defaultValue: "", + oldClrType: typeof(string), + oldType: "text", + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "Likelihood", + table: "Risks", + type: "integer", + nullable: false, + defaultValueSql: "3", + oldClrType: typeof(int), + oldType: "integer"); + + migrationBuilder.AlterColumn( + name: "Impact", + table: "Risks", + type: "integer", + nullable: false, + defaultValueSql: "1", + oldClrType: typeof(int), + oldType: "integer"); + + migrationBuilder.AlterColumn( + name: "Description", + table: "Risks", + type: "character varying(1024)", + maxLength: 1024, + nullable: false, + defaultValue: "", + oldClrType: typeof(string), + oldType: "text", + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "CreatedAt", + table: "Risks", + type: "timestamp with time zone", + nullable: false, + defaultValueSql: "now()", + oldClrType: typeof(DateTime), + oldType: "timestamp with time zone"); + + migrationBuilder.AlterColumn( + name: "Status", + table: "Projects", + type: "integer", + nullable: false, + defaultValueSql: "1", + oldClrType: typeof(int), + oldType: "integer"); + + migrationBuilder.AlterColumn( + name: "Sector", + table: "Projects", + type: "integer", + nullable: false, + defaultValueSql: "11", + oldClrType: typeof(int), + oldType: "integer"); + + migrationBuilder.AlterColumn( + name: "ProjectType", + table: "Projects", + type: "integer", + nullable: false, + defaultValueSql: "10", + oldClrType: typeof(int), + oldType: "integer"); + + migrationBuilder.AlterColumn( + name: "Name", + table: "Projects", + type: "character varying(256)", + maxLength: 256, + nullable: false, + defaultValue: "", + oldClrType: typeof(string), + oldType: "text", + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "Description", + table: "Projects", + type: "character varying(1024)", + maxLength: 1024, + nullable: false, + defaultValue: "", + oldClrType: typeof(string), + oldType: "text", + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "CreatedAt", + table: "Projects", + type: "timestamp with time zone", + nullable: false, + defaultValueSql: "now()", + oldClrType: typeof(DateTime), + oldType: "timestamp with time zone"); + + migrationBuilder.AlterColumn( + name: "Status", + table: "Programmes", + type: "integer", + nullable: false, + defaultValueSql: "1", + oldClrType: typeof(int), + oldType: "integer"); + + migrationBuilder.AlterColumn( + name: "Name", + table: "Programmes", + type: "character varying(256)", + maxLength: 256, + nullable: false, + defaultValue: "", + oldClrType: typeof(string), + oldType: "text", + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "CreatedAt", + table: "Programmes", + type: "timestamp with time zone", + nullable: false, + defaultValueSql: "now()", + oldClrType: typeof(DateTime), + oldType: "timestamp with time zone"); + + migrationBuilder.AlterColumn( + name: "Name", + table: "Portfolios", + type: "character varying(256)", + maxLength: 256, + nullable: false, + defaultValue: "", + oldClrType: typeof(string), + oldType: "text", + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "Description", + table: "Portfolios", + type: "character varying(1024)", + maxLength: 1024, + nullable: true, + oldClrType: typeof(string), + oldType: "text", + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "CreatedAt", + table: "Portfolios", + type: "timestamp with time zone", + nullable: false, + defaultValueSql: "now()", + oldClrType: typeof(DateTime), + oldType: "timestamp with time zone"); + + migrationBuilder.AlterColumn( + name: "Name", + table: "Outcomes", + type: "character varying(256)", + maxLength: 256, + nullable: false, + defaultValue: "", + oldClrType: typeof(string), + oldType: "text", + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "Description", + table: "Outcomes", + type: "character varying(1024)", + maxLength: 1024, + nullable: false, + defaultValue: "", + oldClrType: typeof(string), + oldType: "text", + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "CreatedAt", + table: "Outcomes", + type: "timestamp with time zone", + nullable: false, + defaultValueSql: "now()", + oldClrType: typeof(DateTime), + oldType: "timestamp with time zone"); + + migrationBuilder.AlterColumn( + name: "Type", + table: "Organisations", + type: "integer", + nullable: false, + defaultValueSql: "5", + oldClrType: typeof(int), + oldType: "integer"); + + migrationBuilder.AlterColumn( + name: "Status", + table: "Organisations", + type: "integer", + nullable: false, + defaultValueSql: "1", + oldClrType: typeof(int), + oldType: "integer"); + + migrationBuilder.AlterColumn( + name: "RegistrationNo", + table: "Organisations", + type: "character varying(256)", + maxLength: 256, + nullable: false, + defaultValue: "", + oldClrType: typeof(string), + oldType: "text", + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "Name", + table: "Organisations", + type: "character varying(256)", + maxLength: 256, + nullable: false, + defaultValue: "", + oldClrType: typeof(string), + oldType: "text", + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "Email", + table: "Organisations", + type: "character varying(256)", + maxLength: 256, + nullable: false, + defaultValue: "", + oldClrType: typeof(string), + oldType: "text", + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "CreatedAt", + table: "Organisations", + type: "timestamp with time zone", + nullable: false, + defaultValueSql: "now()", + oldClrType: typeof(DateTime), + oldType: "timestamp with time zone"); + + migrationBuilder.AlterColumn( + name: "Subject", + table: "Notifications", + type: "character varying(256)", + maxLength: 256, + nullable: true, + oldClrType: typeof(string), + oldType: "text", + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "Status", + table: "Notifications", + type: "integer", + nullable: false, + defaultValueSql: "1", + oldClrType: typeof(int), + oldType: "integer"); + + migrationBuilder.AlterColumn( + name: "Platform", + table: "Notifications", + type: "integer", + nullable: false, + defaultValueSql: "1", + oldClrType: typeof(int), + oldType: "integer"); + + migrationBuilder.AlterColumn( + name: "Message", + table: "Notifications", + type: "character varying(4096)", + maxLength: 4096, + nullable: false, + defaultValue: "", + oldClrType: typeof(string), + oldType: "text", + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "Destination", + table: "Notifications", + type: "character varying(256)", + maxLength: 256, + nullable: false, + defaultValue: "", + oldClrType: typeof(string), + oldType: "text", + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "CreatedAt", + table: "Notifications", + type: "timestamp with time zone", + nullable: false, + defaultValueSql: "now()", + oldClrType: typeof(DateTime), + oldType: "timestamp with time zone"); + + migrationBuilder.AlterColumn( + name: "Status", + table: "Milestones", + type: "integer", + nullable: false, + defaultValueSql: "1", + oldClrType: typeof(int), + oldType: "integer"); + + migrationBuilder.AlterColumn( + name: "Priority", + table: "Milestones", + type: "integer", + nullable: false, + defaultValueSql: "1", + oldClrType: typeof(int), + oldType: "integer"); + + migrationBuilder.AlterColumn( + name: "Name", + table: "Milestones", + type: "character varying(256)", + maxLength: 256, + nullable: false, + defaultValue: "", + oldClrType: typeof(string), + oldType: "text", + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "CreatedAt", + table: "Milestones", + type: "timestamp with time zone", + nullable: false, + defaultValueSql: "now()", + oldClrType: typeof(DateTime), + oldType: "timestamp with time zone"); + + migrationBuilder.AlterColumn( + name: "Title", + table: "Issues", + type: "character varying(256)", + maxLength: 256, + nullable: false, + defaultValue: "", + oldClrType: typeof(string), + oldType: "text", + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "Status", + table: "Issues", + type: "integer", + nullable: false, + defaultValueSql: "1", + oldClrType: typeof(int), + oldType: "integer"); + + migrationBuilder.AlterColumn( + name: "Resolution", + table: "Issues", + type: "text", + nullable: false, + defaultValue: "", + oldClrType: typeof(string), + oldType: "text", + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "Priority", + table: "Issues", + type: "integer", + nullable: false, + defaultValueSql: "1", + oldClrType: typeof(int), + oldType: "integer"); + + migrationBuilder.AlterColumn( + name: "Description", + table: "Issues", + type: "character varying(1024)", + maxLength: 1024, + nullable: false, + defaultValue: "", + oldClrType: typeof(string), + oldType: "text", + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "CreatedAt", + table: "Issues", + type: "timestamp with time zone", + nullable: false, + defaultValueSql: "now()", + oldClrType: typeof(DateTime), + oldType: "timestamp with time zone"); + + migrationBuilder.AlterColumn( + name: "CreatedAt", + table: "Invites", + type: "timestamp with time zone", + nullable: false, + defaultValueSql: "now()", + oldClrType: typeof(DateTime), + oldType: "timestamp with time zone"); + + migrationBuilder.AlterColumn( + name: "Status", + table: "Instruments", + type: "integer", + nullable: false, + defaultValueSql: "2", + oldClrType: typeof(int), + oldType: "integer"); + + migrationBuilder.AlterColumn( + name: "Name", + table: "Instruments", + type: "character varying(256)", + maxLength: 256, + nullable: false, + defaultValue: "", + oldClrType: typeof(string), + oldType: "text", + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "Description", + table: "Instruments", + type: "character varying(1024)", + maxLength: 1024, + nullable: true, + oldClrType: typeof(string), + oldType: "text", + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "CreatedAt", + table: "Instruments", + type: "timestamp with time zone", + nullable: false, + defaultValueSql: "now()", + oldClrType: typeof(DateTime), + oldType: "timestamp with time zone"); + + migrationBuilder.AlterColumn( + name: "Code", + table: "Instruments", + type: "character varying(100)", + maxLength: 100, + nullable: false, + defaultValue: "", + oldClrType: typeof(string), + oldType: "text", + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "UnitOfMeasure", + table: "Indicators", + type: "integer", + nullable: false, + defaultValueSql: "2", + oldClrType: typeof(int), + oldType: "integer", + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "TargetAmount", + table: "Indicators", + type: "numeric(18,2)", + precision: 18, + scale: 2, + nullable: false, + oldClrType: typeof(decimal), + oldType: "numeric"); + + migrationBuilder.AlterColumn( + name: "Name", + table: "Indicators", + type: "character varying(256)", + maxLength: 256, + nullable: false, + defaultValue: "", + oldClrType: typeof(string), + oldType: "text", + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "CreatedAt", + table: "Indicators", + type: "timestamp with time zone", + nullable: false, + defaultValueSql: "now()", + oldClrType: typeof(DateTime), + oldType: "timestamp with time zone"); + + migrationBuilder.AlterColumn( + name: "BaselineAmount", + table: "Indicators", + type: "numeric(18,2)", + precision: 18, + scale: 2, + nullable: false, + oldClrType: typeof(decimal), + oldType: "numeric"); + + migrationBuilder.AlterColumn( + name: "ActualAmount", + table: "Indicators", + type: "numeric(18,2)", + precision: 18, + scale: 2, + nullable: false, + oldClrType: typeof(decimal), + oldType: "numeric"); + + migrationBuilder.AlterColumn( + name: "Version", + table: "Evidences", + type: "integer", + nullable: false, + defaultValue: 1, + oldClrType: typeof(int), + oldType: "integer"); + + migrationBuilder.AlterColumn( + name: "UpdatedBy", + table: "Evidences", + type: "uuid", + nullable: false, + defaultValue: new Guid("00000000-0000-0000-0000-000000000000"), + oldClrType: typeof(Guid), + oldType: "uuid", + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "Type", + table: "Evidences", + type: "integer", + nullable: false, + defaultValueSql: "9", + oldClrType: typeof(int), + oldType: "integer"); + + migrationBuilder.AlterColumn( + name: "Status", + table: "Evidences", + type: "integer", + nullable: false, + defaultValueSql: "1", + oldClrType: typeof(int), + oldType: "integer"); + + migrationBuilder.AlterColumn( + name: "DocumentUrl", + table: "Evidences", + type: "text", + nullable: false, + defaultValue: "", + oldClrType: typeof(string), + oldType: "text", + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "CreatedAt", + table: "Evidences", + type: "timestamp with time zone", + nullable: false, + defaultValueSql: "now()", + oldClrType: typeof(DateTime), + oldType: "timestamp with time zone"); + + migrationBuilder.AlterColumn( + name: "Status", + table: "Disbursements", + type: "integer", + nullable: false, + defaultValueSql: "1", + oldClrType: typeof(int), + oldType: "integer"); + + migrationBuilder.AlterColumn( + name: "CreatedAt", + table: "Disbursements", + type: "timestamp with time zone", + nullable: false, + defaultValueSql: "now()", + oldClrType: typeof(DateTime), + oldType: "timestamp with time zone"); + + migrationBuilder.AlterColumn( + name: "Amount", + table: "Disbursements", + type: "numeric(18,2)", + precision: 18, + scale: 2, + nullable: false, + oldClrType: typeof(decimal), + oldType: "numeric"); + + migrationBuilder.AlterColumn( + name: "TotalValue", + table: "Contracts", + type: "numeric(18,2)", + precision: 18, + scale: 2, + nullable: false, + oldClrType: typeof(decimal), + oldType: "numeric"); + + migrationBuilder.AlterColumn( + name: "Status", + table: "Contracts", + type: "integer", + nullable: false, + defaultValueSql: "1", + oldClrType: typeof(int), + oldType: "integer"); + + migrationBuilder.AlterColumn( + name: "CreatedAt", + table: "Contracts", + type: "timestamp with time zone", + nullable: false, + defaultValueSql: "now()", + oldClrType: typeof(DateTime), + oldType: "timestamp with time zone"); + + migrationBuilder.AlterColumn( + name: "Title", + table: "ComplianceItems", + type: "character varying(256)", + maxLength: 256, + nullable: false, + defaultValue: "", + oldClrType: typeof(string), + oldType: "text", + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "Status", + table: "ComplianceItems", + type: "integer", + nullable: false, + defaultValueSql: "1", + oldClrType: typeof(int), + oldType: "integer"); + + migrationBuilder.AlterColumn( + name: "Requirements", + table: "ComplianceItems", + type: "character varying(2048)", + maxLength: 2048, + nullable: false, + defaultValue: "", + oldClrType: typeof(string), + oldType: "text", + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "CreatedAt", + table: "ComplianceItems", + type: "timestamp with time zone", + nullable: false, + defaultValueSql: "now()", + oldClrType: typeof(DateTime), + oldType: "timestamp with time zone"); + + migrationBuilder.AlterColumn( + name: "Title", + table: "ChangeRequests", + type: "character varying(256)", + maxLength: 256, + nullable: false, + defaultValue: "", + oldClrType: typeof(string), + oldType: "text", + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "Status", + table: "ChangeRequests", + type: "integer", + nullable: false, + defaultValueSql: "1", + oldClrType: typeof(int), + oldType: "integer"); + + migrationBuilder.AlterColumn( + name: "RevisedBudget", + table: "ChangeRequests", + type: "numeric(18,2)", + precision: 18, + scale: 2, + nullable: true, + oldClrType: typeof(decimal), + oldType: "numeric", + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "Justification", + table: "ChangeRequests", + type: "character varying(1024)", + maxLength: 1024, + nullable: false, + defaultValue: "", + oldClrType: typeof(string), + oldType: "text", + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "CreatedAt", + table: "ChangeRequests", + type: "timestamp with time zone", + nullable: false, + defaultValueSql: "now()", + oldClrType: typeof(DateTime), + oldType: "timestamp with time zone"); + + migrationBuilder.AlterColumn( + name: "Name", + table: "Budgets", + type: "character varying(256)", + maxLength: 256, + nullable: false, + defaultValue: "", + oldClrType: typeof(string), + oldType: "text", + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "CreatedAt", + table: "Budgets", + type: "timestamp with time zone", + nullable: false, + defaultValueSql: "now()", + oldClrType: typeof(DateTime), + oldType: "timestamp with time zone"); + + migrationBuilder.AlterColumn( + name: "Amount", + table: "Budgets", + type: "numeric(18,2)", + precision: 18, + scale: 2, + nullable: false, + oldClrType: typeof(decimal), + oldType: "numeric"); + + migrationBuilder.AlterColumn( + name: "Name", + table: "Beneficiaries", + type: "character varying(256)", + maxLength: 256, + nullable: false, + defaultValue: "", + oldClrType: typeof(string), + oldType: "text", + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "Location", + table: "Beneficiaries", + type: "text", + nullable: false, + defaultValue: "", + oldClrType: typeof(string), + oldType: "text", + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "CreatedAt", + table: "Beneficiaries", + type: "timestamp with time zone", + nullable: false, + defaultValueSql: "now()", + oldClrType: typeof(DateTime), + oldType: "timestamp with time zone"); + + migrationBuilder.AlterColumn( + name: "Category", + table: "Beneficiaries", + type: "character varying(100)", + maxLength: 100, + nullable: false, + defaultValue: "", + oldClrType: typeof(string), + oldType: "text", + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "Status", + table: "Awards", + type: "integer", + nullable: false, + defaultValueSql: "1", + oldClrType: typeof(int), + oldType: "integer"); + + migrationBuilder.AlterColumn( + name: "CreatedAt", + table: "Awards", + type: "timestamp with time zone", + nullable: false, + defaultValueSql: "now()", + oldClrType: typeof(DateTime), + oldType: "timestamp with time zone"); + + migrationBuilder.AlterColumn( + name: "Amount", + table: "Awards", + type: "numeric(18,2)", + precision: 18, + scale: 2, + nullable: false, + oldClrType: typeof(decimal), + oldType: "numeric"); + + migrationBuilder.AlterColumn( + name: "Timestamp", + table: "AuditLogs", + type: "timestamp with time zone", + nullable: false, + defaultValueSql: "now()", + oldClrType: typeof(DateTime), + oldType: "timestamp with time zone"); + + migrationBuilder.AlterColumn( + name: "EntityName", + table: "AuditLogs", + type: "character varying(256)", + maxLength: 256, + nullable: false, + defaultValue: "", + oldClrType: typeof(string), + oldType: "text", + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "EntityId", + table: "AuditLogs", + type: "text", + nullable: false, + defaultValue: "", + oldClrType: typeof(string), + oldType: "text", + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "Action", + table: "AuditLogs", + type: "character varying(100)", + maxLength: 100, + nullable: false, + defaultValue: "", + oldClrType: typeof(string), + oldType: "text", + oldNullable: true); + + migrationBuilder.AddColumn( + name: "Changes", + table: "AuditLogs", + type: "text[]", + nullable: true); + + migrationBuilder.AlterColumn( + name: "Title", + table: "Activities", + type: "character varying(256)", + maxLength: 256, + nullable: false, + defaultValue: "", + oldClrType: typeof(string), + oldType: "text", + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "Status", + table: "Activities", + type: "integer", + nullable: false, + defaultValueSql: "1", + oldClrType: typeof(int), + oldType: "integer"); + + migrationBuilder.AlterColumn( + name: "ProjectId", + table: "Activities", + type: "bigint", + nullable: false, + defaultValue: 0L, + oldClrType: typeof(long), + oldType: "bigint", + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "MilestoneId", + table: "Activities", + type: "bigint", + nullable: false, + defaultValue: 0L, + oldClrType: typeof(long), + oldType: "bigint", + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "Description", + table: "Activities", + type: "character varying(1024)", + maxLength: 1024, + nullable: false, + defaultValue: "", + oldClrType: typeof(string), + oldType: "text", + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "CreatedAt", + table: "Activities", + type: "timestamp with time zone", + nullable: false, + defaultValueSql: "now()", + oldClrType: typeof(DateTime), + oldType: "timestamp with time zone"); + + migrationBuilder.AlterColumn( + name: "Category", + table: "Activities", + type: "character varying(256)", + maxLength: 256, + nullable: false, + defaultValue: "", + oldClrType: typeof(string), + oldType: "text", + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "Amount", + table: "Activities", + type: "numeric(18,2)", + precision: 18, + scale: 2, + nullable: false, + oldClrType: typeof(decimal), + oldType: "numeric"); + + migrationBuilder.CreateIndex( + name: "IX_Tenants_CreatedBy", + table: "Tenants", + column: "CreatedBy"); + + migrationBuilder.CreateIndex( + name: "IX_Tenants_UpdatedBy", + table: "Tenants", + column: "UpdatedBy"); + + migrationBuilder.CreateIndex( + name: "IX_TenantOrganisations_CreatedBy", + table: "TenantOrganisations", + column: "CreatedBy"); + + migrationBuilder.CreateIndex( + name: "IX_SiteVisits_CreatedBy", + table: "SiteVisits", + column: "CreatedBy"); + + migrationBuilder.CreateIndex( + name: "IX_Rules_CreatedBy", + table: "Rules", + column: "CreatedBy"); + + migrationBuilder.CreateIndex( + name: "IX_Rules_UpdatedBy", + table: "Rules", + column: "UpdatedBy"); + + migrationBuilder.CreateIndex( + name: "IX_Risks_CreatedBy", + table: "Risks", + column: "CreatedBy"); + + migrationBuilder.CreateIndex( + name: "IX_Projects_CreatedBy", + table: "Projects", + column: "CreatedBy"); + + migrationBuilder.CreateIndex( + name: "IX_Projects_UpdatedBy", + table: "Projects", + column: "UpdatedBy"); + + migrationBuilder.CreateIndex( + name: "IX_Programmes_CreatedBy", + table: "Programmes", + column: "CreatedBy"); + + migrationBuilder.CreateIndex( + name: "IX_Programmes_OwnedBy", + table: "Programmes", + column: "OwnedBy"); + + migrationBuilder.CreateIndex( + name: "IX_Portfolios_CreatedBy", + table: "Portfolios", + column: "CreatedBy"); + + migrationBuilder.CreateIndex( + name: "IX_Portfolios_OwnedBy", + table: "Portfolios", + column: "OwnedBy"); + + migrationBuilder.CreateIndex( + name: "IX_Outcomes_CreatedBy", + table: "Outcomes", + column: "CreatedBy"); + + migrationBuilder.CreateIndex( + name: "IX_Organisations_CreatedBy", + table: "Organisations", + column: "CreatedBy"); + + migrationBuilder.CreateIndex( + name: "IX_Notifications_Recipient", + table: "Notifications", + column: "Recipient"); + + migrationBuilder.CreateIndex( + name: "IX_Milestones_CreatedBy", + table: "Milestones", + column: "CreatedBy"); + + migrationBuilder.CreateIndex( + name: "IX_Milestones_UpdatedBy", + table: "Milestones", + column: "UpdatedBy"); + + migrationBuilder.CreateIndex( + name: "IX_Issues_AssignedTo", + table: "Issues", + column: "AssignedTo"); + + migrationBuilder.CreateIndex( + name: "IX_Issues_CreatedBy", + table: "Issues", + column: "CreatedBy"); + + migrationBuilder.CreateIndex( + name: "IX_Invites_Recipient", + table: "Invites", + column: "Recipient"); + + migrationBuilder.CreateIndex( + name: "IX_Instruments_CreatedBy", + table: "Instruments", + column: "CreatedBy"); + + migrationBuilder.CreateIndex( + name: "IX_Indicators_CreatedBy", + table: "Indicators", + column: "CreatedBy"); + + migrationBuilder.CreateIndex( + name: "IX_Evidences_CreatedBy", + table: "Evidences", + column: "CreatedBy"); + + migrationBuilder.CreateIndex( + name: "IX_Evidences_UpdatedBy", + table: "Evidences", + column: "UpdatedBy"); + + migrationBuilder.CreateIndex( + name: "IX_Disbursements_CreatedBy", + table: "Disbursements", + column: "CreatedBy"); + + migrationBuilder.CreateIndex( + name: "IX_Disbursements_UpdatedBy", + table: "Disbursements", + column: "UpdatedBy"); + + migrationBuilder.CreateIndex( + name: "IX_Contracts_CreatedBy", + table: "Contracts", + column: "CreatedBy"); + + migrationBuilder.CreateIndex( + name: "IX_ComplianceItems_CreatedBy", + table: "ComplianceItems", + column: "CreatedBy"); + + migrationBuilder.CreateIndex( + name: "IX_ComplianceItems_VerifiedBy", + table: "ComplianceItems", + column: "VerifiedBy"); + + migrationBuilder.CreateIndex( + name: "IX_ChangeRequests_ApprovedBy", + table: "ChangeRequests", + column: "ApprovedBy"); + + migrationBuilder.CreateIndex( + name: "IX_ChangeRequests_CreatedBy", + table: "ChangeRequests", + column: "CreatedBy"); + + migrationBuilder.CreateIndex( + name: "IX_Budgets_ApprovedBy", + table: "Budgets", + column: "ApprovedBy"); + + migrationBuilder.CreateIndex( + name: "IX_Budgets_CreatedBy", + table: "Budgets", + column: "CreatedBy"); + + migrationBuilder.CreateIndex( + name: "IX_Awards_ApprovedBy", + table: "Awards", + column: "ApprovedBy"); + + migrationBuilder.CreateIndex( + name: "IX_Awards_CreatedBy", + table: "Awards", + column: "CreatedBy"); + + migrationBuilder.CreateIndex( + name: "IX_Awards_UpdatedBy", + table: "Awards", + column: "UpdatedBy"); + + migrationBuilder.CreateIndex( + name: "IX_Activities_ApprovedBy", + table: "Activities", + column: "ApprovedBy"); + + migrationBuilder.CreateIndex( + name: "IX_Activities_CreatedBy", + table: "Activities", + column: "CreatedBy"); + + migrationBuilder.CreateIndex( + name: "IX_Activities_UpdatedBy", + table: "Activities", + column: "UpdatedBy"); + + migrationBuilder.AddForeignKey( + name: "FK_Activities_Milestones_MilestoneId", + table: "Activities", + column: "MilestoneId", + principalTable: "Milestones", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + + migrationBuilder.AddForeignKey( + name: "FK_Activities_Projects_ProjectId", + table: "Activities", + column: "ProjectId", + principalTable: "Projects", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + + migrationBuilder.AddForeignKey( + name: "FK_Activities_Tenants_TenantId", + table: "Activities", + column: "TenantId", + principalTable: "Tenants", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Activities_Users_ApprovedBy", + table: "Activities", + column: "ApprovedBy", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Activities_Users_CreatedBy", + table: "Activities", + column: "CreatedBy", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Activities_Users_UpdatedBy", + table: "Activities", + column: "UpdatedBy", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Awards_Organisations_OrganisationId", + table: "Awards", + column: "OrganisationId", + principalTable: "Organisations", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + + migrationBuilder.AddForeignKey( + name: "FK_Awards_Programmes_ProgrammeId", + table: "Awards", + column: "ProgrammeId", + principalTable: "Programmes", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + + migrationBuilder.AddForeignKey( + name: "FK_Awards_Projects_ProjectId", + table: "Awards", + column: "ProjectId", + principalTable: "Projects", + principalColumn: "Id", + onDelete: ReferentialAction.SetNull); + + migrationBuilder.AddForeignKey( + name: "FK_Awards_Tenants_TenantId", + table: "Awards", + column: "TenantId", + principalTable: "Tenants", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + + migrationBuilder.AddForeignKey( + name: "FK_Awards_Users_ApprovedBy", + table: "Awards", + column: "ApprovedBy", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Awards_Users_CreatedBy", + table: "Awards", + column: "CreatedBy", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Awards_Users_UpdatedBy", + table: "Awards", + column: "UpdatedBy", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Beneficiaries_Projects_ProjectId", + table: "Beneficiaries", + column: "ProjectId", + principalTable: "Projects", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + + migrationBuilder.AddForeignKey( + name: "FK_Beneficiaries_Tenants_TenantId", + table: "Beneficiaries", + column: "TenantId", + principalTable: "Tenants", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Beneficiaries_Users_CreatedBy", + table: "Beneficiaries", + column: "CreatedBy", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Beneficiaries_Users_UserId", + table: "Beneficiaries", + column: "UserId", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Budgets_Projects_ProjectId", + table: "Budgets", + column: "ProjectId", + principalTable: "Projects", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + + migrationBuilder.AddForeignKey( + name: "FK_Budgets_Tenants_TenantId", + table: "Budgets", + column: "TenantId", + principalTable: "Tenants", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Budgets_Users_ApprovedBy", + table: "Budgets", + column: "ApprovedBy", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Budgets_Users_CreatedBy", + table: "Budgets", + column: "CreatedBy", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_ChangeRequests_Projects_ProjectId", + table: "ChangeRequests", + column: "ProjectId", + principalTable: "Projects", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + + migrationBuilder.AddForeignKey( + name: "FK_ChangeRequests_Tenants_TenantId", + table: "ChangeRequests", + column: "TenantId", + principalTable: "Tenants", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_ChangeRequests_Users_ApprovedBy", + table: "ChangeRequests", + column: "ApprovedBy", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_ChangeRequests_Users_CreatedBy", + table: "ChangeRequests", + column: "CreatedBy", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_ComplianceItems_Projects_ProjectId", + table: "ComplianceItems", + column: "ProjectId", + principalTable: "Projects", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + + migrationBuilder.AddForeignKey( + name: "FK_ComplianceItems_Users_CreatedBy", + table: "ComplianceItems", + column: "CreatedBy", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_ComplianceItems_Users_VerifiedBy", + table: "ComplianceItems", + column: "VerifiedBy", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Contracts_Awards_AwardId", + table: "Contracts", + column: "AwardId", + principalTable: "Awards", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + + migrationBuilder.AddForeignKey( + name: "FK_Contracts_Tenants_TenantId", + table: "Contracts", + column: "TenantId", + principalTable: "Tenants", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Contracts_Users_CreatedBy", + table: "Contracts", + column: "CreatedBy", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Disbursements_Milestones_MilestoneId", + table: "Disbursements", + column: "MilestoneId", + principalTable: "Milestones", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + + migrationBuilder.AddForeignKey( + name: "FK_Disbursements_Projects_ProjectId", + table: "Disbursements", + column: "ProjectId", + principalTable: "Projects", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + + migrationBuilder.AddForeignKey( + name: "FK_Disbursements_Tenants_TenantId", + table: "Disbursements", + column: "TenantId", + principalTable: "Tenants", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Disbursements_Users_CreatedBy", + table: "Disbursements", + column: "CreatedBy", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Disbursements_Users_UpdatedBy", + table: "Disbursements", + column: "UpdatedBy", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Evidences_Activities_ActivityId", + table: "Evidences", + column: "ActivityId", + principalTable: "Activities", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + + migrationBuilder.AddForeignKey( + name: "FK_Evidences_Indicators_IndicatorId", + table: "Evidences", + column: "IndicatorId", + principalTable: "Indicators", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + + migrationBuilder.AddForeignKey( + name: "FK_Evidences_Milestones_MilestoneId", + table: "Evidences", + column: "MilestoneId", + principalTable: "Milestones", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + + migrationBuilder.AddForeignKey( + name: "FK_Evidences_Projects_ProjectId", + table: "Evidences", + column: "ProjectId", + principalTable: "Projects", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + + migrationBuilder.AddForeignKey( + name: "FK_Evidences_Tenants_TenantId", + table: "Evidences", + column: "TenantId", + principalTable: "Tenants", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Evidences_Users_CreatedBy", + table: "Evidences", + column: "CreatedBy", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Evidences_Users_UpdatedBy", + table: "Evidences", + column: "UpdatedBy", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Indicators_Projects_ProjectId", + table: "Indicators", + column: "ProjectId", + principalTable: "Projects", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + + migrationBuilder.AddForeignKey( + name: "FK_Indicators_Tenants_TenantId", + table: "Indicators", + column: "TenantId", + principalTable: "Tenants", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Indicators_Users_CreatedBy", + table: "Indicators", + column: "CreatedBy", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Instruments_Programmes_ProgrammeId", + table: "Instruments", + column: "ProgrammeId", + principalTable: "Programmes", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + + migrationBuilder.AddForeignKey( + name: "FK_Instruments_Tenants_TenantId", + table: "Instruments", + column: "TenantId", + principalTable: "Tenants", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Instruments_Users_CreatedBy", + table: "Instruments", + column: "CreatedBy", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Invites_Awards_AwardId", + table: "Invites", + column: "AwardId", + principalTable: "Awards", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + + migrationBuilder.AddForeignKey( + name: "FK_Invites_Contracts_ContractId", + table: "Invites", + column: "ContractId", + principalTable: "Contracts", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + + migrationBuilder.AddForeignKey( + name: "FK_Invites_Organisations_InvitedOrganisationId", + table: "Invites", + column: "InvitedOrganisationId", + principalTable: "Organisations", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + + migrationBuilder.AddForeignKey( + name: "FK_Invites_Organisations_OrganisationId", + table: "Invites", + column: "OrganisationId", + principalTable: "Organisations", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + + migrationBuilder.AddForeignKey( + name: "FK_Invites_Tenants_TenantId", + table: "Invites", + column: "TenantId", + principalTable: "Tenants", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Invites_Users_Recipient", + table: "Invites", + column: "Recipient", + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + + migrationBuilder.AddForeignKey( + name: "FK_Issues_Projects_ProjectId", + table: "Issues", + column: "ProjectId", + principalTable: "Projects", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + + migrationBuilder.AddForeignKey( + name: "FK_Issues_Tenants_TenantId", + table: "Issues", + column: "TenantId", + principalTable: "Tenants", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Issues_Users_AssignedTo", + table: "Issues", + column: "AssignedTo", + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.SetNull); + + migrationBuilder.AddForeignKey( + name: "FK_Issues_Users_CreatedBy", + table: "Issues", + column: "CreatedBy", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Milestones_Projects_ProjectId", + table: "Milestones", + column: "ProjectId", + principalTable: "Projects", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + + migrationBuilder.AddForeignKey( + name: "FK_Milestones_Tenants_TenantId", + table: "Milestones", + column: "TenantId", + principalTable: "Tenants", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Milestones_Users_CreatedBy", + table: "Milestones", + column: "CreatedBy", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Milestones_Users_UpdatedBy", + table: "Milestones", + column: "UpdatedBy", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Notifications_Organisations_OrganisationId", + table: "Notifications", + column: "OrganisationId", + principalTable: "Organisations", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + + migrationBuilder.AddForeignKey( + name: "FK_Notifications_Tenants_TenantId", + table: "Notifications", + column: "TenantId", + principalTable: "Tenants", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + + migrationBuilder.AddForeignKey( + name: "FK_Notifications_Users_Recipient", + table: "Notifications", + column: "Recipient", + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + + migrationBuilder.AddForeignKey( + name: "FK_Organisations_Users_CreatedBy", + table: "Organisations", + column: "CreatedBy", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Outcomes_Beneficiaries_BeneficiaryId", + table: "Outcomes", + column: "BeneficiaryId", + principalTable: "Beneficiaries", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + + migrationBuilder.AddForeignKey( + name: "FK_Outcomes_Tenants_TenantId", + table: "Outcomes", + column: "TenantId", + principalTable: "Tenants", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Outcomes_Users_CreatedBy", + table: "Outcomes", + column: "CreatedBy", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Portfolios_Organisations_OrganisationId", + table: "Portfolios", + column: "OrganisationId", + principalTable: "Organisations", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + + migrationBuilder.AddForeignKey( + name: "FK_Portfolios_Tenants_TenantId", + table: "Portfolios", + column: "TenantId", + principalTable: "Tenants", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + + migrationBuilder.AddForeignKey( + name: "FK_Portfolios_Users_CreatedBy", + table: "Portfolios", + column: "CreatedBy", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Portfolios_Users_OwnedBy", + table: "Portfolios", + column: "OwnedBy", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Programmes_Portfolios_PortfolioId", + table: "Programmes", + column: "PortfolioId", + principalTable: "Portfolios", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Programmes_Tenants_TenantId", + table: "Programmes", + column: "TenantId", + principalTable: "Tenants", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Programmes_Users_CreatedBy", + table: "Programmes", + column: "CreatedBy", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Programmes_Users_OwnedBy", + table: "Programmes", + column: "OwnedBy", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Projects_Programmes_ProgrammeId", + table: "Projects", + column: "ProgrammeId", + principalTable: "Programmes", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + + migrationBuilder.AddForeignKey( + name: "FK_Projects_Tenants_TenantId", + table: "Projects", + column: "TenantId", + principalTable: "Tenants", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + + migrationBuilder.AddForeignKey( + name: "FK_Projects_Users_CreatedBy", + table: "Projects", + column: "CreatedBy", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Projects_Users_UpdatedBy", + table: "Projects", + column: "UpdatedBy", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Risks_Projects_ProjectId", + table: "Risks", + column: "ProjectId", + principalTable: "Projects", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + + migrationBuilder.AddForeignKey( + name: "FK_Risks_Tenants_TenantId", + table: "Risks", + column: "TenantId", + principalTable: "Tenants", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Risks_Users_CreatedBy", + table: "Risks", + column: "CreatedBy", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Rules_Programmes_ProgrammeId", + table: "Rules", + column: "ProgrammeId", + principalTable: "Programmes", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Rules_Tenants_TenantId", + table: "Rules", + column: "TenantId", + principalTable: "Tenants", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Rules_Users_CreatedBy", + table: "Rules", + column: "CreatedBy", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Rules_Users_UpdatedBy", + table: "Rules", + column: "UpdatedBy", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_SiteVisits_Projects_ProjectId", + table: "SiteVisits", + column: "ProjectId", + principalTable: "Projects", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + + migrationBuilder.AddForeignKey( + name: "FK_SiteVisits_Tenants_TenantId", + table: "SiteVisits", + column: "TenantId", + principalTable: "Tenants", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_SiteVisits_Users_CreatedBy", + table: "SiteVisits", + column: "CreatedBy", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_TenantOrganisations_Organisations_OrganisationId", + table: "TenantOrganisations", + column: "OrganisationId", + principalTable: "Organisations", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + + migrationBuilder.AddForeignKey( + name: "FK_TenantOrganisations_Tenants_TenantId", + table: "TenantOrganisations", + column: "TenantId", + principalTable: "Tenants", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + + migrationBuilder.AddForeignKey( + name: "FK_TenantOrganisations_Users_CreatedBy", + table: "TenantOrganisations", + column: "CreatedBy", + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + + migrationBuilder.AddForeignKey( + name: "FK_Tenants_Users_CreatedBy", + table: "Tenants", + column: "CreatedBy", + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + + migrationBuilder.AddForeignKey( + name: "FK_Tenants_Users_UpdatedBy", + table: "Tenants", + column: "UpdatedBy", + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + + migrationBuilder.AddForeignKey( + name: "FK_TenantUsers_Tenants_TenantId", + table: "TenantUsers", + column: "TenantId", + principalTable: "Tenants", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + + migrationBuilder.AddForeignKey( + name: "FK_TenantUsers_Users_CreatedBy", + table: "TenantUsers", + column: "CreatedBy", + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + + migrationBuilder.AddForeignKey( + name: "FK_TenantUsers_Users_UserId", + table: "TenantUsers", + column: "UserId", + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropForeignKey( + name: "FK_Activities_Milestones_MilestoneId", + table: "Activities"); + + migrationBuilder.DropForeignKey( + name: "FK_Activities_Projects_ProjectId", + table: "Activities"); + + migrationBuilder.DropForeignKey( + name: "FK_Activities_Tenants_TenantId", + table: "Activities"); + + migrationBuilder.DropForeignKey( + name: "FK_Activities_Users_ApprovedBy", + table: "Activities"); + + migrationBuilder.DropForeignKey( + name: "FK_Activities_Users_CreatedBy", + table: "Activities"); + + migrationBuilder.DropForeignKey( + name: "FK_Activities_Users_UpdatedBy", + table: "Activities"); + + migrationBuilder.DropForeignKey( + name: "FK_Awards_Organisations_OrganisationId", + table: "Awards"); + + migrationBuilder.DropForeignKey( + name: "FK_Awards_Programmes_ProgrammeId", + table: "Awards"); + + migrationBuilder.DropForeignKey( + name: "FK_Awards_Projects_ProjectId", + table: "Awards"); + + migrationBuilder.DropForeignKey( + name: "FK_Awards_Tenants_TenantId", + table: "Awards"); + + migrationBuilder.DropForeignKey( + name: "FK_Awards_Users_ApprovedBy", + table: "Awards"); + + migrationBuilder.DropForeignKey( + name: "FK_Awards_Users_CreatedBy", + table: "Awards"); + + migrationBuilder.DropForeignKey( + name: "FK_Awards_Users_UpdatedBy", + table: "Awards"); + + migrationBuilder.DropForeignKey( + name: "FK_Beneficiaries_Projects_ProjectId", + table: "Beneficiaries"); + + migrationBuilder.DropForeignKey( + name: "FK_Beneficiaries_Tenants_TenantId", + table: "Beneficiaries"); + + migrationBuilder.DropForeignKey( + name: "FK_Beneficiaries_Users_CreatedBy", + table: "Beneficiaries"); + + migrationBuilder.DropForeignKey( + name: "FK_Beneficiaries_Users_UserId", + table: "Beneficiaries"); + + migrationBuilder.DropForeignKey( + name: "FK_Budgets_Projects_ProjectId", + table: "Budgets"); + + migrationBuilder.DropForeignKey( + name: "FK_Budgets_Tenants_TenantId", + table: "Budgets"); + + migrationBuilder.DropForeignKey( + name: "FK_Budgets_Users_ApprovedBy", + table: "Budgets"); + + migrationBuilder.DropForeignKey( + name: "FK_Budgets_Users_CreatedBy", + table: "Budgets"); + + migrationBuilder.DropForeignKey( + name: "FK_ChangeRequests_Projects_ProjectId", + table: "ChangeRequests"); + + migrationBuilder.DropForeignKey( + name: "FK_ChangeRequests_Tenants_TenantId", + table: "ChangeRequests"); + + migrationBuilder.DropForeignKey( + name: "FK_ChangeRequests_Users_ApprovedBy", + table: "ChangeRequests"); + + migrationBuilder.DropForeignKey( + name: "FK_ChangeRequests_Users_CreatedBy", + table: "ChangeRequests"); + + migrationBuilder.DropForeignKey( + name: "FK_ComplianceItems_Projects_ProjectId", + table: "ComplianceItems"); + + migrationBuilder.DropForeignKey( + name: "FK_ComplianceItems_Users_CreatedBy", + table: "ComplianceItems"); + + migrationBuilder.DropForeignKey( + name: "FK_ComplianceItems_Users_VerifiedBy", + table: "ComplianceItems"); + + migrationBuilder.DropForeignKey( + name: "FK_Contracts_Awards_AwardId", + table: "Contracts"); + + migrationBuilder.DropForeignKey( + name: "FK_Contracts_Tenants_TenantId", + table: "Contracts"); + + migrationBuilder.DropForeignKey( + name: "FK_Contracts_Users_CreatedBy", + table: "Contracts"); + + migrationBuilder.DropForeignKey( + name: "FK_Disbursements_Milestones_MilestoneId", + table: "Disbursements"); + + migrationBuilder.DropForeignKey( + name: "FK_Disbursements_Projects_ProjectId", + table: "Disbursements"); + + migrationBuilder.DropForeignKey( + name: "FK_Disbursements_Tenants_TenantId", + table: "Disbursements"); + + migrationBuilder.DropForeignKey( + name: "FK_Disbursements_Users_CreatedBy", + table: "Disbursements"); + + migrationBuilder.DropForeignKey( + name: "FK_Disbursements_Users_UpdatedBy", + table: "Disbursements"); + + migrationBuilder.DropForeignKey( + name: "FK_Evidences_Activities_ActivityId", + table: "Evidences"); + + migrationBuilder.DropForeignKey( + name: "FK_Evidences_Indicators_IndicatorId", + table: "Evidences"); + + migrationBuilder.DropForeignKey( + name: "FK_Evidences_Milestones_MilestoneId", + table: "Evidences"); + + migrationBuilder.DropForeignKey( + name: "FK_Evidences_Projects_ProjectId", + table: "Evidences"); + + migrationBuilder.DropForeignKey( + name: "FK_Evidences_Tenants_TenantId", + table: "Evidences"); + + migrationBuilder.DropForeignKey( + name: "FK_Evidences_Users_CreatedBy", + table: "Evidences"); + + migrationBuilder.DropForeignKey( + name: "FK_Evidences_Users_UpdatedBy", + table: "Evidences"); + + migrationBuilder.DropForeignKey( + name: "FK_Indicators_Projects_ProjectId", + table: "Indicators"); + + migrationBuilder.DropForeignKey( + name: "FK_Indicators_Tenants_TenantId", + table: "Indicators"); + + migrationBuilder.DropForeignKey( + name: "FK_Indicators_Users_CreatedBy", + table: "Indicators"); + + migrationBuilder.DropForeignKey( + name: "FK_Instruments_Programmes_ProgrammeId", + table: "Instruments"); + + migrationBuilder.DropForeignKey( + name: "FK_Instruments_Tenants_TenantId", + table: "Instruments"); + + migrationBuilder.DropForeignKey( + name: "FK_Instruments_Users_CreatedBy", + table: "Instruments"); + + migrationBuilder.DropForeignKey( + name: "FK_Invites_Awards_AwardId", + table: "Invites"); + + migrationBuilder.DropForeignKey( + name: "FK_Invites_Contracts_ContractId", + table: "Invites"); + + migrationBuilder.DropForeignKey( + name: "FK_Invites_Organisations_InvitedOrganisationId", + table: "Invites"); + + migrationBuilder.DropForeignKey( + name: "FK_Invites_Organisations_OrganisationId", + table: "Invites"); + + migrationBuilder.DropForeignKey( + name: "FK_Invites_Tenants_TenantId", + table: "Invites"); + + migrationBuilder.DropForeignKey( + name: "FK_Invites_Users_Recipient", + table: "Invites"); + + migrationBuilder.DropForeignKey( + name: "FK_Issues_Projects_ProjectId", + table: "Issues"); + + migrationBuilder.DropForeignKey( + name: "FK_Issues_Tenants_TenantId", + table: "Issues"); + + migrationBuilder.DropForeignKey( + name: "FK_Issues_Users_AssignedTo", + table: "Issues"); + + migrationBuilder.DropForeignKey( + name: "FK_Issues_Users_CreatedBy", + table: "Issues"); + + migrationBuilder.DropForeignKey( + name: "FK_Milestones_Projects_ProjectId", + table: "Milestones"); + + migrationBuilder.DropForeignKey( + name: "FK_Milestones_Tenants_TenantId", + table: "Milestones"); + + migrationBuilder.DropForeignKey( + name: "FK_Milestones_Users_CreatedBy", + table: "Milestones"); + + migrationBuilder.DropForeignKey( + name: "FK_Milestones_Users_UpdatedBy", + table: "Milestones"); + + migrationBuilder.DropForeignKey( + name: "FK_Notifications_Organisations_OrganisationId", + table: "Notifications"); + + migrationBuilder.DropForeignKey( + name: "FK_Notifications_Tenants_TenantId", + table: "Notifications"); + + migrationBuilder.DropForeignKey( + name: "FK_Notifications_Users_Recipient", + table: "Notifications"); + + migrationBuilder.DropForeignKey( + name: "FK_Organisations_Users_CreatedBy", + table: "Organisations"); + + migrationBuilder.DropForeignKey( + name: "FK_Outcomes_Beneficiaries_BeneficiaryId", + table: "Outcomes"); + + migrationBuilder.DropForeignKey( + name: "FK_Outcomes_Tenants_TenantId", + table: "Outcomes"); + + migrationBuilder.DropForeignKey( + name: "FK_Outcomes_Users_CreatedBy", + table: "Outcomes"); + + migrationBuilder.DropForeignKey( + name: "FK_Portfolios_Organisations_OrganisationId", + table: "Portfolios"); + + migrationBuilder.DropForeignKey( + name: "FK_Portfolios_Tenants_TenantId", + table: "Portfolios"); + + migrationBuilder.DropForeignKey( + name: "FK_Portfolios_Users_CreatedBy", + table: "Portfolios"); + + migrationBuilder.DropForeignKey( + name: "FK_Portfolios_Users_OwnedBy", + table: "Portfolios"); + + migrationBuilder.DropForeignKey( + name: "FK_Programmes_Portfolios_PortfolioId", + table: "Programmes"); + + migrationBuilder.DropForeignKey( + name: "FK_Programmes_Tenants_TenantId", + table: "Programmes"); + + migrationBuilder.DropForeignKey( + name: "FK_Programmes_Users_CreatedBy", + table: "Programmes"); + + migrationBuilder.DropForeignKey( + name: "FK_Programmes_Users_OwnedBy", + table: "Programmes"); + + migrationBuilder.DropForeignKey( + name: "FK_Projects_Programmes_ProgrammeId", + table: "Projects"); + + migrationBuilder.DropForeignKey( + name: "FK_Projects_Tenants_TenantId", + table: "Projects"); + + migrationBuilder.DropForeignKey( + name: "FK_Projects_Users_CreatedBy", + table: "Projects"); + + migrationBuilder.DropForeignKey( + name: "FK_Projects_Users_UpdatedBy", + table: "Projects"); + + migrationBuilder.DropForeignKey( + name: "FK_Risks_Projects_ProjectId", + table: "Risks"); + + migrationBuilder.DropForeignKey( + name: "FK_Risks_Tenants_TenantId", + table: "Risks"); + + migrationBuilder.DropForeignKey( + name: "FK_Risks_Users_CreatedBy", + table: "Risks"); + + migrationBuilder.DropForeignKey( + name: "FK_Rules_Programmes_ProgrammeId", + table: "Rules"); + + migrationBuilder.DropForeignKey( + name: "FK_Rules_Tenants_TenantId", + table: "Rules"); + + migrationBuilder.DropForeignKey( + name: "FK_Rules_Users_CreatedBy", + table: "Rules"); + + migrationBuilder.DropForeignKey( + name: "FK_Rules_Users_UpdatedBy", + table: "Rules"); + + migrationBuilder.DropForeignKey( + name: "FK_SiteVisits_Projects_ProjectId", + table: "SiteVisits"); + + migrationBuilder.DropForeignKey( + name: "FK_SiteVisits_Tenants_TenantId", + table: "SiteVisits"); + + migrationBuilder.DropForeignKey( + name: "FK_SiteVisits_Users_CreatedBy", + table: "SiteVisits"); + + migrationBuilder.DropForeignKey( + name: "FK_TenantOrganisations_Organisations_OrganisationId", + table: "TenantOrganisations"); + + migrationBuilder.DropForeignKey( + name: "FK_TenantOrganisations_Tenants_TenantId", + table: "TenantOrganisations"); + + migrationBuilder.DropForeignKey( + name: "FK_TenantOrganisations_Users_CreatedBy", + table: "TenantOrganisations"); + + migrationBuilder.DropForeignKey( + name: "FK_Tenants_Users_CreatedBy", + table: "Tenants"); + + migrationBuilder.DropForeignKey( + name: "FK_Tenants_Users_UpdatedBy", + table: "Tenants"); + + migrationBuilder.DropForeignKey( + name: "FK_TenantUsers_Tenants_TenantId", + table: "TenantUsers"); + + migrationBuilder.DropForeignKey( + name: "FK_TenantUsers_Users_CreatedBy", + table: "TenantUsers"); + + migrationBuilder.DropForeignKey( + name: "FK_TenantUsers_Users_UserId", + table: "TenantUsers"); + + migrationBuilder.DropIndex( + name: "IX_Tenants_CreatedBy", + table: "Tenants"); + + migrationBuilder.DropIndex( + name: "IX_Tenants_UpdatedBy", + table: "Tenants"); + + migrationBuilder.DropIndex( + name: "IX_TenantOrganisations_CreatedBy", + table: "TenantOrganisations"); + + migrationBuilder.DropIndex( + name: "IX_SiteVisits_CreatedBy", + table: "SiteVisits"); + + migrationBuilder.DropIndex( + name: "IX_Rules_CreatedBy", + table: "Rules"); + + migrationBuilder.DropIndex( + name: "IX_Rules_UpdatedBy", + table: "Rules"); + + migrationBuilder.DropIndex( + name: "IX_Risks_CreatedBy", + table: "Risks"); + + migrationBuilder.DropIndex( + name: "IX_Projects_CreatedBy", + table: "Projects"); + + migrationBuilder.DropIndex( + name: "IX_Projects_UpdatedBy", + table: "Projects"); + + migrationBuilder.DropIndex( + name: "IX_Programmes_CreatedBy", + table: "Programmes"); + + migrationBuilder.DropIndex( + name: "IX_Programmes_OwnedBy", + table: "Programmes"); + + migrationBuilder.DropIndex( + name: "IX_Portfolios_CreatedBy", + table: "Portfolios"); + + migrationBuilder.DropIndex( + name: "IX_Portfolios_OwnedBy", + table: "Portfolios"); + + migrationBuilder.DropIndex( + name: "IX_Outcomes_CreatedBy", + table: "Outcomes"); + + migrationBuilder.DropIndex( + name: "IX_Organisations_CreatedBy", + table: "Organisations"); + + migrationBuilder.DropIndex( + name: "IX_Notifications_Recipient", + table: "Notifications"); + + migrationBuilder.DropIndex( + name: "IX_Milestones_CreatedBy", + table: "Milestones"); + + migrationBuilder.DropIndex( + name: "IX_Milestones_UpdatedBy", + table: "Milestones"); + + migrationBuilder.DropIndex( + name: "IX_Issues_AssignedTo", + table: "Issues"); + + migrationBuilder.DropIndex( + name: "IX_Issues_CreatedBy", + table: "Issues"); + + migrationBuilder.DropIndex( + name: "IX_Invites_Recipient", + table: "Invites"); + + migrationBuilder.DropIndex( + name: "IX_Instruments_CreatedBy", + table: "Instruments"); + + migrationBuilder.DropIndex( + name: "IX_Indicators_CreatedBy", + table: "Indicators"); + + migrationBuilder.DropIndex( + name: "IX_Evidences_CreatedBy", + table: "Evidences"); + + migrationBuilder.DropIndex( + name: "IX_Evidences_UpdatedBy", + table: "Evidences"); + + migrationBuilder.DropIndex( + name: "IX_Disbursements_CreatedBy", + table: "Disbursements"); + + migrationBuilder.DropIndex( + name: "IX_Disbursements_UpdatedBy", + table: "Disbursements"); + + migrationBuilder.DropIndex( + name: "IX_Contracts_CreatedBy", + table: "Contracts"); + + migrationBuilder.DropIndex( + name: "IX_ComplianceItems_CreatedBy", + table: "ComplianceItems"); + + migrationBuilder.DropIndex( + name: "IX_ComplianceItems_VerifiedBy", + table: "ComplianceItems"); + + migrationBuilder.DropIndex( + name: "IX_ChangeRequests_ApprovedBy", + table: "ChangeRequests"); + + migrationBuilder.DropIndex( + name: "IX_ChangeRequests_CreatedBy", + table: "ChangeRequests"); + + migrationBuilder.DropIndex( + name: "IX_Budgets_ApprovedBy", + table: "Budgets"); + + migrationBuilder.DropIndex( + name: "IX_Budgets_CreatedBy", + table: "Budgets"); + + migrationBuilder.DropIndex( + name: "IX_Awards_ApprovedBy", + table: "Awards"); + + migrationBuilder.DropIndex( + name: "IX_Awards_CreatedBy", + table: "Awards"); + + migrationBuilder.DropIndex( + name: "IX_Awards_UpdatedBy", + table: "Awards"); + + migrationBuilder.DropIndex( + name: "IX_Activities_ApprovedBy", + table: "Activities"); + + migrationBuilder.DropIndex( + name: "IX_Activities_CreatedBy", + table: "Activities"); + + migrationBuilder.DropIndex( + name: "IX_Activities_UpdatedBy", + table: "Activities"); + + migrationBuilder.DropColumn( + name: "Changes", + table: "AuditLogs"); + + migrationBuilder.AlterColumn( + name: "Status", + table: "Users", + type: "integer", + nullable: false, + oldClrType: typeof(int), + oldType: "integer", + oldDefaultValueSql: "2"); + + migrationBuilder.AlterColumn( + name: "Email", + table: "Users", + type: "text", + nullable: true, + oldClrType: typeof(string), + oldType: "character varying(256)", + oldMaxLength: 256); + + migrationBuilder.AlterColumn( + name: "Status", + table: "TenantUsers", + type: "integer", + nullable: false, + oldClrType: typeof(int), + oldType: "integer", + oldDefaultValueSql: "1"); + + migrationBuilder.AlterColumn( + name: "CreatedAt", + table: "TenantUsers", + type: "timestamp with time zone", + nullable: false, + oldClrType: typeof(DateTime), + oldType: "timestamp with time zone", + oldDefaultValueSql: "now()"); + + migrationBuilder.AlterColumn( + name: "Status", + table: "Tenants", + type: "integer", + nullable: false, + oldClrType: typeof(int), + oldType: "integer", + oldDefaultValueSql: "1"); + + migrationBuilder.AlterColumn( + name: "Name", + table: "Tenants", + type: "text", + nullable: true, + oldClrType: typeof(string), + oldType: "character varying(256)", + oldMaxLength: 256); + + migrationBuilder.AlterColumn( + name: "CreatedAt", + table: "Tenants", + type: "timestamp with time zone", + nullable: false, + oldClrType: typeof(DateTime), + oldType: "timestamp with time zone", + oldDefaultValueSql: "now()"); + + migrationBuilder.AddColumn( + name: "CreatorId", + table: "Tenants", + type: "uuid", + nullable: true); + + migrationBuilder.AddColumn( + name: "UpdatorId", + table: "Tenants", + type: "uuid", + nullable: true); + + migrationBuilder.AlterColumn( + name: "Status", + table: "TenantOrganisations", + type: "integer", + nullable: false, + oldClrType: typeof(int), + oldType: "integer", + oldDefaultValueSql: "1"); + + migrationBuilder.AlterColumn( + name: "CreatedAt", + table: "TenantOrganisations", + type: "timestamp with time zone", + nullable: false, + oldClrType: typeof(DateTime), + oldType: "timestamp with time zone", + oldDefaultValueSql: "now()"); + + migrationBuilder.AddColumn( + name: "CreatorId", + table: "TenantOrganisations", + type: "uuid", + nullable: true); + + migrationBuilder.AlterColumn( + name: "Status", + table: "SiteVisits", + type: "integer", + nullable: false, + oldClrType: typeof(int), + oldType: "integer", + oldDefaultValueSql: "1"); + + migrationBuilder.AlterColumn( + name: "InspectorName", + table: "SiteVisits", + type: "text", + nullable: true, + oldClrType: typeof(string), + oldType: "text"); + + migrationBuilder.AlterColumn( + name: "Findings", + table: "SiteVisits", + type: "text", + nullable: true, + oldClrType: typeof(string), + oldType: "character varying(4096)", + oldMaxLength: 4096, + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "CreatedAt", + table: "SiteVisits", + type: "timestamp with time zone", + nullable: false, + oldClrType: typeof(DateTime), + oldType: "timestamp with time zone", + oldDefaultValueSql: "now()"); + + migrationBuilder.AddColumn( + name: "CreatorId", + table: "SiteVisits", + type: "uuid", + nullable: true); + + migrationBuilder.AlterColumn( + name: "Version", + table: "Rules", + type: "integer", + nullable: false, + oldClrType: typeof(int), + oldType: "integer", + oldDefaultValue: 1); + + migrationBuilder.AlterColumn( + name: "Status", + table: "Rules", + type: "integer", + nullable: false, + oldClrType: typeof(int), + oldType: "integer", + oldDefaultValueSql: "2"); + + migrationBuilder.AlterColumn( + name: "Name", + table: "Rules", + type: "text", + nullable: true, + oldClrType: typeof(string), + oldType: "character varying(256)", + oldMaxLength: 256); + + migrationBuilder.AlterColumn( + name: "CreatedAt", + table: "Rules", + type: "timestamp with time zone", + nullable: false, + oldClrType: typeof(DateTime), + oldType: "timestamp with time zone", + oldDefaultValueSql: "now()"); + + migrationBuilder.AddColumn( + name: "CreatorId", + table: "Rules", + type: "uuid", + nullable: true); + + migrationBuilder.AddColumn( + name: "UpdatorId", + table: "Rules", + type: "uuid", + nullable: true); + + migrationBuilder.AlterColumn( + name: "Name", + table: "Risks", + type: "text", + nullable: true, + oldClrType: typeof(string), + oldType: "character varying(256)", + oldMaxLength: 256); + + migrationBuilder.AlterColumn( + name: "Likelihood", + table: "Risks", + type: "integer", + nullable: false, + oldClrType: typeof(int), + oldType: "integer", + oldDefaultValueSql: "3"); + + migrationBuilder.AlterColumn( + name: "Impact", + table: "Risks", + type: "integer", + nullable: false, + oldClrType: typeof(int), + oldType: "integer", + oldDefaultValueSql: "1"); + + migrationBuilder.AlterColumn( + name: "Description", + table: "Risks", + type: "text", + nullable: true, + oldClrType: typeof(string), + oldType: "character varying(1024)", + oldMaxLength: 1024); + + migrationBuilder.AlterColumn( + name: "CreatedAt", + table: "Risks", + type: "timestamp with time zone", + nullable: false, + oldClrType: typeof(DateTime), + oldType: "timestamp with time zone", + oldDefaultValueSql: "now()"); + + migrationBuilder.AddColumn( + name: "CreatorId", + table: "Risks", + type: "uuid", + nullable: true); + + migrationBuilder.AlterColumn( + name: "Status", + table: "Projects", + type: "integer", + nullable: false, + oldClrType: typeof(int), + oldType: "integer", + oldDefaultValueSql: "1"); + + migrationBuilder.AlterColumn( + name: "Sector", + table: "Projects", + type: "integer", + nullable: false, + oldClrType: typeof(int), + oldType: "integer", + oldDefaultValueSql: "11"); + + migrationBuilder.AlterColumn( + name: "ProjectType", + table: "Projects", + type: "integer", + nullable: false, + oldClrType: typeof(int), + oldType: "integer", + oldDefaultValueSql: "10"); + + migrationBuilder.AlterColumn( + name: "Name", + table: "Projects", + type: "text", + nullable: true, + oldClrType: typeof(string), + oldType: "character varying(256)", + oldMaxLength: 256); + + migrationBuilder.AlterColumn( + name: "Description", + table: "Projects", + type: "text", + nullable: true, + oldClrType: typeof(string), + oldType: "character varying(1024)", + oldMaxLength: 1024); + + migrationBuilder.AlterColumn( + name: "CreatedAt", + table: "Projects", + type: "timestamp with time zone", + nullable: false, + oldClrType: typeof(DateTime), + oldType: "timestamp with time zone", + oldDefaultValueSql: "now()"); + + migrationBuilder.AddColumn( + name: "CreatorId", + table: "Projects", + type: "uuid", + nullable: true); + + migrationBuilder.AddColumn( + name: "UpdatorId", + table: "Projects", + type: "uuid", + nullable: true); + + migrationBuilder.AlterColumn( + name: "Status", + table: "Programmes", + type: "integer", + nullable: false, + oldClrType: typeof(int), + oldType: "integer", + oldDefaultValueSql: "1"); + + migrationBuilder.AlterColumn( + name: "Name", + table: "Programmes", + type: "text", + nullable: true, + oldClrType: typeof(string), + oldType: "character varying(256)", + oldMaxLength: 256); + + migrationBuilder.AlterColumn( + name: "CreatedAt", + table: "Programmes", + type: "timestamp with time zone", + nullable: false, + oldClrType: typeof(DateTime), + oldType: "timestamp with time zone", + oldDefaultValueSql: "now()"); + + migrationBuilder.AddColumn( + name: "CreatorId", + table: "Programmes", + type: "uuid", + nullable: true); + + migrationBuilder.AddColumn( + name: "OwnerId", + table: "Programmes", + type: "uuid", + nullable: true); + + migrationBuilder.AlterColumn( + name: "Name", + table: "Portfolios", + type: "text", + nullable: true, + oldClrType: typeof(string), + oldType: "character varying(256)", + oldMaxLength: 256); + + migrationBuilder.AlterColumn( + name: "Description", + table: "Portfolios", + type: "text", + nullable: true, + oldClrType: typeof(string), + oldType: "character varying(1024)", + oldMaxLength: 1024, + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "CreatedAt", + table: "Portfolios", + type: "timestamp with time zone", + nullable: false, + oldClrType: typeof(DateTime), + oldType: "timestamp with time zone", + oldDefaultValueSql: "now()"); + + migrationBuilder.AddColumn( + name: "CreatorId", + table: "Portfolios", + type: "uuid", + nullable: true); + + migrationBuilder.AddColumn( + name: "OwnerId", + table: "Portfolios", + type: "uuid", + nullable: true); + + migrationBuilder.AlterColumn( + name: "Name", + table: "Outcomes", + type: "text", + nullable: true, + oldClrType: typeof(string), + oldType: "character varying(256)", + oldMaxLength: 256); + + migrationBuilder.AlterColumn( + name: "Description", + table: "Outcomes", + type: "text", + nullable: true, + oldClrType: typeof(string), + oldType: "character varying(1024)", + oldMaxLength: 1024); + + migrationBuilder.AlterColumn( + name: "CreatedAt", + table: "Outcomes", + type: "timestamp with time zone", + nullable: false, + oldClrType: typeof(DateTime), + oldType: "timestamp with time zone", + oldDefaultValueSql: "now()"); + + migrationBuilder.AddColumn( + name: "CreatorId", + table: "Outcomes", + type: "uuid", + nullable: true); + + migrationBuilder.AlterColumn( + name: "Type", + table: "Organisations", + type: "integer", + nullable: false, + oldClrType: typeof(int), + oldType: "integer", + oldDefaultValueSql: "5"); + + migrationBuilder.AlterColumn( + name: "Status", + table: "Organisations", + type: "integer", + nullable: false, + oldClrType: typeof(int), + oldType: "integer", + oldDefaultValueSql: "1"); + + migrationBuilder.AlterColumn( + name: "RegistrationNo", + table: "Organisations", + type: "text", + nullable: true, + oldClrType: typeof(string), + oldType: "character varying(256)", + oldMaxLength: 256); + + migrationBuilder.AlterColumn( + name: "Name", + table: "Organisations", + type: "text", + nullable: true, + oldClrType: typeof(string), + oldType: "character varying(256)", + oldMaxLength: 256); + + migrationBuilder.AlterColumn( + name: "Email", + table: "Organisations", + type: "text", + nullable: true, + oldClrType: typeof(string), + oldType: "character varying(256)", + oldMaxLength: 256); + + migrationBuilder.AlterColumn( + name: "CreatedAt", + table: "Organisations", + type: "timestamp with time zone", + nullable: false, + oldClrType: typeof(DateTime), + oldType: "timestamp with time zone", + oldDefaultValueSql: "now()"); + + migrationBuilder.AddColumn( + name: "CreatorId", + table: "Organisations", + type: "uuid", + nullable: true); + + migrationBuilder.AlterColumn( + name: "Subject", + table: "Notifications", + type: "text", + nullable: true, + oldClrType: typeof(string), + oldType: "character varying(256)", + oldMaxLength: 256, + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "Status", + table: "Notifications", + type: "integer", + nullable: false, + oldClrType: typeof(int), + oldType: "integer", + oldDefaultValueSql: "1"); + + migrationBuilder.AlterColumn( + name: "Platform", + table: "Notifications", + type: "integer", + nullable: false, + oldClrType: typeof(int), + oldType: "integer", + oldDefaultValueSql: "1"); + + migrationBuilder.AlterColumn( + name: "Message", + table: "Notifications", + type: "text", + nullable: true, + oldClrType: typeof(string), + oldType: "character varying(4096)", + oldMaxLength: 4096); + + migrationBuilder.AlterColumn( + name: "Destination", + table: "Notifications", + type: "text", + nullable: true, + oldClrType: typeof(string), + oldType: "character varying(256)", + oldMaxLength: 256); + + migrationBuilder.AlterColumn( + name: "CreatedAt", + table: "Notifications", + type: "timestamp with time zone", + nullable: false, + oldClrType: typeof(DateTime), + oldType: "timestamp with time zone", + oldDefaultValueSql: "now()"); + + migrationBuilder.AddColumn( + name: "RecipientUserId", + table: "Notifications", + type: "uuid", + nullable: true); + + migrationBuilder.AlterColumn( + name: "Status", + table: "Milestones", + type: "integer", + nullable: false, + oldClrType: typeof(int), + oldType: "integer", + oldDefaultValueSql: "1"); + + migrationBuilder.AlterColumn( + name: "Priority", + table: "Milestones", + type: "integer", + nullable: false, + oldClrType: typeof(int), + oldType: "integer", + oldDefaultValueSql: "1"); + + migrationBuilder.AlterColumn( + name: "Name", + table: "Milestones", + type: "text", + nullable: true, + oldClrType: typeof(string), + oldType: "character varying(256)", + oldMaxLength: 256); + + migrationBuilder.AlterColumn( + name: "CreatedAt", + table: "Milestones", + type: "timestamp with time zone", + nullable: false, + oldClrType: typeof(DateTime), + oldType: "timestamp with time zone", + oldDefaultValueSql: "now()"); + + migrationBuilder.AddColumn( + name: "CreatorId", + table: "Milestones", + type: "uuid", + nullable: true); + + migrationBuilder.AddColumn( + name: "UpdatorId", + table: "Milestones", + type: "uuid", + nullable: true); + + migrationBuilder.AlterColumn( + name: "Title", + table: "Issues", + type: "text", + nullable: true, + oldClrType: typeof(string), + oldType: "character varying(256)", + oldMaxLength: 256); + + migrationBuilder.AlterColumn( + name: "Status", + table: "Issues", + type: "integer", + nullable: false, + oldClrType: typeof(int), + oldType: "integer", + oldDefaultValueSql: "1"); + + migrationBuilder.AlterColumn( + name: "Resolution", + table: "Issues", + type: "text", + nullable: true, + oldClrType: typeof(string), + oldType: "text"); + + migrationBuilder.AlterColumn( + name: "Priority", + table: "Issues", + type: "integer", + nullable: false, + oldClrType: typeof(int), + oldType: "integer", + oldDefaultValueSql: "1"); + + migrationBuilder.AlterColumn( + name: "Description", + table: "Issues", + type: "text", + nullable: true, + oldClrType: typeof(string), + oldType: "character varying(1024)", + oldMaxLength: 1024); + + migrationBuilder.AlterColumn( + name: "CreatedAt", + table: "Issues", + type: "timestamp with time zone", + nullable: false, + oldClrType: typeof(DateTime), + oldType: "timestamp with time zone", + oldDefaultValueSql: "now()"); + + migrationBuilder.AddColumn( + name: "AssigneeId", + table: "Issues", + type: "uuid", + nullable: true); + + migrationBuilder.AddColumn( + name: "CreatorId", + table: "Issues", + type: "uuid", + nullable: true); + + migrationBuilder.AlterColumn( + name: "CreatedAt", + table: "Invites", + type: "timestamp with time zone", + nullable: false, + oldClrType: typeof(DateTime), + oldType: "timestamp with time zone", + oldDefaultValueSql: "now()"); + + migrationBuilder.AddColumn( + name: "RecipientUserId", + table: "Invites", + type: "uuid", + nullable: true); + + migrationBuilder.AlterColumn( + name: "Status", + table: "Instruments", + type: "integer", + nullable: false, + oldClrType: typeof(int), + oldType: "integer", + oldDefaultValueSql: "2"); + + migrationBuilder.AlterColumn( + name: "Name", + table: "Instruments", + type: "text", + nullable: true, + oldClrType: typeof(string), + oldType: "character varying(256)", + oldMaxLength: 256); + + migrationBuilder.AlterColumn( + name: "Description", + table: "Instruments", + type: "text", + nullable: true, + oldClrType: typeof(string), + oldType: "character varying(1024)", + oldMaxLength: 1024, + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "CreatedAt", + table: "Instruments", + type: "timestamp with time zone", + nullable: false, + oldClrType: typeof(DateTime), + oldType: "timestamp with time zone", + oldDefaultValueSql: "now()"); + + migrationBuilder.AlterColumn( + name: "Code", + table: "Instruments", + type: "text", + nullable: true, + oldClrType: typeof(string), + oldType: "character varying(100)", + oldMaxLength: 100); + + migrationBuilder.AddColumn( + name: "CreatorId", + table: "Instruments", + type: "uuid", + nullable: true); + + migrationBuilder.AlterColumn( + name: "UnitOfMeasure", + table: "Indicators", + type: "integer", + nullable: true, + oldClrType: typeof(int), + oldType: "integer", + oldDefaultValueSql: "2"); + + migrationBuilder.AlterColumn( + name: "TargetAmount", + table: "Indicators", + type: "numeric", + nullable: false, + oldClrType: typeof(decimal), + oldType: "numeric(18,2)", + oldPrecision: 18, + oldScale: 2); + + migrationBuilder.AlterColumn( + name: "Name", + table: "Indicators", + type: "text", + nullable: true, + oldClrType: typeof(string), + oldType: "character varying(256)", + oldMaxLength: 256); + + migrationBuilder.AlterColumn( + name: "CreatedAt", + table: "Indicators", + type: "timestamp with time zone", + nullable: false, + oldClrType: typeof(DateTime), + oldType: "timestamp with time zone", + oldDefaultValueSql: "now()"); + + migrationBuilder.AlterColumn( + name: "BaselineAmount", + table: "Indicators", + type: "numeric", + nullable: false, + oldClrType: typeof(decimal), + oldType: "numeric(18,2)", + oldPrecision: 18, + oldScale: 2); + + migrationBuilder.AlterColumn( + name: "ActualAmount", + table: "Indicators", + type: "numeric", + nullable: false, + oldClrType: typeof(decimal), + oldType: "numeric(18,2)", + oldPrecision: 18, + oldScale: 2); + + migrationBuilder.AddColumn( + name: "CreatorId", + table: "Indicators", + type: "uuid", + nullable: true); + + migrationBuilder.AlterColumn( + name: "Version", + table: "Evidences", + type: "integer", + nullable: false, + oldClrType: typeof(int), + oldType: "integer", + oldDefaultValue: 1); + + migrationBuilder.AlterColumn( + name: "UpdatedBy", + table: "Evidences", + type: "uuid", + nullable: true, + oldClrType: typeof(Guid), + oldType: "uuid"); + + migrationBuilder.AlterColumn( + name: "Type", + table: "Evidences", + type: "integer", + nullable: false, + oldClrType: typeof(int), + oldType: "integer", + oldDefaultValueSql: "9"); + + migrationBuilder.AlterColumn( + name: "Status", + table: "Evidences", + type: "integer", + nullable: false, + oldClrType: typeof(int), + oldType: "integer", + oldDefaultValueSql: "1"); + + migrationBuilder.AlterColumn( + name: "DocumentUrl", + table: "Evidences", + type: "text", + nullable: true, + oldClrType: typeof(string), + oldType: "text"); + + migrationBuilder.AlterColumn( + name: "CreatedAt", + table: "Evidences", + type: "timestamp with time zone", + nullable: false, + oldClrType: typeof(DateTime), + oldType: "timestamp with time zone", + oldDefaultValueSql: "now()"); + + migrationBuilder.AddColumn( + name: "CreatorId", + table: "Evidences", + type: "uuid", + nullable: true); + + migrationBuilder.AddColumn( + name: "UpdatorId", + table: "Evidences", + type: "uuid", + nullable: true); + + migrationBuilder.AlterColumn( + name: "Status", + table: "Disbursements", + type: "integer", + nullable: false, + oldClrType: typeof(int), + oldType: "integer", + oldDefaultValueSql: "1"); + + migrationBuilder.AlterColumn( + name: "CreatedAt", + table: "Disbursements", + type: "timestamp with time zone", + nullable: false, + oldClrType: typeof(DateTime), + oldType: "timestamp with time zone", + oldDefaultValueSql: "now()"); + + migrationBuilder.AlterColumn( + name: "Amount", + table: "Disbursements", + type: "numeric", + nullable: false, + oldClrType: typeof(decimal), + oldType: "numeric(18,2)", + oldPrecision: 18, + oldScale: 2); + + migrationBuilder.AddColumn( + name: "CreatorId", + table: "Disbursements", + type: "uuid", + nullable: true); + + migrationBuilder.AddColumn( + name: "UpdatorId", + table: "Disbursements", + type: "uuid", + nullable: true); + + migrationBuilder.AlterColumn( + name: "TotalValue", + table: "Contracts", + type: "numeric", + nullable: false, + oldClrType: typeof(decimal), + oldType: "numeric(18,2)", + oldPrecision: 18, + oldScale: 2); + + migrationBuilder.AlterColumn( + name: "Status", + table: "Contracts", + type: "integer", + nullable: false, + oldClrType: typeof(int), + oldType: "integer", + oldDefaultValueSql: "1"); + + migrationBuilder.AlterColumn( + name: "CreatedAt", + table: "Contracts", + type: "timestamp with time zone", + nullable: false, + oldClrType: typeof(DateTime), + oldType: "timestamp with time zone", + oldDefaultValueSql: "now()"); + + migrationBuilder.AddColumn( + name: "CreatorId", + table: "Contracts", + type: "uuid", + nullable: true); + + migrationBuilder.AlterColumn( + name: "Title", + table: "ComplianceItems", + type: "text", + nullable: true, + oldClrType: typeof(string), + oldType: "character varying(256)", + oldMaxLength: 256); + + migrationBuilder.AlterColumn( + name: "Status", + table: "ComplianceItems", + type: "integer", + nullable: false, + oldClrType: typeof(int), + oldType: "integer", + oldDefaultValueSql: "1"); + + migrationBuilder.AlterColumn( + name: "Requirements", + table: "ComplianceItems", + type: "text", + nullable: true, + oldClrType: typeof(string), + oldType: "character varying(2048)", + oldMaxLength: 2048); + + migrationBuilder.AlterColumn( + name: "CreatedAt", + table: "ComplianceItems", + type: "timestamp with time zone", + nullable: false, + oldClrType: typeof(DateTime), + oldType: "timestamp with time zone", + oldDefaultValueSql: "now()"); + + migrationBuilder.AddColumn( + name: "CreatorId", + table: "ComplianceItems", + type: "uuid", + nullable: true); + + migrationBuilder.AddColumn( + name: "VerifierId", + table: "ComplianceItems", + type: "uuid", + nullable: true); + + migrationBuilder.AlterColumn( + name: "Title", + table: "ChangeRequests", + type: "text", + nullable: true, + oldClrType: typeof(string), + oldType: "character varying(256)", + oldMaxLength: 256); + + migrationBuilder.AlterColumn( + name: "Status", + table: "ChangeRequests", + type: "integer", + nullable: false, + oldClrType: typeof(int), + oldType: "integer", + oldDefaultValueSql: "1"); + + migrationBuilder.AlterColumn( + name: "RevisedBudget", + table: "ChangeRequests", + type: "numeric", + nullable: true, + oldClrType: typeof(decimal), + oldType: "numeric(18,2)", + oldPrecision: 18, + oldScale: 2, + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "Justification", + table: "ChangeRequests", + type: "text", + nullable: true, + oldClrType: typeof(string), + oldType: "character varying(1024)", + oldMaxLength: 1024); + + migrationBuilder.AlterColumn( + name: "CreatedAt", + table: "ChangeRequests", + type: "timestamp with time zone", + nullable: false, + oldClrType: typeof(DateTime), + oldType: "timestamp with time zone", + oldDefaultValueSql: "now()"); + + migrationBuilder.AddColumn( + name: "ApproverId", + table: "ChangeRequests", + type: "uuid", + nullable: true); + + migrationBuilder.AddColumn( + name: "CreatorId", + table: "ChangeRequests", + type: "uuid", + nullable: true); + + migrationBuilder.AlterColumn( + name: "Name", + table: "Budgets", + type: "text", + nullable: true, + oldClrType: typeof(string), + oldType: "character varying(256)", + oldMaxLength: 256); + + migrationBuilder.AlterColumn( + name: "CreatedAt", + table: "Budgets", + type: "timestamp with time zone", + nullable: false, + oldClrType: typeof(DateTime), + oldType: "timestamp with time zone", + oldDefaultValueSql: "now()"); + + migrationBuilder.AlterColumn( + name: "Amount", + table: "Budgets", + type: "numeric", + nullable: false, + oldClrType: typeof(decimal), + oldType: "numeric(18,2)", + oldPrecision: 18, + oldScale: 2); + + migrationBuilder.AddColumn( + name: "ApproverId", + table: "Budgets", + type: "uuid", + nullable: true); + + migrationBuilder.AddColumn( + name: "CreatorId", + table: "Budgets", + type: "uuid", + nullable: true); + + migrationBuilder.AlterColumn( + name: "Name", + table: "Beneficiaries", + type: "text", + nullable: true, + oldClrType: typeof(string), + oldType: "character varying(256)", + oldMaxLength: 256); + + migrationBuilder.AlterColumn( + name: "Location", + table: "Beneficiaries", + type: "text", + nullable: true, + oldClrType: typeof(string), + oldType: "text"); + + migrationBuilder.AlterColumn( + name: "CreatedAt", + table: "Beneficiaries", + type: "timestamp with time zone", + nullable: false, + oldClrType: typeof(DateTime), + oldType: "timestamp with time zone", + oldDefaultValueSql: "now()"); + + migrationBuilder.AlterColumn( + name: "Category", + table: "Beneficiaries", + type: "text", + nullable: true, + oldClrType: typeof(string), + oldType: "character varying(100)", + oldMaxLength: 100); + + migrationBuilder.AlterColumn( + name: "Status", + table: "Awards", + type: "integer", + nullable: false, + oldClrType: typeof(int), + oldType: "integer", + oldDefaultValueSql: "1"); + + migrationBuilder.AlterColumn( + name: "CreatedAt", + table: "Awards", + type: "timestamp with time zone", + nullable: false, + oldClrType: typeof(DateTime), + oldType: "timestamp with time zone", + oldDefaultValueSql: "now()"); + + migrationBuilder.AlterColumn( + name: "Amount", + table: "Awards", + type: "numeric", + nullable: false, + oldClrType: typeof(decimal), + oldType: "numeric(18,2)", + oldPrecision: 18, + oldScale: 2); + + migrationBuilder.AddColumn( + name: "ApproverId", + table: "Awards", + type: "uuid", + nullable: true); + + migrationBuilder.AddColumn( + name: "CreatorId", + table: "Awards", + type: "uuid", + nullable: true); + + migrationBuilder.AddColumn( + name: "UpdatorId", + table: "Awards", + type: "uuid", + nullable: true); + + migrationBuilder.AlterColumn( + name: "Timestamp", + table: "AuditLogs", + type: "timestamp with time zone", + nullable: false, + oldClrType: typeof(DateTime), + oldType: "timestamp with time zone", + oldDefaultValueSql: "now()"); + + migrationBuilder.AlterColumn( + name: "EntityName", + table: "AuditLogs", + type: "text", + nullable: true, + oldClrType: typeof(string), + oldType: "character varying(256)", + oldMaxLength: 256); + + migrationBuilder.AlterColumn( + name: "EntityId", + table: "AuditLogs", + type: "text", + nullable: true, + oldClrType: typeof(string), + oldType: "text"); + + migrationBuilder.AlterColumn( + name: "Action", + table: "AuditLogs", + type: "text", + nullable: true, + oldClrType: typeof(string), + oldType: "character varying(100)", + oldMaxLength: 100); + + migrationBuilder.AlterColumn( + name: "Title", + table: "Activities", + type: "text", + nullable: true, + oldClrType: typeof(string), + oldType: "character varying(256)", + oldMaxLength: 256); + + migrationBuilder.AlterColumn( + name: "Status", + table: "Activities", + type: "integer", + nullable: false, + oldClrType: typeof(int), + oldType: "integer", + oldDefaultValueSql: "1"); + + migrationBuilder.AlterColumn( + name: "ProjectId", + table: "Activities", + type: "bigint", + nullable: true, + oldClrType: typeof(long), + oldType: "bigint"); + + migrationBuilder.AlterColumn( + name: "MilestoneId", + table: "Activities", + type: "bigint", + nullable: true, + oldClrType: typeof(long), + oldType: "bigint"); + + migrationBuilder.AlterColumn( + name: "Description", + table: "Activities", + type: "text", + nullable: true, + oldClrType: typeof(string), + oldType: "character varying(1024)", + oldMaxLength: 1024); + + migrationBuilder.AlterColumn( + name: "CreatedAt", + table: "Activities", + type: "timestamp with time zone", + nullable: false, + oldClrType: typeof(DateTime), + oldType: "timestamp with time zone", + oldDefaultValueSql: "now()"); + + migrationBuilder.AlterColumn( + name: "Category", + table: "Activities", + type: "text", + nullable: true, + oldClrType: typeof(string), + oldType: "character varying(256)", + oldMaxLength: 256); + + migrationBuilder.AlterColumn( + name: "Amount", + table: "Activities", + type: "numeric", + nullable: false, + oldClrType: typeof(decimal), + oldType: "numeric(18,2)", + oldPrecision: 18, + oldScale: 2); + + migrationBuilder.AddColumn( + name: "ApproverId", + table: "Activities", + type: "uuid", + nullable: true); + + migrationBuilder.AddColumn( + name: "CreatorId", + table: "Activities", + type: "uuid", + nullable: true); + + migrationBuilder.AddColumn( + name: "UpdatorId", + table: "Activities", + type: "uuid", + nullable: true); + + migrationBuilder.CreateIndex( + name: "IX_Tenants_CreatorId", + table: "Tenants", + column: "CreatorId"); + + migrationBuilder.CreateIndex( + name: "IX_Tenants_UpdatorId", + table: "Tenants", + column: "UpdatorId"); + + migrationBuilder.CreateIndex( + name: "IX_TenantOrganisations_CreatorId", + table: "TenantOrganisations", + column: "CreatorId"); + + migrationBuilder.CreateIndex( + name: "IX_SiteVisits_CreatorId", + table: "SiteVisits", + column: "CreatorId"); + + migrationBuilder.CreateIndex( + name: "IX_Rules_CreatorId", + table: "Rules", + column: "CreatorId"); + + migrationBuilder.CreateIndex( + name: "IX_Rules_UpdatorId", + table: "Rules", + column: "UpdatorId"); + + migrationBuilder.CreateIndex( + name: "IX_Risks_CreatorId", + table: "Risks", + column: "CreatorId"); + + migrationBuilder.CreateIndex( + name: "IX_Projects_CreatorId", + table: "Projects", + column: "CreatorId"); + + migrationBuilder.CreateIndex( + name: "IX_Projects_UpdatorId", + table: "Projects", + column: "UpdatorId"); + + migrationBuilder.CreateIndex( + name: "IX_Programmes_CreatorId", + table: "Programmes", + column: "CreatorId"); + + migrationBuilder.CreateIndex( + name: "IX_Programmes_OwnerId", + table: "Programmes", + column: "OwnerId"); + + migrationBuilder.CreateIndex( + name: "IX_Portfolios_CreatorId", + table: "Portfolios", + column: "CreatorId"); + + migrationBuilder.CreateIndex( + name: "IX_Portfolios_OwnerId", + table: "Portfolios", + column: "OwnerId"); + + migrationBuilder.CreateIndex( + name: "IX_Outcomes_CreatorId", + table: "Outcomes", + column: "CreatorId"); + + migrationBuilder.CreateIndex( + name: "IX_Organisations_CreatorId", + table: "Organisations", + column: "CreatorId"); + + migrationBuilder.CreateIndex( + name: "IX_Notifications_RecipientUserId", + table: "Notifications", + column: "RecipientUserId"); + + migrationBuilder.CreateIndex( + name: "IX_Milestones_CreatorId", + table: "Milestones", + column: "CreatorId"); + + migrationBuilder.CreateIndex( + name: "IX_Milestones_UpdatorId", + table: "Milestones", + column: "UpdatorId"); + + migrationBuilder.CreateIndex( + name: "IX_Issues_AssigneeId", + table: "Issues", + column: "AssigneeId"); + + migrationBuilder.CreateIndex( + name: "IX_Issues_CreatorId", + table: "Issues", + column: "CreatorId"); + + migrationBuilder.CreateIndex( + name: "IX_Invites_RecipientUserId", + table: "Invites", + column: "RecipientUserId"); + + migrationBuilder.CreateIndex( + name: "IX_Instruments_CreatorId", + table: "Instruments", + column: "CreatorId"); + + migrationBuilder.CreateIndex( + name: "IX_Indicators_CreatorId", + table: "Indicators", + column: "CreatorId"); + + migrationBuilder.CreateIndex( + name: "IX_Evidences_CreatorId", + table: "Evidences", + column: "CreatorId"); + + migrationBuilder.CreateIndex( + name: "IX_Evidences_UpdatorId", + table: "Evidences", + column: "UpdatorId"); + + migrationBuilder.CreateIndex( + name: "IX_Disbursements_CreatorId", + table: "Disbursements", + column: "CreatorId"); + + migrationBuilder.CreateIndex( + name: "IX_Disbursements_UpdatorId", + table: "Disbursements", + column: "UpdatorId"); + + migrationBuilder.CreateIndex( + name: "IX_Contracts_CreatorId", + table: "Contracts", + column: "CreatorId"); + + migrationBuilder.CreateIndex( + name: "IX_ComplianceItems_CreatorId", + table: "ComplianceItems", + column: "CreatorId"); + + migrationBuilder.CreateIndex( + name: "IX_ComplianceItems_VerifierId", + table: "ComplianceItems", + column: "VerifierId"); + + migrationBuilder.CreateIndex( + name: "IX_ChangeRequests_ApproverId", + table: "ChangeRequests", + column: "ApproverId"); + + migrationBuilder.CreateIndex( + name: "IX_ChangeRequests_CreatorId", + table: "ChangeRequests", + column: "CreatorId"); + + migrationBuilder.CreateIndex( + name: "IX_Budgets_ApproverId", + table: "Budgets", + column: "ApproverId"); + + migrationBuilder.CreateIndex( + name: "IX_Budgets_CreatorId", + table: "Budgets", + column: "CreatorId"); + + migrationBuilder.CreateIndex( + name: "IX_Awards_ApproverId", + table: "Awards", + column: "ApproverId"); + + migrationBuilder.CreateIndex( + name: "IX_Awards_CreatorId", + table: "Awards", + column: "CreatorId"); + + migrationBuilder.CreateIndex( + name: "IX_Awards_UpdatorId", + table: "Awards", + column: "UpdatorId"); + + migrationBuilder.CreateIndex( + name: "IX_Activities_ApproverId", + table: "Activities", + column: "ApproverId"); + + migrationBuilder.CreateIndex( + name: "IX_Activities_CreatorId", + table: "Activities", + column: "CreatorId"); + + migrationBuilder.CreateIndex( + name: "IX_Activities_UpdatorId", + table: "Activities", + column: "UpdatorId"); + + migrationBuilder.AddForeignKey( + name: "FK_Activities_Milestones_MilestoneId", + table: "Activities", + column: "MilestoneId", + principalTable: "Milestones", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Activities_Projects_ProjectId", + table: "Activities", + column: "ProjectId", + principalTable: "Projects", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Activities_Tenants_TenantId", + table: "Activities", + column: "TenantId", + principalTable: "Tenants", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_Activities_Users_ApproverId", + table: "Activities", + column: "ApproverId", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Activities_Users_CreatorId", + table: "Activities", + column: "CreatorId", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Activities_Users_UpdatorId", + table: "Activities", + column: "UpdatorId", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Awards_Organisations_OrganisationId", + table: "Awards", + column: "OrganisationId", + principalTable: "Organisations", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_Awards_Programmes_ProgrammeId", + table: "Awards", + column: "ProgrammeId", + principalTable: "Programmes", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_Awards_Projects_ProjectId", + table: "Awards", + column: "ProjectId", + principalTable: "Projects", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Awards_Tenants_TenantId", + table: "Awards", + column: "TenantId", + principalTable: "Tenants", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_Awards_Users_ApproverId", + table: "Awards", + column: "ApproverId", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Awards_Users_CreatorId", + table: "Awards", + column: "CreatorId", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Awards_Users_UpdatorId", + table: "Awards", + column: "UpdatorId", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Beneficiaries_Projects_ProjectId", + table: "Beneficiaries", + column: "ProjectId", + principalTable: "Projects", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_Beneficiaries_Tenants_TenantId", + table: "Beneficiaries", + column: "TenantId", + principalTable: "Tenants", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_Beneficiaries_Users_CreatedBy", + table: "Beneficiaries", + column: "CreatedBy", + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_Beneficiaries_Users_UserId", + table: "Beneficiaries", + column: "UserId", + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_Budgets_Projects_ProjectId", + table: "Budgets", + column: "ProjectId", + principalTable: "Projects", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_Budgets_Tenants_TenantId", + table: "Budgets", + column: "TenantId", + principalTable: "Tenants", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_Budgets_Users_ApproverId", + table: "Budgets", + column: "ApproverId", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Budgets_Users_CreatorId", + table: "Budgets", + column: "CreatorId", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_ChangeRequests_Projects_ProjectId", + table: "ChangeRequests", + column: "ProjectId", + principalTable: "Projects", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_ChangeRequests_Tenants_TenantId", + table: "ChangeRequests", + column: "TenantId", + principalTable: "Tenants", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_ChangeRequests_Users_ApproverId", + table: "ChangeRequests", + column: "ApproverId", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_ChangeRequests_Users_CreatorId", + table: "ChangeRequests", + column: "CreatorId", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_ComplianceItems_Projects_ProjectId", + table: "ComplianceItems", + column: "ProjectId", + principalTable: "Projects", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_ComplianceItems_Users_CreatorId", + table: "ComplianceItems", + column: "CreatorId", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_ComplianceItems_Users_VerifierId", + table: "ComplianceItems", + column: "VerifierId", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Contracts_Awards_AwardId", + table: "Contracts", + column: "AwardId", + principalTable: "Awards", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_Contracts_Tenants_TenantId", + table: "Contracts", + column: "TenantId", + principalTable: "Tenants", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_Contracts_Users_CreatorId", + table: "Contracts", + column: "CreatorId", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Disbursements_Milestones_MilestoneId", + table: "Disbursements", + column: "MilestoneId", + principalTable: "Milestones", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Disbursements_Projects_ProjectId", + table: "Disbursements", + column: "ProjectId", + principalTable: "Projects", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_Disbursements_Tenants_TenantId", + table: "Disbursements", + column: "TenantId", + principalTable: "Tenants", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_Disbursements_Users_CreatorId", + table: "Disbursements", + column: "CreatorId", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Disbursements_Users_UpdatorId", + table: "Disbursements", + column: "UpdatorId", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Evidences_Activities_ActivityId", + table: "Evidences", + column: "ActivityId", + principalTable: "Activities", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_Evidences_Indicators_IndicatorId", + table: "Evidences", + column: "IndicatorId", + principalTable: "Indicators", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_Evidences_Milestones_MilestoneId", + table: "Evidences", + column: "MilestoneId", + principalTable: "Milestones", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_Evidences_Projects_ProjectId", + table: "Evidences", + column: "ProjectId", + principalTable: "Projects", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_Evidences_Tenants_TenantId", + table: "Evidences", + column: "TenantId", + principalTable: "Tenants", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_Evidences_Users_CreatorId", + table: "Evidences", + column: "CreatorId", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Evidences_Users_UpdatorId", + table: "Evidences", + column: "UpdatorId", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Indicators_Projects_ProjectId", + table: "Indicators", + column: "ProjectId", + principalTable: "Projects", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_Indicators_Tenants_TenantId", + table: "Indicators", + column: "TenantId", + principalTable: "Tenants", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_Indicators_Users_CreatorId", + table: "Indicators", + column: "CreatorId", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Instruments_Programmes_ProgrammeId", + table: "Instruments", + column: "ProgrammeId", + principalTable: "Programmes", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_Instruments_Tenants_TenantId", + table: "Instruments", + column: "TenantId", + principalTable: "Tenants", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_Instruments_Users_CreatorId", + table: "Instruments", + column: "CreatorId", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Invites_Awards_AwardId", + table: "Invites", + column: "AwardId", + principalTable: "Awards", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_Invites_Contracts_ContractId", + table: "Invites", + column: "ContractId", + principalTable: "Contracts", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_Invites_Organisations_InvitedOrganisationId", + table: "Invites", + column: "InvitedOrganisationId", + principalTable: "Organisations", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_Invites_Organisations_OrganisationId", + table: "Invites", + column: "OrganisationId", + principalTable: "Organisations", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_Invites_Tenants_TenantId", + table: "Invites", + column: "TenantId", + principalTable: "Tenants", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_Invites_Users_RecipientUserId", + table: "Invites", + column: "RecipientUserId", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Issues_Projects_ProjectId", + table: "Issues", + column: "ProjectId", + principalTable: "Projects", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_Issues_Tenants_TenantId", + table: "Issues", + column: "TenantId", + principalTable: "Tenants", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_Issues_Users_AssigneeId", + table: "Issues", + column: "AssigneeId", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Issues_Users_CreatorId", + table: "Issues", + column: "CreatorId", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Milestones_Projects_ProjectId", + table: "Milestones", + column: "ProjectId", + principalTable: "Projects", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_Milestones_Tenants_TenantId", + table: "Milestones", + column: "TenantId", + principalTable: "Tenants", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_Milestones_Users_CreatorId", + table: "Milestones", + column: "CreatorId", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Milestones_Users_UpdatorId", + table: "Milestones", + column: "UpdatorId", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Notifications_Organisations_OrganisationId", + table: "Notifications", + column: "OrganisationId", + principalTable: "Organisations", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_Notifications_Tenants_TenantId", + table: "Notifications", + column: "TenantId", + principalTable: "Tenants", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_Notifications_Users_RecipientUserId", + table: "Notifications", + column: "RecipientUserId", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Organisations_Users_CreatorId", + table: "Organisations", + column: "CreatorId", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Outcomes_Beneficiaries_BeneficiaryId", + table: "Outcomes", + column: "BeneficiaryId", + principalTable: "Beneficiaries", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_Outcomes_Tenants_TenantId", + table: "Outcomes", + column: "TenantId", + principalTable: "Tenants", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_Outcomes_Users_CreatorId", + table: "Outcomes", + column: "CreatorId", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Portfolios_Organisations_OrganisationId", + table: "Portfolios", + column: "OrganisationId", + principalTable: "Organisations", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_Portfolios_Tenants_TenantId", + table: "Portfolios", + column: "TenantId", + principalTable: "Tenants", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_Portfolios_Users_CreatorId", + table: "Portfolios", + column: "CreatorId", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Portfolios_Users_OwnerId", + table: "Portfolios", + column: "OwnerId", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Programmes_Portfolios_PortfolioId", + table: "Programmes", + column: "PortfolioId", + principalTable: "Portfolios", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_Programmes_Tenants_TenantId", + table: "Programmes", + column: "TenantId", + principalTable: "Tenants", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_Programmes_Users_CreatorId", + table: "Programmes", + column: "CreatorId", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Programmes_Users_OwnerId", + table: "Programmes", + column: "OwnerId", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Projects_Programmes_ProgrammeId", + table: "Projects", + column: "ProgrammeId", + principalTable: "Programmes", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_Projects_Tenants_TenantId", + table: "Projects", + column: "TenantId", + principalTable: "Tenants", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_Projects_Users_CreatorId", + table: "Projects", + column: "CreatorId", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Projects_Users_UpdatorId", + table: "Projects", + column: "UpdatorId", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Risks_Projects_ProjectId", + table: "Risks", + column: "ProjectId", + principalTable: "Projects", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_Risks_Tenants_TenantId", + table: "Risks", + column: "TenantId", + principalTable: "Tenants", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_Risks_Users_CreatorId", + table: "Risks", + column: "CreatorId", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Rules_Programmes_ProgrammeId", + table: "Rules", + column: "ProgrammeId", + principalTable: "Programmes", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_Rules_Tenants_TenantId", + table: "Rules", + column: "TenantId", + principalTable: "Tenants", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_Rules_Users_CreatorId", + table: "Rules", + column: "CreatorId", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Rules_Users_UpdatorId", + table: "Rules", + column: "UpdatorId", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_SiteVisits_Projects_ProjectId", + table: "SiteVisits", + column: "ProjectId", + principalTable: "Projects", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_SiteVisits_Tenants_TenantId", + table: "SiteVisits", + column: "TenantId", + principalTable: "Tenants", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_SiteVisits_Users_CreatorId", + table: "SiteVisits", + column: "CreatorId", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_TenantOrganisations_Organisations_OrganisationId", + table: "TenantOrganisations", + column: "OrganisationId", + principalTable: "Organisations", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_TenantOrganisations_Tenants_TenantId", + table: "TenantOrganisations", + column: "TenantId", + principalTable: "Tenants", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_TenantOrganisations_Users_CreatorId", + table: "TenantOrganisations", + column: "CreatorId", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Tenants_Users_CreatorId", + table: "Tenants", + column: "CreatorId", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_Tenants_Users_UpdatorId", + table: "Tenants", + column: "UpdatorId", + principalTable: "Users", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_TenantUsers_Tenants_TenantId", + table: "TenantUsers", + column: "TenantId", + principalTable: "Tenants", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_TenantUsers_Users_CreatedBy", + table: "TenantUsers", + column: "CreatedBy", + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + + migrationBuilder.AddForeignKey( + name: "FK_TenantUsers_Users_UserId", + table: "TenantUsers", + column: "UserId", + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + } + } +} diff --git a/PostFundManagement.Infrastructure/Database/Migrations/ApplicationDbContextModelSnapshot.cs b/PostFundManagement.Infrastructure/Database/Migrations/ApplicationDbContextModelSnapshot.cs index 613c408..b758b41 100644 --- a/PostFundManagement.Infrastructure/Database/Migrations/ApplicationDbContextModelSnapshot.cs +++ b/PostFundManagement.Infrastructure/Database/Migrations/ApplicationDbContextModelSnapshot.cs @@ -31,46 +31,51 @@ namespace PostFundManagement.Infrastructure.Database.Migrations NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); b.Property("Amount") - .HasColumnType("numeric"); + .HasPrecision(18, 2) + .HasColumnType("numeric(18,2)"); b.Property("ApprovedBy") .HasColumnType("uuid"); - b.Property("ApproverId") - .HasColumnType("uuid"); - b.Property("Category") - .HasColumnType("text"); + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasDefaultValueSql("now()"); b.Property("CreatedBy") .HasColumnType("uuid"); - b.Property("CreatorId") - .HasColumnType("uuid"); - b.Property("Description") - .HasColumnType("text"); + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("character varying(1024)"); - b.Property("MilestoneId") + b.Property("MilestoneId") .HasColumnType("bigint"); b.Property("PerformedAt") .HasColumnType("timestamp with time zone"); - b.Property("ProjectId") + b.Property("ProjectId") .HasColumnType("bigint"); b.Property("Status") - .HasColumnType("integer"); + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValueSql("1"); b.Property("TenantId") .HasColumnType("bigint"); b.Property("Title") - .HasColumnType("text"); + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); b.Property("UpdatedAt") .HasColumnType("timestamp with time zone"); @@ -78,14 +83,11 @@ namespace PostFundManagement.Infrastructure.Database.Migrations b.Property("UpdatedBy") .HasColumnType("uuid"); - b.Property("UpdatorId") - .HasColumnType("uuid"); - b.HasKey("Id"); - b.HasIndex("ApproverId"); + b.HasIndex("ApprovedBy"); - b.HasIndex("CreatorId"); + b.HasIndex("CreatedBy"); b.HasIndex("MilestoneId"); @@ -93,7 +95,7 @@ namespace PostFundManagement.Infrastructure.Database.Migrations b.HasIndex("TenantId"); - b.HasIndex("UpdatorId"); + b.HasIndex("UpdatedBy"); b.ToTable("Activities", (string)null); }); @@ -107,13 +109,21 @@ namespace PostFundManagement.Infrastructure.Database.Migrations NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); b.Property("Action") - .HasColumnType("text"); + .IsRequired() + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.PrimitiveCollection("Changes") + .HasColumnType("text[]"); b.Property("EntityId") + .IsRequired() .HasColumnType("text"); b.Property("EntityName") - .HasColumnType("text"); + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); b.Property("PerformedBy") .HasColumnType("uuid"); @@ -122,7 +132,9 @@ namespace PostFundManagement.Infrastructure.Database.Migrations .HasColumnType("bigint"); b.Property("Timestamp") - .HasColumnType("timestamp with time zone"); + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasDefaultValueSql("now()"); b.HasKey("Id"); @@ -138,23 +150,20 @@ namespace PostFundManagement.Infrastructure.Database.Migrations NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); b.Property("Amount") - .HasColumnType("numeric"); + .HasPrecision(18, 2) + .HasColumnType("numeric(18,2)"); b.Property("ApprovedBy") .HasColumnType("uuid"); - b.Property("ApproverId") - .HasColumnType("uuid"); - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasDefaultValueSql("now()"); b.Property("CreatedBy") .HasColumnType("uuid"); - b.Property("CreatorId") - .HasColumnType("uuid"); - b.Property("OrganisationId") .HasColumnType("bigint"); @@ -165,7 +174,9 @@ namespace PostFundManagement.Infrastructure.Database.Migrations .HasColumnType("bigint"); b.Property("Status") - .HasColumnType("integer"); + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValueSql("1"); b.Property("TenantId") .HasColumnType("bigint"); @@ -176,14 +187,11 @@ namespace PostFundManagement.Infrastructure.Database.Migrations b.Property("UpdatedBy") .HasColumnType("uuid"); - b.Property("UpdatorId") - .HasColumnType("uuid"); - b.HasKey("Id"); - b.HasIndex("ApproverId"); + b.HasIndex("ApprovedBy"); - b.HasIndex("CreatorId"); + b.HasIndex("CreatedBy"); b.HasIndex("OrganisationId"); @@ -193,7 +201,7 @@ namespace PostFundManagement.Infrastructure.Database.Migrations b.HasIndex("TenantId"); - b.HasIndex("UpdatorId"); + b.HasIndex("UpdatedBy"); b.ToTable("Awards", (string)null); }); @@ -207,19 +215,26 @@ namespace PostFundManagement.Infrastructure.Database.Migrations NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); b.Property("Category") - .HasColumnType("text"); + .IsRequired() + .HasMaxLength(100) + .HasColumnType("character varying(100)"); b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasDefaultValueSql("now()"); b.Property("CreatedBy") .HasColumnType("uuid"); b.Property("Location") + .IsRequired() .HasColumnType("text"); b.Property("Name") - .HasColumnType("text"); + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); b.Property("ProjectId") .HasColumnType("bigint"); @@ -258,25 +273,24 @@ namespace PostFundManagement.Infrastructure.Database.Migrations NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); b.Property("Amount") - .HasColumnType("numeric"); + .HasPrecision(18, 2) + .HasColumnType("numeric(18,2)"); b.Property("ApprovedBy") .HasColumnType("uuid"); - b.Property("ApproverId") - .HasColumnType("uuid"); - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasDefaultValueSql("now()"); b.Property("CreatedBy") .HasColumnType("uuid"); - b.Property("CreatorId") - .HasColumnType("uuid"); - b.Property("Name") - .HasColumnType("text"); + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); b.Property("ProjectId") .HasColumnType("bigint"); @@ -289,9 +303,9 @@ namespace PostFundManagement.Infrastructure.Database.Migrations b.HasKey("Id"); - b.HasIndex("ApproverId"); + b.HasIndex("ApprovedBy"); - b.HasIndex("CreatorId"); + b.HasIndex("CreatedBy"); b.HasIndex("ProjectId"); @@ -311,47 +325,50 @@ namespace PostFundManagement.Infrastructure.Database.Migrations b.Property("ApprovedBy") .HasColumnType("uuid"); - b.Property("ApproverId") - .HasColumnType("uuid"); - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasDefaultValueSql("now()"); b.Property("CreatedBy") .HasColumnType("uuid"); - b.Property("CreatorId") - .HasColumnType("uuid"); - b.Property("Justification") - .HasColumnType("text"); + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("character varying(1024)"); b.Property("ProjectId") .HasColumnType("bigint"); b.Property("RevisedBudget") - .HasColumnType("numeric"); + .HasPrecision(18, 2) + .HasColumnType("numeric(18,2)"); b.Property("RevisedEndedAt") .HasColumnType("timestamp with time zone"); b.Property("Status") - .HasColumnType("integer"); + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValueSql("1"); b.Property("TenantId") .HasColumnType("bigint"); b.Property("Title") - .HasColumnType("text"); + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); b.Property("UpdatedAt") .HasColumnType("timestamp with time zone"); b.HasKey("Id"); - b.HasIndex("ApproverId"); + b.HasIndex("ApprovedBy"); - b.HasIndex("CreatorId"); + b.HasIndex("CreatedBy"); b.HasIndex("ProjectId"); @@ -369,28 +386,33 @@ namespace PostFundManagement.Infrastructure.Database.Migrations NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasDefaultValueSql("now()"); b.Property("CreatedBy") .HasColumnType("uuid"); - b.Property("CreatorId") - .HasColumnType("uuid"); - b.Property("ProjectId") .HasColumnType("bigint"); b.Property("Requirements") - .HasColumnType("text"); + .IsRequired() + .HasMaxLength(2048) + .HasColumnType("character varying(2048)"); b.Property("Status") - .HasColumnType("integer"); + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValueSql("1"); b.Property("TenantId") .HasColumnType("bigint"); b.Property("Title") - .HasColumnType("text"); + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); b.Property("UpdatedAt") .HasColumnType("timestamp with time zone"); @@ -398,18 +420,15 @@ namespace PostFundManagement.Infrastructure.Database.Migrations b.Property("VerifiedBy") .HasColumnType("uuid"); - b.Property("VerifierId") - .HasColumnType("uuid"); - b.HasKey("Id"); - b.HasIndex("CreatorId"); + b.HasIndex("CreatedBy"); b.HasIndex("ProjectId"); b.HasIndex("TenantId"); - b.HasIndex("VerifierId"); + b.HasIndex("VerifiedBy"); b.ToTable("ComplianceItems", (string)null); }); @@ -426,14 +445,13 @@ namespace PostFundManagement.Infrastructure.Database.Migrations .HasColumnType("bigint"); b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasDefaultValueSql("now()"); b.Property("CreatedBy") .HasColumnType("uuid"); - b.Property("CreatorId") - .HasColumnType("uuid"); - b.Property("EffectiveAt") .HasColumnType("timestamp with time zone"); @@ -447,20 +465,23 @@ namespace PostFundManagement.Infrastructure.Database.Migrations .HasColumnType("text"); b.Property("Status") - .HasColumnType("integer"); + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValueSql("1"); b.Property("TenantId") .HasColumnType("bigint"); b.Property("TotalValue") - .HasColumnType("numeric"); + .HasPrecision(18, 2) + .HasColumnType("numeric(18,2)"); b.HasKey("Id"); b.HasIndex("AwardId") .IsUnique(); - b.HasIndex("CreatorId"); + b.HasIndex("CreatedBy"); b.HasIndex("TenantId"); @@ -476,17 +497,17 @@ namespace PostFundManagement.Infrastructure.Database.Migrations NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); b.Property("Amount") - .HasColumnType("numeric"); + .HasPrecision(18, 2) + .HasColumnType("numeric(18,2)"); b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasDefaultValueSql("now()"); b.Property("CreatedBy") .HasColumnType("uuid"); - b.Property("CreatorId") - .HasColumnType("uuid"); - b.Property("MilestoneId") .HasColumnType("bigint"); @@ -494,7 +515,9 @@ namespace PostFundManagement.Infrastructure.Database.Migrations .HasColumnType("bigint"); b.Property("Status") - .HasColumnType("integer"); + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValueSql("1"); b.Property("TenantId") .HasColumnType("bigint"); @@ -505,12 +528,9 @@ namespace PostFundManagement.Infrastructure.Database.Migrations b.Property("UpdatedBy") .HasColumnType("uuid"); - b.Property("UpdatorId") - .HasColumnType("uuid"); - b.HasKey("Id"); - b.HasIndex("CreatorId"); + b.HasIndex("CreatedBy"); b.HasIndex("MilestoneId"); @@ -518,7 +538,7 @@ namespace PostFundManagement.Infrastructure.Database.Migrations b.HasIndex("TenantId"); - b.HasIndex("UpdatorId"); + b.HasIndex("UpdatedBy"); b.ToTable("Disbursements", (string)null); }); @@ -535,15 +555,15 @@ namespace PostFundManagement.Infrastructure.Database.Migrations .HasColumnType("bigint"); b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasDefaultValueSql("now()"); b.Property("CreatedBy") .HasColumnType("uuid"); - b.Property("CreatorId") - .HasColumnType("uuid"); - b.Property("DocumentUrl") + .IsRequired() .HasColumnType("text"); b.Property("IndicatorId") @@ -556,31 +576,34 @@ namespace PostFundManagement.Infrastructure.Database.Migrations .HasColumnType("bigint"); b.Property("Status") - .HasColumnType("integer"); + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValueSql("1"); b.Property("TenantId") .HasColumnType("bigint"); b.Property("Type") - .HasColumnType("integer"); + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValueSql("9"); b.Property("UpdatedAt") .HasColumnType("timestamp with time zone"); - b.Property("UpdatedBy") - .HasColumnType("uuid"); - - b.Property("UpdatorId") + b.Property("UpdatedBy") .HasColumnType("uuid"); b.Property("Version") - .HasColumnType("integer"); + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(1); b.HasKey("Id"); b.HasIndex("ActivityId"); - b.HasIndex("CreatorId"); + b.HasIndex("CreatedBy"); b.HasIndex("IndicatorId"); @@ -590,7 +613,7 @@ namespace PostFundManagement.Infrastructure.Database.Migrations b.HasIndex("TenantId"); - b.HasIndex("UpdatorId"); + b.HasIndex("UpdatedBy"); b.ToTable("Evidences", (string)null); }); @@ -604,38 +627,44 @@ namespace PostFundManagement.Infrastructure.Database.Migrations NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); b.Property("ActualAmount") - .HasColumnType("numeric"); + .HasPrecision(18, 2) + .HasColumnType("numeric(18,2)"); b.Property("BaselineAmount") - .HasColumnType("numeric"); + .HasPrecision(18, 2) + .HasColumnType("numeric(18,2)"); b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasDefaultValueSql("now()"); b.Property("CreatedBy") .HasColumnType("uuid"); - b.Property("CreatorId") - .HasColumnType("uuid"); - b.Property("Name") - .HasColumnType("text"); + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); b.Property("ProjectId") .HasColumnType("bigint"); b.Property("TargetAmount") - .HasColumnType("numeric"); + .HasPrecision(18, 2) + .HasColumnType("numeric(18,2)"); b.Property("TenantId") .HasColumnType("bigint"); - b.Property("UnitOfMeasure") - .HasColumnType("integer"); + b.Property("UnitOfMeasure") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValueSql("2"); b.HasKey("Id"); - b.HasIndex("CreatorId"); + b.HasIndex("CreatedBy"); b.HasIndex("ProjectId"); @@ -653,35 +682,41 @@ namespace PostFundManagement.Infrastructure.Database.Migrations NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); b.Property("Code") - .HasColumnType("text"); + .IsRequired() + .HasMaxLength(100) + .HasColumnType("character varying(100)"); b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasDefaultValueSql("now()"); b.Property("CreatedBy") .HasColumnType("uuid"); - b.Property("CreatorId") - .HasColumnType("uuid"); - b.Property("Description") - .HasColumnType("text"); + .HasMaxLength(1024) + .HasColumnType("character varying(1024)"); b.Property("Name") - .HasColumnType("text"); + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); b.Property("ProgrammeId") .HasColumnType("bigint"); b.Property("Status") - .HasColumnType("integer"); + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValueSql("2"); b.Property("TenantId") .HasColumnType("bigint"); b.HasKey("Id"); - b.HasIndex("CreatorId"); + b.HasIndex("CreatedBy"); b.HasIndex("ProgrammeId"); @@ -705,7 +740,9 @@ namespace PostFundManagement.Infrastructure.Database.Migrations .HasColumnType("bigint"); b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasDefaultValueSql("now()"); b.Property("CreatedBy") .HasColumnType("uuid"); @@ -719,9 +756,6 @@ namespace PostFundManagement.Infrastructure.Database.Migrations b.Property("Recipient") .HasColumnType("uuid"); - b.Property("RecipientUserId") - .HasColumnType("uuid"); - b.Property("TenantId") .HasColumnType("bigint"); @@ -741,7 +775,7 @@ namespace PostFundManagement.Infrastructure.Database.Migrations b.HasIndex("OrganisationId"); - b.HasIndex("RecipientUserId"); + b.HasIndex("Recipient"); b.HasIndex("TenantId"); @@ -759,47 +793,52 @@ namespace PostFundManagement.Infrastructure.Database.Migrations b.Property("AssignedTo") .HasColumnType("uuid"); - b.Property("AssigneeId") - .HasColumnType("uuid"); - b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasDefaultValueSql("now()"); b.Property("CreatedBy") .HasColumnType("uuid"); - b.Property("CreatorId") - .HasColumnType("uuid"); - b.Property("Description") - .HasColumnType("text"); + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("character varying(1024)"); b.Property("Priority") - .HasColumnType("integer"); + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValueSql("1"); b.Property("ProjectId") .HasColumnType("bigint"); b.Property("Resolution") + .IsRequired() .HasColumnType("text"); b.Property("ResolvedAt") .HasColumnType("timestamp with time zone"); b.Property("Status") - .HasColumnType("integer"); + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValueSql("1"); b.Property("TenantId") .HasColumnType("bigint"); b.Property("Title") - .HasColumnType("text"); + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); b.HasKey("Id"); - b.HasIndex("AssigneeId"); + b.HasIndex("AssignedTo"); - b.HasIndex("CreatorId"); + b.HasIndex("CreatedBy"); b.HasIndex("ProjectId"); @@ -817,28 +856,33 @@ namespace PostFundManagement.Infrastructure.Database.Migrations NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasDefaultValueSql("now()"); b.Property("CreatedBy") .HasColumnType("uuid"); - b.Property("CreatorId") - .HasColumnType("uuid"); - b.Property("DueAt") .HasColumnType("timestamp with time zone"); b.Property("Name") - .HasColumnType("text"); + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); b.Property("Priority") - .HasColumnType("integer"); + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValueSql("1"); b.Property("ProjectId") .HasColumnType("bigint"); b.Property("Status") - .HasColumnType("integer"); + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValueSql("1"); b.Property("TenantId") .HasColumnType("bigint"); @@ -849,18 +893,15 @@ namespace PostFundManagement.Infrastructure.Database.Migrations b.Property("UpdatedBy") .HasColumnType("uuid"); - b.Property("UpdatorId") - .HasColumnType("uuid"); - b.HasKey("Id"); - b.HasIndex("CreatorId"); + b.HasIndex("CreatedBy"); b.HasIndex("ProjectId"); b.HasIndex("TenantId"); - b.HasIndex("UpdatorId"); + b.HasIndex("UpdatedBy"); b.ToTable("Milestones", (string)null); }); @@ -874,37 +915,45 @@ namespace PostFundManagement.Infrastructure.Database.Migrations NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasDefaultValueSql("now()"); b.Property("Destination") - .HasColumnType("text"); + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); b.Property("Error") .HasColumnType("text"); b.Property("Message") - .HasColumnType("text"); + .IsRequired() + .HasMaxLength(4096) + .HasColumnType("character varying(4096)"); b.Property("OrganisationId") .HasColumnType("bigint"); b.Property("Platform") - .HasColumnType("integer"); + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValueSql("1"); b.Property("Recipient") .HasColumnType("uuid"); - b.Property("RecipientUserId") - .HasColumnType("uuid"); - b.Property("SentAt") .HasColumnType("timestamp with time zone"); b.Property("Status") - .HasColumnType("integer"); + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValueSql("1"); b.Property("Subject") - .HasColumnType("text"); + .HasMaxLength(256) + .HasColumnType("character varying(256)"); b.Property("TenantId") .HasColumnType("bigint"); @@ -916,7 +965,7 @@ namespace PostFundManagement.Infrastructure.Database.Migrations b.HasIndex("OrganisationId"); - b.HasIndex("RecipientUserId"); + b.HasIndex("Recipient"); b.HasIndex("TenantId"); @@ -932,32 +981,41 @@ namespace PostFundManagement.Infrastructure.Database.Migrations NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasDefaultValueSql("now()"); b.Property("CreatedBy") .HasColumnType("uuid"); - b.Property("CreatorId") - .HasColumnType("uuid"); - b.Property("Email") - .HasColumnType("text"); + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); b.Property("Name") - .HasColumnType("text"); + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); b.Property("RegistrationNo") - .HasColumnType("text"); + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); b.Property("Status") - .HasColumnType("integer"); + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValueSql("1"); b.Property("Type") - .HasColumnType("integer"); + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValueSql("5"); b.HasKey("Id"); - b.HasIndex("CreatorId"); + b.HasIndex("CreatedBy"); b.ToTable("Organisations", (string)null); }); @@ -974,25 +1032,33 @@ namespace PostFundManagement.Infrastructure.Database.Migrations .HasColumnType("bigint"); b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasDefaultValueSql("now()"); b.Property("CreatedBy") .HasColumnType("uuid"); - b.Property("CreatorId") - .HasColumnType("uuid"); - b.Property("Description") - .HasColumnType("text"); + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("character varying(1024)"); b.Property("Name") - .HasColumnType("text"); + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("TenantId") + .HasColumnType("bigint"); b.HasKey("Id"); b.HasIndex("BeneficiaryId"); - b.HasIndex("CreatorId"); + b.HasIndex("CreatedBy"); + + b.HasIndex("TenantId"); b.ToTable("Outcomes", (string)null); }); @@ -1006,19 +1072,21 @@ namespace PostFundManagement.Infrastructure.Database.Migrations NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasDefaultValueSql("now()"); b.Property("CreatedBy") .HasColumnType("uuid"); - b.Property("CreatorId") - .HasColumnType("uuid"); - b.Property("Description") - .HasColumnType("text"); + .HasMaxLength(1024) + .HasColumnType("character varying(1024)"); b.Property("Name") - .HasColumnType("text"); + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); b.Property("OrganisationId") .HasColumnType("bigint"); @@ -1026,19 +1094,16 @@ namespace PostFundManagement.Infrastructure.Database.Migrations b.Property("OwnedBy") .HasColumnType("uuid"); - b.Property("OwnerId") - .HasColumnType("uuid"); - b.Property("TenantId") .HasColumnType("bigint"); b.HasKey("Id"); - b.HasIndex("CreatorId"); + b.HasIndex("CreatedBy"); b.HasIndex("OrganisationId"); - b.HasIndex("OwnerId"); + b.HasIndex("OwnedBy"); b.HasIndex("TenantId"); @@ -1054,28 +1119,28 @@ namespace PostFundManagement.Infrastructure.Database.Migrations NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasDefaultValueSql("now()"); b.Property("CreatedBy") .HasColumnType("uuid"); - b.Property("CreatorId") - .HasColumnType("uuid"); - b.Property("Name") - .HasColumnType("text"); + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); b.Property("OwnedBy") .HasColumnType("uuid"); - b.Property("OwnerId") - .HasColumnType("uuid"); - b.Property("PortfolioId") .HasColumnType("bigint"); b.Property("Status") - .HasColumnType("integer"); + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValueSql("1"); b.Property("TenantId") .HasColumnType("bigint"); @@ -1088,9 +1153,9 @@ namespace PostFundManagement.Infrastructure.Database.Migrations b.HasKey("Id"); - b.HasIndex("CreatorId"); + b.HasIndex("CreatedBy"); - b.HasIndex("OwnerId"); + b.HasIndex("OwnedBy"); b.HasIndex("PortfolioId"); @@ -1108,37 +1173,46 @@ namespace PostFundManagement.Infrastructure.Database.Migrations NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasDefaultValueSql("now()"); b.Property("CreatedBy") .HasColumnType("uuid"); - b.Property("CreatorId") - .HasColumnType("uuid"); - b.Property("Description") - .HasColumnType("text"); + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("character varying(1024)"); b.Property("EndedAt") .HasColumnType("timestamp with time zone"); b.Property("Name") - .HasColumnType("text"); + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); b.Property("ProgrammeId") .HasColumnType("bigint"); b.Property("ProjectType") - .HasColumnType("integer"); + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValueSql("10"); b.Property("Sector") - .HasColumnType("integer"); + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValueSql("11"); b.Property("StartedAt") .HasColumnType("timestamp with time zone"); b.Property("Status") - .HasColumnType("integer"); + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValueSql("1"); b.Property("TenantId") .HasColumnType("bigint"); @@ -1149,18 +1223,15 @@ namespace PostFundManagement.Infrastructure.Database.Migrations b.Property("UpdatedBy") .HasColumnType("uuid"); - b.Property("UpdatorId") - .HasColumnType("uuid"); - b.HasKey("Id"); - b.HasIndex("CreatorId"); + b.HasIndex("CreatedBy"); b.HasIndex("ProgrammeId"); b.HasIndex("TenantId"); - b.HasIndex("UpdatorId"); + b.HasIndex("UpdatedBy"); b.ToTable("Projects", (string)null); }); @@ -1174,25 +1245,32 @@ namespace PostFundManagement.Infrastructure.Database.Migrations NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasDefaultValueSql("now()"); b.Property("CreatedBy") .HasColumnType("uuid"); - b.Property("CreatorId") - .HasColumnType("uuid"); - b.Property("Description") - .HasColumnType("text"); + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("character varying(1024)"); b.Property("Impact") - .HasColumnType("integer"); + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValueSql("1"); b.Property("Likelihood") - .HasColumnType("integer"); + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValueSql("3"); b.Property("Name") - .HasColumnType("text"); + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); b.Property("ProjectId") .HasColumnType("bigint"); @@ -1202,7 +1280,7 @@ namespace PostFundManagement.Infrastructure.Database.Migrations b.HasKey("Id"); - b.HasIndex("CreatorId"); + b.HasIndex("CreatedBy"); b.HasIndex("ProjectId"); @@ -1220,22 +1298,25 @@ namespace PostFundManagement.Infrastructure.Database.Migrations NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasDefaultValueSql("now()"); b.Property("CreatedBy") .HasColumnType("uuid"); - b.Property("CreatorId") - .HasColumnType("uuid"); - b.Property("Name") - .HasColumnType("text"); + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); b.Property("ProgrammeId") .HasColumnType("bigint"); b.Property("Status") - .HasColumnType("integer"); + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValueSql("2"); b.Property("TenantId") .HasColumnType("bigint"); @@ -1246,21 +1327,20 @@ namespace PostFundManagement.Infrastructure.Database.Migrations b.Property("UpdatedBy") .HasColumnType("uuid"); - b.Property("UpdatorId") - .HasColumnType("uuid"); - b.Property("Version") - .HasColumnType("integer"); + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(1); b.HasKey("Id"); - b.HasIndex("CreatorId"); + b.HasIndex("CreatedBy"); b.HasIndex("ProgrammeId"); b.HasIndex("TenantId"); - b.HasIndex("UpdatorId"); + b.HasIndex("UpdatedBy"); b.ToTable("Rules", (string)null); }); @@ -1274,25 +1354,28 @@ namespace PostFundManagement.Infrastructure.Database.Migrations NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasDefaultValueSql("now()"); b.Property("CreatedBy") .HasColumnType("uuid"); - b.Property("CreatorId") - .HasColumnType("uuid"); - b.Property("Findings") - .HasColumnType("text"); + .HasMaxLength(4096) + .HasColumnType("character varying(4096)"); b.Property("InspectorName") + .IsRequired() .HasColumnType("text"); b.Property("ProjectId") .HasColumnType("bigint"); b.Property("Status") - .HasColumnType("integer"); + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValueSql("1"); b.Property("TenantId") .HasColumnType("bigint"); @@ -1302,7 +1385,7 @@ namespace PostFundManagement.Infrastructure.Database.Migrations b.HasKey("Id"); - b.HasIndex("CreatorId"); + b.HasIndex("CreatedBy"); b.HasIndex("ProjectId"); @@ -1320,19 +1403,22 @@ namespace PostFundManagement.Infrastructure.Database.Migrations NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasDefaultValueSql("now()"); b.Property("CreatedBy") .HasColumnType("uuid"); - b.Property("CreatorId") - .HasColumnType("uuid"); - b.Property("Name") - .HasColumnType("text"); + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); b.Property("Status") - .HasColumnType("integer"); + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValueSql("1"); b.Property("UpdatedAt") .HasColumnType("timestamp with time zone"); @@ -1340,14 +1426,11 @@ namespace PostFundManagement.Infrastructure.Database.Migrations b.Property("UpdatedBy") .HasColumnType("uuid"); - b.Property("UpdatorId") - .HasColumnType("uuid"); - b.HasKey("Id"); - b.HasIndex("CreatorId"); + b.HasIndex("CreatedBy"); - b.HasIndex("UpdatorId"); + b.HasIndex("UpdatedBy"); b.ToTable("Tenants", (string)null); }); @@ -1361,26 +1444,27 @@ namespace PostFundManagement.Infrastructure.Database.Migrations NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasDefaultValueSql("now()"); b.Property("CreatedBy") .HasColumnType("uuid"); - b.Property("CreatorId") - .HasColumnType("uuid"); - b.Property("OrganisationId") .HasColumnType("bigint"); b.Property("Status") - .HasColumnType("integer"); + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValueSql("1"); b.Property("TenantId") .HasColumnType("bigint"); b.HasKey("Id"); - b.HasIndex("CreatorId"); + b.HasIndex("CreatedBy"); b.HasIndex("OrganisationId"); @@ -1398,13 +1482,17 @@ namespace PostFundManagement.Infrastructure.Database.Migrations NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); b.Property("CreatedAt") - .HasColumnType("timestamp with time zone"); + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasDefaultValueSql("now()"); b.Property("CreatedBy") .HasColumnType("uuid"); b.Property("Status") - .HasColumnType("integer"); + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValueSql("1"); b.Property("TenantId") .HasColumnType("bigint"); @@ -1430,13 +1518,17 @@ namespace PostFundManagement.Infrastructure.Database.Migrations .HasColumnType("uuid"); b.Property("Email") - .HasColumnType("text"); + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); b.Property("LastLoginAt") .HasColumnType("timestamp with time zone"); b.Property("Status") - .HasColumnType("integer"); + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValueSql("2"); b.HasKey("Id"); @@ -1447,29 +1539,37 @@ namespace PostFundManagement.Infrastructure.Database.Migrations { b.HasOne("PostFundManagement.Domain.Entities.User", "Approver") .WithMany() - .HasForeignKey("ApproverId"); + .HasForeignKey("ApprovedBy") + .OnDelete(DeleteBehavior.NoAction); b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") .WithMany() - .HasForeignKey("CreatorId"); + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.Milestone", "Milestone") .WithMany() - .HasForeignKey("MilestoneId"); + .HasForeignKey("MilestoneId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.Project", "Project") .WithMany() - .HasForeignKey("ProjectId"); + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") .WithMany() .HasForeignKey("TenantId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.NoAction) .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.User", "Updator") .WithMany() - .HasForeignKey("UpdatorId"); + .HasForeignKey("UpdatedBy") + .OnDelete(DeleteBehavior.NoAction); b.Navigation("Approver"); @@ -1488,37 +1588,42 @@ namespace PostFundManagement.Infrastructure.Database.Migrations { b.HasOne("PostFundManagement.Domain.Entities.User", "Approver") .WithMany() - .HasForeignKey("ApproverId"); + .HasForeignKey("ApprovedBy") + .OnDelete(DeleteBehavior.NoAction); b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") .WithMany() - .HasForeignKey("CreatorId"); + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.Organisation", "Organisation") .WithMany() .HasForeignKey("OrganisationId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.Restrict) .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.Programme", "Programme") .WithMany("Awards") .HasForeignKey("ProgrammeId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.Restrict) .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.Project", "Project") .WithMany("Awards") - .HasForeignKey("ProjectId"); + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.SetNull); b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") .WithMany() .HasForeignKey("TenantId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.Restrict) .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.User", "Updator") .WithMany() - .HasForeignKey("UpdatorId"); + .HasForeignKey("UpdatedBy") + .OnDelete(DeleteBehavior.NoAction); b.Navigation("Approver"); @@ -1540,25 +1645,25 @@ namespace PostFundManagement.Infrastructure.Database.Migrations b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") .WithMany() .HasForeignKey("CreatedBy") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.NoAction) .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.Project", "Project") .WithMany() .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.Restrict) .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") .WithMany() .HasForeignKey("TenantId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.NoAction) .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.User", "User") .WithMany() .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.NoAction) .IsRequired(); b.Navigation("Creator"); @@ -1574,22 +1679,25 @@ namespace PostFundManagement.Infrastructure.Database.Migrations { b.HasOne("PostFundManagement.Domain.Entities.User", "Approver") .WithMany() - .HasForeignKey("ApproverId"); + .HasForeignKey("ApprovedBy") + .OnDelete(DeleteBehavior.NoAction); b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") .WithMany() - .HasForeignKey("CreatorId"); + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.Project", "Project") .WithMany() .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.Restrict) .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") .WithMany() .HasForeignKey("TenantId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.NoAction) .IsRequired(); b.Navigation("Approver"); @@ -1605,22 +1713,25 @@ namespace PostFundManagement.Infrastructure.Database.Migrations { b.HasOne("PostFundManagement.Domain.Entities.User", "Approver") .WithMany() - .HasForeignKey("ApproverId"); + .HasForeignKey("ApprovedBy") + .OnDelete(DeleteBehavior.NoAction); b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") .WithMany() - .HasForeignKey("CreatorId"); + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.Project", "Project") .WithMany() .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.Restrict) .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") .WithMany() .HasForeignKey("TenantId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.NoAction) .IsRequired(); b.Navigation("Approver"); @@ -1636,12 +1747,14 @@ namespace PostFundManagement.Infrastructure.Database.Migrations { b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") .WithMany() - .HasForeignKey("CreatorId"); + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.Project", "Project") .WithMany() .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.Restrict) .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") @@ -1652,7 +1765,8 @@ namespace PostFundManagement.Infrastructure.Database.Migrations b.HasOne("PostFundManagement.Domain.Entities.User", "Verifier") .WithMany() - .HasForeignKey("VerifierId"); + .HasForeignKey("VerifiedBy") + .OnDelete(DeleteBehavior.NoAction); b.Navigation("Creator"); @@ -1668,17 +1782,19 @@ namespace PostFundManagement.Infrastructure.Database.Migrations b.HasOne("PostFundManagement.Domain.Entities.Award", "Award") .WithOne("Contract") .HasForeignKey("PostFundManagement.Domain.Entities.Contract", "AwardId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.Restrict) .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") .WithMany() - .HasForeignKey("CreatorId"); + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") .WithMany() .HasForeignKey("TenantId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.NoAction) .IsRequired(); b.Navigation("Award"); @@ -1692,27 +1808,31 @@ namespace PostFundManagement.Infrastructure.Database.Migrations { b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") .WithMany() - .HasForeignKey("CreatorId"); + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.Milestone", "Milestone") .WithMany() - .HasForeignKey("MilestoneId"); + .HasForeignKey("MilestoneId") + .OnDelete(DeleteBehavior.Restrict); b.HasOne("PostFundManagement.Domain.Entities.Project", "Project") .WithMany() .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.Restrict) .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") .WithMany() .HasForeignKey("TenantId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.NoAction) .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.User", "Updator") .WithMany() - .HasForeignKey("UpdatorId"); + .HasForeignKey("UpdatedBy") + .OnDelete(DeleteBehavior.NoAction); b.Navigation("Creator"); @@ -1730,40 +1850,43 @@ namespace PostFundManagement.Infrastructure.Database.Migrations b.HasOne("PostFundManagement.Domain.Entities.Activity", "Activity") .WithMany("Evidences") .HasForeignKey("ActivityId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.Restrict) .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") .WithMany() - .HasForeignKey("CreatorId"); + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.Indicator", "Indicator") .WithMany() .HasForeignKey("IndicatorId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.Restrict) .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.Milestone", "Milestone") .WithMany() .HasForeignKey("MilestoneId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.Restrict) .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.Project", "Project") .WithMany() .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.Restrict) .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") .WithMany() .HasForeignKey("TenantId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.NoAction) .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.User", "Updator") .WithMany() - .HasForeignKey("UpdatorId"); + .HasForeignKey("UpdatedBy") + .OnDelete(DeleteBehavior.NoAction); b.Navigation("Activity"); @@ -1784,18 +1907,20 @@ namespace PostFundManagement.Infrastructure.Database.Migrations { b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") .WithMany() - .HasForeignKey("CreatorId"); + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.Project", "Project") .WithMany() .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.Restrict) .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") .WithMany() .HasForeignKey("TenantId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.NoAction) .IsRequired(); b.Navigation("Creator"); @@ -1809,18 +1934,20 @@ namespace PostFundManagement.Infrastructure.Database.Migrations { b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") .WithMany() - .HasForeignKey("CreatorId"); + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.Programme", "Programme") .WithMany("Instruments") .HasForeignKey("ProgrammeId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.Restrict) .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") .WithMany() .HasForeignKey("TenantId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.NoAction) .IsRequired(); b.Navigation("Creator"); @@ -1835,35 +1962,37 @@ namespace PostFundManagement.Infrastructure.Database.Migrations b.HasOne("PostFundManagement.Domain.Entities.Award", "Award") .WithMany() .HasForeignKey("AwardId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.Restrict) .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.Contract", "Contract") .WithMany() .HasForeignKey("ContractId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.Restrict) .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.Organisation", "InvitedOrganisation") .WithMany() .HasForeignKey("InvitedOrganisationId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.Restrict) .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.Organisation", "Organisation") .WithMany() .HasForeignKey("OrganisationId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.Restrict) .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.User", "RecipientUser") .WithMany() - .HasForeignKey("RecipientUserId"); + .HasForeignKey("Recipient") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") .WithMany() .HasForeignKey("TenantId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.NoAction) .IsRequired(); b.Navigation("Award"); @@ -1883,22 +2012,26 @@ namespace PostFundManagement.Infrastructure.Database.Migrations { b.HasOne("PostFundManagement.Domain.Entities.User", "Assignee") .WithMany() - .HasForeignKey("AssigneeId"); + .HasForeignKey("AssignedTo") + .OnDelete(DeleteBehavior.SetNull) + .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") .WithMany() - .HasForeignKey("CreatorId"); + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.Project", "Project") .WithMany() .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.Restrict) .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") .WithMany() .HasForeignKey("TenantId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.NoAction) .IsRequired(); b.Navigation("Assignee"); @@ -1914,23 +2047,26 @@ namespace PostFundManagement.Infrastructure.Database.Migrations { b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") .WithMany() - .HasForeignKey("CreatorId"); + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.Project", "Project") .WithMany() .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.Restrict) .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") .WithMany() .HasForeignKey("TenantId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.NoAction) .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.User", "Updator") .WithMany() - .HasForeignKey("UpdatorId"); + .HasForeignKey("UpdatedBy") + .OnDelete(DeleteBehavior.NoAction); b.Navigation("Creator"); @@ -1946,17 +2082,19 @@ namespace PostFundManagement.Infrastructure.Database.Migrations b.HasOne("PostFundManagement.Domain.Entities.Organisation", "Organisation") .WithMany() .HasForeignKey("OrganisationId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.Restrict) .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.User", "RecipientUser") .WithMany() - .HasForeignKey("RecipientUserId"); + .HasForeignKey("Recipient") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") .WithMany() .HasForeignKey("TenantId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.Restrict) .IsRequired(); b.Navigation("Organisation"); @@ -1970,7 +2108,9 @@ namespace PostFundManagement.Infrastructure.Database.Migrations { b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") .WithMany() - .HasForeignKey("CreatorId"); + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); b.Navigation("Creator"); }); @@ -1980,38 +2120,52 @@ namespace PostFundManagement.Infrastructure.Database.Migrations b.HasOne("PostFundManagement.Domain.Entities.Beneficiary", "Beneficiary") .WithMany() .HasForeignKey("BeneficiaryId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.Restrict) .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") .WithMany() - .HasForeignKey("CreatorId"); + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") + .WithMany() + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); b.Navigation("Beneficiary"); b.Navigation("Creator"); + + b.Navigation("Tenant"); }); modelBuilder.Entity("PostFundManagement.Domain.Entities.Portfolio", b => { b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") .WithMany() - .HasForeignKey("CreatorId"); + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.Organisation", "Organisation") .WithMany() .HasForeignKey("OrganisationId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.Restrict) .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.User", "Owner") .WithMany() - .HasForeignKey("OwnerId"); + .HasForeignKey("OwnedBy") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") .WithMany() .HasForeignKey("TenantId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.Restrict) .IsRequired(); b.Navigation("Creator"); @@ -2027,22 +2181,26 @@ namespace PostFundManagement.Infrastructure.Database.Migrations { b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") .WithMany() - .HasForeignKey("CreatorId"); + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.User", "Owner") .WithMany() - .HasForeignKey("OwnerId"); + .HasForeignKey("OwnedBy") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.Portfolio", "Portfolio") .WithMany("Programmes") .HasForeignKey("PortfolioId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.NoAction) .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") .WithMany() .HasForeignKey("TenantId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.NoAction) .IsRequired(); b.Navigation("Creator"); @@ -2058,23 +2216,26 @@ namespace PostFundManagement.Infrastructure.Database.Migrations { b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") .WithMany() - .HasForeignKey("CreatorId"); + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.Programme", "Programme") .WithMany("Projects") .HasForeignKey("ProgrammeId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.Restrict) .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") .WithMany() .HasForeignKey("TenantId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.Restrict) .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.User", "Updator") .WithMany() - .HasForeignKey("UpdatorId"); + .HasForeignKey("UpdatedBy") + .OnDelete(DeleteBehavior.NoAction); b.Navigation("Creator"); @@ -2089,18 +2250,20 @@ namespace PostFundManagement.Infrastructure.Database.Migrations { b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") .WithMany() - .HasForeignKey("CreatorId"); + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.Project", "Project") .WithMany() .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.Restrict) .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") .WithMany() .HasForeignKey("TenantId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.NoAction) .IsRequired(); b.Navigation("Creator"); @@ -2114,23 +2277,26 @@ namespace PostFundManagement.Infrastructure.Database.Migrations { b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") .WithMany() - .HasForeignKey("CreatorId"); + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.Programme", "Programme") .WithMany("Rules") .HasForeignKey("ProgrammeId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.NoAction) .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") .WithMany() .HasForeignKey("TenantId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.NoAction) .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.User", "Updator") .WithMany() - .HasForeignKey("UpdatorId"); + .HasForeignKey("UpdatedBy") + .OnDelete(DeleteBehavior.NoAction); b.Navigation("Creator"); @@ -2145,18 +2311,20 @@ namespace PostFundManagement.Infrastructure.Database.Migrations { b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") .WithMany() - .HasForeignKey("CreatorId"); + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.Project", "Project") .WithMany() .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.Restrict) .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") .WithMany() .HasForeignKey("TenantId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.NoAction) .IsRequired(); b.Navigation("Creator"); @@ -2170,11 +2338,14 @@ namespace PostFundManagement.Infrastructure.Database.Migrations { b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") .WithMany() - .HasForeignKey("CreatorId"); + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.User", "Updator") .WithMany() - .HasForeignKey("UpdatorId"); + .HasForeignKey("UpdatedBy") + .OnDelete(DeleteBehavior.Restrict); b.Navigation("Creator"); @@ -2185,18 +2356,20 @@ namespace PostFundManagement.Infrastructure.Database.Migrations { b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") .WithMany() - .HasForeignKey("CreatorId"); + .HasForeignKey("CreatedBy") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.Organisation", "Organisation") .WithMany() .HasForeignKey("OrganisationId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.Restrict) .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") .WithMany() .HasForeignKey("TenantId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.Restrict) .IsRequired(); b.Navigation("Creator"); @@ -2211,19 +2384,19 @@ namespace PostFundManagement.Infrastructure.Database.Migrations b.HasOne("PostFundManagement.Domain.Entities.User", "Creator") .WithMany() .HasForeignKey("CreatedBy") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.Restrict) .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.Tenant", "Tenant") .WithMany() .HasForeignKey("TenantId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.Restrict) .IsRequired(); b.HasOne("PostFundManagement.Domain.Entities.User", "User") .WithMany() .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.Restrict) .IsRequired(); b.Navigation("Creator");