From a8cabdb69c9914e8b1a0ef9938c3be8f9b4594bb Mon Sep 17 00:00:00 2001 From: EinarSalbouvet Date: Mon, 8 Jun 2026 14:34:36 +0200 Subject: [PATCH 01/17] Add migration to insert a deleted user into the Users table - Created a new migration `AddDeletedUser` to insert a user with ID "d008bfdf-fe89-48f3-80a8-777bba4d9bbf" named "Deleted User" into the Users table. - Updated the `AppDbContextModelSnapshot` to reflect the new user data. - Implemented the `Down` method to remove the user if the migration is rolled back. --- .../Controllers/UsersController.cs | 13 + .../Interfaces/Services/IUserService.cs | 1 + .../Repositories/UserRepository.cs | 75 + .../Services/UserService.cs | 10 + .../Constants/DomainConstants.cs | 3 + .../PrismaApi.Domain/Entities/User.cs | 7 + .../Context/AppDbContextFactory.cs | 3 +- .../PrismaApi.Test/Mocks/TestUserService.cs | 10 + .../20260608114526_AddDeletedUser.Designer.cs | 1557 +++++++++++++++++ .../20260608114526_AddDeletedUser.cs | 29 + .../AppDbContextModelSnapshot.cs | 9 + .../20260608114505_AddDeletedUser.Designer.cs | 1552 ++++++++++++++++ .../20260608114505_AddDeletedUser.cs | 29 + .../AppDbContextModelSnapshot.cs | 9 + 14 files changed, 3306 insertions(+), 1 deletion(-) create mode 100644 PrismaDotnetApi/SqlServerMigrations/20260608114526_AddDeletedUser.Designer.cs create mode 100644 PrismaDotnetApi/SqlServerMigrations/20260608114526_AddDeletedUser.cs create mode 100644 PrismaDotnetApi/SqliteMigrations/20260608114505_AddDeletedUser.Designer.cs create mode 100644 PrismaDotnetApi/SqliteMigrations/20260608114505_AddDeletedUser.cs diff --git a/PrismaDotnetApi/PrismaApi.Api/Controllers/UsersController.cs b/PrismaDotnetApi/PrismaApi.Api/Controllers/UsersController.cs index 4a25ad4..920376c 100644 --- a/PrismaDotnetApi/PrismaApi.Api/Controllers/UsersController.cs +++ b/PrismaDotnetApi/PrismaApi.Api/Controllers/UsersController.cs @@ -61,4 +61,17 @@ public IActionResult AuthPlaceholder(CancellationToken ct = default) { return StatusCode(StatusCodes.Status501NotImplemented); } + + [HttpDelete("users/{userId}")] + // + // Deletes a user. Users can only delete themselves, and the user will be anonymized in the database, but the record will not be deleted for audit purposes. + // + // Thrown when a user attempts to delete a different user. + public async Task DeleteUser([FromRoute] string userId, CancellationToken ct = default) + { + var user = HttpContext.GetLoadedUser(); + + await _userService.DeleteUserAsync(userId, user, ct); + return NoContent(); + } } diff --git a/PrismaDotnetApi/PrismaApi.Application/Interfaces/Services/IUserService.cs b/PrismaDotnetApi/PrismaApi.Application/Interfaces/Services/IUserService.cs index 6d88cd2..2727cd7 100644 --- a/PrismaDotnetApi/PrismaApi.Application/Interfaces/Services/IUserService.cs +++ b/PrismaDotnetApi/PrismaApi.Application/Interfaces/Services/IUserService.cs @@ -9,4 +9,5 @@ public interface IUserService Task> SearchUsersAsync(string query); Task GetOrCreateUserFromContextAsync(HttpContext context); Task> GetByIdsAsync(IEnumerable ids); + Task DeleteUserAsync(string userId, UserOutgoingDto user, CancellationToken ct = default); } diff --git a/PrismaDotnetApi/PrismaApi.Application/Repositories/UserRepository.cs b/PrismaDotnetApi/PrismaApi.Application/Repositories/UserRepository.cs index 3bd33a0..c2bab3c 100644 --- a/PrismaDotnetApi/PrismaApi.Application/Repositories/UserRepository.cs +++ b/PrismaDotnetApi/PrismaApi.Application/Repositories/UserRepository.cs @@ -1,6 +1,8 @@ using Microsoft.EntityFrameworkCore; +using Microsoft.Graph.IdentityGovernance.EntitlementManagement.Assignments.AdditionalAccessWithAccessPackageIdWithIncompatibleAccessPackageId; using PrismaApi.Application.Interfaces.Repositories; using PrismaApi.Application.Mapping; +using PrismaApi.Domain.Constants; using PrismaApi.Domain.Dtos; using PrismaApi.Domain.Entities; using PrismaApi.Infrastructure.Context; @@ -79,4 +81,77 @@ public async Task GetOrAddByUserNameAsync(UserIncomingDto dto, Cancellatio return user; } + + public override async Task DeleteByIdsAsync(IEnumerable ids, Expression>? filterPredicate = null, CancellationToken ct = default) + { + var entries = await DbContext.Users + .Where(u => ids.Contains(u.Id)) + .ToListAsync(cancellationToken: ct); + + if (entries.Count == 0) + return; + + // update all auditable entities to point to deleted user entry + var connection = DbContext.Database.GetDbConnection(); + using var cmd = connection.CreateCommand(); + var idParams = ids.Select((id, i) => + { + var param = cmd.CreateParameter(); + param.ParameterName = $"@id{i}"; + param.Value = id; + return param; + }).ToArray(); + var inClause = string.Join(",", idParams.Select(p => p.ParameterName)); + + var auditableEntityTypes = DbContext.Model.GetEntityTypes() + .Where(t => typeof(AuditableEntity).IsAssignableFrom(t.ClrType) && !t.ClrType.IsAbstract); + + foreach (var entityType in auditableEntityTypes) + { + var tableName = entityType.GetTableName(); + try + { + + await DbContext.Database.ExecuteSqlRawAsync($""" + UPDATE [{tableName}] + SET CreatedById = '{DomainConstants.DeletedUserId}' + WHERE CreatedById IN ({inClause}); + UPDATE [{tableName}] + SET UpdatedById = '{DomainConstants.DeletedUserId}' + WHERE UpdatedById IN ({inClause}); + """, [.. idParams.Concat(idParams).Cast()], ct); + } + catch (Exception e) + { + + throw e; + } + } + // var auditableEntitiesToUpdate = DbContext. + + // foreach (var auditableEntity in auditableEntitiesToUpdate) + // { + // if (ids.Contains(auditableEntity.UpdatedById)) + // { + // auditableEntity.UpdatedById = DomainConstants.DeletedUserId; + // } + + // if (ids.Contains(auditableEntity.CreatedById)) + // { + // auditableEntity.CreatedById = DomainConstants.DeletedUserId; + // } + // } + + // delete project roles + var projectRoles = await DbContext.ProjectRoles + .Where(e => ids.Contains(e.UserId)) + .ToListAsync(cancellationToken: ct); + + DbContext.ProjectRoles.RemoveRange(projectRoles); + foreach (var entry in entries) + { + DbContext.Users.Remove(entry); + } + await DbContext.SaveChangesAsync(ct); + } } diff --git a/PrismaDotnetApi/PrismaApi.Application/Services/UserService.cs b/PrismaDotnetApi/PrismaApi.Application/Services/UserService.cs index 5f1a271..d87b8f3 100644 --- a/PrismaDotnetApi/PrismaApi.Application/Services/UserService.cs +++ b/PrismaDotnetApi/PrismaApi.Application/Services/UserService.cs @@ -34,4 +34,14 @@ public Task GetOrCreateUserFromContextAsync(HttpContext context public Task> SearchUsersAsync(string query) => _userProvider.SearchUsersAsync(query); + + public async Task DeleteUserAsync(string userId, UserOutgoingDto user, CancellationToken ct = default) + { + // user is the user making the request, and only allows to delete itself. + if (userId != user.Id) + { + throw new InvalidOperationException("Users can only delete themselves."); + } + await _userRepository.DeleteByIdsAsync([userId], ct: ct); + } } diff --git a/PrismaDotnetApi/PrismaApi.Domain/Constants/DomainConstants.cs b/PrismaDotnetApi/PrismaApi.Domain/Constants/DomainConstants.cs index 136e1de..54544b4 100644 --- a/PrismaDotnetApi/PrismaApi.Domain/Constants/DomainConstants.cs +++ b/PrismaDotnetApi/PrismaApi.Domain/Constants/DomainConstants.cs @@ -12,6 +12,9 @@ public static class DomainConstants public const int MaxOpacity = 100; public const int MinOpacity = 0; public const int DefaultTextSize = 24; + public static readonly string DeletedUserId = + "d008bfdf-fe89-48f3-80a8-777bba4d9bbf"; + public static readonly string DeletedUserName = "Deleted User"; public static readonly Guid DefaultValueMetricId = Guid.Parse("288e0811-7ab6-5d24-b80c-9fa925b848a6"); public static readonly string DefaultValueMetricName = "value"; diff --git a/PrismaDotnetApi/PrismaApi.Domain/Entities/User.cs b/PrismaDotnetApi/PrismaApi.Domain/Entities/User.cs index 49b7ec6..81909c2 100644 --- a/PrismaDotnetApi/PrismaApi.Domain/Entities/User.cs +++ b/PrismaDotnetApi/PrismaApi.Domain/Entities/User.cs @@ -16,5 +16,12 @@ public static void OnModelConfiguring(ModelBuilder modelBuilder) entity.HasKey(e => e.Id); entity.Property(e => e.Name).HasMaxLength(DomainConstants.MaxShortStringLength); }); + modelBuilder.Entity().HasData(new User + { + Id = DomainConstants.DeletedUserId, + Name = DomainConstants.DeletedUserName, + CreatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Utc).AddTicks(1), TimeSpan.Zero), + UpdatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Utc).AddTicks(2), TimeSpan.Zero) + }); } } diff --git a/PrismaDotnetApi/PrismaApi.Infrastructure/Context/AppDbContextFactory.cs b/PrismaDotnetApi/PrismaApi.Infrastructure/Context/AppDbContextFactory.cs index a037f53..85de9c1 100644 --- a/PrismaDotnetApi/PrismaApi.Infrastructure/Context/AppDbContextFactory.cs +++ b/PrismaDotnetApi/PrismaApi.Infrastructure/Context/AppDbContextFactory.cs @@ -9,7 +9,8 @@ public class AppDbContextFactory : IDesignTimeDbContextFactory { public AppDbContext CreateDbContext(string[] args) { - var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); + // var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); + var environment = "Local"; IConfigurationBuilder configurationBuilder = new ConfigurationBuilder(); var apiPath = Path.Combine( diff --git a/PrismaDotnetApi/PrismaApi.Test/Mocks/TestUserService.cs b/PrismaDotnetApi/PrismaApi.Test/Mocks/TestUserService.cs index fca16e9..7df34bd 100644 --- a/PrismaDotnetApi/PrismaApi.Test/Mocks/TestUserService.cs +++ b/PrismaDotnetApi/PrismaApi.Test/Mocks/TestUserService.cs @@ -55,4 +55,14 @@ public async Task> GetByIdsAsync(IEnumerable ids) var users = await _userRepository.GetByIdsAsync(ids, withTracking: false); return users.ToOutgoingDtos(); } + + public async Task DeleteUserAsync(string userId, UserOutgoingDto user, CancellationToken ct = default) + { + // user is the user making the request, and only allows to delete itself. + if (userId != user.Id) + { + throw new InvalidOperationException("Users can only delete themselves."); + } + await _userRepository.DeleteByIdsAsync([userId], ct: ct); + } } diff --git a/PrismaDotnetApi/SqlServerMigrations/20260608114526_AddDeletedUser.Designer.cs b/PrismaDotnetApi/SqlServerMigrations/20260608114526_AddDeletedUser.Designer.cs new file mode 100644 index 0000000..aafedd8 --- /dev/null +++ b/PrismaDotnetApi/SqlServerMigrations/20260608114526_AddDeletedUser.Designer.cs @@ -0,0 +1,1557 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using PrismaApi.Infrastructure.Context; + +#nullable disable + +namespace PrismaApi.Infrastructure.Migrations +{ + [DbContext(typeof(AppDbContext))] + [Migration("20260608114526_AddDeletedUser")] + partial class AddDeletedUser + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "9.0.13") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Assessment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("IsCompleted") + .HasColumnType("bit"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Assessments", (string)null); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.BoardNode", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Color") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Data") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Height") + .HasColumnType("float"); + + b.Property("Opacity") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasDefaultValue(100); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("Rotation") + .HasColumnType("float"); + + b.Property("StrokeStyle") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("nvarchar(max)") + .HasDefaultValue("Solid"); + + b.Property("StrokeWidth") + .ValueGeneratedOnAdd() + .HasColumnType("real") + .HasDefaultValue(8f); + + b.Property("TextSize") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasDefaultValue(24); + + b.Property("Type") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Width") + .HasColumnType("float"); + + b.Property("XPosition") + .HasColumnType("float"); + + b.Property("YPosition") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("BoardNode", (string)null); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Decision", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("IssueId") + .HasColumnType("uniqueidentifier"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.HasKey("Id"); + + b.HasIndex("IssueId") + .IsUnique(); + + b.HasIndex("ProjectId"); + + b.ToTable("Decisions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DecisionQualityAssessment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AppropriateFrame") + .HasColumnType("int"); + + b.Property("AssessmentId") + .HasColumnType("uniqueidentifier"); + + b.Property("Comment") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("nvarchar(max)"); + + b.Property("CommitmentToAction") + .HasColumnType("int"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("DoableAlternatives") + .HasColumnType("int"); + + b.Property("InformationReliability") + .HasColumnType("int"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("ReasoningCorrectness") + .HasColumnType("int"); + + b.Property("TradeOffAnalysis") + .HasColumnType("int"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("AssessmentId"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("DecisionQualityAssessments", (string)null); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbability", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("OutcomeId") + .HasColumnType("uniqueidentifier"); + + b.Property("Probability") + .HasPrecision(53) + .HasColumnType("float(53)"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("UncertaintyId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.HasKey("Id"); + + b.HasIndex("OutcomeId"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UncertaintyId"); + + b.ToTable("DiscreteProbabilities"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOption", b => + { + b.Property("DiscreteProbabilityId") + .HasColumnType("uniqueidentifier"); + + b.Property("ParentOptionId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("DiscreteProbabilityId", "ParentOptionId"); + + b.HasIndex("ParentOptionId"); + + b.ToTable("DiscreteProbabilityParentOptions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOutcome", b => + { + b.Property("DiscreteProbabilityId") + .HasColumnType("uniqueidentifier"); + + b.Property("ParentOutcomeId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("DiscreteProbabilityId", "ParentOutcomeId"); + + b.HasIndex("ParentOutcomeId"); + + b.ToTable("DiscreteProbabilityParentOutcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("UtilityId") + .HasColumnType("uniqueidentifier"); + + b.Property("UtilityValue") + .HasPrecision(53) + .HasColumnType("float(53)"); + + b.Property("ValueMetricId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UtilityId"); + + b.HasIndex("ValueMetricId"); + + b.ToTable("DiscreteUtilities"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOption", b => + { + b.Property("DiscreteUtilityId") + .HasColumnType("uniqueidentifier"); + + b.Property("ParentOptionId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("DiscreteUtilityId", "ParentOptionId"); + + b.HasIndex("ParentOptionId"); + + b.ToTable("DiscreteUtilityParentOptions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOutcome", b => + { + b.Property("DiscreteUtilityId") + .HasColumnType("uniqueidentifier"); + + b.Property("ParentOutcomeId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("DiscreteUtilityId", "ParentOutcomeId"); + + b.HasIndex("ParentOutcomeId"); + + b.ToTable("DiscreteUtilityParentOutcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Edge", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("HeadId") + .HasColumnType("uniqueidentifier"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("TailId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.HasKey("Id"); + + b.HasIndex("HeadId"); + + b.HasIndex("ProjectId"); + + b.HasIndex("TailId"); + + b.ToTable("Edges"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Boundary") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("Order") + .HasColumnType("int"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Issues"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("IssueId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.HasKey("Id"); + + b.HasIndex("IssueId") + .IsUnique(); + + b.HasIndex("ProjectId"); + + b.ToTable("Nodes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.NodeStyle", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("NodeId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("XPosition") + .HasColumnType("float"); + + b.Property("YPosition") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.HasIndex("NodeId") + .IsUnique(); + + b.ToTable("NodeStyles"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Objective", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Objectives"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("DecisionId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Utility") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.HasIndex("DecisionId"); + + b.HasIndex("ProjectId"); + + b.ToTable("Options"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Outcome", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("UncertaintyId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Utility") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UncertaintyId"); + + b.ToTable("Outcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("EndDate") + .HasColumnType("datetimeoffset"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("OpportunityStatement") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("nvarchar(max)"); + + b.Property("ParentProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("ParentProjectName") + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("Public") + .HasColumnType("bit"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Projects"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.ProjectRole", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("Role") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.HasIndex("UserId"); + + b.ToTable("ProjectRoles"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("nvarchar(max)"); + + b.Property("Icon") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("IconColor") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("Rationale") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("nvarchar(max)"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Strategies"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.StrategyOption", b => + { + b.Property("StrategyId") + .HasColumnType("uniqueidentifier"); + + b.Property("OptionId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("StrategyId", "OptionId"); + + b.HasIndex("OptionId"); + + b.ToTable("StrategyOptions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("IsKey") + .HasColumnType("bit"); + + b.Property("IssueId") + .HasColumnType("uniqueidentifier"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.HasKey("Id"); + + b.HasIndex("IssueId") + .IsUnique(); + + b.HasIndex("ProjectId"); + + b.ToTable("Uncertainties"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.User", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.HasKey("Id"); + + b.ToTable("Users"); + + b.HasData( + new + { + Id = "d008bfdf-fe89-48f3-80a8-777bba4d9bbf", + CreatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), + Name = "Deleted User", + UpdatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) + }); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("IssueId") + .HasColumnType("uniqueidentifier"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.HasKey("Id"); + + b.HasIndex("IssueId") + .IsUnique(); + + b.HasIndex("ProjectId"); + + b.ToTable("Utilities"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.ValueMetric", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.HasKey("Id"); + + b.ToTable("ValueMetrics"); + + b.HasData( + new + { + Id = new Guid("288e0811-7ab6-5d24-b80c-9fa925b848a6"), + CreatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), + Name = "value", + UpdatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) + }); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Assessment", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Assessments") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.BoardNode", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("BoardNodes") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Decision", b => + { + b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") + .WithOne("Decision") + .HasForeignKey("PrismaApi.Domain.Entities.Decision", "IssueId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Issue"); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DecisionQualityAssessment", b => + { + b.HasOne("PrismaApi.Domain.Entities.Assessment", "Assessment") + .WithMany("DecisionQualityAssessments") + .HasForeignKey("AssessmentId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("Assessment"); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbability", b => + { + b.HasOne("PrismaApi.Domain.Entities.Outcome", "Outcome") + .WithMany() + .HasForeignKey("OutcomeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Uncertainty", "Uncertainty") + .WithMany("DiscreteProbabilities") + .HasForeignKey("UncertaintyId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Outcome"); + + b.Navigation("Project"); + + b.Navigation("Uncertainty"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOption", b => + { + b.HasOne("PrismaApi.Domain.Entities.DiscreteProbability", "DiscreteProbability") + .WithMany("ParentOptions") + .HasForeignKey("DiscreteProbabilityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Option", "ParentOption") + .WithMany() + .HasForeignKey("ParentOptionId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("DiscreteProbability"); + + b.Navigation("ParentOption"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOutcome", b => + { + b.HasOne("PrismaApi.Domain.Entities.DiscreteProbability", "DiscreteProbability") + .WithMany("ParentOutcomes") + .HasForeignKey("DiscreteProbabilityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Outcome", "ParentOutcome") + .WithMany() + .HasForeignKey("ParentOutcomeId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("DiscreteProbability"); + + b.Navigation("ParentOutcome"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => + { + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Utility", "Utility") + .WithMany("DiscreteUtilities") + .HasForeignKey("UtilityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.ValueMetric", "ValueMetric") + .WithMany() + .HasForeignKey("ValueMetricId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Project"); + + b.Navigation("Utility"); + + b.Navigation("ValueMetric"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOption", b => + { + b.HasOne("PrismaApi.Domain.Entities.DiscreteUtility", "DiscreteUtility") + .WithMany("ParentOptions") + .HasForeignKey("DiscreteUtilityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Option", "ParentOption") + .WithMany() + .HasForeignKey("ParentOptionId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("DiscreteUtility"); + + b.Navigation("ParentOption"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOutcome", b => + { + b.HasOne("PrismaApi.Domain.Entities.DiscreteUtility", "DiscreteUtility") + .WithMany("ParentOutcomes") + .HasForeignKey("DiscreteUtilityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Outcome", "ParentOutcome") + .WithMany() + .HasForeignKey("ParentOutcomeId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("DiscreteUtility"); + + b.Navigation("ParentOutcome"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Edge", b => + { + b.HasOne("PrismaApi.Domain.Entities.Node", "HeadNode") + .WithMany("HeadEdges") + .HasForeignKey("HeadId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Edges") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Node", "TailNode") + .WithMany("TailEdges") + .HasForeignKey("TailId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("HeadNode"); + + b.Navigation("Project"); + + b.Navigation("TailNode"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Issues") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => + { + b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") + .WithOne("Node") + .HasForeignKey("PrismaApi.Domain.Entities.Node", "IssueId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Nodes") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Issue"); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.NodeStyle", b => + { + b.HasOne("PrismaApi.Domain.Entities.Node", "Node") + .WithOne("NodeStyle") + .HasForeignKey("PrismaApi.Domain.Entities.NodeStyle", "NodeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Node"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Objective", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Objectives") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => + { + b.HasOne("PrismaApi.Domain.Entities.Decision", "Decision") + .WithMany("Options") + .HasForeignKey("DecisionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Decision"); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Outcome", b => + { + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Uncertainty", "Uncertainty") + .WithMany("Outcomes") + .HasForeignKey("UncertaintyId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Project"); + + b.Navigation("Uncertainty"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.ProjectRole", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("ProjectRoles") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "User") + .WithMany("ProjectRoles") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Strategies") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.StrategyOption", b => + { + b.HasOne("PrismaApi.Domain.Entities.Option", "Option") + .WithMany("StrategyOptions") + .HasForeignKey("OptionId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Strategy", "Strategy") + .WithMany("StrategyOptions") + .HasForeignKey("StrategyId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Option"); + + b.Navigation("Strategy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => + { + b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") + .WithOne("Uncertainty") + .HasForeignKey("PrismaApi.Domain.Entities.Uncertainty", "IssueId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Issue"); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => + { + b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") + .WithOne("Utility") + .HasForeignKey("PrismaApi.Domain.Entities.Utility", "IssueId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Issue"); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Assessment", b => + { + b.Navigation("DecisionQualityAssessments"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Decision", b => + { + b.Navigation("Options"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbability", b => + { + b.Navigation("ParentOptions"); + + b.Navigation("ParentOutcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => + { + b.Navigation("ParentOptions"); + + b.Navigation("ParentOutcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => + { + b.Navigation("Decision"); + + b.Navigation("Node"); + + b.Navigation("Uncertainty"); + + b.Navigation("Utility"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => + { + b.Navigation("HeadEdges"); + + b.Navigation("NodeStyle"); + + b.Navigation("TailEdges"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => + { + b.Navigation("StrategyOptions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => + { + b.Navigation("Assessments"); + + b.Navigation("BoardNodes"); + + b.Navigation("Edges"); + + b.Navigation("Issues"); + + b.Navigation("Nodes"); + + b.Navigation("Objectives"); + + b.Navigation("ProjectRoles"); + + b.Navigation("Strategies"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => + { + b.Navigation("StrategyOptions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => + { + b.Navigation("DiscreteProbabilities"); + + b.Navigation("Outcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.User", b => + { + b.Navigation("ProjectRoles"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => + { + b.Navigation("DiscreteUtilities"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/PrismaDotnetApi/SqlServerMigrations/20260608114526_AddDeletedUser.cs b/PrismaDotnetApi/SqlServerMigrations/20260608114526_AddDeletedUser.cs new file mode 100644 index 0000000..95eeeb4 --- /dev/null +++ b/PrismaDotnetApi/SqlServerMigrations/20260608114526_AddDeletedUser.cs @@ -0,0 +1,29 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace PrismaApi.Infrastructure.Migrations +{ + /// + public partial class AddDeletedUser : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.InsertData( + table: "Users", + columns: new[] { "Id", "CreatedAt", "Name", "UpdatedAt" }, + values: new object[] { "d008bfdf-fe89-48f3-80a8-777bba4d9bbf", new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), "Deleted User", new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) }); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DeleteData( + table: "Users", + keyColumn: "Id", + keyValue: "d008bfdf-fe89-48f3-80a8-777bba4d9bbf"); + } + } +} diff --git a/PrismaDotnetApi/SqlServerMigrations/AppDbContextModelSnapshot.cs b/PrismaDotnetApi/SqlServerMigrations/AppDbContextModelSnapshot.cs index 835f697..0c21d12 100644 --- a/PrismaDotnetApi/SqlServerMigrations/AppDbContextModelSnapshot.cs +++ b/PrismaDotnetApi/SqlServerMigrations/AppDbContextModelSnapshot.cs @@ -864,6 +864,15 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasKey("Id"); b.ToTable("Users"); + + b.HasData( + new + { + Id = "d008bfdf-fe89-48f3-80a8-777bba4d9bbf", + CreatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), + Name = "Deleted User", + UpdatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) + }); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => diff --git a/PrismaDotnetApi/SqliteMigrations/20260608114505_AddDeletedUser.Designer.cs b/PrismaDotnetApi/SqliteMigrations/20260608114505_AddDeletedUser.Designer.cs new file mode 100644 index 0000000..edb69bb --- /dev/null +++ b/PrismaDotnetApi/SqliteMigrations/20260608114505_AddDeletedUser.Designer.cs @@ -0,0 +1,1552 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using PrismaApi.Infrastructure.Context; + +#nullable disable + +namespace PrismaApi.Infrastructure.Migrations +{ + [DbContext(typeof(AppDbContext))] + [Migration("20260608114505_AddDeletedUser")] + partial class AddDeletedUser + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "9.0.13"); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Assessment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("IsCompleted") + .HasColumnType("INTEGER"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Assessments", (string)null); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.BoardNode", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("Color") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Data") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Height") + .HasColumnType("REAL"); + + b.Property("Opacity") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasDefaultValue(100); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("Rotation") + .HasColumnType("REAL"); + + b.Property("StrokeStyle") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("TEXT") + .HasDefaultValue("Solid"); + + b.Property("StrokeWidth") + .ValueGeneratedOnAdd() + .HasColumnType("REAL") + .HasDefaultValue(8f); + + b.Property("TextSize") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasDefaultValue(24); + + b.Property("Type") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Width") + .HasColumnType("REAL"); + + b.Property("XPosition") + .HasColumnType("REAL"); + + b.Property("YPosition") + .HasColumnType("REAL"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("BoardNode", (string)null); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Decision", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("IssueId") + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("IssueId") + .IsUnique(); + + b.HasIndex("ProjectId"); + + b.ToTable("Decisions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DecisionQualityAssessment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("AppropriateFrame") + .HasColumnType("INTEGER"); + + b.Property("AssessmentId") + .HasColumnType("TEXT"); + + b.Property("Comment") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("TEXT"); + + b.Property("CommitmentToAction") + .HasColumnType("INTEGER"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("DoableAlternatives") + .HasColumnType("INTEGER"); + + b.Property("InformationReliability") + .HasColumnType("INTEGER"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("ReasoningCorrectness") + .HasColumnType("INTEGER"); + + b.Property("TradeOffAnalysis") + .HasColumnType("INTEGER"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("AssessmentId"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("DecisionQualityAssessments", (string)null); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbability", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("OutcomeId") + .HasColumnType("TEXT"); + + b.Property("Probability") + .HasPrecision(53) + .HasColumnType("REAL"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("UncertaintyId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("OutcomeId"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UncertaintyId"); + + b.ToTable("DiscreteProbabilities"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOption", b => + { + b.Property("DiscreteProbabilityId") + .HasColumnType("TEXT"); + + b.Property("ParentOptionId") + .HasColumnType("TEXT"); + + b.HasKey("DiscreteProbabilityId", "ParentOptionId"); + + b.HasIndex("ParentOptionId"); + + b.ToTable("DiscreteProbabilityParentOptions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOutcome", b => + { + b.Property("DiscreteProbabilityId") + .HasColumnType("TEXT"); + + b.Property("ParentOutcomeId") + .HasColumnType("TEXT"); + + b.HasKey("DiscreteProbabilityId", "ParentOutcomeId"); + + b.HasIndex("ParentOutcomeId"); + + b.ToTable("DiscreteProbabilityParentOutcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("UtilityId") + .HasColumnType("TEXT"); + + b.Property("UtilityValue") + .HasPrecision(53) + .HasColumnType("REAL"); + + b.Property("ValueMetricId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UtilityId"); + + b.HasIndex("ValueMetricId"); + + b.ToTable("DiscreteUtilities"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOption", b => + { + b.Property("DiscreteUtilityId") + .HasColumnType("TEXT"); + + b.Property("ParentOptionId") + .HasColumnType("TEXT"); + + b.HasKey("DiscreteUtilityId", "ParentOptionId"); + + b.HasIndex("ParentOptionId"); + + b.ToTable("DiscreteUtilityParentOptions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOutcome", b => + { + b.Property("DiscreteUtilityId") + .HasColumnType("TEXT"); + + b.Property("ParentOutcomeId") + .HasColumnType("TEXT"); + + b.HasKey("DiscreteUtilityId", "ParentOutcomeId"); + + b.HasIndex("ParentOutcomeId"); + + b.ToTable("DiscreteUtilityParentOutcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Edge", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("HeadId") + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("TailId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("HeadId"); + + b.HasIndex("ProjectId"); + + b.HasIndex("TailId"); + + b.ToTable("Edges"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("Boundary") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("Order") + .HasColumnType("INTEGER"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Issues"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("IssueId") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("IssueId") + .IsUnique(); + + b.HasIndex("ProjectId"); + + b.ToTable("Nodes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.NodeStyle", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("NodeId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("XPosition") + .HasColumnType("REAL"); + + b.Property("YPosition") + .HasColumnType("REAL"); + + b.HasKey("Id"); + + b.HasIndex("NodeId") + .IsUnique(); + + b.ToTable("NodeStyles"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Objective", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Objectives"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("DecisionId") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("Utility") + .HasColumnType("REAL"); + + b.HasKey("Id"); + + b.HasIndex("DecisionId"); + + b.HasIndex("ProjectId"); + + b.ToTable("Options"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Outcome", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("UncertaintyId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("Utility") + .HasColumnType("REAL"); + + b.HasKey("Id"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UncertaintyId"); + + b.ToTable("Outcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("EndDate") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("OpportunityStatement") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("TEXT"); + + b.Property("ParentProjectId") + .HasColumnType("TEXT"); + + b.Property("ParentProjectName") + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("Public") + .HasColumnType("INTEGER"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Projects"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.ProjectRole", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("Role") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.HasIndex("UserId"); + + b.ToTable("ProjectRoles"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("TEXT"); + + b.Property("Icon") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("IconColor") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("Rationale") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Strategies"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.StrategyOption", b => + { + b.Property("StrategyId") + .HasColumnType("TEXT"); + + b.Property("OptionId") + .HasColumnType("TEXT"); + + b.HasKey("StrategyId", "OptionId"); + + b.HasIndex("OptionId"); + + b.ToTable("StrategyOptions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("IsKey") + .HasColumnType("INTEGER"); + + b.Property("IssueId") + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("IssueId") + .IsUnique(); + + b.HasIndex("ProjectId"); + + b.ToTable("Uncertainties"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.User", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.ToTable("Users"); + + b.HasData( + new + { + Id = "d008bfdf-fe89-48f3-80a8-777bba4d9bbf", + CreatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), + Name = "Deleted User", + UpdatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) + }); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("IssueId") + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("IssueId") + .IsUnique(); + + b.HasIndex("ProjectId"); + + b.ToTable("Utilities"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.ValueMetric", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.ToTable("ValueMetrics"); + + b.HasData( + new + { + Id = new Guid("288e0811-7ab6-5d24-b80c-9fa925b848a6"), + CreatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), + Name = "value", + UpdatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) + }); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Assessment", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Assessments") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.BoardNode", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("BoardNodes") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Decision", b => + { + b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") + .WithOne("Decision") + .HasForeignKey("PrismaApi.Domain.Entities.Decision", "IssueId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Issue"); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DecisionQualityAssessment", b => + { + b.HasOne("PrismaApi.Domain.Entities.Assessment", "Assessment") + .WithMany("DecisionQualityAssessments") + .HasForeignKey("AssessmentId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("Assessment"); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbability", b => + { + b.HasOne("PrismaApi.Domain.Entities.Outcome", "Outcome") + .WithMany() + .HasForeignKey("OutcomeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Uncertainty", "Uncertainty") + .WithMany("DiscreteProbabilities") + .HasForeignKey("UncertaintyId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Outcome"); + + b.Navigation("Project"); + + b.Navigation("Uncertainty"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOption", b => + { + b.HasOne("PrismaApi.Domain.Entities.DiscreteProbability", "DiscreteProbability") + .WithMany("ParentOptions") + .HasForeignKey("DiscreteProbabilityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Option", "ParentOption") + .WithMany() + .HasForeignKey("ParentOptionId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("DiscreteProbability"); + + b.Navigation("ParentOption"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOutcome", b => + { + b.HasOne("PrismaApi.Domain.Entities.DiscreteProbability", "DiscreteProbability") + .WithMany("ParentOutcomes") + .HasForeignKey("DiscreteProbabilityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Outcome", "ParentOutcome") + .WithMany() + .HasForeignKey("ParentOutcomeId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("DiscreteProbability"); + + b.Navigation("ParentOutcome"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => + { + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Utility", "Utility") + .WithMany("DiscreteUtilities") + .HasForeignKey("UtilityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.ValueMetric", "ValueMetric") + .WithMany() + .HasForeignKey("ValueMetricId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Project"); + + b.Navigation("Utility"); + + b.Navigation("ValueMetric"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOption", b => + { + b.HasOne("PrismaApi.Domain.Entities.DiscreteUtility", "DiscreteUtility") + .WithMany("ParentOptions") + .HasForeignKey("DiscreteUtilityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Option", "ParentOption") + .WithMany() + .HasForeignKey("ParentOptionId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("DiscreteUtility"); + + b.Navigation("ParentOption"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOutcome", b => + { + b.HasOne("PrismaApi.Domain.Entities.DiscreteUtility", "DiscreteUtility") + .WithMany("ParentOutcomes") + .HasForeignKey("DiscreteUtilityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Outcome", "ParentOutcome") + .WithMany() + .HasForeignKey("ParentOutcomeId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("DiscreteUtility"); + + b.Navigation("ParentOutcome"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Edge", b => + { + b.HasOne("PrismaApi.Domain.Entities.Node", "HeadNode") + .WithMany("HeadEdges") + .HasForeignKey("HeadId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Edges") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Node", "TailNode") + .WithMany("TailEdges") + .HasForeignKey("TailId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("HeadNode"); + + b.Navigation("Project"); + + b.Navigation("TailNode"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Issues") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => + { + b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") + .WithOne("Node") + .HasForeignKey("PrismaApi.Domain.Entities.Node", "IssueId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Nodes") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Issue"); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.NodeStyle", b => + { + b.HasOne("PrismaApi.Domain.Entities.Node", "Node") + .WithOne("NodeStyle") + .HasForeignKey("PrismaApi.Domain.Entities.NodeStyle", "NodeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Node"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Objective", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Objectives") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => + { + b.HasOne("PrismaApi.Domain.Entities.Decision", "Decision") + .WithMany("Options") + .HasForeignKey("DecisionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Decision"); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Outcome", b => + { + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Uncertainty", "Uncertainty") + .WithMany("Outcomes") + .HasForeignKey("UncertaintyId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Project"); + + b.Navigation("Uncertainty"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.ProjectRole", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("ProjectRoles") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "User") + .WithMany("ProjectRoles") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Strategies") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.StrategyOption", b => + { + b.HasOne("PrismaApi.Domain.Entities.Option", "Option") + .WithMany("StrategyOptions") + .HasForeignKey("OptionId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Strategy", "Strategy") + .WithMany("StrategyOptions") + .HasForeignKey("StrategyId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Option"); + + b.Navigation("Strategy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => + { + b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") + .WithOne("Uncertainty") + .HasForeignKey("PrismaApi.Domain.Entities.Uncertainty", "IssueId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Issue"); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => + { + b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") + .WithOne("Utility") + .HasForeignKey("PrismaApi.Domain.Entities.Utility", "IssueId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Issue"); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Assessment", b => + { + b.Navigation("DecisionQualityAssessments"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Decision", b => + { + b.Navigation("Options"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbability", b => + { + b.Navigation("ParentOptions"); + + b.Navigation("ParentOutcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => + { + b.Navigation("ParentOptions"); + + b.Navigation("ParentOutcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => + { + b.Navigation("Decision"); + + b.Navigation("Node"); + + b.Navigation("Uncertainty"); + + b.Navigation("Utility"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => + { + b.Navigation("HeadEdges"); + + b.Navigation("NodeStyle"); + + b.Navigation("TailEdges"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => + { + b.Navigation("StrategyOptions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => + { + b.Navigation("Assessments"); + + b.Navigation("BoardNodes"); + + b.Navigation("Edges"); + + b.Navigation("Issues"); + + b.Navigation("Nodes"); + + b.Navigation("Objectives"); + + b.Navigation("ProjectRoles"); + + b.Navigation("Strategies"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => + { + b.Navigation("StrategyOptions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => + { + b.Navigation("DiscreteProbabilities"); + + b.Navigation("Outcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.User", b => + { + b.Navigation("ProjectRoles"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => + { + b.Navigation("DiscreteUtilities"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/PrismaDotnetApi/SqliteMigrations/20260608114505_AddDeletedUser.cs b/PrismaDotnetApi/SqliteMigrations/20260608114505_AddDeletedUser.cs new file mode 100644 index 0000000..95eeeb4 --- /dev/null +++ b/PrismaDotnetApi/SqliteMigrations/20260608114505_AddDeletedUser.cs @@ -0,0 +1,29 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace PrismaApi.Infrastructure.Migrations +{ + /// + public partial class AddDeletedUser : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.InsertData( + table: "Users", + columns: new[] { "Id", "CreatedAt", "Name", "UpdatedAt" }, + values: new object[] { "d008bfdf-fe89-48f3-80a8-777bba4d9bbf", new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), "Deleted User", new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) }); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DeleteData( + table: "Users", + keyColumn: "Id", + keyValue: "d008bfdf-fe89-48f3-80a8-777bba4d9bbf"); + } + } +} diff --git a/PrismaDotnetApi/SqliteMigrations/AppDbContextModelSnapshot.cs b/PrismaDotnetApi/SqliteMigrations/AppDbContextModelSnapshot.cs index 17ee3a4..65db8d8 100644 --- a/PrismaDotnetApi/SqliteMigrations/AppDbContextModelSnapshot.cs +++ b/PrismaDotnetApi/SqliteMigrations/AppDbContextModelSnapshot.cs @@ -859,6 +859,15 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasKey("Id"); b.ToTable("Users"); + + b.HasData( + new + { + Id = "d008bfdf-fe89-48f3-80a8-777bba4d9bbf", + CreatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), + Name = "Deleted User", + UpdatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) + }); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => From 56a4d7cfca329ef9ee560712330a683106bbd617 Mon Sep 17 00:00:00 2001 From: EinarSalbouvet Date: Wed, 15 Jul 2026 11:43:05 +0200 Subject: [PATCH 02/17] Remove deleted user data from Users table and associated migration files --- .../20260608114526_AddDeletedUser.Designer.cs | 1557 ----------------- .../20260608114526_AddDeletedUser.cs | 29 - .../AppDbContextModelSnapshot.cs | 9 - .../20260608114505_AddDeletedUser.Designer.cs | 1552 ---------------- .../20260608114505_AddDeletedUser.cs | 29 - .../AppDbContextModelSnapshot.cs | 9 - 6 files changed, 3185 deletions(-) delete mode 100644 PrismaDotnetApi/SqlServerMigrations/20260608114526_AddDeletedUser.Designer.cs delete mode 100644 PrismaDotnetApi/SqlServerMigrations/20260608114526_AddDeletedUser.cs delete mode 100644 PrismaDotnetApi/SqliteMigrations/20260608114505_AddDeletedUser.Designer.cs delete mode 100644 PrismaDotnetApi/SqliteMigrations/20260608114505_AddDeletedUser.cs diff --git a/PrismaDotnetApi/SqlServerMigrations/20260608114526_AddDeletedUser.Designer.cs b/PrismaDotnetApi/SqlServerMigrations/20260608114526_AddDeletedUser.Designer.cs deleted file mode 100644 index aafedd8..0000000 --- a/PrismaDotnetApi/SqlServerMigrations/20260608114526_AddDeletedUser.Designer.cs +++ /dev/null @@ -1,1557 +0,0 @@ -// -using System; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using PrismaApi.Infrastructure.Context; - -#nullable disable - -namespace PrismaApi.Infrastructure.Migrations -{ - [DbContext(typeof(AppDbContext))] - [Migration("20260608114526_AddDeletedUser")] - partial class AddDeletedUser - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "9.0.13") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Assessment", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.Property("IsCompleted") - .HasColumnType("bit"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Assessments", (string)null); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.BoardNode", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("Color") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.Property("Data") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Height") - .HasColumnType("float"); - - b.Property("Opacity") - .ValueGeneratedOnAdd() - .HasColumnType("int") - .HasDefaultValue(100); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("Rotation") - .HasColumnType("float"); - - b.Property("StrokeStyle") - .IsRequired() - .ValueGeneratedOnAdd() - .HasColumnType("nvarchar(max)") - .HasDefaultValue("Solid"); - - b.Property("StrokeWidth") - .ValueGeneratedOnAdd() - .HasColumnType("real") - .HasDefaultValue(8f); - - b.Property("TextSize") - .ValueGeneratedOnAdd() - .HasColumnType("int") - .HasDefaultValue(24); - - b.Property("Type") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.Property("Width") - .HasColumnType("float"); - - b.Property("XPosition") - .HasColumnType("float"); - - b.Property("YPosition") - .HasColumnType("float"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("BoardNode", (string)null); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Decision", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("IssueId") - .HasColumnType("uniqueidentifier"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("Type") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.HasKey("Id"); - - b.HasIndex("IssueId") - .IsUnique(); - - b.HasIndex("ProjectId"); - - b.ToTable("Decisions"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DecisionQualityAssessment", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("AppropriateFrame") - .HasColumnType("int"); - - b.Property("AssessmentId") - .HasColumnType("uniqueidentifier"); - - b.Property("Comment") - .IsRequired() - .HasMaxLength(6000) - .HasColumnType("nvarchar(max)"); - - b.Property("CommitmentToAction") - .HasColumnType("int"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.Property("DoableAlternatives") - .HasColumnType("int"); - - b.Property("InformationReliability") - .HasColumnType("int"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("ReasoningCorrectness") - .HasColumnType("int"); - - b.Property("TradeOffAnalysis") - .HasColumnType("int"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.HasKey("Id"); - - b.HasIndex("AssessmentId"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("DecisionQualityAssessments", (string)null); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbability", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("OutcomeId") - .HasColumnType("uniqueidentifier"); - - b.Property("Probability") - .HasPrecision(53) - .HasColumnType("float(53)"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("UncertaintyId") - .HasColumnType("uniqueidentifier"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.HasKey("Id"); - - b.HasIndex("OutcomeId"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UncertaintyId"); - - b.ToTable("DiscreteProbabilities"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOption", b => - { - b.Property("DiscreteProbabilityId") - .HasColumnType("uniqueidentifier"); - - b.Property("ParentOptionId") - .HasColumnType("uniqueidentifier"); - - b.HasKey("DiscreteProbabilityId", "ParentOptionId"); - - b.HasIndex("ParentOptionId"); - - b.ToTable("DiscreteProbabilityParentOptions"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOutcome", b => - { - b.Property("DiscreteProbabilityId") - .HasColumnType("uniqueidentifier"); - - b.Property("ParentOutcomeId") - .HasColumnType("uniqueidentifier"); - - b.HasKey("DiscreteProbabilityId", "ParentOutcomeId"); - - b.HasIndex("ParentOutcomeId"); - - b.ToTable("DiscreteProbabilityParentOutcomes"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("UtilityId") - .HasColumnType("uniqueidentifier"); - - b.Property("UtilityValue") - .HasPrecision(53) - .HasColumnType("float(53)"); - - b.Property("ValueMetricId") - .HasColumnType("uniqueidentifier"); - - b.HasKey("Id"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UtilityId"); - - b.HasIndex("ValueMetricId"); - - b.ToTable("DiscreteUtilities"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOption", b => - { - b.Property("DiscreteUtilityId") - .HasColumnType("uniqueidentifier"); - - b.Property("ParentOptionId") - .HasColumnType("uniqueidentifier"); - - b.HasKey("DiscreteUtilityId", "ParentOptionId"); - - b.HasIndex("ParentOptionId"); - - b.ToTable("DiscreteUtilityParentOptions"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOutcome", b => - { - b.Property("DiscreteUtilityId") - .HasColumnType("uniqueidentifier"); - - b.Property("ParentOutcomeId") - .HasColumnType("uniqueidentifier"); - - b.HasKey("DiscreteUtilityId", "ParentOutcomeId"); - - b.HasIndex("ParentOutcomeId"); - - b.ToTable("DiscreteUtilityParentOutcomes"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Edge", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("HeadId") - .HasColumnType("uniqueidentifier"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("TailId") - .HasColumnType("uniqueidentifier"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.HasKey("Id"); - - b.HasIndex("HeadId"); - - b.HasIndex("ProjectId"); - - b.HasIndex("TailId"); - - b.ToTable("Edges"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("Boundary") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.Property("Description") - .IsRequired() - .HasMaxLength(6000) - .HasColumnType("nvarchar(max)"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("Order") - .HasColumnType("int"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("Type") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Issues"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("IssueId") - .HasColumnType("uniqueidentifier"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.HasKey("Id"); - - b.HasIndex("IssueId") - .IsUnique(); - - b.HasIndex("ProjectId"); - - b.ToTable("Nodes"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.NodeStyle", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("NodeId") - .HasColumnType("uniqueidentifier"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("XPosition") - .HasColumnType("float"); - - b.Property("YPosition") - .HasColumnType("float"); - - b.HasKey("Id"); - - b.HasIndex("NodeId") - .IsUnique(); - - b.ToTable("NodeStyles"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Objective", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.Property("Description") - .IsRequired() - .HasMaxLength(6000) - .HasColumnType("nvarchar(max)"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("Type") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Objectives"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("DecisionId") - .HasColumnType("uniqueidentifier"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("Utility") - .HasColumnType("float"); - - b.HasKey("Id"); - - b.HasIndex("DecisionId"); - - b.HasIndex("ProjectId"); - - b.ToTable("Options"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Outcome", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("UncertaintyId") - .HasColumnType("uniqueidentifier"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("Utility") - .HasColumnType("float"); - - b.HasKey("Id"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UncertaintyId"); - - b.ToTable("Outcomes"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.Property("EndDate") - .HasColumnType("datetimeoffset"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("OpportunityStatement") - .IsRequired() - .HasMaxLength(6000) - .HasColumnType("nvarchar(max)"); - - b.Property("ParentProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("ParentProjectName") - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("Public") - .HasColumnType("bit"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Projects"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.ProjectRole", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("Role") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.Property("UserId") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UpdatedById"); - - b.HasIndex("UserId"); - - b.ToTable("ProjectRoles"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.Property("Description") - .IsRequired() - .HasMaxLength(6000) - .HasColumnType("nvarchar(max)"); - - b.Property("Icon") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("IconColor") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("Rationale") - .IsRequired() - .HasMaxLength(6000) - .HasColumnType("nvarchar(max)"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Strategies"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.StrategyOption", b => - { - b.Property("StrategyId") - .HasColumnType("uniqueidentifier"); - - b.Property("OptionId") - .HasColumnType("uniqueidentifier"); - - b.HasKey("StrategyId", "OptionId"); - - b.HasIndex("OptionId"); - - b.ToTable("StrategyOptions"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("IsKey") - .HasColumnType("bit"); - - b.Property("IssueId") - .HasColumnType("uniqueidentifier"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.HasKey("Id"); - - b.HasIndex("IssueId") - .IsUnique(); - - b.HasIndex("ProjectId"); - - b.ToTable("Uncertainties"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.User", b => - { - b.Property("Id") - .HasColumnType("nvarchar(450)"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.HasKey("Id"); - - b.ToTable("Users"); - - b.HasData( - new - { - Id = "d008bfdf-fe89-48f3-80a8-777bba4d9bbf", - CreatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), - Name = "Deleted User", - UpdatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) - }); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("IssueId") - .HasColumnType("uniqueidentifier"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.HasKey("Id"); - - b.HasIndex("IssueId") - .IsUnique(); - - b.HasIndex("ProjectId"); - - b.ToTable("Utilities"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.ValueMetric", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.HasKey("Id"); - - b.ToTable("ValueMetrics"); - - b.HasData( - new - { - Id = new Guid("288e0811-7ab6-5d24-b80c-9fa925b848a6"), - CreatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), - Name = "value", - UpdatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) - }); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Assessment", b => - { - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("Assessments") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("Project"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.BoardNode", b => - { - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("BoardNodes") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("Project"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Decision", b => - { - b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") - .WithOne("Decision") - .HasForeignKey("PrismaApi.Domain.Entities.Decision", "IssueId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("Issue"); - - b.Navigation("Project"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DecisionQualityAssessment", b => - { - b.HasOne("PrismaApi.Domain.Entities.Assessment", "Assessment") - .WithMany("DecisionQualityAssessments") - .HasForeignKey("AssessmentId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("Assessment"); - - b.Navigation("CreatedBy"); - - b.Navigation("Project"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbability", b => - { - b.HasOne("PrismaApi.Domain.Entities.Outcome", "Outcome") - .WithMany() - .HasForeignKey("OutcomeId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Uncertainty", "Uncertainty") - .WithMany("DiscreteProbabilities") - .HasForeignKey("UncertaintyId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("Outcome"); - - b.Navigation("Project"); - - b.Navigation("Uncertainty"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOption", b => - { - b.HasOne("PrismaApi.Domain.Entities.DiscreteProbability", "DiscreteProbability") - .WithMany("ParentOptions") - .HasForeignKey("DiscreteProbabilityId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Option", "ParentOption") - .WithMany() - .HasForeignKey("ParentOptionId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("DiscreteProbability"); - - b.Navigation("ParentOption"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOutcome", b => - { - b.HasOne("PrismaApi.Domain.Entities.DiscreteProbability", "DiscreteProbability") - .WithMany("ParentOutcomes") - .HasForeignKey("DiscreteProbabilityId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Outcome", "ParentOutcome") - .WithMany() - .HasForeignKey("ParentOutcomeId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("DiscreteProbability"); - - b.Navigation("ParentOutcome"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => - { - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Utility", "Utility") - .WithMany("DiscreteUtilities") - .HasForeignKey("UtilityId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.ValueMetric", "ValueMetric") - .WithMany() - .HasForeignKey("ValueMetricId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Project"); - - b.Navigation("Utility"); - - b.Navigation("ValueMetric"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOption", b => - { - b.HasOne("PrismaApi.Domain.Entities.DiscreteUtility", "DiscreteUtility") - .WithMany("ParentOptions") - .HasForeignKey("DiscreteUtilityId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Option", "ParentOption") - .WithMany() - .HasForeignKey("ParentOptionId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("DiscreteUtility"); - - b.Navigation("ParentOption"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOutcome", b => - { - b.HasOne("PrismaApi.Domain.Entities.DiscreteUtility", "DiscreteUtility") - .WithMany("ParentOutcomes") - .HasForeignKey("DiscreteUtilityId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Outcome", "ParentOutcome") - .WithMany() - .HasForeignKey("ParentOutcomeId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("DiscreteUtility"); - - b.Navigation("ParentOutcome"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Edge", b => - { - b.HasOne("PrismaApi.Domain.Entities.Node", "HeadNode") - .WithMany("HeadEdges") - .HasForeignKey("HeadId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("Edges") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Node", "TailNode") - .WithMany("TailEdges") - .HasForeignKey("TailId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("HeadNode"); - - b.Navigation("Project"); - - b.Navigation("TailNode"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => - { - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("Issues") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("Project"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => - { - b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") - .WithOne("Node") - .HasForeignKey("PrismaApi.Domain.Entities.Node", "IssueId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("Nodes") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("Issue"); - - b.Navigation("Project"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.NodeStyle", b => - { - b.HasOne("PrismaApi.Domain.Entities.Node", "Node") - .WithOne("NodeStyle") - .HasForeignKey("PrismaApi.Domain.Entities.NodeStyle", "NodeId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Node"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Objective", b => - { - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("Objectives") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("Project"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => - { - b.HasOne("PrismaApi.Domain.Entities.Decision", "Decision") - .WithMany("Options") - .HasForeignKey("DecisionId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("Decision"); - - b.Navigation("Project"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Outcome", b => - { - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Uncertainty", "Uncertainty") - .WithMany("Outcomes") - .HasForeignKey("UncertaintyId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Project"); - - b.Navigation("Uncertainty"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => - { - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.ProjectRole", b => - { - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("ProjectRoles") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "User") - .WithMany("ProjectRoles") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("Project"); - - b.Navigation("UpdatedBy"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => - { - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("Strategies") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("Project"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.StrategyOption", b => - { - b.HasOne("PrismaApi.Domain.Entities.Option", "Option") - .WithMany("StrategyOptions") - .HasForeignKey("OptionId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Strategy", "Strategy") - .WithMany("StrategyOptions") - .HasForeignKey("StrategyId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Option"); - - b.Navigation("Strategy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => - { - b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") - .WithOne("Uncertainty") - .HasForeignKey("PrismaApi.Domain.Entities.Uncertainty", "IssueId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("Issue"); - - b.Navigation("Project"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => - { - b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") - .WithOne("Utility") - .HasForeignKey("PrismaApi.Domain.Entities.Utility", "IssueId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("Issue"); - - b.Navigation("Project"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Assessment", b => - { - b.Navigation("DecisionQualityAssessments"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Decision", b => - { - b.Navigation("Options"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbability", b => - { - b.Navigation("ParentOptions"); - - b.Navigation("ParentOutcomes"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => - { - b.Navigation("ParentOptions"); - - b.Navigation("ParentOutcomes"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => - { - b.Navigation("Decision"); - - b.Navigation("Node"); - - b.Navigation("Uncertainty"); - - b.Navigation("Utility"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => - { - b.Navigation("HeadEdges"); - - b.Navigation("NodeStyle"); - - b.Navigation("TailEdges"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => - { - b.Navigation("StrategyOptions"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => - { - b.Navigation("Assessments"); - - b.Navigation("BoardNodes"); - - b.Navigation("Edges"); - - b.Navigation("Issues"); - - b.Navigation("Nodes"); - - b.Navigation("Objectives"); - - b.Navigation("ProjectRoles"); - - b.Navigation("Strategies"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => - { - b.Navigation("StrategyOptions"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => - { - b.Navigation("DiscreteProbabilities"); - - b.Navigation("Outcomes"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.User", b => - { - b.Navigation("ProjectRoles"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => - { - b.Navigation("DiscreteUtilities"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/PrismaDotnetApi/SqlServerMigrations/20260608114526_AddDeletedUser.cs b/PrismaDotnetApi/SqlServerMigrations/20260608114526_AddDeletedUser.cs deleted file mode 100644 index 95eeeb4..0000000 --- a/PrismaDotnetApi/SqlServerMigrations/20260608114526_AddDeletedUser.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace PrismaApi.Infrastructure.Migrations -{ - /// - public partial class AddDeletedUser : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.InsertData( - table: "Users", - columns: new[] { "Id", "CreatedAt", "Name", "UpdatedAt" }, - values: new object[] { "d008bfdf-fe89-48f3-80a8-777bba4d9bbf", new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), "Deleted User", new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DeleteData( - table: "Users", - keyColumn: "Id", - keyValue: "d008bfdf-fe89-48f3-80a8-777bba4d9bbf"); - } - } -} diff --git a/PrismaDotnetApi/SqlServerMigrations/AppDbContextModelSnapshot.cs b/PrismaDotnetApi/SqlServerMigrations/AppDbContextModelSnapshot.cs index 25310d7..2f495da 100644 --- a/PrismaDotnetApi/SqlServerMigrations/AppDbContextModelSnapshot.cs +++ b/PrismaDotnetApi/SqlServerMigrations/AppDbContextModelSnapshot.cs @@ -979,15 +979,6 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasKey("Id"); b.ToTable("Users"); - - b.HasData( - new - { - Id = "d008bfdf-fe89-48f3-80a8-777bba4d9bbf", - CreatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), - Name = "Deleted User", - UpdatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) - }); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => diff --git a/PrismaDotnetApi/SqliteMigrations/20260608114505_AddDeletedUser.Designer.cs b/PrismaDotnetApi/SqliteMigrations/20260608114505_AddDeletedUser.Designer.cs deleted file mode 100644 index edb69bb..0000000 --- a/PrismaDotnetApi/SqliteMigrations/20260608114505_AddDeletedUser.Designer.cs +++ /dev/null @@ -1,1552 +0,0 @@ -// -using System; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using PrismaApi.Infrastructure.Context; - -#nullable disable - -namespace PrismaApi.Infrastructure.Migrations -{ - [DbContext(typeof(AppDbContext))] - [Migration("20260608114505_AddDeletedUser")] - partial class AddDeletedUser - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder.HasAnnotation("ProductVersion", "9.0.13"); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Assessment", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("IsCompleted") - .HasColumnType("INTEGER"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Assessments", (string)null); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.BoardNode", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("Color") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Data") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Height") - .HasColumnType("REAL"); - - b.Property("Opacity") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER") - .HasDefaultValue(100); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("Rotation") - .HasColumnType("REAL"); - - b.Property("StrokeStyle") - .IsRequired() - .ValueGeneratedOnAdd() - .HasColumnType("TEXT") - .HasDefaultValue("Solid"); - - b.Property("StrokeWidth") - .ValueGeneratedOnAdd() - .HasColumnType("REAL") - .HasDefaultValue(8f); - - b.Property("TextSize") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER") - .HasDefaultValue(24); - - b.Property("Type") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Width") - .HasColumnType("REAL"); - - b.Property("XPosition") - .HasColumnType("REAL"); - - b.Property("YPosition") - .HasColumnType("REAL"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("BoardNode", (string)null); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Decision", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("IssueId") - .HasColumnType("TEXT"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("Type") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("IssueId") - .IsUnique(); - - b.HasIndex("ProjectId"); - - b.ToTable("Decisions"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DecisionQualityAssessment", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("AppropriateFrame") - .HasColumnType("INTEGER"); - - b.Property("AssessmentId") - .HasColumnType("TEXT"); - - b.Property("Comment") - .IsRequired() - .HasMaxLength(6000) - .HasColumnType("TEXT"); - - b.Property("CommitmentToAction") - .HasColumnType("INTEGER"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("DoableAlternatives") - .HasColumnType("INTEGER"); - - b.Property("InformationReliability") - .HasColumnType("INTEGER"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("ReasoningCorrectness") - .HasColumnType("INTEGER"); - - b.Property("TradeOffAnalysis") - .HasColumnType("INTEGER"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("AssessmentId"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("DecisionQualityAssessments", (string)null); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbability", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("OutcomeId") - .HasColumnType("TEXT"); - - b.Property("Probability") - .HasPrecision(53) - .HasColumnType("REAL"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("UncertaintyId") - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("OutcomeId"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UncertaintyId"); - - b.ToTable("DiscreteProbabilities"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOption", b => - { - b.Property("DiscreteProbabilityId") - .HasColumnType("TEXT"); - - b.Property("ParentOptionId") - .HasColumnType("TEXT"); - - b.HasKey("DiscreteProbabilityId", "ParentOptionId"); - - b.HasIndex("ParentOptionId"); - - b.ToTable("DiscreteProbabilityParentOptions"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOutcome", b => - { - b.Property("DiscreteProbabilityId") - .HasColumnType("TEXT"); - - b.Property("ParentOutcomeId") - .HasColumnType("TEXT"); - - b.HasKey("DiscreteProbabilityId", "ParentOutcomeId"); - - b.HasIndex("ParentOutcomeId"); - - b.ToTable("DiscreteProbabilityParentOutcomes"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.Property("UtilityId") - .HasColumnType("TEXT"); - - b.Property("UtilityValue") - .HasPrecision(53) - .HasColumnType("REAL"); - - b.Property("ValueMetricId") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UtilityId"); - - b.HasIndex("ValueMetricId"); - - b.ToTable("DiscreteUtilities"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOption", b => - { - b.Property("DiscreteUtilityId") - .HasColumnType("TEXT"); - - b.Property("ParentOptionId") - .HasColumnType("TEXT"); - - b.HasKey("DiscreteUtilityId", "ParentOptionId"); - - b.HasIndex("ParentOptionId"); - - b.ToTable("DiscreteUtilityParentOptions"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOutcome", b => - { - b.Property("DiscreteUtilityId") - .HasColumnType("TEXT"); - - b.Property("ParentOutcomeId") - .HasColumnType("TEXT"); - - b.HasKey("DiscreteUtilityId", "ParentOutcomeId"); - - b.HasIndex("ParentOutcomeId"); - - b.ToTable("DiscreteUtilityParentOutcomes"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Edge", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("HeadId") - .HasColumnType("TEXT"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("TailId") - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("HeadId"); - - b.HasIndex("ProjectId"); - - b.HasIndex("TailId"); - - b.ToTable("Edges"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("Boundary") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Description") - .IsRequired() - .HasMaxLength(6000) - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("Order") - .HasColumnType("INTEGER"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("Type") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Issues"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("IssueId") - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("IssueId") - .IsUnique(); - - b.HasIndex("ProjectId"); - - b.ToTable("Nodes"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.NodeStyle", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("NodeId") - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.Property("XPosition") - .HasColumnType("REAL"); - - b.Property("YPosition") - .HasColumnType("REAL"); - - b.HasKey("Id"); - - b.HasIndex("NodeId") - .IsUnique(); - - b.ToTable("NodeStyles"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Objective", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Description") - .IsRequired() - .HasMaxLength(6000) - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("Type") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Objectives"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("DecisionId") - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.Property("Utility") - .HasColumnType("REAL"); - - b.HasKey("Id"); - - b.HasIndex("DecisionId"); - - b.HasIndex("ProjectId"); - - b.ToTable("Options"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Outcome", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("UncertaintyId") - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.Property("Utility") - .HasColumnType("REAL"); - - b.HasKey("Id"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UncertaintyId"); - - b.ToTable("Outcomes"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("EndDate") - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("OpportunityStatement") - .IsRequired() - .HasMaxLength(6000) - .HasColumnType("TEXT"); - - b.Property("ParentProjectId") - .HasColumnType("TEXT"); - - b.Property("ParentProjectName") - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("Public") - .HasColumnType("INTEGER"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Projects"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.ProjectRole", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("Role") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("UserId") - .IsRequired() - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UpdatedById"); - - b.HasIndex("UserId"); - - b.ToTable("ProjectRoles"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Description") - .IsRequired() - .HasMaxLength(6000) - .HasColumnType("TEXT"); - - b.Property("Icon") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("IconColor") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("Rationale") - .IsRequired() - .HasMaxLength(6000) - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Strategies"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.StrategyOption", b => - { - b.Property("StrategyId") - .HasColumnType("TEXT"); - - b.Property("OptionId") - .HasColumnType("TEXT"); - - b.HasKey("StrategyId", "OptionId"); - - b.HasIndex("OptionId"); - - b.ToTable("StrategyOptions"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("IsKey") - .HasColumnType("INTEGER"); - - b.Property("IssueId") - .HasColumnType("TEXT"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("IssueId") - .IsUnique(); - - b.HasIndex("ProjectId"); - - b.ToTable("Uncertainties"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.User", b => - { - b.Property("Id") - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.ToTable("Users"); - - b.HasData( - new - { - Id = "d008bfdf-fe89-48f3-80a8-777bba4d9bbf", - CreatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), - Name = "Deleted User", - UpdatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) - }); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("IssueId") - .HasColumnType("TEXT"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("IssueId") - .IsUnique(); - - b.HasIndex("ProjectId"); - - b.ToTable("Utilities"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.ValueMetric", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.ToTable("ValueMetrics"); - - b.HasData( - new - { - Id = new Guid("288e0811-7ab6-5d24-b80c-9fa925b848a6"), - CreatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), - Name = "value", - UpdatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) - }); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Assessment", b => - { - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("Assessments") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("Project"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.BoardNode", b => - { - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("BoardNodes") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("Project"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Decision", b => - { - b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") - .WithOne("Decision") - .HasForeignKey("PrismaApi.Domain.Entities.Decision", "IssueId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("Issue"); - - b.Navigation("Project"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DecisionQualityAssessment", b => - { - b.HasOne("PrismaApi.Domain.Entities.Assessment", "Assessment") - .WithMany("DecisionQualityAssessments") - .HasForeignKey("AssessmentId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("Assessment"); - - b.Navigation("CreatedBy"); - - b.Navigation("Project"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbability", b => - { - b.HasOne("PrismaApi.Domain.Entities.Outcome", "Outcome") - .WithMany() - .HasForeignKey("OutcomeId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Uncertainty", "Uncertainty") - .WithMany("DiscreteProbabilities") - .HasForeignKey("UncertaintyId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("Outcome"); - - b.Navigation("Project"); - - b.Navigation("Uncertainty"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOption", b => - { - b.HasOne("PrismaApi.Domain.Entities.DiscreteProbability", "DiscreteProbability") - .WithMany("ParentOptions") - .HasForeignKey("DiscreteProbabilityId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Option", "ParentOption") - .WithMany() - .HasForeignKey("ParentOptionId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("DiscreteProbability"); - - b.Navigation("ParentOption"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOutcome", b => - { - b.HasOne("PrismaApi.Domain.Entities.DiscreteProbability", "DiscreteProbability") - .WithMany("ParentOutcomes") - .HasForeignKey("DiscreteProbabilityId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Outcome", "ParentOutcome") - .WithMany() - .HasForeignKey("ParentOutcomeId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("DiscreteProbability"); - - b.Navigation("ParentOutcome"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => - { - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Utility", "Utility") - .WithMany("DiscreteUtilities") - .HasForeignKey("UtilityId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.ValueMetric", "ValueMetric") - .WithMany() - .HasForeignKey("ValueMetricId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Project"); - - b.Navigation("Utility"); - - b.Navigation("ValueMetric"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOption", b => - { - b.HasOne("PrismaApi.Domain.Entities.DiscreteUtility", "DiscreteUtility") - .WithMany("ParentOptions") - .HasForeignKey("DiscreteUtilityId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Option", "ParentOption") - .WithMany() - .HasForeignKey("ParentOptionId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("DiscreteUtility"); - - b.Navigation("ParentOption"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOutcome", b => - { - b.HasOne("PrismaApi.Domain.Entities.DiscreteUtility", "DiscreteUtility") - .WithMany("ParentOutcomes") - .HasForeignKey("DiscreteUtilityId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Outcome", "ParentOutcome") - .WithMany() - .HasForeignKey("ParentOutcomeId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("DiscreteUtility"); - - b.Navigation("ParentOutcome"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Edge", b => - { - b.HasOne("PrismaApi.Domain.Entities.Node", "HeadNode") - .WithMany("HeadEdges") - .HasForeignKey("HeadId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("Edges") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Node", "TailNode") - .WithMany("TailEdges") - .HasForeignKey("TailId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("HeadNode"); - - b.Navigation("Project"); - - b.Navigation("TailNode"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => - { - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("Issues") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("Project"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => - { - b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") - .WithOne("Node") - .HasForeignKey("PrismaApi.Domain.Entities.Node", "IssueId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("Nodes") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("Issue"); - - b.Navigation("Project"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.NodeStyle", b => - { - b.HasOne("PrismaApi.Domain.Entities.Node", "Node") - .WithOne("NodeStyle") - .HasForeignKey("PrismaApi.Domain.Entities.NodeStyle", "NodeId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Node"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Objective", b => - { - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("Objectives") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("Project"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => - { - b.HasOne("PrismaApi.Domain.Entities.Decision", "Decision") - .WithMany("Options") - .HasForeignKey("DecisionId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("Decision"); - - b.Navigation("Project"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Outcome", b => - { - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Uncertainty", "Uncertainty") - .WithMany("Outcomes") - .HasForeignKey("UncertaintyId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Project"); - - b.Navigation("Uncertainty"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => - { - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.ProjectRole", b => - { - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("ProjectRoles") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "User") - .WithMany("ProjectRoles") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("Project"); - - b.Navigation("UpdatedBy"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => - { - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("Strategies") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("Project"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.StrategyOption", b => - { - b.HasOne("PrismaApi.Domain.Entities.Option", "Option") - .WithMany("StrategyOptions") - .HasForeignKey("OptionId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Strategy", "Strategy") - .WithMany("StrategyOptions") - .HasForeignKey("StrategyId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Option"); - - b.Navigation("Strategy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => - { - b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") - .WithOne("Uncertainty") - .HasForeignKey("PrismaApi.Domain.Entities.Uncertainty", "IssueId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("Issue"); - - b.Navigation("Project"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => - { - b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") - .WithOne("Utility") - .HasForeignKey("PrismaApi.Domain.Entities.Utility", "IssueId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("Issue"); - - b.Navigation("Project"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Assessment", b => - { - b.Navigation("DecisionQualityAssessments"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Decision", b => - { - b.Navigation("Options"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbability", b => - { - b.Navigation("ParentOptions"); - - b.Navigation("ParentOutcomes"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => - { - b.Navigation("ParentOptions"); - - b.Navigation("ParentOutcomes"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => - { - b.Navigation("Decision"); - - b.Navigation("Node"); - - b.Navigation("Uncertainty"); - - b.Navigation("Utility"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => - { - b.Navigation("HeadEdges"); - - b.Navigation("NodeStyle"); - - b.Navigation("TailEdges"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => - { - b.Navigation("StrategyOptions"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => - { - b.Navigation("Assessments"); - - b.Navigation("BoardNodes"); - - b.Navigation("Edges"); - - b.Navigation("Issues"); - - b.Navigation("Nodes"); - - b.Navigation("Objectives"); - - b.Navigation("ProjectRoles"); - - b.Navigation("Strategies"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => - { - b.Navigation("StrategyOptions"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => - { - b.Navigation("DiscreteProbabilities"); - - b.Navigation("Outcomes"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.User", b => - { - b.Navigation("ProjectRoles"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => - { - b.Navigation("DiscreteUtilities"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/PrismaDotnetApi/SqliteMigrations/20260608114505_AddDeletedUser.cs b/PrismaDotnetApi/SqliteMigrations/20260608114505_AddDeletedUser.cs deleted file mode 100644 index 95eeeb4..0000000 --- a/PrismaDotnetApi/SqliteMigrations/20260608114505_AddDeletedUser.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace PrismaApi.Infrastructure.Migrations -{ - /// - public partial class AddDeletedUser : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.InsertData( - table: "Users", - columns: new[] { "Id", "CreatedAt", "Name", "UpdatedAt" }, - values: new object[] { "d008bfdf-fe89-48f3-80a8-777bba4d9bbf", new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), "Deleted User", new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DeleteData( - table: "Users", - keyColumn: "Id", - keyValue: "d008bfdf-fe89-48f3-80a8-777bba4d9bbf"); - } - } -} diff --git a/PrismaDotnetApi/SqliteMigrations/AppDbContextModelSnapshot.cs b/PrismaDotnetApi/SqliteMigrations/AppDbContextModelSnapshot.cs index 752c53f..c2b7fb0 100644 --- a/PrismaDotnetApi/SqliteMigrations/AppDbContextModelSnapshot.cs +++ b/PrismaDotnetApi/SqliteMigrations/AppDbContextModelSnapshot.cs @@ -974,15 +974,6 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasKey("Id"); b.ToTable("Users"); - - b.HasData( - new - { - Id = "d008bfdf-fe89-48f3-80a8-777bba4d9bbf", - CreatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), - Name = "Deleted User", - UpdatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) - }); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => From 2fab124059923097621defe928c85a2a0fbc4d8c Mon Sep 17 00:00:00 2001 From: EinarSalbouvet Date: Wed, 15 Jul 2026 14:12:59 +0200 Subject: [PATCH 03/17] Add migration to insert a "Deleted User" record in the Users table - Created a new migration file to add a user with the name "Deleted User" and specific timestamps. - Updated the AppDbContextModelSnapshot to include the new user data for seeding. --- .../Repositories/UserRepository.cs | 49 +- .../Context/AppDbContext.cs | 2 +- .../Context/AppDbContextFactory.cs | 3 +- .../20260715095316_AddDeletedUser.Designer.cs | 1759 +++++++++++++++++ .../20260715095316_AddDeletedUser.cs | 29 + .../AppDbContextModelSnapshot.cs | 9 + .../20260715095307_AddDeletedUser.Designer.cs | 1754 ++++++++++++++++ .../20260715095307_AddDeletedUser.cs | 29 + .../AppDbContextModelSnapshot.cs | 9 + 9 files changed, 3610 insertions(+), 33 deletions(-) create mode 100644 PrismaDotnetApi/SqlServerMigrations/20260715095316_AddDeletedUser.Designer.cs create mode 100644 PrismaDotnetApi/SqlServerMigrations/20260715095316_AddDeletedUser.cs create mode 100644 PrismaDotnetApi/SqliteMigrations/20260715095307_AddDeletedUser.Designer.cs create mode 100644 PrismaDotnetApi/SqliteMigrations/20260715095307_AddDeletedUser.cs diff --git a/PrismaDotnetApi/PrismaApi.Application/Repositories/UserRepository.cs b/PrismaDotnetApi/PrismaApi.Application/Repositories/UserRepository.cs index c2bab3c..5cb1a0a 100644 --- a/PrismaDotnetApi/PrismaApi.Application/Repositories/UserRepository.cs +++ b/PrismaDotnetApi/PrismaApi.Application/Repositories/UserRepository.cs @@ -82,6 +82,12 @@ public async Task GetOrAddByUserNameAsync(UserIncomingDto dto, Cancellatio return user; } + /// + /// Deletes users by their ids. + /// Before deleting, it updates all auditable entities that reference the user to point to the deleted user entry. + /// This is done to avoid foreign key constraint violations when deleting a user. + /// Also, deletes all related project roles for the user + /// public override async Task DeleteByIdsAsync(IEnumerable ids, Expression>? filterPredicate = null, CancellationToken ct = default) { var entries = await DbContext.Users @@ -103,44 +109,27 @@ public override async Task DeleteByIdsAsync(IEnumerable ids, Expression< }).ToArray(); var inClause = string.Join(",", idParams.Select(p => p.ParameterName)); + // get all auditable entity types that need the user id updated to the deleted user id. + // This is done to avoid foreign key constraint violations when deleting a user. var auditableEntityTypes = DbContext.Model.GetEntityTypes() .Where(t => typeof(AuditableEntity).IsAssignableFrom(t.ClrType) && !t.ClrType.IsAbstract); foreach (var entityType in auditableEntityTypes) { var tableName = entityType.GetTableName(); - try - { - await DbContext.Database.ExecuteSqlRawAsync($""" - UPDATE [{tableName}] - SET CreatedById = '{DomainConstants.DeletedUserId}' - WHERE CreatedById IN ({inClause}); - UPDATE [{tableName}] - SET UpdatedById = '{DomainConstants.DeletedUserId}' - WHERE UpdatedById IN ({inClause}); - """, [.. idParams.Concat(idParams).Cast()], ct); - } - catch (Exception e) - { - - throw e; - } + // using raw SQL over the parameterized ExecuteSqlAsync due to issues with the in clause. + // ExecuteSqlAsync protects against SQL injection, + // but all inputed data are controlled by the api and takes no user input. + await DbContext.Database.ExecuteSqlRawAsync($""" + UPDATE [{tableName}] + SET CreatedById = '{DomainConstants.DeletedUserId}' + WHERE CreatedById IN ({inClause}); + UPDATE [{tableName}] + SET UpdatedById = '{DomainConstants.DeletedUserId}' + WHERE UpdatedById IN ({inClause}); + """, [.. idParams.Concat(idParams).Cast()], ct); } - // var auditableEntitiesToUpdate = DbContext. - - // foreach (var auditableEntity in auditableEntitiesToUpdate) - // { - // if (ids.Contains(auditableEntity.UpdatedById)) - // { - // auditableEntity.UpdatedById = DomainConstants.DeletedUserId; - // } - - // if (ids.Contains(auditableEntity.CreatedById)) - // { - // auditableEntity.CreatedById = DomainConstants.DeletedUserId; - // } - // } // delete project roles var projectRoles = await DbContext.ProjectRoles diff --git a/PrismaDotnetApi/PrismaApi.Infrastructure/Context/AppDbContext.cs b/PrismaDotnetApi/PrismaApi.Infrastructure/Context/AppDbContext.cs index 1e1acda..5ac79d0 100644 --- a/PrismaDotnetApi/PrismaApi.Infrastructure/Context/AppDbContext.cs +++ b/PrismaDotnetApi/PrismaApi.Infrastructure/Context/AppDbContext.cs @@ -165,7 +165,7 @@ private async Task EnforceMinimumProjectRoles(CancellationToken cancellationToke var currentFacilitatorCount = await ProjectRoles .AsNoTracking() .CountAsync(r => r.ProjectId == projectId && - r.Role.IsFacilitator(), + r.Role.ToLower() == ProjectRoleType.Facilitator.ToString().ToLower(), cancellationToken); if (currentFacilitatorCount - facilitatorsBeingRemoved <= 0) diff --git a/PrismaDotnetApi/PrismaApi.Infrastructure/Context/AppDbContextFactory.cs b/PrismaDotnetApi/PrismaApi.Infrastructure/Context/AppDbContextFactory.cs index 85de9c1..a037f53 100644 --- a/PrismaDotnetApi/PrismaApi.Infrastructure/Context/AppDbContextFactory.cs +++ b/PrismaDotnetApi/PrismaApi.Infrastructure/Context/AppDbContextFactory.cs @@ -9,8 +9,7 @@ public class AppDbContextFactory : IDesignTimeDbContextFactory { public AppDbContext CreateDbContext(string[] args) { - // var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); - var environment = "Local"; + var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); IConfigurationBuilder configurationBuilder = new ConfigurationBuilder(); var apiPath = Path.Combine( diff --git a/PrismaDotnetApi/SqlServerMigrations/20260715095316_AddDeletedUser.Designer.cs b/PrismaDotnetApi/SqlServerMigrations/20260715095316_AddDeletedUser.Designer.cs new file mode 100644 index 0000000..c1c58f4 --- /dev/null +++ b/PrismaDotnetApi/SqlServerMigrations/20260715095316_AddDeletedUser.Designer.cs @@ -0,0 +1,1759 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using PrismaApi.Infrastructure.Context; + +#nullable disable + +namespace PrismaApi.Infrastructure.Migrations +{ + [DbContext(typeof(AppDbContext))] + [Migration("20260715095316_AddDeletedUser")] + partial class AddDeletedUser + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "9.0.13") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Assessment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("IsCompleted") + .HasColumnType("bit"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Assessments", (string)null); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.BoardNode", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Color") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Data") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Height") + .HasColumnType("float"); + + b.Property("Opacity") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasDefaultValue(100); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("Rotation") + .HasColumnType("float"); + + b.Property("StrokeStyle") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("nvarchar(max)") + .HasDefaultValue("Solid"); + + b.Property("StrokeWidth") + .ValueGeneratedOnAdd() + .HasColumnType("real") + .HasDefaultValue(8f); + + b.Property("TextSize") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasDefaultValue(24); + + b.Property("Type") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Width") + .HasColumnType("float"); + + b.Property("XPosition") + .HasColumnType("float"); + + b.Property("YPosition") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("BoardNode", (string)null); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Decision", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("IssueId") + .HasColumnType("uniqueidentifier"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.HasKey("Id"); + + b.HasIndex("IssueId") + .IsUnique(); + + b.HasIndex("ProjectId"); + + b.ToTable("Decisions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DecisionQualityAssessment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AppropriateFrame") + .HasColumnType("int"); + + b.Property("AssessmentId") + .HasColumnType("uniqueidentifier"); + + b.Property("Comment") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("nvarchar(max)"); + + b.Property("CommitmentToAction") + .HasColumnType("int"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("DoableAlternatives") + .HasColumnType("int"); + + b.Property("InformationReliability") + .HasColumnType("int"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("ReasoningCorrectness") + .HasColumnType("int"); + + b.Property("TradeOffAnalysis") + .HasColumnType("int"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("AssessmentId"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("DecisionQualityAssessments", (string)null); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbability", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("OutcomeId") + .HasColumnType("uniqueidentifier"); + + b.Property("Probability") + .HasPrecision(53) + .HasColumnType("float(53)"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("UncertaintyId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.HasKey("Id"); + + b.HasIndex("OutcomeId"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UncertaintyId"); + + b.ToTable("DiscreteProbabilities"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOption", b => + { + b.Property("DiscreteProbabilityId") + .HasColumnType("uniqueidentifier"); + + b.Property("ParentOptionId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("DiscreteProbabilityId", "ParentOptionId"); + + b.HasIndex("ParentOptionId"); + + b.ToTable("DiscreteProbabilityParentOptions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOutcome", b => + { + b.Property("DiscreteProbabilityId") + .HasColumnType("uniqueidentifier"); + + b.Property("ParentOutcomeId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("DiscreteProbabilityId", "ParentOutcomeId"); + + b.HasIndex("ParentOutcomeId"); + + b.ToTable("DiscreteProbabilityParentOutcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("UtilityId") + .HasColumnType("uniqueidentifier"); + + b.Property("UtilityValue") + .HasPrecision(53) + .HasColumnType("float(53)"); + + b.Property("ValueMetricId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UtilityId"); + + b.HasIndex("ValueMetricId"); + + b.ToTable("DiscreteUtilities"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOption", b => + { + b.Property("DiscreteUtilityId") + .HasColumnType("uniqueidentifier"); + + b.Property("ParentOptionId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("DiscreteUtilityId", "ParentOptionId"); + + b.HasIndex("ParentOptionId"); + + b.ToTable("DiscreteUtilityParentOptions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOutcome", b => + { + b.Property("DiscreteUtilityId") + .HasColumnType("uniqueidentifier"); + + b.Property("ParentOutcomeId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("DiscreteUtilityId", "ParentOutcomeId"); + + b.HasIndex("ParentOutcomeId"); + + b.ToTable("DiscreteUtilityParentOutcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Edge", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("HeadId") + .HasColumnType("uniqueidentifier"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("TailId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.HasKey("Id"); + + b.HasIndex("HeadId"); + + b.HasIndex("ProjectId"); + + b.HasIndex("TailId"); + + b.ToTable("Edges"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Boundary") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("Order") + .HasColumnType("int"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Issues"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("IssueId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.HasKey("Id"); + + b.HasIndex("IssueId") + .IsUnique(); + + b.HasIndex("ProjectId"); + + b.ToTable("Nodes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.NodeStyle", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("NodeId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("XPosition") + .HasColumnType("float"); + + b.Property("YPosition") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.HasIndex("NodeId") + .IsUnique(); + + b.ToTable("NodeStyles"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Objective", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Objectives"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("DecisionId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Utility") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.HasIndex("DecisionId"); + + b.HasIndex("ProjectId"); + + b.ToTable("Options"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Outcome", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("UncertaintyId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Utility") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UncertaintyId"); + + b.ToTable("Outcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("EndDate") + .HasColumnType("datetimeoffset"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("OpportunityStatement") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("nvarchar(max)"); + + b.Property("ParentProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("ParentProjectName") + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("Public") + .HasColumnType("bit"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Projects"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.ProjectRole", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("Role") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.HasIndex("UserId"); + + b.ToTable("ProjectRoles"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionEntry", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ChildOptionId") + .HasColumnType("uniqueidentifier"); + + b.Property("ChildOutcomeId") + .HasColumnType("uniqueidentifier"); + + b.Property("ChildStateId") + .ValueGeneratedOnAddOrUpdate() + .HasColumnType("uniqueidentifier") + .HasComputedColumnSql("COALESCE([ChildOptionId], [ChildOutcomeId])", true); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("ParentOptionId") + .HasColumnType("uniqueidentifier"); + + b.Property("ParentOutcomeId") + .HasColumnType("uniqueidentifier"); + + b.Property("ParentStateId") + .ValueGeneratedOnAddOrUpdate() + .HasColumnType("uniqueidentifier") + .HasComputedColumnSql("COALESCE([ParentOptionId], [ParentOutcomeId])", true); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("RestrictionTableId") + .HasColumnType("uniqueidentifier"); + + b.Property("RestrictionValue") + .ValueGeneratedOnAdd() + .HasPrecision(53) + .HasColumnType("float(53)") + .HasDefaultValue(1.0); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.HasKey("Id"); + + b.HasIndex("ChildOptionId"); + + b.HasIndex("ChildOutcomeId"); + + b.HasIndex("ParentOptionId"); + + b.HasIndex("ParentOutcomeId"); + + b.HasIndex("ProjectId"); + + b.HasIndex("RestrictionTableId"); + + b.HasIndex("ParentStateId", "ChildStateId", "RestrictionTableId") + .IsUnique(); + + b.ToTable("RestrictionEntries", t => + { + t.HasCheckConstraint("CK_RestrictionEntry_Child", "([ChildOptionId] IS NULL AND [ChildOutcomeId] IS NOT NULL) OR ([ChildOptionId] IS NOT NULL AND [ChildOutcomeId] IS NULL)"); + + t.HasCheckConstraint("CK_RestrictionEntry_Parent", "([ParentOptionId] IS NULL AND [ParentOutcomeId] IS NOT NULL) OR ([ParentOptionId] IS NOT NULL AND [ParentOutcomeId] IS NULL)"); + }); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionTable", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("EdgeId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("EdgeId") + .IsUnique(); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("RestrictionTables"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("nvarchar(max)"); + + b.Property("Icon") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("IconColor") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("Rationale") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("nvarchar(max)"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Strategies"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.StrategyOption", b => + { + b.Property("StrategyId") + .HasColumnType("uniqueidentifier"); + + b.Property("OptionId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("StrategyId", "OptionId"); + + b.HasIndex("OptionId"); + + b.ToTable("StrategyOptions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("IsKey") + .HasColumnType("bit"); + + b.Property("IssueId") + .HasColumnType("uniqueidentifier"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.HasKey("Id"); + + b.HasIndex("IssueId") + .IsUnique(); + + b.HasIndex("ProjectId"); + + b.ToTable("Uncertainties"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.User", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.HasKey("Id"); + + b.ToTable("Users"); + + b.HasData( + new + { + Id = "d008bfdf-fe89-48f3-80a8-777bba4d9bbf", + CreatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), + Name = "Deleted User", + UpdatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) + }); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("IssueId") + .HasColumnType("uniqueidentifier"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.HasKey("Id"); + + b.HasIndex("IssueId") + .IsUnique(); + + b.HasIndex("ProjectId"); + + b.ToTable("Utilities"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.ValueMetric", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.HasKey("Id"); + + b.ToTable("ValueMetrics"); + + b.HasData( + new + { + Id = new Guid("288e0811-7ab6-5d24-b80c-9fa925b848a6"), + CreatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), + Name = "value", + UpdatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) + }); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Assessment", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Assessments") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.BoardNode", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("BoardNodes") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Decision", b => + { + b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") + .WithOne("Decision") + .HasForeignKey("PrismaApi.Domain.Entities.Decision", "IssueId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Issue"); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DecisionQualityAssessment", b => + { + b.HasOne("PrismaApi.Domain.Entities.Assessment", "Assessment") + .WithMany("DecisionQualityAssessments") + .HasForeignKey("AssessmentId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("Assessment"); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbability", b => + { + b.HasOne("PrismaApi.Domain.Entities.Outcome", "Outcome") + .WithMany() + .HasForeignKey("OutcomeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Uncertainty", "Uncertainty") + .WithMany("DiscreteProbabilities") + .HasForeignKey("UncertaintyId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Outcome"); + + b.Navigation("Project"); + + b.Navigation("Uncertainty"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOption", b => + { + b.HasOne("PrismaApi.Domain.Entities.DiscreteProbability", "DiscreteProbability") + .WithMany("ParentOptions") + .HasForeignKey("DiscreteProbabilityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Option", "ParentOption") + .WithMany() + .HasForeignKey("ParentOptionId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("DiscreteProbability"); + + b.Navigation("ParentOption"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOutcome", b => + { + b.HasOne("PrismaApi.Domain.Entities.DiscreteProbability", "DiscreteProbability") + .WithMany("ParentOutcomes") + .HasForeignKey("DiscreteProbabilityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Outcome", "ParentOutcome") + .WithMany() + .HasForeignKey("ParentOutcomeId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("DiscreteProbability"); + + b.Navigation("ParentOutcome"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => + { + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Utility", "Utility") + .WithMany("DiscreteUtilities") + .HasForeignKey("UtilityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.ValueMetric", "ValueMetric") + .WithMany() + .HasForeignKey("ValueMetricId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Project"); + + b.Navigation("Utility"); + + b.Navigation("ValueMetric"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOption", b => + { + b.HasOne("PrismaApi.Domain.Entities.DiscreteUtility", "DiscreteUtility") + .WithMany("ParentOptions") + .HasForeignKey("DiscreteUtilityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Option", "ParentOption") + .WithMany() + .HasForeignKey("ParentOptionId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("DiscreteUtility"); + + b.Navigation("ParentOption"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOutcome", b => + { + b.HasOne("PrismaApi.Domain.Entities.DiscreteUtility", "DiscreteUtility") + .WithMany("ParentOutcomes") + .HasForeignKey("DiscreteUtilityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Outcome", "ParentOutcome") + .WithMany() + .HasForeignKey("ParentOutcomeId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("DiscreteUtility"); + + b.Navigation("ParentOutcome"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Edge", b => + { + b.HasOne("PrismaApi.Domain.Entities.Node", "HeadNode") + .WithMany("HeadEdges") + .HasForeignKey("HeadId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Edges") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Node", "TailNode") + .WithMany("TailEdges") + .HasForeignKey("TailId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("HeadNode"); + + b.Navigation("Project"); + + b.Navigation("TailNode"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Issues") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => + { + b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") + .WithOne("Node") + .HasForeignKey("PrismaApi.Domain.Entities.Node", "IssueId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Nodes") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Issue"); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.NodeStyle", b => + { + b.HasOne("PrismaApi.Domain.Entities.Node", "Node") + .WithOne("NodeStyle") + .HasForeignKey("PrismaApi.Domain.Entities.NodeStyle", "NodeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Node"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Objective", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Objectives") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => + { + b.HasOne("PrismaApi.Domain.Entities.Decision", "Decision") + .WithMany("Options") + .HasForeignKey("DecisionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Decision"); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Outcome", b => + { + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Uncertainty", "Uncertainty") + .WithMany("Outcomes") + .HasForeignKey("UncertaintyId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Project"); + + b.Navigation("Uncertainty"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.ProjectRole", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("ProjectRoles") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "User") + .WithMany("ProjectRoles") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionEntry", b => + { + b.HasOne("PrismaApi.Domain.Entities.Option", "ChildOption") + .WithMany() + .HasForeignKey("ChildOptionId") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("PrismaApi.Domain.Entities.Outcome", "ChildOutcome") + .WithMany() + .HasForeignKey("ChildOutcomeId") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("PrismaApi.Domain.Entities.Option", "ParentOption") + .WithMany() + .HasForeignKey("ParentOptionId") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("PrismaApi.Domain.Entities.Outcome", "ParentOutcome") + .WithMany() + .HasForeignKey("ParentOutcomeId") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.RestrictionTable", "RestrictionTable") + .WithMany("RestrictionEntries") + .HasForeignKey("RestrictionTableId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ChildOption"); + + b.Navigation("ChildOutcome"); + + b.Navigation("ParentOption"); + + b.Navigation("ParentOutcome"); + + b.Navigation("Project"); + + b.Navigation("RestrictionTable"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionTable", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Edge", "Edge") + .WithOne() + .HasForeignKey("PrismaApi.Domain.Entities.RestrictionTable", "EdgeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Edge"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Strategies") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.StrategyOption", b => + { + b.HasOne("PrismaApi.Domain.Entities.Option", "Option") + .WithMany("StrategyOptions") + .HasForeignKey("OptionId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Strategy", "Strategy") + .WithMany("StrategyOptions") + .HasForeignKey("StrategyId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Option"); + + b.Navigation("Strategy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => + { + b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") + .WithOne("Uncertainty") + .HasForeignKey("PrismaApi.Domain.Entities.Uncertainty", "IssueId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Issue"); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => + { + b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") + .WithOne("Utility") + .HasForeignKey("PrismaApi.Domain.Entities.Utility", "IssueId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Issue"); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Assessment", b => + { + b.Navigation("DecisionQualityAssessments"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Decision", b => + { + b.Navigation("Options"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbability", b => + { + b.Navigation("ParentOptions"); + + b.Navigation("ParentOutcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => + { + b.Navigation("ParentOptions"); + + b.Navigation("ParentOutcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => + { + b.Navigation("Decision"); + + b.Navigation("Node"); + + b.Navigation("Uncertainty"); + + b.Navigation("Utility"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => + { + b.Navigation("HeadEdges"); + + b.Navigation("NodeStyle"); + + b.Navigation("TailEdges"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => + { + b.Navigation("StrategyOptions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => + { + b.Navigation("Assessments"); + + b.Navigation("BoardNodes"); + + b.Navigation("Edges"); + + b.Navigation("Issues"); + + b.Navigation("Nodes"); + + b.Navigation("Objectives"); + + b.Navigation("ProjectRoles"); + + b.Navigation("Strategies"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionTable", b => + { + b.Navigation("RestrictionEntries"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => + { + b.Navigation("StrategyOptions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => + { + b.Navigation("DiscreteProbabilities"); + + b.Navigation("Outcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.User", b => + { + b.Navigation("ProjectRoles"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => + { + b.Navigation("DiscreteUtilities"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/PrismaDotnetApi/SqlServerMigrations/20260715095316_AddDeletedUser.cs b/PrismaDotnetApi/SqlServerMigrations/20260715095316_AddDeletedUser.cs new file mode 100644 index 0000000..95eeeb4 --- /dev/null +++ b/PrismaDotnetApi/SqlServerMigrations/20260715095316_AddDeletedUser.cs @@ -0,0 +1,29 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace PrismaApi.Infrastructure.Migrations +{ + /// + public partial class AddDeletedUser : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.InsertData( + table: "Users", + columns: new[] { "Id", "CreatedAt", "Name", "UpdatedAt" }, + values: new object[] { "d008bfdf-fe89-48f3-80a8-777bba4d9bbf", new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), "Deleted User", new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) }); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DeleteData( + table: "Users", + keyColumn: "Id", + keyValue: "d008bfdf-fe89-48f3-80a8-777bba4d9bbf"); + } + } +} diff --git a/PrismaDotnetApi/SqlServerMigrations/AppDbContextModelSnapshot.cs b/PrismaDotnetApi/SqlServerMigrations/AppDbContextModelSnapshot.cs index 2f495da..25310d7 100644 --- a/PrismaDotnetApi/SqlServerMigrations/AppDbContextModelSnapshot.cs +++ b/PrismaDotnetApi/SqlServerMigrations/AppDbContextModelSnapshot.cs @@ -979,6 +979,15 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasKey("Id"); b.ToTable("Users"); + + b.HasData( + new + { + Id = "d008bfdf-fe89-48f3-80a8-777bba4d9bbf", + CreatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), + Name = "Deleted User", + UpdatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) + }); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => diff --git a/PrismaDotnetApi/SqliteMigrations/20260715095307_AddDeletedUser.Designer.cs b/PrismaDotnetApi/SqliteMigrations/20260715095307_AddDeletedUser.Designer.cs new file mode 100644 index 0000000..346c929 --- /dev/null +++ b/PrismaDotnetApi/SqliteMigrations/20260715095307_AddDeletedUser.Designer.cs @@ -0,0 +1,1754 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using PrismaApi.Infrastructure.Context; + +#nullable disable + +namespace PrismaApi.Infrastructure.Migrations +{ + [DbContext(typeof(AppDbContext))] + [Migration("20260715095307_AddDeletedUser")] + partial class AddDeletedUser + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "9.0.13"); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Assessment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("IsCompleted") + .HasColumnType("INTEGER"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Assessments", (string)null); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.BoardNode", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("Color") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Data") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Height") + .HasColumnType("REAL"); + + b.Property("Opacity") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasDefaultValue(100); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("Rotation") + .HasColumnType("REAL"); + + b.Property("StrokeStyle") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("TEXT") + .HasDefaultValue("Solid"); + + b.Property("StrokeWidth") + .ValueGeneratedOnAdd() + .HasColumnType("REAL") + .HasDefaultValue(8f); + + b.Property("TextSize") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasDefaultValue(24); + + b.Property("Type") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Width") + .HasColumnType("REAL"); + + b.Property("XPosition") + .HasColumnType("REAL"); + + b.Property("YPosition") + .HasColumnType("REAL"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("BoardNode", (string)null); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Decision", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("IssueId") + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("IssueId") + .IsUnique(); + + b.HasIndex("ProjectId"); + + b.ToTable("Decisions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DecisionQualityAssessment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("AppropriateFrame") + .HasColumnType("INTEGER"); + + b.Property("AssessmentId") + .HasColumnType("TEXT"); + + b.Property("Comment") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("TEXT"); + + b.Property("CommitmentToAction") + .HasColumnType("INTEGER"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("DoableAlternatives") + .HasColumnType("INTEGER"); + + b.Property("InformationReliability") + .HasColumnType("INTEGER"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("ReasoningCorrectness") + .HasColumnType("INTEGER"); + + b.Property("TradeOffAnalysis") + .HasColumnType("INTEGER"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("AssessmentId"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("DecisionQualityAssessments", (string)null); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbability", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("OutcomeId") + .HasColumnType("TEXT"); + + b.Property("Probability") + .HasPrecision(53) + .HasColumnType("REAL"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("UncertaintyId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("OutcomeId"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UncertaintyId"); + + b.ToTable("DiscreteProbabilities"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOption", b => + { + b.Property("DiscreteProbabilityId") + .HasColumnType("TEXT"); + + b.Property("ParentOptionId") + .HasColumnType("TEXT"); + + b.HasKey("DiscreteProbabilityId", "ParentOptionId"); + + b.HasIndex("ParentOptionId"); + + b.ToTable("DiscreteProbabilityParentOptions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOutcome", b => + { + b.Property("DiscreteProbabilityId") + .HasColumnType("TEXT"); + + b.Property("ParentOutcomeId") + .HasColumnType("TEXT"); + + b.HasKey("DiscreteProbabilityId", "ParentOutcomeId"); + + b.HasIndex("ParentOutcomeId"); + + b.ToTable("DiscreteProbabilityParentOutcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("UtilityId") + .HasColumnType("TEXT"); + + b.Property("UtilityValue") + .HasPrecision(53) + .HasColumnType("REAL"); + + b.Property("ValueMetricId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UtilityId"); + + b.HasIndex("ValueMetricId"); + + b.ToTable("DiscreteUtilities"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOption", b => + { + b.Property("DiscreteUtilityId") + .HasColumnType("TEXT"); + + b.Property("ParentOptionId") + .HasColumnType("TEXT"); + + b.HasKey("DiscreteUtilityId", "ParentOptionId"); + + b.HasIndex("ParentOptionId"); + + b.ToTable("DiscreteUtilityParentOptions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOutcome", b => + { + b.Property("DiscreteUtilityId") + .HasColumnType("TEXT"); + + b.Property("ParentOutcomeId") + .HasColumnType("TEXT"); + + b.HasKey("DiscreteUtilityId", "ParentOutcomeId"); + + b.HasIndex("ParentOutcomeId"); + + b.ToTable("DiscreteUtilityParentOutcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Edge", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("HeadId") + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("TailId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("HeadId"); + + b.HasIndex("ProjectId"); + + b.HasIndex("TailId"); + + b.ToTable("Edges"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("Boundary") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("Order") + .HasColumnType("INTEGER"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Issues"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("IssueId") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("IssueId") + .IsUnique(); + + b.HasIndex("ProjectId"); + + b.ToTable("Nodes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.NodeStyle", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("NodeId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("XPosition") + .HasColumnType("REAL"); + + b.Property("YPosition") + .HasColumnType("REAL"); + + b.HasKey("Id"); + + b.HasIndex("NodeId") + .IsUnique(); + + b.ToTable("NodeStyles"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Objective", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Objectives"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("DecisionId") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("Utility") + .HasColumnType("REAL"); + + b.HasKey("Id"); + + b.HasIndex("DecisionId"); + + b.HasIndex("ProjectId"); + + b.ToTable("Options"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Outcome", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("UncertaintyId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("Utility") + .HasColumnType("REAL"); + + b.HasKey("Id"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UncertaintyId"); + + b.ToTable("Outcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("EndDate") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("OpportunityStatement") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("TEXT"); + + b.Property("ParentProjectId") + .HasColumnType("TEXT"); + + b.Property("ParentProjectName") + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("Public") + .HasColumnType("INTEGER"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Projects"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.ProjectRole", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("Role") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.HasIndex("UserId"); + + b.ToTable("ProjectRoles"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionEntry", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("ChildOptionId") + .HasColumnType("TEXT"); + + b.Property("ChildOutcomeId") + .HasColumnType("TEXT"); + + b.Property("ChildStateId") + .ValueGeneratedOnAddOrUpdate() + .HasColumnType("TEXT") + .HasComputedColumnSql("COALESCE([ChildOptionId], [ChildOutcomeId])", true); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("ParentOptionId") + .HasColumnType("TEXT"); + + b.Property("ParentOutcomeId") + .HasColumnType("TEXT"); + + b.Property("ParentStateId") + .ValueGeneratedOnAddOrUpdate() + .HasColumnType("TEXT") + .HasComputedColumnSql("COALESCE([ParentOptionId], [ParentOutcomeId])", true); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("RestrictionTableId") + .HasColumnType("TEXT"); + + b.Property("RestrictionValue") + .ValueGeneratedOnAdd() + .HasPrecision(53) + .HasColumnType("REAL") + .HasDefaultValue(1.0); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("ChildOptionId"); + + b.HasIndex("ChildOutcomeId"); + + b.HasIndex("ParentOptionId"); + + b.HasIndex("ParentOutcomeId"); + + b.HasIndex("ProjectId"); + + b.HasIndex("RestrictionTableId"); + + b.HasIndex("ParentStateId", "ChildStateId", "RestrictionTableId") + .IsUnique(); + + b.ToTable("RestrictionEntries", t => + { + t.HasCheckConstraint("CK_RestrictionEntry_Child", "([ChildOptionId] IS NULL AND [ChildOutcomeId] IS NOT NULL) OR ([ChildOptionId] IS NOT NULL AND [ChildOutcomeId] IS NULL)"); + + t.HasCheckConstraint("CK_RestrictionEntry_Parent", "([ParentOptionId] IS NULL AND [ParentOutcomeId] IS NOT NULL) OR ([ParentOptionId] IS NOT NULL AND [ParentOutcomeId] IS NULL)"); + }); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionTable", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("EdgeId") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("EdgeId") + .IsUnique(); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("RestrictionTables"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("TEXT"); + + b.Property("Icon") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("IconColor") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("Rationale") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Strategies"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.StrategyOption", b => + { + b.Property("StrategyId") + .HasColumnType("TEXT"); + + b.Property("OptionId") + .HasColumnType("TEXT"); + + b.HasKey("StrategyId", "OptionId"); + + b.HasIndex("OptionId"); + + b.ToTable("StrategyOptions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("IsKey") + .HasColumnType("INTEGER"); + + b.Property("IssueId") + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("IssueId") + .IsUnique(); + + b.HasIndex("ProjectId"); + + b.ToTable("Uncertainties"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.User", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.ToTable("Users"); + + b.HasData( + new + { + Id = "d008bfdf-fe89-48f3-80a8-777bba4d9bbf", + CreatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), + Name = "Deleted User", + UpdatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) + }); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("IssueId") + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("IssueId") + .IsUnique(); + + b.HasIndex("ProjectId"); + + b.ToTable("Utilities"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.ValueMetric", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.ToTable("ValueMetrics"); + + b.HasData( + new + { + Id = new Guid("288e0811-7ab6-5d24-b80c-9fa925b848a6"), + CreatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), + Name = "value", + UpdatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) + }); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Assessment", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Assessments") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.BoardNode", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("BoardNodes") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Decision", b => + { + b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") + .WithOne("Decision") + .HasForeignKey("PrismaApi.Domain.Entities.Decision", "IssueId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Issue"); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DecisionQualityAssessment", b => + { + b.HasOne("PrismaApi.Domain.Entities.Assessment", "Assessment") + .WithMany("DecisionQualityAssessments") + .HasForeignKey("AssessmentId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("Assessment"); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbability", b => + { + b.HasOne("PrismaApi.Domain.Entities.Outcome", "Outcome") + .WithMany() + .HasForeignKey("OutcomeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Uncertainty", "Uncertainty") + .WithMany("DiscreteProbabilities") + .HasForeignKey("UncertaintyId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Outcome"); + + b.Navigation("Project"); + + b.Navigation("Uncertainty"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOption", b => + { + b.HasOne("PrismaApi.Domain.Entities.DiscreteProbability", "DiscreteProbability") + .WithMany("ParentOptions") + .HasForeignKey("DiscreteProbabilityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Option", "ParentOption") + .WithMany() + .HasForeignKey("ParentOptionId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("DiscreteProbability"); + + b.Navigation("ParentOption"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOutcome", b => + { + b.HasOne("PrismaApi.Domain.Entities.DiscreteProbability", "DiscreteProbability") + .WithMany("ParentOutcomes") + .HasForeignKey("DiscreteProbabilityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Outcome", "ParentOutcome") + .WithMany() + .HasForeignKey("ParentOutcomeId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("DiscreteProbability"); + + b.Navigation("ParentOutcome"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => + { + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Utility", "Utility") + .WithMany("DiscreteUtilities") + .HasForeignKey("UtilityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.ValueMetric", "ValueMetric") + .WithMany() + .HasForeignKey("ValueMetricId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Project"); + + b.Navigation("Utility"); + + b.Navigation("ValueMetric"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOption", b => + { + b.HasOne("PrismaApi.Domain.Entities.DiscreteUtility", "DiscreteUtility") + .WithMany("ParentOptions") + .HasForeignKey("DiscreteUtilityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Option", "ParentOption") + .WithMany() + .HasForeignKey("ParentOptionId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("DiscreteUtility"); + + b.Navigation("ParentOption"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOutcome", b => + { + b.HasOne("PrismaApi.Domain.Entities.DiscreteUtility", "DiscreteUtility") + .WithMany("ParentOutcomes") + .HasForeignKey("DiscreteUtilityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Outcome", "ParentOutcome") + .WithMany() + .HasForeignKey("ParentOutcomeId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("DiscreteUtility"); + + b.Navigation("ParentOutcome"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Edge", b => + { + b.HasOne("PrismaApi.Domain.Entities.Node", "HeadNode") + .WithMany("HeadEdges") + .HasForeignKey("HeadId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Edges") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Node", "TailNode") + .WithMany("TailEdges") + .HasForeignKey("TailId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("HeadNode"); + + b.Navigation("Project"); + + b.Navigation("TailNode"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Issues") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => + { + b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") + .WithOne("Node") + .HasForeignKey("PrismaApi.Domain.Entities.Node", "IssueId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Nodes") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Issue"); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.NodeStyle", b => + { + b.HasOne("PrismaApi.Domain.Entities.Node", "Node") + .WithOne("NodeStyle") + .HasForeignKey("PrismaApi.Domain.Entities.NodeStyle", "NodeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Node"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Objective", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Objectives") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => + { + b.HasOne("PrismaApi.Domain.Entities.Decision", "Decision") + .WithMany("Options") + .HasForeignKey("DecisionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Decision"); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Outcome", b => + { + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Uncertainty", "Uncertainty") + .WithMany("Outcomes") + .HasForeignKey("UncertaintyId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Project"); + + b.Navigation("Uncertainty"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.ProjectRole", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("ProjectRoles") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "User") + .WithMany("ProjectRoles") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionEntry", b => + { + b.HasOne("PrismaApi.Domain.Entities.Option", "ChildOption") + .WithMany() + .HasForeignKey("ChildOptionId") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("PrismaApi.Domain.Entities.Outcome", "ChildOutcome") + .WithMany() + .HasForeignKey("ChildOutcomeId") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("PrismaApi.Domain.Entities.Option", "ParentOption") + .WithMany() + .HasForeignKey("ParentOptionId") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("PrismaApi.Domain.Entities.Outcome", "ParentOutcome") + .WithMany() + .HasForeignKey("ParentOutcomeId") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.RestrictionTable", "RestrictionTable") + .WithMany("RestrictionEntries") + .HasForeignKey("RestrictionTableId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ChildOption"); + + b.Navigation("ChildOutcome"); + + b.Navigation("ParentOption"); + + b.Navigation("ParentOutcome"); + + b.Navigation("Project"); + + b.Navigation("RestrictionTable"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionTable", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Edge", "Edge") + .WithOne() + .HasForeignKey("PrismaApi.Domain.Entities.RestrictionTable", "EdgeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Edge"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Strategies") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.StrategyOption", b => + { + b.HasOne("PrismaApi.Domain.Entities.Option", "Option") + .WithMany("StrategyOptions") + .HasForeignKey("OptionId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Strategy", "Strategy") + .WithMany("StrategyOptions") + .HasForeignKey("StrategyId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Option"); + + b.Navigation("Strategy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => + { + b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") + .WithOne("Uncertainty") + .HasForeignKey("PrismaApi.Domain.Entities.Uncertainty", "IssueId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Issue"); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => + { + b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") + .WithOne("Utility") + .HasForeignKey("PrismaApi.Domain.Entities.Utility", "IssueId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Issue"); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Assessment", b => + { + b.Navigation("DecisionQualityAssessments"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Decision", b => + { + b.Navigation("Options"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbability", b => + { + b.Navigation("ParentOptions"); + + b.Navigation("ParentOutcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => + { + b.Navigation("ParentOptions"); + + b.Navigation("ParentOutcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => + { + b.Navigation("Decision"); + + b.Navigation("Node"); + + b.Navigation("Uncertainty"); + + b.Navigation("Utility"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => + { + b.Navigation("HeadEdges"); + + b.Navigation("NodeStyle"); + + b.Navigation("TailEdges"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => + { + b.Navigation("StrategyOptions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => + { + b.Navigation("Assessments"); + + b.Navigation("BoardNodes"); + + b.Navigation("Edges"); + + b.Navigation("Issues"); + + b.Navigation("Nodes"); + + b.Navigation("Objectives"); + + b.Navigation("ProjectRoles"); + + b.Navigation("Strategies"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionTable", b => + { + b.Navigation("RestrictionEntries"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => + { + b.Navigation("StrategyOptions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => + { + b.Navigation("DiscreteProbabilities"); + + b.Navigation("Outcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.User", b => + { + b.Navigation("ProjectRoles"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => + { + b.Navigation("DiscreteUtilities"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/PrismaDotnetApi/SqliteMigrations/20260715095307_AddDeletedUser.cs b/PrismaDotnetApi/SqliteMigrations/20260715095307_AddDeletedUser.cs new file mode 100644 index 0000000..95eeeb4 --- /dev/null +++ b/PrismaDotnetApi/SqliteMigrations/20260715095307_AddDeletedUser.cs @@ -0,0 +1,29 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace PrismaApi.Infrastructure.Migrations +{ + /// + public partial class AddDeletedUser : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.InsertData( + table: "Users", + columns: new[] { "Id", "CreatedAt", "Name", "UpdatedAt" }, + values: new object[] { "d008bfdf-fe89-48f3-80a8-777bba4d9bbf", new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), "Deleted User", new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) }); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DeleteData( + table: "Users", + keyColumn: "Id", + keyValue: "d008bfdf-fe89-48f3-80a8-777bba4d9bbf"); + } + } +} diff --git a/PrismaDotnetApi/SqliteMigrations/AppDbContextModelSnapshot.cs b/PrismaDotnetApi/SqliteMigrations/AppDbContextModelSnapshot.cs index c2b7fb0..752c53f 100644 --- a/PrismaDotnetApi/SqliteMigrations/AppDbContextModelSnapshot.cs +++ b/PrismaDotnetApi/SqliteMigrations/AppDbContextModelSnapshot.cs @@ -974,6 +974,15 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasKey("Id"); b.ToTable("Users"); + + b.HasData( + new + { + Id = "d008bfdf-fe89-48f3-80a8-777bba4d9bbf", + CreatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), + Name = "Deleted User", + UpdatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) + }); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => From ba8f6df743c4fc243a749134e50c70992bd889f8 Mon Sep 17 00:00:00 2001 From: EinarSalbouvet <129149934+EinarSalbouvet@users.noreply.github.com> Date: Wed, 15 Jul 2026 14:24:45 +0200 Subject: [PATCH 04/17] Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- .../PrismaApi.Application/Repositories/UserRepository.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/PrismaDotnetApi/PrismaApi.Application/Repositories/UserRepository.cs b/PrismaDotnetApi/PrismaApi.Application/Repositories/UserRepository.cs index 5cb1a0a..c56753d 100644 --- a/PrismaDotnetApi/PrismaApi.Application/Repositories/UserRepository.cs +++ b/PrismaDotnetApi/PrismaApi.Application/Repositories/UserRepository.cs @@ -1,5 +1,4 @@ using Microsoft.EntityFrameworkCore; -using Microsoft.Graph.IdentityGovernance.EntitlementManagement.Assignments.AdditionalAccessWithAccessPackageIdWithIncompatibleAccessPackageId; using PrismaApi.Application.Interfaces.Repositories; using PrismaApi.Application.Mapping; using PrismaApi.Domain.Constants; From a3b6663907f5076423dda0514f0031699227d92a Mon Sep 17 00:00:00 2001 From: EinarSalbouvet <129149934+EinarSalbouvet@users.noreply.github.com> Date: Wed, 15 Jul 2026 14:31:01 +0200 Subject: [PATCH 05/17] Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- .../PrismaApi.Application/Repositories/UserRepository.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/PrismaDotnetApi/PrismaApi.Application/Repositories/UserRepository.cs b/PrismaDotnetApi/PrismaApi.Application/Repositories/UserRepository.cs index c56753d..f75ae57 100644 --- a/PrismaDotnetApi/PrismaApi.Application/Repositories/UserRepository.cs +++ b/PrismaDotnetApi/PrismaApi.Application/Repositories/UserRepository.cs @@ -90,6 +90,7 @@ public async Task GetOrAddByUserNameAsync(UserIncomingDto dto, Cancellatio public override async Task DeleteByIdsAsync(IEnumerable ids, Expression>? filterPredicate = null, CancellationToken ct = default) { var entries = await DbContext.Users + .OptionalWhere(filterPredicate) .Where(u => ids.Contains(u.Id)) .ToListAsync(cancellationToken: ct); From 81f05d791b05b55ee72809730bab5af987295e73 Mon Sep 17 00:00:00 2001 From: EinarSalbouvet Date: Wed, 15 Jul 2026 14:35:48 +0200 Subject: [PATCH 06/17] Fix SQL update statement in DeleteByIdsAsync to prevent redundant parameters --- .../PrismaApi.Application/Repositories/UserRepository.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PrismaDotnetApi/PrismaApi.Application/Repositories/UserRepository.cs b/PrismaDotnetApi/PrismaApi.Application/Repositories/UserRepository.cs index c56753d..e9bdaf9 100644 --- a/PrismaDotnetApi/PrismaApi.Application/Repositories/UserRepository.cs +++ b/PrismaDotnetApi/PrismaApi.Application/Repositories/UserRepository.cs @@ -127,7 +127,7 @@ UPDATE [{tableName}] UPDATE [{tableName}] SET UpdatedById = '{DomainConstants.DeletedUserId}' WHERE UpdatedById IN ({inClause}); - """, [.. idParams.Concat(idParams).Cast()], ct); + """, [.. idParams.Cast()], ct); } // delete project roles From 2e1c70e5f0bdbf6c6715a1be4e83b496253900b4 Mon Sep 17 00:00:00 2001 From: EinarSalbouvet Date: Wed, 22 Jul 2026 08:53:18 +0200 Subject: [PATCH 07/17] Remove migration for deleted user and update table mappings to use nullable string for table names --- .../Repositories/UserRepository.cs | 83 +- .../20260715095316_AddDeletedUser.Designer.cs | 1759 ----------------- .../20260715095316_AddDeletedUser.cs | 29 - .../AppDbContextModelSnapshot.cs | 57 +- .../20260715095307_AddDeletedUser.Designer.cs | 1754 ---------------- .../20260715095307_AddDeletedUser.cs | 29 - .../AppDbContextModelSnapshot.cs | 57 +- 7 files changed, 99 insertions(+), 3669 deletions(-) delete mode 100644 PrismaDotnetApi/SqlServerMigrations/20260715095316_AddDeletedUser.Designer.cs delete mode 100644 PrismaDotnetApi/SqlServerMigrations/20260715095316_AddDeletedUser.cs delete mode 100644 PrismaDotnetApi/SqliteMigrations/20260715095307_AddDeletedUser.Designer.cs delete mode 100644 PrismaDotnetApi/SqliteMigrations/20260715095307_AddDeletedUser.cs diff --git a/PrismaDotnetApi/PrismaApi.Application/Repositories/UserRepository.cs b/PrismaDotnetApi/PrismaApi.Application/Repositories/UserRepository.cs index b7cb556..feb022c 100644 --- a/PrismaDotnetApi/PrismaApi.Application/Repositories/UserRepository.cs +++ b/PrismaDotnetApi/PrismaApi.Application/Repositories/UserRepository.cs @@ -7,6 +7,7 @@ using PrismaApi.Infrastructure.Context; using PrismaApi.Infrastructure.Extensions; using System.Linq.Expressions; +using System.Reflection; namespace PrismaApi.Application.Repositories; @@ -89,58 +90,76 @@ public async Task GetOrAddByUserNameAsync(UserIncomingDto dto, Cancellatio /// public override async Task DeleteByIdsAsync(IEnumerable ids, Expression>? filterPredicate = null, CancellationToken ct = default) { + var idsList = ids.ToList(); var entries = await DbContext.Users .OptionalWhere(filterPredicate) - .Where(u => ids.Contains(u.Id)) + .Where(u => idsList.Contains(u.Id)) .ToListAsync(cancellationToken: ct); if (entries.Count == 0) return; - // update all auditable entities to point to deleted user entry - var connection = DbContext.Database.GetDbConnection(); - using var cmd = connection.CreateCommand(); - var idParams = ids.Select((id, i) => - { - var param = cmd.CreateParameter(); - param.ParameterName = $"@id{i}"; - param.Value = id; - return param; - }).ToArray(); - var inClause = string.Join(",", idParams.Select(p => p.ParameterName)); - - // get all auditable entity types that need the user id updated to the deleted user id. - // This is done to avoid foreign key constraint violations when deleting a user. var auditableEntityTypes = DbContext.Model.GetEntityTypes() - .Where(t => typeof(AuditableEntity).IsAssignableFrom(t.ClrType) && !t.ClrType.IsAbstract); + .Where(t => typeof(AuditableEntity).IsAssignableFrom(t.ClrType) && !t.ClrType.IsAbstract) + .Select(t => t.ClrType) + .Distinct() + .ToList(); - foreach (var entityType in auditableEntityTypes) + foreach (var auditableEntityType in auditableEntityTypes) { - var tableName = entityType.GetTableName(); - - // using raw SQL over the parameterized ExecuteSqlAsync due to issues with the in clause. - // ExecuteSqlAsync protects against SQL injection, - // but all inputed data are controlled by the api and takes no user input. - await DbContext.Database.ExecuteSqlRawAsync($""" - UPDATE [{tableName}] - SET CreatedById = '{DomainConstants.DeletedUserId}' - WHERE CreatedById IN ({inClause}); - UPDATE [{tableName}] - SET UpdatedById = '{DomainConstants.DeletedUserId}' - WHERE UpdatedById IN ({inClause}); - """, [.. idParams.Cast()], ct); + await UpdateAuditableReferencesByTypeAsync(auditableEntityType, idsList, DomainConstants.DeletedUserId, ct); } // delete project roles var projectRoles = await DbContext.ProjectRoles - .Where(e => ids.Contains(e.UserId)) + .Where(e => idsList.Contains(e.UserId)) .ToListAsync(cancellationToken: ct); - DbContext.ProjectRoles.RemoveRange(projectRoles); + foreach (var entry in entries) { DbContext.Users.Remove(entry); } + await DbContext.SaveChangesAsync(ct); } + + private async Task UpdateAuditableReferencesByTypeAsync( + Type auditableEntityType, + IReadOnlyCollection idsList, + string userId, + CancellationToken ct) + { + // Use reflection to call the generic method with the specific entity type + var UpdateAuditableReferencesByTypeMethod = typeof(UserRepository) + .GetMethod(nameof(UpdateAuditableReferencesByTypeAsync), BindingFlags.NonPublic | BindingFlags.Static)!; + var genericMethod = UpdateAuditableReferencesByTypeMethod.MakeGenericMethod(auditableEntityType); + var updateTask = (Task?)genericMethod.Invoke(null, [DbContext, idsList, userId, ct]); + if (updateTask == null) + { + throw new InvalidOperationException($"Could not execute auditable reference update for type '{auditableEntityType.Name}'."); + } + await updateTask; + } + + private static Task UpdateAuditableReferencesByTypeAsync( + AppDbContext dbContext, + List idsList, + string userId, + CancellationToken ct) where TEntity : AuditableEntity + { + // Use ExecuteUpdateAsync to update the CreatedById and UpdatedById properties to userId for all entities of type TEntity + return dbContext + .Set() + .Where(e => idsList.Contains(e.CreatedById) || idsList.Contains(e.UpdatedById)) + .ExecuteUpdateAsync( + setters => setters + .SetProperty( + e => e.CreatedById, + e => idsList.Contains(e.CreatedById) ? userId : e.CreatedById) + .SetProperty( + e => e.UpdatedById, + e => idsList.Contains(e.UpdatedById) ? userId : e.UpdatedById), + cancellationToken: ct); + } } diff --git a/PrismaDotnetApi/SqlServerMigrations/20260715095316_AddDeletedUser.Designer.cs b/PrismaDotnetApi/SqlServerMigrations/20260715095316_AddDeletedUser.Designer.cs deleted file mode 100644 index c1c58f4..0000000 --- a/PrismaDotnetApi/SqlServerMigrations/20260715095316_AddDeletedUser.Designer.cs +++ /dev/null @@ -1,1759 +0,0 @@ -// -using System; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using PrismaApi.Infrastructure.Context; - -#nullable disable - -namespace PrismaApi.Infrastructure.Migrations -{ - [DbContext(typeof(AppDbContext))] - [Migration("20260715095316_AddDeletedUser")] - partial class AddDeletedUser - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "9.0.13") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Assessment", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.Property("IsCompleted") - .HasColumnType("bit"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Assessments", (string)null); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.BoardNode", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("Color") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.Property("Data") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Height") - .HasColumnType("float"); - - b.Property("Opacity") - .ValueGeneratedOnAdd() - .HasColumnType("int") - .HasDefaultValue(100); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("Rotation") - .HasColumnType("float"); - - b.Property("StrokeStyle") - .IsRequired() - .ValueGeneratedOnAdd() - .HasColumnType("nvarchar(max)") - .HasDefaultValue("Solid"); - - b.Property("StrokeWidth") - .ValueGeneratedOnAdd() - .HasColumnType("real") - .HasDefaultValue(8f); - - b.Property("TextSize") - .ValueGeneratedOnAdd() - .HasColumnType("int") - .HasDefaultValue(24); - - b.Property("Type") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.Property("Width") - .HasColumnType("float"); - - b.Property("XPosition") - .HasColumnType("float"); - - b.Property("YPosition") - .HasColumnType("float"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("BoardNode", (string)null); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Decision", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("IssueId") - .HasColumnType("uniqueidentifier"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("Type") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.HasKey("Id"); - - b.HasIndex("IssueId") - .IsUnique(); - - b.HasIndex("ProjectId"); - - b.ToTable("Decisions"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DecisionQualityAssessment", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("AppropriateFrame") - .HasColumnType("int"); - - b.Property("AssessmentId") - .HasColumnType("uniqueidentifier"); - - b.Property("Comment") - .IsRequired() - .HasMaxLength(6000) - .HasColumnType("nvarchar(max)"); - - b.Property("CommitmentToAction") - .HasColumnType("int"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.Property("DoableAlternatives") - .HasColumnType("int"); - - b.Property("InformationReliability") - .HasColumnType("int"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("ReasoningCorrectness") - .HasColumnType("int"); - - b.Property("TradeOffAnalysis") - .HasColumnType("int"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.HasKey("Id"); - - b.HasIndex("AssessmentId"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("DecisionQualityAssessments", (string)null); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbability", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("OutcomeId") - .HasColumnType("uniqueidentifier"); - - b.Property("Probability") - .HasPrecision(53) - .HasColumnType("float(53)"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("UncertaintyId") - .HasColumnType("uniqueidentifier"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.HasKey("Id"); - - b.HasIndex("OutcomeId"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UncertaintyId"); - - b.ToTable("DiscreteProbabilities"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOption", b => - { - b.Property("DiscreteProbabilityId") - .HasColumnType("uniqueidentifier"); - - b.Property("ParentOptionId") - .HasColumnType("uniqueidentifier"); - - b.HasKey("DiscreteProbabilityId", "ParentOptionId"); - - b.HasIndex("ParentOptionId"); - - b.ToTable("DiscreteProbabilityParentOptions"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOutcome", b => - { - b.Property("DiscreteProbabilityId") - .HasColumnType("uniqueidentifier"); - - b.Property("ParentOutcomeId") - .HasColumnType("uniqueidentifier"); - - b.HasKey("DiscreteProbabilityId", "ParentOutcomeId"); - - b.HasIndex("ParentOutcomeId"); - - b.ToTable("DiscreteProbabilityParentOutcomes"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("UtilityId") - .HasColumnType("uniqueidentifier"); - - b.Property("UtilityValue") - .HasPrecision(53) - .HasColumnType("float(53)"); - - b.Property("ValueMetricId") - .HasColumnType("uniqueidentifier"); - - b.HasKey("Id"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UtilityId"); - - b.HasIndex("ValueMetricId"); - - b.ToTable("DiscreteUtilities"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOption", b => - { - b.Property("DiscreteUtilityId") - .HasColumnType("uniqueidentifier"); - - b.Property("ParentOptionId") - .HasColumnType("uniqueidentifier"); - - b.HasKey("DiscreteUtilityId", "ParentOptionId"); - - b.HasIndex("ParentOptionId"); - - b.ToTable("DiscreteUtilityParentOptions"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOutcome", b => - { - b.Property("DiscreteUtilityId") - .HasColumnType("uniqueidentifier"); - - b.Property("ParentOutcomeId") - .HasColumnType("uniqueidentifier"); - - b.HasKey("DiscreteUtilityId", "ParentOutcomeId"); - - b.HasIndex("ParentOutcomeId"); - - b.ToTable("DiscreteUtilityParentOutcomes"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Edge", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("HeadId") - .HasColumnType("uniqueidentifier"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("TailId") - .HasColumnType("uniqueidentifier"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.HasKey("Id"); - - b.HasIndex("HeadId"); - - b.HasIndex("ProjectId"); - - b.HasIndex("TailId"); - - b.ToTable("Edges"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("Boundary") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.Property("Description") - .IsRequired() - .HasMaxLength(6000) - .HasColumnType("nvarchar(max)"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("Order") - .HasColumnType("int"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("Type") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Issues"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("IssueId") - .HasColumnType("uniqueidentifier"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.HasKey("Id"); - - b.HasIndex("IssueId") - .IsUnique(); - - b.HasIndex("ProjectId"); - - b.ToTable("Nodes"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.NodeStyle", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("NodeId") - .HasColumnType("uniqueidentifier"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("XPosition") - .HasColumnType("float"); - - b.Property("YPosition") - .HasColumnType("float"); - - b.HasKey("Id"); - - b.HasIndex("NodeId") - .IsUnique(); - - b.ToTable("NodeStyles"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Objective", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.Property("Description") - .IsRequired() - .HasMaxLength(6000) - .HasColumnType("nvarchar(max)"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("Type") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Objectives"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("DecisionId") - .HasColumnType("uniqueidentifier"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("Utility") - .HasColumnType("float"); - - b.HasKey("Id"); - - b.HasIndex("DecisionId"); - - b.HasIndex("ProjectId"); - - b.ToTable("Options"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Outcome", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("UncertaintyId") - .HasColumnType("uniqueidentifier"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("Utility") - .HasColumnType("float"); - - b.HasKey("Id"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UncertaintyId"); - - b.ToTable("Outcomes"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.Property("EndDate") - .HasColumnType("datetimeoffset"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("OpportunityStatement") - .IsRequired() - .HasMaxLength(6000) - .HasColumnType("nvarchar(max)"); - - b.Property("ParentProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("ParentProjectName") - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("Public") - .HasColumnType("bit"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Projects"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.ProjectRole", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("Role") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.Property("UserId") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UpdatedById"); - - b.HasIndex("UserId"); - - b.ToTable("ProjectRoles"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionEntry", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("ChildOptionId") - .HasColumnType("uniqueidentifier"); - - b.Property("ChildOutcomeId") - .HasColumnType("uniqueidentifier"); - - b.Property("ChildStateId") - .ValueGeneratedOnAddOrUpdate() - .HasColumnType("uniqueidentifier") - .HasComputedColumnSql("COALESCE([ChildOptionId], [ChildOutcomeId])", true); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("ParentOptionId") - .HasColumnType("uniqueidentifier"); - - b.Property("ParentOutcomeId") - .HasColumnType("uniqueidentifier"); - - b.Property("ParentStateId") - .ValueGeneratedOnAddOrUpdate() - .HasColumnType("uniqueidentifier") - .HasComputedColumnSql("COALESCE([ParentOptionId], [ParentOutcomeId])", true); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("RestrictionTableId") - .HasColumnType("uniqueidentifier"); - - b.Property("RestrictionValue") - .ValueGeneratedOnAdd() - .HasPrecision(53) - .HasColumnType("float(53)") - .HasDefaultValue(1.0); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.HasKey("Id"); - - b.HasIndex("ChildOptionId"); - - b.HasIndex("ChildOutcomeId"); - - b.HasIndex("ParentOptionId"); - - b.HasIndex("ParentOutcomeId"); - - b.HasIndex("ProjectId"); - - b.HasIndex("RestrictionTableId"); - - b.HasIndex("ParentStateId", "ChildStateId", "RestrictionTableId") - .IsUnique(); - - b.ToTable("RestrictionEntries", t => - { - t.HasCheckConstraint("CK_RestrictionEntry_Child", "([ChildOptionId] IS NULL AND [ChildOutcomeId] IS NOT NULL) OR ([ChildOptionId] IS NOT NULL AND [ChildOutcomeId] IS NULL)"); - - t.HasCheckConstraint("CK_RestrictionEntry_Parent", "([ParentOptionId] IS NULL AND [ParentOutcomeId] IS NOT NULL) OR ([ParentOptionId] IS NOT NULL AND [ParentOutcomeId] IS NULL)"); - }); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionTable", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.Property("EdgeId") - .HasColumnType("uniqueidentifier"); - - b.Property("Name") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("EdgeId") - .IsUnique(); - - b.HasIndex("ProjectId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("RestrictionTables"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.Property("Description") - .IsRequired() - .HasMaxLength(6000) - .HasColumnType("nvarchar(max)"); - - b.Property("Icon") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("IconColor") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("Rationale") - .IsRequired() - .HasMaxLength(6000) - .HasColumnType("nvarchar(max)"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Strategies"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.StrategyOption", b => - { - b.Property("StrategyId") - .HasColumnType("uniqueidentifier"); - - b.Property("OptionId") - .HasColumnType("uniqueidentifier"); - - b.HasKey("StrategyId", "OptionId"); - - b.HasIndex("OptionId"); - - b.ToTable("StrategyOptions"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("IsKey") - .HasColumnType("bit"); - - b.Property("IssueId") - .HasColumnType("uniqueidentifier"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.HasKey("Id"); - - b.HasIndex("IssueId") - .IsUnique(); - - b.HasIndex("ProjectId"); - - b.ToTable("Uncertainties"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.User", b => - { - b.Property("Id") - .HasColumnType("nvarchar(450)"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.HasKey("Id"); - - b.ToTable("Users"); - - b.HasData( - new - { - Id = "d008bfdf-fe89-48f3-80a8-777bba4d9bbf", - CreatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), - Name = "Deleted User", - UpdatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) - }); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("IssueId") - .HasColumnType("uniqueidentifier"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.HasKey("Id"); - - b.HasIndex("IssueId") - .IsUnique(); - - b.HasIndex("ProjectId"); - - b.ToTable("Utilities"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.ValueMetric", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.HasKey("Id"); - - b.ToTable("ValueMetrics"); - - b.HasData( - new - { - Id = new Guid("288e0811-7ab6-5d24-b80c-9fa925b848a6"), - CreatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), - Name = "value", - UpdatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) - }); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Assessment", b => - { - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("Assessments") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("Project"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.BoardNode", b => - { - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("BoardNodes") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("Project"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Decision", b => - { - b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") - .WithOne("Decision") - .HasForeignKey("PrismaApi.Domain.Entities.Decision", "IssueId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("Issue"); - - b.Navigation("Project"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DecisionQualityAssessment", b => - { - b.HasOne("PrismaApi.Domain.Entities.Assessment", "Assessment") - .WithMany("DecisionQualityAssessments") - .HasForeignKey("AssessmentId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("Assessment"); - - b.Navigation("CreatedBy"); - - b.Navigation("Project"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbability", b => - { - b.HasOne("PrismaApi.Domain.Entities.Outcome", "Outcome") - .WithMany() - .HasForeignKey("OutcomeId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Uncertainty", "Uncertainty") - .WithMany("DiscreteProbabilities") - .HasForeignKey("UncertaintyId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("Outcome"); - - b.Navigation("Project"); - - b.Navigation("Uncertainty"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOption", b => - { - b.HasOne("PrismaApi.Domain.Entities.DiscreteProbability", "DiscreteProbability") - .WithMany("ParentOptions") - .HasForeignKey("DiscreteProbabilityId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Option", "ParentOption") - .WithMany() - .HasForeignKey("ParentOptionId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("DiscreteProbability"); - - b.Navigation("ParentOption"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOutcome", b => - { - b.HasOne("PrismaApi.Domain.Entities.DiscreteProbability", "DiscreteProbability") - .WithMany("ParentOutcomes") - .HasForeignKey("DiscreteProbabilityId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Outcome", "ParentOutcome") - .WithMany() - .HasForeignKey("ParentOutcomeId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("DiscreteProbability"); - - b.Navigation("ParentOutcome"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => - { - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Utility", "Utility") - .WithMany("DiscreteUtilities") - .HasForeignKey("UtilityId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.ValueMetric", "ValueMetric") - .WithMany() - .HasForeignKey("ValueMetricId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Project"); - - b.Navigation("Utility"); - - b.Navigation("ValueMetric"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOption", b => - { - b.HasOne("PrismaApi.Domain.Entities.DiscreteUtility", "DiscreteUtility") - .WithMany("ParentOptions") - .HasForeignKey("DiscreteUtilityId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Option", "ParentOption") - .WithMany() - .HasForeignKey("ParentOptionId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("DiscreteUtility"); - - b.Navigation("ParentOption"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOutcome", b => - { - b.HasOne("PrismaApi.Domain.Entities.DiscreteUtility", "DiscreteUtility") - .WithMany("ParentOutcomes") - .HasForeignKey("DiscreteUtilityId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Outcome", "ParentOutcome") - .WithMany() - .HasForeignKey("ParentOutcomeId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("DiscreteUtility"); - - b.Navigation("ParentOutcome"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Edge", b => - { - b.HasOne("PrismaApi.Domain.Entities.Node", "HeadNode") - .WithMany("HeadEdges") - .HasForeignKey("HeadId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("Edges") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Node", "TailNode") - .WithMany("TailEdges") - .HasForeignKey("TailId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("HeadNode"); - - b.Navigation("Project"); - - b.Navigation("TailNode"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => - { - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("Issues") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("Project"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => - { - b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") - .WithOne("Node") - .HasForeignKey("PrismaApi.Domain.Entities.Node", "IssueId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("Nodes") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("Issue"); - - b.Navigation("Project"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.NodeStyle", b => - { - b.HasOne("PrismaApi.Domain.Entities.Node", "Node") - .WithOne("NodeStyle") - .HasForeignKey("PrismaApi.Domain.Entities.NodeStyle", "NodeId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Node"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Objective", b => - { - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("Objectives") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("Project"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => - { - b.HasOne("PrismaApi.Domain.Entities.Decision", "Decision") - .WithMany("Options") - .HasForeignKey("DecisionId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("Decision"); - - b.Navigation("Project"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Outcome", b => - { - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Uncertainty", "Uncertainty") - .WithMany("Outcomes") - .HasForeignKey("UncertaintyId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Project"); - - b.Navigation("Uncertainty"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => - { - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.ProjectRole", b => - { - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("ProjectRoles") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "User") - .WithMany("ProjectRoles") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("Project"); - - b.Navigation("UpdatedBy"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionEntry", b => - { - b.HasOne("PrismaApi.Domain.Entities.Option", "ChildOption") - .WithMany() - .HasForeignKey("ChildOptionId") - .OnDelete(DeleteBehavior.Restrict); - - b.HasOne("PrismaApi.Domain.Entities.Outcome", "ChildOutcome") - .WithMany() - .HasForeignKey("ChildOutcomeId") - .OnDelete(DeleteBehavior.Restrict); - - b.HasOne("PrismaApi.Domain.Entities.Option", "ParentOption") - .WithMany() - .HasForeignKey("ParentOptionId") - .OnDelete(DeleteBehavior.Restrict); - - b.HasOne("PrismaApi.Domain.Entities.Outcome", "ParentOutcome") - .WithMany() - .HasForeignKey("ParentOutcomeId") - .OnDelete(DeleteBehavior.Restrict); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.RestrictionTable", "RestrictionTable") - .WithMany("RestrictionEntries") - .HasForeignKey("RestrictionTableId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("ChildOption"); - - b.Navigation("ChildOutcome"); - - b.Navigation("ParentOption"); - - b.Navigation("ParentOutcome"); - - b.Navigation("Project"); - - b.Navigation("RestrictionTable"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionTable", b => - { - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Edge", "Edge") - .WithOne() - .HasForeignKey("PrismaApi.Domain.Entities.RestrictionTable", "EdgeId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("Edge"); - - b.Navigation("Project"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => - { - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("Strategies") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("Project"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.StrategyOption", b => - { - b.HasOne("PrismaApi.Domain.Entities.Option", "Option") - .WithMany("StrategyOptions") - .HasForeignKey("OptionId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Strategy", "Strategy") - .WithMany("StrategyOptions") - .HasForeignKey("StrategyId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Option"); - - b.Navigation("Strategy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => - { - b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") - .WithOne("Uncertainty") - .HasForeignKey("PrismaApi.Domain.Entities.Uncertainty", "IssueId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("Issue"); - - b.Navigation("Project"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => - { - b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") - .WithOne("Utility") - .HasForeignKey("PrismaApi.Domain.Entities.Utility", "IssueId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("Issue"); - - b.Navigation("Project"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Assessment", b => - { - b.Navigation("DecisionQualityAssessments"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Decision", b => - { - b.Navigation("Options"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbability", b => - { - b.Navigation("ParentOptions"); - - b.Navigation("ParentOutcomes"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => - { - b.Navigation("ParentOptions"); - - b.Navigation("ParentOutcomes"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => - { - b.Navigation("Decision"); - - b.Navigation("Node"); - - b.Navigation("Uncertainty"); - - b.Navigation("Utility"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => - { - b.Navigation("HeadEdges"); - - b.Navigation("NodeStyle"); - - b.Navigation("TailEdges"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => - { - b.Navigation("StrategyOptions"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => - { - b.Navigation("Assessments"); - - b.Navigation("BoardNodes"); - - b.Navigation("Edges"); - - b.Navigation("Issues"); - - b.Navigation("Nodes"); - - b.Navigation("Objectives"); - - b.Navigation("ProjectRoles"); - - b.Navigation("Strategies"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionTable", b => - { - b.Navigation("RestrictionEntries"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => - { - b.Navigation("StrategyOptions"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => - { - b.Navigation("DiscreteProbabilities"); - - b.Navigation("Outcomes"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.User", b => - { - b.Navigation("ProjectRoles"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => - { - b.Navigation("DiscreteUtilities"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/PrismaDotnetApi/SqlServerMigrations/20260715095316_AddDeletedUser.cs b/PrismaDotnetApi/SqlServerMigrations/20260715095316_AddDeletedUser.cs deleted file mode 100644 index 95eeeb4..0000000 --- a/PrismaDotnetApi/SqlServerMigrations/20260715095316_AddDeletedUser.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace PrismaApi.Infrastructure.Migrations -{ - /// - public partial class AddDeletedUser : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.InsertData( - table: "Users", - columns: new[] { "Id", "CreatedAt", "Name", "UpdatedAt" }, - values: new object[] { "d008bfdf-fe89-48f3-80a8-777bba4d9bbf", new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), "Deleted User", new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DeleteData( - table: "Users", - keyColumn: "Id", - keyValue: "d008bfdf-fe89-48f3-80a8-777bba4d9bbf"); - } - } -} diff --git a/PrismaDotnetApi/SqlServerMigrations/AppDbContextModelSnapshot.cs b/PrismaDotnetApi/SqlServerMigrations/AppDbContextModelSnapshot.cs index 25310d7..2014041 100644 --- a/PrismaDotnetApi/SqlServerMigrations/AppDbContextModelSnapshot.cs +++ b/PrismaDotnetApi/SqlServerMigrations/AppDbContextModelSnapshot.cs @@ -178,7 +178,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ProjectId"); - b.ToTable("Decisions"); + b.ToTable("Decisions", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.DecisionQualityAssessment", b => @@ -276,7 +276,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UncertaintyId"); - b.ToTable("DiscreteProbabilities"); + b.ToTable("DiscreteProbabilities", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOption", b => @@ -291,7 +291,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ParentOptionId"); - b.ToTable("DiscreteProbabilityParentOptions"); + b.ToTable("DiscreteProbabilityParentOptions", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOutcome", b => @@ -306,7 +306,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ParentOutcomeId"); - b.ToTable("DiscreteProbabilityParentOutcomes"); + b.ToTable("DiscreteProbabilityParentOutcomes", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => @@ -342,7 +342,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ValueMetricId"); - b.ToTable("DiscreteUtilities"); + b.ToTable("DiscreteUtilities", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOption", b => @@ -357,7 +357,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ParentOptionId"); - b.ToTable("DiscreteUtilityParentOptions"); + b.ToTable("DiscreteUtilityParentOptions", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOutcome", b => @@ -372,7 +372,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ParentOutcomeId"); - b.ToTable("DiscreteUtilityParentOutcomes"); + b.ToTable("DiscreteUtilityParentOutcomes", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Edge", b => @@ -404,7 +404,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("TailId"); - b.ToTable("Edges"); + b.ToTable("Edges", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => @@ -461,7 +461,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UpdatedById"); - b.ToTable("Issues"); + b.ToTable("Issues", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => @@ -494,7 +494,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ProjectId"); - b.ToTable("Nodes"); + b.ToTable("Nodes", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.NodeStyle", b => @@ -523,7 +523,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("NodeId") .IsUnique(); - b.ToTable("NodeStyles"); + b.ToTable("NodeStyles", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Objective", b => @@ -572,7 +572,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UpdatedById"); - b.ToTable("Objectives"); + b.ToTable("Objectives", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => @@ -607,7 +607,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ProjectId"); - b.ToTable("Options"); + b.ToTable("Options", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Outcome", b => @@ -642,7 +642,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UncertaintyId"); - b.ToTable("Outcomes"); + b.ToTable("Outcomes", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => @@ -694,7 +694,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UpdatedById"); - b.ToTable("Projects"); + b.ToTable("Projects", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.ProjectRole", b => @@ -739,7 +739,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UserId"); - b.ToTable("ProjectRoles"); + b.ToTable("ProjectRoles", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionEntry", b => @@ -805,7 +805,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ParentStateId", "ChildStateId", "RestrictionTableId") .IsUnique(); - b.ToTable("RestrictionEntries", t => + b.ToTable("RestrictionEntries", null, t => { t.HasCheckConstraint("CK_RestrictionEntry_Child", "([ChildOptionId] IS NULL AND [ChildOutcomeId] IS NOT NULL) OR ([ChildOptionId] IS NOT NULL AND [ChildOutcomeId] IS NULL)"); @@ -854,7 +854,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UpdatedById"); - b.ToTable("RestrictionTables"); + b.ToTable("RestrictionTables", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => @@ -911,7 +911,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UpdatedById"); - b.ToTable("Strategies"); + b.ToTable("Strategies", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.StrategyOption", b => @@ -926,7 +926,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("OptionId"); - b.ToTable("StrategyOptions"); + b.ToTable("StrategyOptions", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => @@ -957,7 +957,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ProjectId"); - b.ToTable("Uncertainties"); + b.ToTable("Uncertainties", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.User", b => @@ -978,16 +978,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasKey("Id"); - b.ToTable("Users"); - - b.HasData( - new - { - Id = "d008bfdf-fe89-48f3-80a8-777bba4d9bbf", - CreatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), - Name = "Deleted User", - UpdatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) - }); + b.ToTable("Users", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => @@ -1015,7 +1006,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ProjectId"); - b.ToTable("Utilities"); + b.ToTable("Utilities", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.ValueMetric", b => @@ -1037,7 +1028,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasKey("Id"); - b.ToTable("ValueMetrics"); + b.ToTable("ValueMetrics", (string)null); b.HasData( new diff --git a/PrismaDotnetApi/SqliteMigrations/20260715095307_AddDeletedUser.Designer.cs b/PrismaDotnetApi/SqliteMigrations/20260715095307_AddDeletedUser.Designer.cs deleted file mode 100644 index 346c929..0000000 --- a/PrismaDotnetApi/SqliteMigrations/20260715095307_AddDeletedUser.Designer.cs +++ /dev/null @@ -1,1754 +0,0 @@ -// -using System; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using PrismaApi.Infrastructure.Context; - -#nullable disable - -namespace PrismaApi.Infrastructure.Migrations -{ - [DbContext(typeof(AppDbContext))] - [Migration("20260715095307_AddDeletedUser")] - partial class AddDeletedUser - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder.HasAnnotation("ProductVersion", "9.0.13"); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Assessment", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("IsCompleted") - .HasColumnType("INTEGER"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Assessments", (string)null); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.BoardNode", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("Color") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Data") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Height") - .HasColumnType("REAL"); - - b.Property("Opacity") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER") - .HasDefaultValue(100); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("Rotation") - .HasColumnType("REAL"); - - b.Property("StrokeStyle") - .IsRequired() - .ValueGeneratedOnAdd() - .HasColumnType("TEXT") - .HasDefaultValue("Solid"); - - b.Property("StrokeWidth") - .ValueGeneratedOnAdd() - .HasColumnType("REAL") - .HasDefaultValue(8f); - - b.Property("TextSize") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER") - .HasDefaultValue(24); - - b.Property("Type") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Width") - .HasColumnType("REAL"); - - b.Property("XPosition") - .HasColumnType("REAL"); - - b.Property("YPosition") - .HasColumnType("REAL"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("BoardNode", (string)null); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Decision", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("IssueId") - .HasColumnType("TEXT"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("Type") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("IssueId") - .IsUnique(); - - b.HasIndex("ProjectId"); - - b.ToTable("Decisions"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DecisionQualityAssessment", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("AppropriateFrame") - .HasColumnType("INTEGER"); - - b.Property("AssessmentId") - .HasColumnType("TEXT"); - - b.Property("Comment") - .IsRequired() - .HasMaxLength(6000) - .HasColumnType("TEXT"); - - b.Property("CommitmentToAction") - .HasColumnType("INTEGER"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("DoableAlternatives") - .HasColumnType("INTEGER"); - - b.Property("InformationReliability") - .HasColumnType("INTEGER"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("ReasoningCorrectness") - .HasColumnType("INTEGER"); - - b.Property("TradeOffAnalysis") - .HasColumnType("INTEGER"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("AssessmentId"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("DecisionQualityAssessments", (string)null); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbability", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("OutcomeId") - .HasColumnType("TEXT"); - - b.Property("Probability") - .HasPrecision(53) - .HasColumnType("REAL"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("UncertaintyId") - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("OutcomeId"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UncertaintyId"); - - b.ToTable("DiscreteProbabilities"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOption", b => - { - b.Property("DiscreteProbabilityId") - .HasColumnType("TEXT"); - - b.Property("ParentOptionId") - .HasColumnType("TEXT"); - - b.HasKey("DiscreteProbabilityId", "ParentOptionId"); - - b.HasIndex("ParentOptionId"); - - b.ToTable("DiscreteProbabilityParentOptions"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOutcome", b => - { - b.Property("DiscreteProbabilityId") - .HasColumnType("TEXT"); - - b.Property("ParentOutcomeId") - .HasColumnType("TEXT"); - - b.HasKey("DiscreteProbabilityId", "ParentOutcomeId"); - - b.HasIndex("ParentOutcomeId"); - - b.ToTable("DiscreteProbabilityParentOutcomes"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.Property("UtilityId") - .HasColumnType("TEXT"); - - b.Property("UtilityValue") - .HasPrecision(53) - .HasColumnType("REAL"); - - b.Property("ValueMetricId") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UtilityId"); - - b.HasIndex("ValueMetricId"); - - b.ToTable("DiscreteUtilities"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOption", b => - { - b.Property("DiscreteUtilityId") - .HasColumnType("TEXT"); - - b.Property("ParentOptionId") - .HasColumnType("TEXT"); - - b.HasKey("DiscreteUtilityId", "ParentOptionId"); - - b.HasIndex("ParentOptionId"); - - b.ToTable("DiscreteUtilityParentOptions"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOutcome", b => - { - b.Property("DiscreteUtilityId") - .HasColumnType("TEXT"); - - b.Property("ParentOutcomeId") - .HasColumnType("TEXT"); - - b.HasKey("DiscreteUtilityId", "ParentOutcomeId"); - - b.HasIndex("ParentOutcomeId"); - - b.ToTable("DiscreteUtilityParentOutcomes"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Edge", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("HeadId") - .HasColumnType("TEXT"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("TailId") - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("HeadId"); - - b.HasIndex("ProjectId"); - - b.HasIndex("TailId"); - - b.ToTable("Edges"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("Boundary") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Description") - .IsRequired() - .HasMaxLength(6000) - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("Order") - .HasColumnType("INTEGER"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("Type") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Issues"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("IssueId") - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("IssueId") - .IsUnique(); - - b.HasIndex("ProjectId"); - - b.ToTable("Nodes"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.NodeStyle", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("NodeId") - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.Property("XPosition") - .HasColumnType("REAL"); - - b.Property("YPosition") - .HasColumnType("REAL"); - - b.HasKey("Id"); - - b.HasIndex("NodeId") - .IsUnique(); - - b.ToTable("NodeStyles"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Objective", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Description") - .IsRequired() - .HasMaxLength(6000) - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("Type") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Objectives"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("DecisionId") - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.Property("Utility") - .HasColumnType("REAL"); - - b.HasKey("Id"); - - b.HasIndex("DecisionId"); - - b.HasIndex("ProjectId"); - - b.ToTable("Options"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Outcome", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("UncertaintyId") - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.Property("Utility") - .HasColumnType("REAL"); - - b.HasKey("Id"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UncertaintyId"); - - b.ToTable("Outcomes"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("EndDate") - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("OpportunityStatement") - .IsRequired() - .HasMaxLength(6000) - .HasColumnType("TEXT"); - - b.Property("ParentProjectId") - .HasColumnType("TEXT"); - - b.Property("ParentProjectName") - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("Public") - .HasColumnType("INTEGER"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Projects"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.ProjectRole", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("Role") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("UserId") - .IsRequired() - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UpdatedById"); - - b.HasIndex("UserId"); - - b.ToTable("ProjectRoles"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionEntry", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("ChildOptionId") - .HasColumnType("TEXT"); - - b.Property("ChildOutcomeId") - .HasColumnType("TEXT"); - - b.Property("ChildStateId") - .ValueGeneratedOnAddOrUpdate() - .HasColumnType("TEXT") - .HasComputedColumnSql("COALESCE([ChildOptionId], [ChildOutcomeId])", true); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("ParentOptionId") - .HasColumnType("TEXT"); - - b.Property("ParentOutcomeId") - .HasColumnType("TEXT"); - - b.Property("ParentStateId") - .ValueGeneratedOnAddOrUpdate() - .HasColumnType("TEXT") - .HasComputedColumnSql("COALESCE([ParentOptionId], [ParentOutcomeId])", true); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("RestrictionTableId") - .HasColumnType("TEXT"); - - b.Property("RestrictionValue") - .ValueGeneratedOnAdd() - .HasPrecision(53) - .HasColumnType("REAL") - .HasDefaultValue(1.0); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("ChildOptionId"); - - b.HasIndex("ChildOutcomeId"); - - b.HasIndex("ParentOptionId"); - - b.HasIndex("ParentOutcomeId"); - - b.HasIndex("ProjectId"); - - b.HasIndex("RestrictionTableId"); - - b.HasIndex("ParentStateId", "ChildStateId", "RestrictionTableId") - .IsUnique(); - - b.ToTable("RestrictionEntries", t => - { - t.HasCheckConstraint("CK_RestrictionEntry_Child", "([ChildOptionId] IS NULL AND [ChildOutcomeId] IS NOT NULL) OR ([ChildOptionId] IS NOT NULL AND [ChildOutcomeId] IS NULL)"); - - t.HasCheckConstraint("CK_RestrictionEntry_Parent", "([ParentOptionId] IS NULL AND [ParentOutcomeId] IS NOT NULL) OR ([ParentOptionId] IS NOT NULL AND [ParentOutcomeId] IS NULL)"); - }); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionTable", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("EdgeId") - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("EdgeId") - .IsUnique(); - - b.HasIndex("ProjectId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("RestrictionTables"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Description") - .IsRequired() - .HasMaxLength(6000) - .HasColumnType("TEXT"); - - b.Property("Icon") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("IconColor") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("Rationale") - .IsRequired() - .HasMaxLength(6000) - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Strategies"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.StrategyOption", b => - { - b.Property("StrategyId") - .HasColumnType("TEXT"); - - b.Property("OptionId") - .HasColumnType("TEXT"); - - b.HasKey("StrategyId", "OptionId"); - - b.HasIndex("OptionId"); - - b.ToTable("StrategyOptions"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("IsKey") - .HasColumnType("INTEGER"); - - b.Property("IssueId") - .HasColumnType("TEXT"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("IssueId") - .IsUnique(); - - b.HasIndex("ProjectId"); - - b.ToTable("Uncertainties"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.User", b => - { - b.Property("Id") - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.ToTable("Users"); - - b.HasData( - new - { - Id = "d008bfdf-fe89-48f3-80a8-777bba4d9bbf", - CreatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), - Name = "Deleted User", - UpdatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) - }); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("IssueId") - .HasColumnType("TEXT"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("IssueId") - .IsUnique(); - - b.HasIndex("ProjectId"); - - b.ToTable("Utilities"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.ValueMetric", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.ToTable("ValueMetrics"); - - b.HasData( - new - { - Id = new Guid("288e0811-7ab6-5d24-b80c-9fa925b848a6"), - CreatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), - Name = "value", - UpdatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) - }); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Assessment", b => - { - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("Assessments") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("Project"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.BoardNode", b => - { - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("BoardNodes") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("Project"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Decision", b => - { - b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") - .WithOne("Decision") - .HasForeignKey("PrismaApi.Domain.Entities.Decision", "IssueId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("Issue"); - - b.Navigation("Project"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DecisionQualityAssessment", b => - { - b.HasOne("PrismaApi.Domain.Entities.Assessment", "Assessment") - .WithMany("DecisionQualityAssessments") - .HasForeignKey("AssessmentId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("Assessment"); - - b.Navigation("CreatedBy"); - - b.Navigation("Project"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbability", b => - { - b.HasOne("PrismaApi.Domain.Entities.Outcome", "Outcome") - .WithMany() - .HasForeignKey("OutcomeId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Uncertainty", "Uncertainty") - .WithMany("DiscreteProbabilities") - .HasForeignKey("UncertaintyId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("Outcome"); - - b.Navigation("Project"); - - b.Navigation("Uncertainty"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOption", b => - { - b.HasOne("PrismaApi.Domain.Entities.DiscreteProbability", "DiscreteProbability") - .WithMany("ParentOptions") - .HasForeignKey("DiscreteProbabilityId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Option", "ParentOption") - .WithMany() - .HasForeignKey("ParentOptionId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("DiscreteProbability"); - - b.Navigation("ParentOption"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOutcome", b => - { - b.HasOne("PrismaApi.Domain.Entities.DiscreteProbability", "DiscreteProbability") - .WithMany("ParentOutcomes") - .HasForeignKey("DiscreteProbabilityId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Outcome", "ParentOutcome") - .WithMany() - .HasForeignKey("ParentOutcomeId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("DiscreteProbability"); - - b.Navigation("ParentOutcome"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => - { - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Utility", "Utility") - .WithMany("DiscreteUtilities") - .HasForeignKey("UtilityId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.ValueMetric", "ValueMetric") - .WithMany() - .HasForeignKey("ValueMetricId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Project"); - - b.Navigation("Utility"); - - b.Navigation("ValueMetric"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOption", b => - { - b.HasOne("PrismaApi.Domain.Entities.DiscreteUtility", "DiscreteUtility") - .WithMany("ParentOptions") - .HasForeignKey("DiscreteUtilityId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Option", "ParentOption") - .WithMany() - .HasForeignKey("ParentOptionId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("DiscreteUtility"); - - b.Navigation("ParentOption"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOutcome", b => - { - b.HasOne("PrismaApi.Domain.Entities.DiscreteUtility", "DiscreteUtility") - .WithMany("ParentOutcomes") - .HasForeignKey("DiscreteUtilityId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Outcome", "ParentOutcome") - .WithMany() - .HasForeignKey("ParentOutcomeId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("DiscreteUtility"); - - b.Navigation("ParentOutcome"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Edge", b => - { - b.HasOne("PrismaApi.Domain.Entities.Node", "HeadNode") - .WithMany("HeadEdges") - .HasForeignKey("HeadId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("Edges") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Node", "TailNode") - .WithMany("TailEdges") - .HasForeignKey("TailId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("HeadNode"); - - b.Navigation("Project"); - - b.Navigation("TailNode"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => - { - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("Issues") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("Project"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => - { - b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") - .WithOne("Node") - .HasForeignKey("PrismaApi.Domain.Entities.Node", "IssueId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("Nodes") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("Issue"); - - b.Navigation("Project"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.NodeStyle", b => - { - b.HasOne("PrismaApi.Domain.Entities.Node", "Node") - .WithOne("NodeStyle") - .HasForeignKey("PrismaApi.Domain.Entities.NodeStyle", "NodeId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Node"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Objective", b => - { - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("Objectives") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("Project"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => - { - b.HasOne("PrismaApi.Domain.Entities.Decision", "Decision") - .WithMany("Options") - .HasForeignKey("DecisionId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("Decision"); - - b.Navigation("Project"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Outcome", b => - { - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Uncertainty", "Uncertainty") - .WithMany("Outcomes") - .HasForeignKey("UncertaintyId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Project"); - - b.Navigation("Uncertainty"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => - { - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.ProjectRole", b => - { - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("ProjectRoles") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "User") - .WithMany("ProjectRoles") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("Project"); - - b.Navigation("UpdatedBy"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionEntry", b => - { - b.HasOne("PrismaApi.Domain.Entities.Option", "ChildOption") - .WithMany() - .HasForeignKey("ChildOptionId") - .OnDelete(DeleteBehavior.Restrict); - - b.HasOne("PrismaApi.Domain.Entities.Outcome", "ChildOutcome") - .WithMany() - .HasForeignKey("ChildOutcomeId") - .OnDelete(DeleteBehavior.Restrict); - - b.HasOne("PrismaApi.Domain.Entities.Option", "ParentOption") - .WithMany() - .HasForeignKey("ParentOptionId") - .OnDelete(DeleteBehavior.Restrict); - - b.HasOne("PrismaApi.Domain.Entities.Outcome", "ParentOutcome") - .WithMany() - .HasForeignKey("ParentOutcomeId") - .OnDelete(DeleteBehavior.Restrict); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.RestrictionTable", "RestrictionTable") - .WithMany("RestrictionEntries") - .HasForeignKey("RestrictionTableId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("ChildOption"); - - b.Navigation("ChildOutcome"); - - b.Navigation("ParentOption"); - - b.Navigation("ParentOutcome"); - - b.Navigation("Project"); - - b.Navigation("RestrictionTable"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionTable", b => - { - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Edge", "Edge") - .WithOne() - .HasForeignKey("PrismaApi.Domain.Entities.RestrictionTable", "EdgeId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("Edge"); - - b.Navigation("Project"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => - { - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("Strategies") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("Project"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.StrategyOption", b => - { - b.HasOne("PrismaApi.Domain.Entities.Option", "Option") - .WithMany("StrategyOptions") - .HasForeignKey("OptionId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Strategy", "Strategy") - .WithMany("StrategyOptions") - .HasForeignKey("StrategyId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Option"); - - b.Navigation("Strategy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => - { - b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") - .WithOne("Uncertainty") - .HasForeignKey("PrismaApi.Domain.Entities.Uncertainty", "IssueId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("Issue"); - - b.Navigation("Project"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => - { - b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") - .WithOne("Utility") - .HasForeignKey("PrismaApi.Domain.Entities.Utility", "IssueId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("Issue"); - - b.Navigation("Project"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Assessment", b => - { - b.Navigation("DecisionQualityAssessments"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Decision", b => - { - b.Navigation("Options"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbability", b => - { - b.Navigation("ParentOptions"); - - b.Navigation("ParentOutcomes"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => - { - b.Navigation("ParentOptions"); - - b.Navigation("ParentOutcomes"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => - { - b.Navigation("Decision"); - - b.Navigation("Node"); - - b.Navigation("Uncertainty"); - - b.Navigation("Utility"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => - { - b.Navigation("HeadEdges"); - - b.Navigation("NodeStyle"); - - b.Navigation("TailEdges"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => - { - b.Navigation("StrategyOptions"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => - { - b.Navigation("Assessments"); - - b.Navigation("BoardNodes"); - - b.Navigation("Edges"); - - b.Navigation("Issues"); - - b.Navigation("Nodes"); - - b.Navigation("Objectives"); - - b.Navigation("ProjectRoles"); - - b.Navigation("Strategies"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionTable", b => - { - b.Navigation("RestrictionEntries"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => - { - b.Navigation("StrategyOptions"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => - { - b.Navigation("DiscreteProbabilities"); - - b.Navigation("Outcomes"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.User", b => - { - b.Navigation("ProjectRoles"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => - { - b.Navigation("DiscreteUtilities"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/PrismaDotnetApi/SqliteMigrations/20260715095307_AddDeletedUser.cs b/PrismaDotnetApi/SqliteMigrations/20260715095307_AddDeletedUser.cs deleted file mode 100644 index 95eeeb4..0000000 --- a/PrismaDotnetApi/SqliteMigrations/20260715095307_AddDeletedUser.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace PrismaApi.Infrastructure.Migrations -{ - /// - public partial class AddDeletedUser : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.InsertData( - table: "Users", - columns: new[] { "Id", "CreatedAt", "Name", "UpdatedAt" }, - values: new object[] { "d008bfdf-fe89-48f3-80a8-777bba4d9bbf", new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), "Deleted User", new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DeleteData( - table: "Users", - keyColumn: "Id", - keyValue: "d008bfdf-fe89-48f3-80a8-777bba4d9bbf"); - } - } -} diff --git a/PrismaDotnetApi/SqliteMigrations/AppDbContextModelSnapshot.cs b/PrismaDotnetApi/SqliteMigrations/AppDbContextModelSnapshot.cs index 752c53f..39a00d9 100644 --- a/PrismaDotnetApi/SqliteMigrations/AppDbContextModelSnapshot.cs +++ b/PrismaDotnetApi/SqliteMigrations/AppDbContextModelSnapshot.cs @@ -173,7 +173,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ProjectId"); - b.ToTable("Decisions"); + b.ToTable("Decisions", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.DecisionQualityAssessment", b => @@ -271,7 +271,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UncertaintyId"); - b.ToTable("DiscreteProbabilities"); + b.ToTable("DiscreteProbabilities", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOption", b => @@ -286,7 +286,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ParentOptionId"); - b.ToTable("DiscreteProbabilityParentOptions"); + b.ToTable("DiscreteProbabilityParentOptions", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOutcome", b => @@ -301,7 +301,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ParentOutcomeId"); - b.ToTable("DiscreteProbabilityParentOutcomes"); + b.ToTable("DiscreteProbabilityParentOutcomes", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => @@ -337,7 +337,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ValueMetricId"); - b.ToTable("DiscreteUtilities"); + b.ToTable("DiscreteUtilities", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOption", b => @@ -352,7 +352,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ParentOptionId"); - b.ToTable("DiscreteUtilityParentOptions"); + b.ToTable("DiscreteUtilityParentOptions", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOutcome", b => @@ -367,7 +367,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ParentOutcomeId"); - b.ToTable("DiscreteUtilityParentOutcomes"); + b.ToTable("DiscreteUtilityParentOutcomes", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Edge", b => @@ -399,7 +399,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("TailId"); - b.ToTable("Edges"); + b.ToTable("Edges", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => @@ -456,7 +456,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UpdatedById"); - b.ToTable("Issues"); + b.ToTable("Issues", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => @@ -489,7 +489,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ProjectId"); - b.ToTable("Nodes"); + b.ToTable("Nodes", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.NodeStyle", b => @@ -518,7 +518,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("NodeId") .IsUnique(); - b.ToTable("NodeStyles"); + b.ToTable("NodeStyles", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Objective", b => @@ -567,7 +567,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UpdatedById"); - b.ToTable("Objectives"); + b.ToTable("Objectives", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => @@ -602,7 +602,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ProjectId"); - b.ToTable("Options"); + b.ToTable("Options", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Outcome", b => @@ -637,7 +637,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UncertaintyId"); - b.ToTable("Outcomes"); + b.ToTable("Outcomes", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => @@ -689,7 +689,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UpdatedById"); - b.ToTable("Projects"); + b.ToTable("Projects", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.ProjectRole", b => @@ -734,7 +734,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UserId"); - b.ToTable("ProjectRoles"); + b.ToTable("ProjectRoles", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionEntry", b => @@ -800,7 +800,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ParentStateId", "ChildStateId", "RestrictionTableId") .IsUnique(); - b.ToTable("RestrictionEntries", t => + b.ToTable("RestrictionEntries", null, t => { t.HasCheckConstraint("CK_RestrictionEntry_Child", "([ChildOptionId] IS NULL AND [ChildOutcomeId] IS NOT NULL) OR ([ChildOptionId] IS NOT NULL AND [ChildOutcomeId] IS NULL)"); @@ -849,7 +849,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UpdatedById"); - b.ToTable("RestrictionTables"); + b.ToTable("RestrictionTables", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => @@ -906,7 +906,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UpdatedById"); - b.ToTable("Strategies"); + b.ToTable("Strategies", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.StrategyOption", b => @@ -921,7 +921,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("OptionId"); - b.ToTable("StrategyOptions"); + b.ToTable("StrategyOptions", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => @@ -952,7 +952,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ProjectId"); - b.ToTable("Uncertainties"); + b.ToTable("Uncertainties", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.User", b => @@ -973,16 +973,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasKey("Id"); - b.ToTable("Users"); - - b.HasData( - new - { - Id = "d008bfdf-fe89-48f3-80a8-777bba4d9bbf", - CreatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), - Name = "Deleted User", - UpdatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) - }); + b.ToTable("Users", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => @@ -1010,7 +1001,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ProjectId"); - b.ToTable("Utilities"); + b.ToTable("Utilities", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.ValueMetric", b => @@ -1032,7 +1023,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasKey("Id"); - b.ToTable("ValueMetrics"); + b.ToTable("ValueMetrics", (string)null); b.HasData( new From 1018bed6ea521e4d191f13686d42da996bdeabcf Mon Sep 17 00:00:00 2001 From: EinarSalbouvet Date: Wed, 22 Jul 2026 09:35:41 +0200 Subject: [PATCH 08/17] Add migration to insert a deleted user and update table mappings - Created a new migration `AddDeletedUser` to insert a user with the name "Deleted User" into the Users table. - Updated the AppDbContextModelSnapshot to reflect changes in table mappings by removing null parameters from `ToTable` method calls for various entities. --- .../20260722065559_AddDeletedUser.Designer.cs | 1840 +++++++++++++++++ .../20260722065559_AddDeletedUser.cs | 29 + .../AppDbContextModelSnapshot.cs | 57 +- .../20260722065526_AddDeletedUser.Designer.cs | 1835 ++++++++++++++++ .../20260722065526_AddDeletedUser.cs | 29 + .../AppDbContextModelSnapshot.cs | 57 +- 6 files changed, 3799 insertions(+), 48 deletions(-) create mode 100644 PrismaDotnetApi/SqlServerMigrations/20260722065559_AddDeletedUser.Designer.cs create mode 100644 PrismaDotnetApi/SqlServerMigrations/20260722065559_AddDeletedUser.cs create mode 100644 PrismaDotnetApi/SqliteMigrations/20260722065526_AddDeletedUser.Designer.cs create mode 100644 PrismaDotnetApi/SqliteMigrations/20260722065526_AddDeletedUser.cs diff --git a/PrismaDotnetApi/SqlServerMigrations/20260722065559_AddDeletedUser.Designer.cs b/PrismaDotnetApi/SqlServerMigrations/20260722065559_AddDeletedUser.Designer.cs new file mode 100644 index 0000000..a972b04 --- /dev/null +++ b/PrismaDotnetApi/SqlServerMigrations/20260722065559_AddDeletedUser.Designer.cs @@ -0,0 +1,1840 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using PrismaApi.Infrastructure.Context; + +#nullable disable + +namespace PrismaApi.Infrastructure.Migrations +{ + [DbContext(typeof(AppDbContext))] + [Migration("20260722065559_AddDeletedUser")] + partial class AddDeletedUser + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "9.0.13") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Assessment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("IsCompleted") + .HasColumnType("bit"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Assessments", (string)null); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.BoardNode", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("BoardSheetId") + .HasColumnType("uniqueidentifier"); + + b.Property("Color") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Data") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Height") + .HasColumnType("float"); + + b.Property("Opacity") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasDefaultValue(100); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("Rotation") + .HasColumnType("float"); + + b.Property("StrokeStyle") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("nvarchar(max)") + .HasDefaultValue("Solid"); + + b.Property("StrokeWidth") + .ValueGeneratedOnAdd() + .HasColumnType("real") + .HasDefaultValue(8f); + + b.Property("TextSize") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasDefaultValue(24); + + b.Property("Type") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Width") + .HasColumnType("float"); + + b.Property("XPosition") + .HasColumnType("float"); + + b.Property("YPosition") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.HasIndex("BoardSheetId"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("BoardNode", (string)null); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.BoardSheet", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("BoardSheet", (string)null); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Decision", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("IssueId") + .HasColumnType("uniqueidentifier"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.HasKey("Id"); + + b.HasIndex("IssueId") + .IsUnique(); + + b.HasIndex("ProjectId"); + + b.ToTable("Decisions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DecisionQualityAssessment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AppropriateFrame") + .HasColumnType("int"); + + b.Property("AssessmentId") + .HasColumnType("uniqueidentifier"); + + b.Property("Comment") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("nvarchar(max)"); + + b.Property("CommitmentToAction") + .HasColumnType("int"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("DoableAlternatives") + .HasColumnType("int"); + + b.Property("InformationReliability") + .HasColumnType("int"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("ReasoningCorrectness") + .HasColumnType("int"); + + b.Property("TradeOffAnalysis") + .HasColumnType("int"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("AssessmentId"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("DecisionQualityAssessments", (string)null); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbability", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("OutcomeId") + .HasColumnType("uniqueidentifier"); + + b.Property("Probability") + .HasPrecision(53) + .HasColumnType("float(53)"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("UncertaintyId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.HasKey("Id"); + + b.HasIndex("OutcomeId"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UncertaintyId"); + + b.ToTable("DiscreteProbabilities"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOption", b => + { + b.Property("DiscreteProbabilityId") + .HasColumnType("uniqueidentifier"); + + b.Property("ParentOptionId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("DiscreteProbabilityId", "ParentOptionId"); + + b.HasIndex("ParentOptionId"); + + b.ToTable("DiscreteProbabilityParentOptions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOutcome", b => + { + b.Property("DiscreteProbabilityId") + .HasColumnType("uniqueidentifier"); + + b.Property("ParentOutcomeId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("DiscreteProbabilityId", "ParentOutcomeId"); + + b.HasIndex("ParentOutcomeId"); + + b.ToTable("DiscreteProbabilityParentOutcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("UtilityId") + .HasColumnType("uniqueidentifier"); + + b.Property("UtilityValue") + .HasPrecision(53) + .HasColumnType("float(53)"); + + b.Property("ValueMetricId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UtilityId"); + + b.HasIndex("ValueMetricId"); + + b.ToTable("DiscreteUtilities"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOption", b => + { + b.Property("DiscreteUtilityId") + .HasColumnType("uniqueidentifier"); + + b.Property("ParentOptionId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("DiscreteUtilityId", "ParentOptionId"); + + b.HasIndex("ParentOptionId"); + + b.ToTable("DiscreteUtilityParentOptions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOutcome", b => + { + b.Property("DiscreteUtilityId") + .HasColumnType("uniqueidentifier"); + + b.Property("ParentOutcomeId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("DiscreteUtilityId", "ParentOutcomeId"); + + b.HasIndex("ParentOutcomeId"); + + b.ToTable("DiscreteUtilityParentOutcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Edge", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("HeadId") + .HasColumnType("uniqueidentifier"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("TailId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.HasKey("Id"); + + b.HasIndex("HeadId"); + + b.HasIndex("ProjectId"); + + b.HasIndex("TailId"); + + b.ToTable("Edges"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Boundary") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("Order") + .HasColumnType("int"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Issues"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("IssueId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.HasKey("Id"); + + b.HasIndex("IssueId") + .IsUnique(); + + b.HasIndex("ProjectId"); + + b.ToTable("Nodes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.NodeStyle", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("NodeId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("XPosition") + .HasColumnType("float"); + + b.Property("YPosition") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.HasIndex("NodeId") + .IsUnique(); + + b.ToTable("NodeStyles"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Objective", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Objectives"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("DecisionId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Utility") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.HasIndex("DecisionId"); + + b.HasIndex("ProjectId"); + + b.ToTable("Options"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Outcome", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("UncertaintyId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Utility") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UncertaintyId"); + + b.ToTable("Outcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("EndDate") + .HasColumnType("datetimeoffset"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("OpportunityStatement") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("nvarchar(max)"); + + b.Property("ParentProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("ParentProjectName") + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("Public") + .HasColumnType("bit"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Projects"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.ProjectRole", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("Role") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.HasIndex("UserId"); + + b.ToTable("ProjectRoles"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionEntry", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ChildOptionId") + .HasColumnType("uniqueidentifier"); + + b.Property("ChildOutcomeId") + .HasColumnType("uniqueidentifier"); + + b.Property("ChildStateId") + .ValueGeneratedOnAddOrUpdate() + .HasColumnType("uniqueidentifier") + .HasComputedColumnSql("COALESCE([ChildOptionId], [ChildOutcomeId])", true); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("ParentOptionId") + .HasColumnType("uniqueidentifier"); + + b.Property("ParentOutcomeId") + .HasColumnType("uniqueidentifier"); + + b.Property("ParentStateId") + .ValueGeneratedOnAddOrUpdate() + .HasColumnType("uniqueidentifier") + .HasComputedColumnSql("COALESCE([ParentOptionId], [ParentOutcomeId])", true); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("RestrictionTableId") + .HasColumnType("uniqueidentifier"); + + b.Property("RestrictionValue") + .ValueGeneratedOnAdd() + .HasPrecision(53) + .HasColumnType("float(53)") + .HasDefaultValue(1.0); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.HasKey("Id"); + + b.HasIndex("ChildOptionId"); + + b.HasIndex("ChildOutcomeId"); + + b.HasIndex("ParentOptionId"); + + b.HasIndex("ParentOutcomeId"); + + b.HasIndex("ProjectId"); + + b.HasIndex("RestrictionTableId"); + + b.HasIndex("ParentStateId", "ChildStateId", "RestrictionTableId") + .IsUnique(); + + b.ToTable("RestrictionEntries", t => + { + t.HasCheckConstraint("CK_RestrictionEntry_Child", "([ChildOptionId] IS NULL AND [ChildOutcomeId] IS NOT NULL) OR ([ChildOptionId] IS NOT NULL AND [ChildOutcomeId] IS NULL)"); + + t.HasCheckConstraint("CK_RestrictionEntry_Parent", "([ParentOptionId] IS NULL AND [ParentOutcomeId] IS NOT NULL) OR ([ParentOptionId] IS NOT NULL AND [ParentOutcomeId] IS NULL)"); + }); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionTable", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("EdgeId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("EdgeId") + .IsUnique(); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("RestrictionTables"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("nvarchar(max)"); + + b.Property("Icon") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("IconColor") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("Rationale") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("nvarchar(max)"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Strategies"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.StrategyOption", b => + { + b.Property("StrategyId") + .HasColumnType("uniqueidentifier"); + + b.Property("OptionId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("StrategyId", "OptionId"); + + b.HasIndex("OptionId"); + + b.ToTable("StrategyOptions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("IsKey") + .HasColumnType("bit"); + + b.Property("IssueId") + .HasColumnType("uniqueidentifier"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.HasKey("Id"); + + b.HasIndex("IssueId") + .IsUnique(); + + b.HasIndex("ProjectId"); + + b.ToTable("Uncertainties"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.User", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.HasKey("Id"); + + b.ToTable("Users"); + + b.HasData( + new + { + Id = "d008bfdf-fe89-48f3-80a8-777bba4d9bbf", + CreatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), + Name = "Deleted User", + UpdatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) + }); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("IssueId") + .HasColumnType("uniqueidentifier"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.HasKey("Id"); + + b.HasIndex("IssueId") + .IsUnique(); + + b.HasIndex("ProjectId"); + + b.ToTable("Utilities"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.ValueMetric", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.HasKey("Id"); + + b.ToTable("ValueMetrics"); + + b.HasData( + new + { + Id = new Guid("288e0811-7ab6-5d24-b80c-9fa925b848a6"), + CreatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), + Name = "value", + UpdatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) + }); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Assessment", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Assessments") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.BoardNode", b => + { + b.HasOne("PrismaApi.Domain.Entities.BoardSheet", "BoardSheet") + .WithMany() + .HasForeignKey("BoardSheetId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("BoardNodes") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("BoardSheet"); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.BoardSheet", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("BoardSheets") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Decision", b => + { + b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") + .WithOne("Decision") + .HasForeignKey("PrismaApi.Domain.Entities.Decision", "IssueId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Issue"); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DecisionQualityAssessment", b => + { + b.HasOne("PrismaApi.Domain.Entities.Assessment", "Assessment") + .WithMany("DecisionQualityAssessments") + .HasForeignKey("AssessmentId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("Assessment"); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbability", b => + { + b.HasOne("PrismaApi.Domain.Entities.Outcome", "Outcome") + .WithMany() + .HasForeignKey("OutcomeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Uncertainty", "Uncertainty") + .WithMany("DiscreteProbabilities") + .HasForeignKey("UncertaintyId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Outcome"); + + b.Navigation("Project"); + + b.Navigation("Uncertainty"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOption", b => + { + b.HasOne("PrismaApi.Domain.Entities.DiscreteProbability", "DiscreteProbability") + .WithMany("ParentOptions") + .HasForeignKey("DiscreteProbabilityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Option", "ParentOption") + .WithMany() + .HasForeignKey("ParentOptionId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("DiscreteProbability"); + + b.Navigation("ParentOption"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOutcome", b => + { + b.HasOne("PrismaApi.Domain.Entities.DiscreteProbability", "DiscreteProbability") + .WithMany("ParentOutcomes") + .HasForeignKey("DiscreteProbabilityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Outcome", "ParentOutcome") + .WithMany() + .HasForeignKey("ParentOutcomeId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("DiscreteProbability"); + + b.Navigation("ParentOutcome"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => + { + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Utility", "Utility") + .WithMany("DiscreteUtilities") + .HasForeignKey("UtilityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.ValueMetric", "ValueMetric") + .WithMany() + .HasForeignKey("ValueMetricId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Project"); + + b.Navigation("Utility"); + + b.Navigation("ValueMetric"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOption", b => + { + b.HasOne("PrismaApi.Domain.Entities.DiscreteUtility", "DiscreteUtility") + .WithMany("ParentOptions") + .HasForeignKey("DiscreteUtilityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Option", "ParentOption") + .WithMany() + .HasForeignKey("ParentOptionId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("DiscreteUtility"); + + b.Navigation("ParentOption"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOutcome", b => + { + b.HasOne("PrismaApi.Domain.Entities.DiscreteUtility", "DiscreteUtility") + .WithMany("ParentOutcomes") + .HasForeignKey("DiscreteUtilityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Outcome", "ParentOutcome") + .WithMany() + .HasForeignKey("ParentOutcomeId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("DiscreteUtility"); + + b.Navigation("ParentOutcome"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Edge", b => + { + b.HasOne("PrismaApi.Domain.Entities.Node", "HeadNode") + .WithMany("HeadEdges") + .HasForeignKey("HeadId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Edges") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Node", "TailNode") + .WithMany("TailEdges") + .HasForeignKey("TailId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("HeadNode"); + + b.Navigation("Project"); + + b.Navigation("TailNode"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Issues") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => + { + b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") + .WithOne("Node") + .HasForeignKey("PrismaApi.Domain.Entities.Node", "IssueId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Nodes") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Issue"); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.NodeStyle", b => + { + b.HasOne("PrismaApi.Domain.Entities.Node", "Node") + .WithOne("NodeStyle") + .HasForeignKey("PrismaApi.Domain.Entities.NodeStyle", "NodeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Node"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Objective", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Objectives") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => + { + b.HasOne("PrismaApi.Domain.Entities.Decision", "Decision") + .WithMany("Options") + .HasForeignKey("DecisionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Decision"); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Outcome", b => + { + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Uncertainty", "Uncertainty") + .WithMany("Outcomes") + .HasForeignKey("UncertaintyId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Project"); + + b.Navigation("Uncertainty"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.ProjectRole", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("ProjectRoles") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "User") + .WithMany("ProjectRoles") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionEntry", b => + { + b.HasOne("PrismaApi.Domain.Entities.Option", "ChildOption") + .WithMany() + .HasForeignKey("ChildOptionId") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("PrismaApi.Domain.Entities.Outcome", "ChildOutcome") + .WithMany() + .HasForeignKey("ChildOutcomeId") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("PrismaApi.Domain.Entities.Option", "ParentOption") + .WithMany() + .HasForeignKey("ParentOptionId") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("PrismaApi.Domain.Entities.Outcome", "ParentOutcome") + .WithMany() + .HasForeignKey("ParentOutcomeId") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.RestrictionTable", "RestrictionTable") + .WithMany("RestrictionEntries") + .HasForeignKey("RestrictionTableId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ChildOption"); + + b.Navigation("ChildOutcome"); + + b.Navigation("ParentOption"); + + b.Navigation("ParentOutcome"); + + b.Navigation("Project"); + + b.Navigation("RestrictionTable"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionTable", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Edge", "Edge") + .WithOne() + .HasForeignKey("PrismaApi.Domain.Entities.RestrictionTable", "EdgeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Edge"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Strategies") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.StrategyOption", b => + { + b.HasOne("PrismaApi.Domain.Entities.Option", "Option") + .WithMany("StrategyOptions") + .HasForeignKey("OptionId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Strategy", "Strategy") + .WithMany("StrategyOptions") + .HasForeignKey("StrategyId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Option"); + + b.Navigation("Strategy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => + { + b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") + .WithOne("Uncertainty") + .HasForeignKey("PrismaApi.Domain.Entities.Uncertainty", "IssueId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Issue"); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => + { + b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") + .WithOne("Utility") + .HasForeignKey("PrismaApi.Domain.Entities.Utility", "IssueId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Issue"); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Assessment", b => + { + b.Navigation("DecisionQualityAssessments"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Decision", b => + { + b.Navigation("Options"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbability", b => + { + b.Navigation("ParentOptions"); + + b.Navigation("ParentOutcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => + { + b.Navigation("ParentOptions"); + + b.Navigation("ParentOutcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => + { + b.Navigation("Decision"); + + b.Navigation("Node"); + + b.Navigation("Uncertainty"); + + b.Navigation("Utility"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => + { + b.Navigation("HeadEdges"); + + b.Navigation("NodeStyle"); + + b.Navigation("TailEdges"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => + { + b.Navigation("StrategyOptions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => + { + b.Navigation("Assessments"); + + b.Navigation("BoardNodes"); + + b.Navigation("BoardSheets"); + + b.Navigation("Edges"); + + b.Navigation("Issues"); + + b.Navigation("Nodes"); + + b.Navigation("Objectives"); + + b.Navigation("ProjectRoles"); + + b.Navigation("Strategies"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionTable", b => + { + b.Navigation("RestrictionEntries"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => + { + b.Navigation("StrategyOptions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => + { + b.Navigation("DiscreteProbabilities"); + + b.Navigation("Outcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.User", b => + { + b.Navigation("ProjectRoles"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => + { + b.Navigation("DiscreteUtilities"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/PrismaDotnetApi/SqlServerMigrations/20260722065559_AddDeletedUser.cs b/PrismaDotnetApi/SqlServerMigrations/20260722065559_AddDeletedUser.cs new file mode 100644 index 0000000..95eeeb4 --- /dev/null +++ b/PrismaDotnetApi/SqlServerMigrations/20260722065559_AddDeletedUser.cs @@ -0,0 +1,29 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace PrismaApi.Infrastructure.Migrations +{ + /// + public partial class AddDeletedUser : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.InsertData( + table: "Users", + columns: new[] { "Id", "CreatedAt", "Name", "UpdatedAt" }, + values: new object[] { "d008bfdf-fe89-48f3-80a8-777bba4d9bbf", new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), "Deleted User", new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) }); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DeleteData( + table: "Users", + keyColumn: "Id", + keyValue: "d008bfdf-fe89-48f3-80a8-777bba4d9bbf"); + } + } +} diff --git a/PrismaDotnetApi/SqlServerMigrations/AppDbContextModelSnapshot.cs b/PrismaDotnetApi/SqlServerMigrations/AppDbContextModelSnapshot.cs index af8484d..dd27e9e 100644 --- a/PrismaDotnetApi/SqlServerMigrations/AppDbContextModelSnapshot.cs +++ b/PrismaDotnetApi/SqlServerMigrations/AppDbContextModelSnapshot.cs @@ -222,7 +222,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ProjectId"); - b.ToTable("Decisions", (string)null); + b.ToTable("Decisions"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.DecisionQualityAssessment", b => @@ -320,7 +320,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UncertaintyId"); - b.ToTable("DiscreteProbabilities", (string)null); + b.ToTable("DiscreteProbabilities"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOption", b => @@ -335,7 +335,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ParentOptionId"); - b.ToTable("DiscreteProbabilityParentOptions", (string)null); + b.ToTable("DiscreteProbabilityParentOptions"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOutcome", b => @@ -350,7 +350,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ParentOutcomeId"); - b.ToTable("DiscreteProbabilityParentOutcomes", (string)null); + b.ToTable("DiscreteProbabilityParentOutcomes"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => @@ -386,7 +386,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ValueMetricId"); - b.ToTable("DiscreteUtilities", (string)null); + b.ToTable("DiscreteUtilities"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOption", b => @@ -401,7 +401,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ParentOptionId"); - b.ToTable("DiscreteUtilityParentOptions", (string)null); + b.ToTable("DiscreteUtilityParentOptions"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOutcome", b => @@ -416,7 +416,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ParentOutcomeId"); - b.ToTable("DiscreteUtilityParentOutcomes", (string)null); + b.ToTable("DiscreteUtilityParentOutcomes"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Edge", b => @@ -448,7 +448,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("TailId"); - b.ToTable("Edges", (string)null); + b.ToTable("Edges"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => @@ -505,7 +505,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UpdatedById"); - b.ToTable("Issues", (string)null); + b.ToTable("Issues"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => @@ -538,7 +538,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ProjectId"); - b.ToTable("Nodes", (string)null); + b.ToTable("Nodes"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.NodeStyle", b => @@ -567,7 +567,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("NodeId") .IsUnique(); - b.ToTable("NodeStyles", (string)null); + b.ToTable("NodeStyles"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Objective", b => @@ -616,7 +616,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UpdatedById"); - b.ToTable("Objectives", (string)null); + b.ToTable("Objectives"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => @@ -651,7 +651,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ProjectId"); - b.ToTable("Options", (string)null); + b.ToTable("Options"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Outcome", b => @@ -686,7 +686,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UncertaintyId"); - b.ToTable("Outcomes", (string)null); + b.ToTable("Outcomes"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => @@ -738,7 +738,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UpdatedById"); - b.ToTable("Projects", (string)null); + b.ToTable("Projects"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.ProjectRole", b => @@ -783,7 +783,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UserId"); - b.ToTable("ProjectRoles", (string)null); + b.ToTable("ProjectRoles"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionEntry", b => @@ -849,7 +849,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ParentStateId", "ChildStateId", "RestrictionTableId") .IsUnique(); - b.ToTable("RestrictionEntries", null, t => + b.ToTable("RestrictionEntries", t => { t.HasCheckConstraint("CK_RestrictionEntry_Child", "([ChildOptionId] IS NULL AND [ChildOutcomeId] IS NOT NULL) OR ([ChildOptionId] IS NOT NULL AND [ChildOutcomeId] IS NULL)"); @@ -898,7 +898,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UpdatedById"); - b.ToTable("RestrictionTables", (string)null); + b.ToTable("RestrictionTables"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => @@ -955,7 +955,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UpdatedById"); - b.ToTable("Strategies", (string)null); + b.ToTable("Strategies"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.StrategyOption", b => @@ -970,7 +970,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("OptionId"); - b.ToTable("StrategyOptions", (string)null); + b.ToTable("StrategyOptions"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => @@ -1001,7 +1001,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ProjectId"); - b.ToTable("Uncertainties", (string)null); + b.ToTable("Uncertainties"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.User", b => @@ -1022,7 +1022,16 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasKey("Id"); - b.ToTable("Users", (string)null); + b.ToTable("Users"); + + b.HasData( + new + { + Id = "d008bfdf-fe89-48f3-80a8-777bba4d9bbf", + CreatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), + Name = "Deleted User", + UpdatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) + }); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => @@ -1050,7 +1059,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ProjectId"); - b.ToTable("Utilities", (string)null); + b.ToTable("Utilities"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.ValueMetric", b => @@ -1072,7 +1081,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasKey("Id"); - b.ToTable("ValueMetrics", (string)null); + b.ToTable("ValueMetrics"); b.HasData( new diff --git a/PrismaDotnetApi/SqliteMigrations/20260722065526_AddDeletedUser.Designer.cs b/PrismaDotnetApi/SqliteMigrations/20260722065526_AddDeletedUser.Designer.cs new file mode 100644 index 0000000..07e355a --- /dev/null +++ b/PrismaDotnetApi/SqliteMigrations/20260722065526_AddDeletedUser.Designer.cs @@ -0,0 +1,1835 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using PrismaApi.Infrastructure.Context; + +#nullable disable + +namespace PrismaApi.Infrastructure.Migrations +{ + [DbContext(typeof(AppDbContext))] + [Migration("20260722065526_AddDeletedUser")] + partial class AddDeletedUser + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "9.0.13"); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Assessment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("IsCompleted") + .HasColumnType("INTEGER"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Assessments", (string)null); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.BoardNode", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("BoardSheetId") + .HasColumnType("TEXT"); + + b.Property("Color") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Data") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Height") + .HasColumnType("REAL"); + + b.Property("Opacity") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasDefaultValue(100); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("Rotation") + .HasColumnType("REAL"); + + b.Property("StrokeStyle") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("TEXT") + .HasDefaultValue("Solid"); + + b.Property("StrokeWidth") + .ValueGeneratedOnAdd() + .HasColumnType("REAL") + .HasDefaultValue(8f); + + b.Property("TextSize") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasDefaultValue(24); + + b.Property("Type") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Width") + .HasColumnType("REAL"); + + b.Property("XPosition") + .HasColumnType("REAL"); + + b.Property("YPosition") + .HasColumnType("REAL"); + + b.HasKey("Id"); + + b.HasIndex("BoardSheetId"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("BoardNode", (string)null); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.BoardSheet", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("BoardSheet", (string)null); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Decision", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("IssueId") + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("IssueId") + .IsUnique(); + + b.HasIndex("ProjectId"); + + b.ToTable("Decisions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DecisionQualityAssessment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("AppropriateFrame") + .HasColumnType("INTEGER"); + + b.Property("AssessmentId") + .HasColumnType("TEXT"); + + b.Property("Comment") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("TEXT"); + + b.Property("CommitmentToAction") + .HasColumnType("INTEGER"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("DoableAlternatives") + .HasColumnType("INTEGER"); + + b.Property("InformationReliability") + .HasColumnType("INTEGER"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("ReasoningCorrectness") + .HasColumnType("INTEGER"); + + b.Property("TradeOffAnalysis") + .HasColumnType("INTEGER"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("AssessmentId"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("DecisionQualityAssessments", (string)null); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbability", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("OutcomeId") + .HasColumnType("TEXT"); + + b.Property("Probability") + .HasPrecision(53) + .HasColumnType("REAL"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("UncertaintyId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("OutcomeId"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UncertaintyId"); + + b.ToTable("DiscreteProbabilities"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOption", b => + { + b.Property("DiscreteProbabilityId") + .HasColumnType("TEXT"); + + b.Property("ParentOptionId") + .HasColumnType("TEXT"); + + b.HasKey("DiscreteProbabilityId", "ParentOptionId"); + + b.HasIndex("ParentOptionId"); + + b.ToTable("DiscreteProbabilityParentOptions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOutcome", b => + { + b.Property("DiscreteProbabilityId") + .HasColumnType("TEXT"); + + b.Property("ParentOutcomeId") + .HasColumnType("TEXT"); + + b.HasKey("DiscreteProbabilityId", "ParentOutcomeId"); + + b.HasIndex("ParentOutcomeId"); + + b.ToTable("DiscreteProbabilityParentOutcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("UtilityId") + .HasColumnType("TEXT"); + + b.Property("UtilityValue") + .HasPrecision(53) + .HasColumnType("REAL"); + + b.Property("ValueMetricId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UtilityId"); + + b.HasIndex("ValueMetricId"); + + b.ToTable("DiscreteUtilities"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOption", b => + { + b.Property("DiscreteUtilityId") + .HasColumnType("TEXT"); + + b.Property("ParentOptionId") + .HasColumnType("TEXT"); + + b.HasKey("DiscreteUtilityId", "ParentOptionId"); + + b.HasIndex("ParentOptionId"); + + b.ToTable("DiscreteUtilityParentOptions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOutcome", b => + { + b.Property("DiscreteUtilityId") + .HasColumnType("TEXT"); + + b.Property("ParentOutcomeId") + .HasColumnType("TEXT"); + + b.HasKey("DiscreteUtilityId", "ParentOutcomeId"); + + b.HasIndex("ParentOutcomeId"); + + b.ToTable("DiscreteUtilityParentOutcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Edge", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("HeadId") + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("TailId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("HeadId"); + + b.HasIndex("ProjectId"); + + b.HasIndex("TailId"); + + b.ToTable("Edges"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("Boundary") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("Order") + .HasColumnType("INTEGER"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Issues"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("IssueId") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("IssueId") + .IsUnique(); + + b.HasIndex("ProjectId"); + + b.ToTable("Nodes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.NodeStyle", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("NodeId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("XPosition") + .HasColumnType("REAL"); + + b.Property("YPosition") + .HasColumnType("REAL"); + + b.HasKey("Id"); + + b.HasIndex("NodeId") + .IsUnique(); + + b.ToTable("NodeStyles"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Objective", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Objectives"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("DecisionId") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("Utility") + .HasColumnType("REAL"); + + b.HasKey("Id"); + + b.HasIndex("DecisionId"); + + b.HasIndex("ProjectId"); + + b.ToTable("Options"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Outcome", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("UncertaintyId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("Utility") + .HasColumnType("REAL"); + + b.HasKey("Id"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UncertaintyId"); + + b.ToTable("Outcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("EndDate") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("OpportunityStatement") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("TEXT"); + + b.Property("ParentProjectId") + .HasColumnType("TEXT"); + + b.Property("ParentProjectName") + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("Public") + .HasColumnType("INTEGER"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Projects"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.ProjectRole", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("Role") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.HasIndex("UserId"); + + b.ToTable("ProjectRoles"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionEntry", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("ChildOptionId") + .HasColumnType("TEXT"); + + b.Property("ChildOutcomeId") + .HasColumnType("TEXT"); + + b.Property("ChildStateId") + .ValueGeneratedOnAddOrUpdate() + .HasColumnType("TEXT") + .HasComputedColumnSql("COALESCE([ChildOptionId], [ChildOutcomeId])", true); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("ParentOptionId") + .HasColumnType("TEXT"); + + b.Property("ParentOutcomeId") + .HasColumnType("TEXT"); + + b.Property("ParentStateId") + .ValueGeneratedOnAddOrUpdate() + .HasColumnType("TEXT") + .HasComputedColumnSql("COALESCE([ParentOptionId], [ParentOutcomeId])", true); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("RestrictionTableId") + .HasColumnType("TEXT"); + + b.Property("RestrictionValue") + .ValueGeneratedOnAdd() + .HasPrecision(53) + .HasColumnType("REAL") + .HasDefaultValue(1.0); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("ChildOptionId"); + + b.HasIndex("ChildOutcomeId"); + + b.HasIndex("ParentOptionId"); + + b.HasIndex("ParentOutcomeId"); + + b.HasIndex("ProjectId"); + + b.HasIndex("RestrictionTableId"); + + b.HasIndex("ParentStateId", "ChildStateId", "RestrictionTableId") + .IsUnique(); + + b.ToTable("RestrictionEntries", t => + { + t.HasCheckConstraint("CK_RestrictionEntry_Child", "([ChildOptionId] IS NULL AND [ChildOutcomeId] IS NOT NULL) OR ([ChildOptionId] IS NOT NULL AND [ChildOutcomeId] IS NULL)"); + + t.HasCheckConstraint("CK_RestrictionEntry_Parent", "([ParentOptionId] IS NULL AND [ParentOutcomeId] IS NOT NULL) OR ([ParentOptionId] IS NOT NULL AND [ParentOutcomeId] IS NULL)"); + }); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionTable", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("EdgeId") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("EdgeId") + .IsUnique(); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("RestrictionTables"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("TEXT"); + + b.Property("Icon") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("IconColor") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("Rationale") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Strategies"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.StrategyOption", b => + { + b.Property("StrategyId") + .HasColumnType("TEXT"); + + b.Property("OptionId") + .HasColumnType("TEXT"); + + b.HasKey("StrategyId", "OptionId"); + + b.HasIndex("OptionId"); + + b.ToTable("StrategyOptions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("IsKey") + .HasColumnType("INTEGER"); + + b.Property("IssueId") + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("IssueId") + .IsUnique(); + + b.HasIndex("ProjectId"); + + b.ToTable("Uncertainties"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.User", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.ToTable("Users"); + + b.HasData( + new + { + Id = "d008bfdf-fe89-48f3-80a8-777bba4d9bbf", + CreatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), + Name = "Deleted User", + UpdatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) + }); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("IssueId") + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("IssueId") + .IsUnique(); + + b.HasIndex("ProjectId"); + + b.ToTable("Utilities"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.ValueMetric", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.ToTable("ValueMetrics"); + + b.HasData( + new + { + Id = new Guid("288e0811-7ab6-5d24-b80c-9fa925b848a6"), + CreatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), + Name = "value", + UpdatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) + }); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Assessment", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Assessments") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.BoardNode", b => + { + b.HasOne("PrismaApi.Domain.Entities.BoardSheet", "BoardSheet") + .WithMany() + .HasForeignKey("BoardSheetId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("BoardNodes") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("BoardSheet"); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.BoardSheet", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("BoardSheets") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Decision", b => + { + b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") + .WithOne("Decision") + .HasForeignKey("PrismaApi.Domain.Entities.Decision", "IssueId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Issue"); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DecisionQualityAssessment", b => + { + b.HasOne("PrismaApi.Domain.Entities.Assessment", "Assessment") + .WithMany("DecisionQualityAssessments") + .HasForeignKey("AssessmentId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("Assessment"); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbability", b => + { + b.HasOne("PrismaApi.Domain.Entities.Outcome", "Outcome") + .WithMany() + .HasForeignKey("OutcomeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Uncertainty", "Uncertainty") + .WithMany("DiscreteProbabilities") + .HasForeignKey("UncertaintyId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Outcome"); + + b.Navigation("Project"); + + b.Navigation("Uncertainty"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOption", b => + { + b.HasOne("PrismaApi.Domain.Entities.DiscreteProbability", "DiscreteProbability") + .WithMany("ParentOptions") + .HasForeignKey("DiscreteProbabilityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Option", "ParentOption") + .WithMany() + .HasForeignKey("ParentOptionId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("DiscreteProbability"); + + b.Navigation("ParentOption"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOutcome", b => + { + b.HasOne("PrismaApi.Domain.Entities.DiscreteProbability", "DiscreteProbability") + .WithMany("ParentOutcomes") + .HasForeignKey("DiscreteProbabilityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Outcome", "ParentOutcome") + .WithMany() + .HasForeignKey("ParentOutcomeId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("DiscreteProbability"); + + b.Navigation("ParentOutcome"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => + { + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Utility", "Utility") + .WithMany("DiscreteUtilities") + .HasForeignKey("UtilityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.ValueMetric", "ValueMetric") + .WithMany() + .HasForeignKey("ValueMetricId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Project"); + + b.Navigation("Utility"); + + b.Navigation("ValueMetric"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOption", b => + { + b.HasOne("PrismaApi.Domain.Entities.DiscreteUtility", "DiscreteUtility") + .WithMany("ParentOptions") + .HasForeignKey("DiscreteUtilityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Option", "ParentOption") + .WithMany() + .HasForeignKey("ParentOptionId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("DiscreteUtility"); + + b.Navigation("ParentOption"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOutcome", b => + { + b.HasOne("PrismaApi.Domain.Entities.DiscreteUtility", "DiscreteUtility") + .WithMany("ParentOutcomes") + .HasForeignKey("DiscreteUtilityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Outcome", "ParentOutcome") + .WithMany() + .HasForeignKey("ParentOutcomeId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("DiscreteUtility"); + + b.Navigation("ParentOutcome"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Edge", b => + { + b.HasOne("PrismaApi.Domain.Entities.Node", "HeadNode") + .WithMany("HeadEdges") + .HasForeignKey("HeadId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Edges") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Node", "TailNode") + .WithMany("TailEdges") + .HasForeignKey("TailId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("HeadNode"); + + b.Navigation("Project"); + + b.Navigation("TailNode"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Issues") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => + { + b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") + .WithOne("Node") + .HasForeignKey("PrismaApi.Domain.Entities.Node", "IssueId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Nodes") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Issue"); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.NodeStyle", b => + { + b.HasOne("PrismaApi.Domain.Entities.Node", "Node") + .WithOne("NodeStyle") + .HasForeignKey("PrismaApi.Domain.Entities.NodeStyle", "NodeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Node"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Objective", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Objectives") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => + { + b.HasOne("PrismaApi.Domain.Entities.Decision", "Decision") + .WithMany("Options") + .HasForeignKey("DecisionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Decision"); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Outcome", b => + { + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Uncertainty", "Uncertainty") + .WithMany("Outcomes") + .HasForeignKey("UncertaintyId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Project"); + + b.Navigation("Uncertainty"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.ProjectRole", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("ProjectRoles") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "User") + .WithMany("ProjectRoles") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionEntry", b => + { + b.HasOne("PrismaApi.Domain.Entities.Option", "ChildOption") + .WithMany() + .HasForeignKey("ChildOptionId") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("PrismaApi.Domain.Entities.Outcome", "ChildOutcome") + .WithMany() + .HasForeignKey("ChildOutcomeId") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("PrismaApi.Domain.Entities.Option", "ParentOption") + .WithMany() + .HasForeignKey("ParentOptionId") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("PrismaApi.Domain.Entities.Outcome", "ParentOutcome") + .WithMany() + .HasForeignKey("ParentOutcomeId") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.RestrictionTable", "RestrictionTable") + .WithMany("RestrictionEntries") + .HasForeignKey("RestrictionTableId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ChildOption"); + + b.Navigation("ChildOutcome"); + + b.Navigation("ParentOption"); + + b.Navigation("ParentOutcome"); + + b.Navigation("Project"); + + b.Navigation("RestrictionTable"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionTable", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Edge", "Edge") + .WithOne() + .HasForeignKey("PrismaApi.Domain.Entities.RestrictionTable", "EdgeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Edge"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Strategies") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.StrategyOption", b => + { + b.HasOne("PrismaApi.Domain.Entities.Option", "Option") + .WithMany("StrategyOptions") + .HasForeignKey("OptionId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Strategy", "Strategy") + .WithMany("StrategyOptions") + .HasForeignKey("StrategyId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Option"); + + b.Navigation("Strategy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => + { + b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") + .WithOne("Uncertainty") + .HasForeignKey("PrismaApi.Domain.Entities.Uncertainty", "IssueId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Issue"); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => + { + b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") + .WithOne("Utility") + .HasForeignKey("PrismaApi.Domain.Entities.Utility", "IssueId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Issue"); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Assessment", b => + { + b.Navigation("DecisionQualityAssessments"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Decision", b => + { + b.Navigation("Options"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbability", b => + { + b.Navigation("ParentOptions"); + + b.Navigation("ParentOutcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => + { + b.Navigation("ParentOptions"); + + b.Navigation("ParentOutcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => + { + b.Navigation("Decision"); + + b.Navigation("Node"); + + b.Navigation("Uncertainty"); + + b.Navigation("Utility"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => + { + b.Navigation("HeadEdges"); + + b.Navigation("NodeStyle"); + + b.Navigation("TailEdges"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => + { + b.Navigation("StrategyOptions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => + { + b.Navigation("Assessments"); + + b.Navigation("BoardNodes"); + + b.Navigation("BoardSheets"); + + b.Navigation("Edges"); + + b.Navigation("Issues"); + + b.Navigation("Nodes"); + + b.Navigation("Objectives"); + + b.Navigation("ProjectRoles"); + + b.Navigation("Strategies"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionTable", b => + { + b.Navigation("RestrictionEntries"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => + { + b.Navigation("StrategyOptions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => + { + b.Navigation("DiscreteProbabilities"); + + b.Navigation("Outcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.User", b => + { + b.Navigation("ProjectRoles"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => + { + b.Navigation("DiscreteUtilities"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/PrismaDotnetApi/SqliteMigrations/20260722065526_AddDeletedUser.cs b/PrismaDotnetApi/SqliteMigrations/20260722065526_AddDeletedUser.cs new file mode 100644 index 0000000..95eeeb4 --- /dev/null +++ b/PrismaDotnetApi/SqliteMigrations/20260722065526_AddDeletedUser.cs @@ -0,0 +1,29 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace PrismaApi.Infrastructure.Migrations +{ + /// + public partial class AddDeletedUser : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.InsertData( + table: "Users", + columns: new[] { "Id", "CreatedAt", "Name", "UpdatedAt" }, + values: new object[] { "d008bfdf-fe89-48f3-80a8-777bba4d9bbf", new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), "Deleted User", new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) }); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DeleteData( + table: "Users", + keyColumn: "Id", + keyValue: "d008bfdf-fe89-48f3-80a8-777bba4d9bbf"); + } + } +} diff --git a/PrismaDotnetApi/SqliteMigrations/AppDbContextModelSnapshot.cs b/PrismaDotnetApi/SqliteMigrations/AppDbContextModelSnapshot.cs index 182e3f7..b47dd08 100644 --- a/PrismaDotnetApi/SqliteMigrations/AppDbContextModelSnapshot.cs +++ b/PrismaDotnetApi/SqliteMigrations/AppDbContextModelSnapshot.cs @@ -217,7 +217,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ProjectId"); - b.ToTable("Decisions", (string)null); + b.ToTable("Decisions"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.DecisionQualityAssessment", b => @@ -315,7 +315,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UncertaintyId"); - b.ToTable("DiscreteProbabilities", (string)null); + b.ToTable("DiscreteProbabilities"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOption", b => @@ -330,7 +330,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ParentOptionId"); - b.ToTable("DiscreteProbabilityParentOptions", (string)null); + b.ToTable("DiscreteProbabilityParentOptions"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOutcome", b => @@ -345,7 +345,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ParentOutcomeId"); - b.ToTable("DiscreteProbabilityParentOutcomes", (string)null); + b.ToTable("DiscreteProbabilityParentOutcomes"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => @@ -381,7 +381,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ValueMetricId"); - b.ToTable("DiscreteUtilities", (string)null); + b.ToTable("DiscreteUtilities"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOption", b => @@ -396,7 +396,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ParentOptionId"); - b.ToTable("DiscreteUtilityParentOptions", (string)null); + b.ToTable("DiscreteUtilityParentOptions"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOutcome", b => @@ -411,7 +411,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ParentOutcomeId"); - b.ToTable("DiscreteUtilityParentOutcomes", (string)null); + b.ToTable("DiscreteUtilityParentOutcomes"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Edge", b => @@ -443,7 +443,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("TailId"); - b.ToTable("Edges", (string)null); + b.ToTable("Edges"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => @@ -500,7 +500,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UpdatedById"); - b.ToTable("Issues", (string)null); + b.ToTable("Issues"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => @@ -533,7 +533,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ProjectId"); - b.ToTable("Nodes", (string)null); + b.ToTable("Nodes"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.NodeStyle", b => @@ -562,7 +562,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("NodeId") .IsUnique(); - b.ToTable("NodeStyles", (string)null); + b.ToTable("NodeStyles"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Objective", b => @@ -611,7 +611,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UpdatedById"); - b.ToTable("Objectives", (string)null); + b.ToTable("Objectives"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => @@ -646,7 +646,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ProjectId"); - b.ToTable("Options", (string)null); + b.ToTable("Options"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Outcome", b => @@ -681,7 +681,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UncertaintyId"); - b.ToTable("Outcomes", (string)null); + b.ToTable("Outcomes"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => @@ -733,7 +733,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UpdatedById"); - b.ToTable("Projects", (string)null); + b.ToTable("Projects"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.ProjectRole", b => @@ -778,7 +778,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UserId"); - b.ToTable("ProjectRoles", (string)null); + b.ToTable("ProjectRoles"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionEntry", b => @@ -844,7 +844,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ParentStateId", "ChildStateId", "RestrictionTableId") .IsUnique(); - b.ToTable("RestrictionEntries", null, t => + b.ToTable("RestrictionEntries", t => { t.HasCheckConstraint("CK_RestrictionEntry_Child", "([ChildOptionId] IS NULL AND [ChildOutcomeId] IS NOT NULL) OR ([ChildOptionId] IS NOT NULL AND [ChildOutcomeId] IS NULL)"); @@ -893,7 +893,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UpdatedById"); - b.ToTable("RestrictionTables", (string)null); + b.ToTable("RestrictionTables"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => @@ -950,7 +950,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UpdatedById"); - b.ToTable("Strategies", (string)null); + b.ToTable("Strategies"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.StrategyOption", b => @@ -965,7 +965,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("OptionId"); - b.ToTable("StrategyOptions", (string)null); + b.ToTable("StrategyOptions"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => @@ -996,7 +996,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ProjectId"); - b.ToTable("Uncertainties", (string)null); + b.ToTable("Uncertainties"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.User", b => @@ -1017,7 +1017,16 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasKey("Id"); - b.ToTable("Users", (string)null); + b.ToTable("Users"); + + b.HasData( + new + { + Id = "d008bfdf-fe89-48f3-80a8-777bba4d9bbf", + CreatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), + Name = "Deleted User", + UpdatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) + }); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => @@ -1045,7 +1054,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ProjectId"); - b.ToTable("Utilities", (string)null); + b.ToTable("Utilities"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.ValueMetric", b => @@ -1067,7 +1076,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasKey("Id"); - b.ToTable("ValueMetrics", (string)null); + b.ToTable("ValueMetrics"); b.HasData( new From 621d46b97aa866a665434b013abe9fdea9eb905e Mon Sep 17 00:00:00 2001 From: EinarSalbouvet Date: Mon, 8 Jun 2026 14:34:36 +0200 Subject: [PATCH 09/17] Add migration to insert a deleted user into the Users table - Created a new migration `AddDeletedUser` to insert a user with ID "d008bfdf-fe89-48f3-80a8-777bba4d9bbf" named "Deleted User" into the Users table. - Updated the `AppDbContextModelSnapshot` to reflect the new user data. - Implemented the `Down` method to remove the user if the migration is rolled back. --- .../Controllers/UsersController.cs | 13 + .../Interfaces/Services/IUserService.cs | 1 + .../Repositories/UserRepository.cs | 75 + .../Services/UserService.cs | 10 + .../Constants/DomainConstants.cs | 3 + .../PrismaApi.Domain/Entities/User.cs | 7 + .../Context/AppDbContextFactory.cs | 3 +- .../PrismaApi.Test/Mocks/TestUserService.cs | 10 + .../20260608114526_AddDeletedUser.Designer.cs | 1557 +++++++++++++++++ .../20260608114526_AddDeletedUser.cs | 29 + .../AppDbContextModelSnapshot.cs | 9 + .../20260608114505_AddDeletedUser.Designer.cs | 1552 ++++++++++++++++ .../20260608114505_AddDeletedUser.cs | 29 + .../AppDbContextModelSnapshot.cs | 9 + 14 files changed, 3306 insertions(+), 1 deletion(-) create mode 100644 PrismaDotnetApi/SqlServerMigrations/20260608114526_AddDeletedUser.Designer.cs create mode 100644 PrismaDotnetApi/SqlServerMigrations/20260608114526_AddDeletedUser.cs create mode 100644 PrismaDotnetApi/SqliteMigrations/20260608114505_AddDeletedUser.Designer.cs create mode 100644 PrismaDotnetApi/SqliteMigrations/20260608114505_AddDeletedUser.cs diff --git a/PrismaDotnetApi/PrismaApi.Api/Controllers/UsersController.cs b/PrismaDotnetApi/PrismaApi.Api/Controllers/UsersController.cs index 4a25ad4..920376c 100644 --- a/PrismaDotnetApi/PrismaApi.Api/Controllers/UsersController.cs +++ b/PrismaDotnetApi/PrismaApi.Api/Controllers/UsersController.cs @@ -61,4 +61,17 @@ public IActionResult AuthPlaceholder(CancellationToken ct = default) { return StatusCode(StatusCodes.Status501NotImplemented); } + + [HttpDelete("users/{userId}")] + // + // Deletes a user. Users can only delete themselves, and the user will be anonymized in the database, but the record will not be deleted for audit purposes. + // + // Thrown when a user attempts to delete a different user. + public async Task DeleteUser([FromRoute] string userId, CancellationToken ct = default) + { + var user = HttpContext.GetLoadedUser(); + + await _userService.DeleteUserAsync(userId, user, ct); + return NoContent(); + } } diff --git a/PrismaDotnetApi/PrismaApi.Application/Interfaces/Services/IUserService.cs b/PrismaDotnetApi/PrismaApi.Application/Interfaces/Services/IUserService.cs index 6d88cd2..2727cd7 100644 --- a/PrismaDotnetApi/PrismaApi.Application/Interfaces/Services/IUserService.cs +++ b/PrismaDotnetApi/PrismaApi.Application/Interfaces/Services/IUserService.cs @@ -9,4 +9,5 @@ public interface IUserService Task> SearchUsersAsync(string query); Task GetOrCreateUserFromContextAsync(HttpContext context); Task> GetByIdsAsync(IEnumerable ids); + Task DeleteUserAsync(string userId, UserOutgoingDto user, CancellationToken ct = default); } diff --git a/PrismaDotnetApi/PrismaApi.Application/Repositories/UserRepository.cs b/PrismaDotnetApi/PrismaApi.Application/Repositories/UserRepository.cs index 3bd33a0..c2bab3c 100644 --- a/PrismaDotnetApi/PrismaApi.Application/Repositories/UserRepository.cs +++ b/PrismaDotnetApi/PrismaApi.Application/Repositories/UserRepository.cs @@ -1,6 +1,8 @@ using Microsoft.EntityFrameworkCore; +using Microsoft.Graph.IdentityGovernance.EntitlementManagement.Assignments.AdditionalAccessWithAccessPackageIdWithIncompatibleAccessPackageId; using PrismaApi.Application.Interfaces.Repositories; using PrismaApi.Application.Mapping; +using PrismaApi.Domain.Constants; using PrismaApi.Domain.Dtos; using PrismaApi.Domain.Entities; using PrismaApi.Infrastructure.Context; @@ -79,4 +81,77 @@ public async Task GetOrAddByUserNameAsync(UserIncomingDto dto, Cancellatio return user; } + + public override async Task DeleteByIdsAsync(IEnumerable ids, Expression>? filterPredicate = null, CancellationToken ct = default) + { + var entries = await DbContext.Users + .Where(u => ids.Contains(u.Id)) + .ToListAsync(cancellationToken: ct); + + if (entries.Count == 0) + return; + + // update all auditable entities to point to deleted user entry + var connection = DbContext.Database.GetDbConnection(); + using var cmd = connection.CreateCommand(); + var idParams = ids.Select((id, i) => + { + var param = cmd.CreateParameter(); + param.ParameterName = $"@id{i}"; + param.Value = id; + return param; + }).ToArray(); + var inClause = string.Join(",", idParams.Select(p => p.ParameterName)); + + var auditableEntityTypes = DbContext.Model.GetEntityTypes() + .Where(t => typeof(AuditableEntity).IsAssignableFrom(t.ClrType) && !t.ClrType.IsAbstract); + + foreach (var entityType in auditableEntityTypes) + { + var tableName = entityType.GetTableName(); + try + { + + await DbContext.Database.ExecuteSqlRawAsync($""" + UPDATE [{tableName}] + SET CreatedById = '{DomainConstants.DeletedUserId}' + WHERE CreatedById IN ({inClause}); + UPDATE [{tableName}] + SET UpdatedById = '{DomainConstants.DeletedUserId}' + WHERE UpdatedById IN ({inClause}); + """, [.. idParams.Concat(idParams).Cast()], ct); + } + catch (Exception e) + { + + throw e; + } + } + // var auditableEntitiesToUpdate = DbContext. + + // foreach (var auditableEntity in auditableEntitiesToUpdate) + // { + // if (ids.Contains(auditableEntity.UpdatedById)) + // { + // auditableEntity.UpdatedById = DomainConstants.DeletedUserId; + // } + + // if (ids.Contains(auditableEntity.CreatedById)) + // { + // auditableEntity.CreatedById = DomainConstants.DeletedUserId; + // } + // } + + // delete project roles + var projectRoles = await DbContext.ProjectRoles + .Where(e => ids.Contains(e.UserId)) + .ToListAsync(cancellationToken: ct); + + DbContext.ProjectRoles.RemoveRange(projectRoles); + foreach (var entry in entries) + { + DbContext.Users.Remove(entry); + } + await DbContext.SaveChangesAsync(ct); + } } diff --git a/PrismaDotnetApi/PrismaApi.Application/Services/UserService.cs b/PrismaDotnetApi/PrismaApi.Application/Services/UserService.cs index 5f1a271..d87b8f3 100644 --- a/PrismaDotnetApi/PrismaApi.Application/Services/UserService.cs +++ b/PrismaDotnetApi/PrismaApi.Application/Services/UserService.cs @@ -34,4 +34,14 @@ public Task GetOrCreateUserFromContextAsync(HttpContext context public Task> SearchUsersAsync(string query) => _userProvider.SearchUsersAsync(query); + + public async Task DeleteUserAsync(string userId, UserOutgoingDto user, CancellationToken ct = default) + { + // user is the user making the request, and only allows to delete itself. + if (userId != user.Id) + { + throw new InvalidOperationException("Users can only delete themselves."); + } + await _userRepository.DeleteByIdsAsync([userId], ct: ct); + } } diff --git a/PrismaDotnetApi/PrismaApi.Domain/Constants/DomainConstants.cs b/PrismaDotnetApi/PrismaApi.Domain/Constants/DomainConstants.cs index 3b4a721..2f69d79 100644 --- a/PrismaDotnetApi/PrismaApi.Domain/Constants/DomainConstants.cs +++ b/PrismaDotnetApi/PrismaApi.Domain/Constants/DomainConstants.cs @@ -12,6 +12,9 @@ public static class DomainConstants public const int MaxOpacity = 100; public const int MinOpacity = 0; public const int DefaultTextSize = 24; + public static readonly string DeletedUserId = + "d008bfdf-fe89-48f3-80a8-777bba4d9bbf"; + public static readonly string DeletedUserName = "Deleted User"; public static readonly Guid DefaultValueMetricId = Guid.Parse("288e0811-7ab6-5d24-b80c-9fa925b848a6"); public static readonly string DefaultValueMetricName = "value"; diff --git a/PrismaDotnetApi/PrismaApi.Domain/Entities/User.cs b/PrismaDotnetApi/PrismaApi.Domain/Entities/User.cs index 49b7ec6..81909c2 100644 --- a/PrismaDotnetApi/PrismaApi.Domain/Entities/User.cs +++ b/PrismaDotnetApi/PrismaApi.Domain/Entities/User.cs @@ -16,5 +16,12 @@ public static void OnModelConfiguring(ModelBuilder modelBuilder) entity.HasKey(e => e.Id); entity.Property(e => e.Name).HasMaxLength(DomainConstants.MaxShortStringLength); }); + modelBuilder.Entity().HasData(new User + { + Id = DomainConstants.DeletedUserId, + Name = DomainConstants.DeletedUserName, + CreatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Utc).AddTicks(1), TimeSpan.Zero), + UpdatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Utc).AddTicks(2), TimeSpan.Zero) + }); } } diff --git a/PrismaDotnetApi/PrismaApi.Infrastructure/Context/AppDbContextFactory.cs b/PrismaDotnetApi/PrismaApi.Infrastructure/Context/AppDbContextFactory.cs index a037f53..85de9c1 100644 --- a/PrismaDotnetApi/PrismaApi.Infrastructure/Context/AppDbContextFactory.cs +++ b/PrismaDotnetApi/PrismaApi.Infrastructure/Context/AppDbContextFactory.cs @@ -9,7 +9,8 @@ public class AppDbContextFactory : IDesignTimeDbContextFactory { public AppDbContext CreateDbContext(string[] args) { - var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); + // var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); + var environment = "Local"; IConfigurationBuilder configurationBuilder = new ConfigurationBuilder(); var apiPath = Path.Combine( diff --git a/PrismaDotnetApi/PrismaApi.Test/Mocks/TestUserService.cs b/PrismaDotnetApi/PrismaApi.Test/Mocks/TestUserService.cs index fca16e9..7df34bd 100644 --- a/PrismaDotnetApi/PrismaApi.Test/Mocks/TestUserService.cs +++ b/PrismaDotnetApi/PrismaApi.Test/Mocks/TestUserService.cs @@ -55,4 +55,14 @@ public async Task> GetByIdsAsync(IEnumerable ids) var users = await _userRepository.GetByIdsAsync(ids, withTracking: false); return users.ToOutgoingDtos(); } + + public async Task DeleteUserAsync(string userId, UserOutgoingDto user, CancellationToken ct = default) + { + // user is the user making the request, and only allows to delete itself. + if (userId != user.Id) + { + throw new InvalidOperationException("Users can only delete themselves."); + } + await _userRepository.DeleteByIdsAsync([userId], ct: ct); + } } diff --git a/PrismaDotnetApi/SqlServerMigrations/20260608114526_AddDeletedUser.Designer.cs b/PrismaDotnetApi/SqlServerMigrations/20260608114526_AddDeletedUser.Designer.cs new file mode 100644 index 0000000..aafedd8 --- /dev/null +++ b/PrismaDotnetApi/SqlServerMigrations/20260608114526_AddDeletedUser.Designer.cs @@ -0,0 +1,1557 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using PrismaApi.Infrastructure.Context; + +#nullable disable + +namespace PrismaApi.Infrastructure.Migrations +{ + [DbContext(typeof(AppDbContext))] + [Migration("20260608114526_AddDeletedUser")] + partial class AddDeletedUser + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "9.0.13") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Assessment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("IsCompleted") + .HasColumnType("bit"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Assessments", (string)null); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.BoardNode", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Color") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Data") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Height") + .HasColumnType("float"); + + b.Property("Opacity") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasDefaultValue(100); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("Rotation") + .HasColumnType("float"); + + b.Property("StrokeStyle") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("nvarchar(max)") + .HasDefaultValue("Solid"); + + b.Property("StrokeWidth") + .ValueGeneratedOnAdd() + .HasColumnType("real") + .HasDefaultValue(8f); + + b.Property("TextSize") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasDefaultValue(24); + + b.Property("Type") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Width") + .HasColumnType("float"); + + b.Property("XPosition") + .HasColumnType("float"); + + b.Property("YPosition") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("BoardNode", (string)null); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Decision", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("IssueId") + .HasColumnType("uniqueidentifier"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.HasKey("Id"); + + b.HasIndex("IssueId") + .IsUnique(); + + b.HasIndex("ProjectId"); + + b.ToTable("Decisions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DecisionQualityAssessment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AppropriateFrame") + .HasColumnType("int"); + + b.Property("AssessmentId") + .HasColumnType("uniqueidentifier"); + + b.Property("Comment") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("nvarchar(max)"); + + b.Property("CommitmentToAction") + .HasColumnType("int"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("DoableAlternatives") + .HasColumnType("int"); + + b.Property("InformationReliability") + .HasColumnType("int"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("ReasoningCorrectness") + .HasColumnType("int"); + + b.Property("TradeOffAnalysis") + .HasColumnType("int"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("AssessmentId"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("DecisionQualityAssessments", (string)null); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbability", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("OutcomeId") + .HasColumnType("uniqueidentifier"); + + b.Property("Probability") + .HasPrecision(53) + .HasColumnType("float(53)"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("UncertaintyId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.HasKey("Id"); + + b.HasIndex("OutcomeId"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UncertaintyId"); + + b.ToTable("DiscreteProbabilities"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOption", b => + { + b.Property("DiscreteProbabilityId") + .HasColumnType("uniqueidentifier"); + + b.Property("ParentOptionId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("DiscreteProbabilityId", "ParentOptionId"); + + b.HasIndex("ParentOptionId"); + + b.ToTable("DiscreteProbabilityParentOptions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOutcome", b => + { + b.Property("DiscreteProbabilityId") + .HasColumnType("uniqueidentifier"); + + b.Property("ParentOutcomeId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("DiscreteProbabilityId", "ParentOutcomeId"); + + b.HasIndex("ParentOutcomeId"); + + b.ToTable("DiscreteProbabilityParentOutcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("UtilityId") + .HasColumnType("uniqueidentifier"); + + b.Property("UtilityValue") + .HasPrecision(53) + .HasColumnType("float(53)"); + + b.Property("ValueMetricId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UtilityId"); + + b.HasIndex("ValueMetricId"); + + b.ToTable("DiscreteUtilities"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOption", b => + { + b.Property("DiscreteUtilityId") + .HasColumnType("uniqueidentifier"); + + b.Property("ParentOptionId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("DiscreteUtilityId", "ParentOptionId"); + + b.HasIndex("ParentOptionId"); + + b.ToTable("DiscreteUtilityParentOptions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOutcome", b => + { + b.Property("DiscreteUtilityId") + .HasColumnType("uniqueidentifier"); + + b.Property("ParentOutcomeId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("DiscreteUtilityId", "ParentOutcomeId"); + + b.HasIndex("ParentOutcomeId"); + + b.ToTable("DiscreteUtilityParentOutcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Edge", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("HeadId") + .HasColumnType("uniqueidentifier"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("TailId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.HasKey("Id"); + + b.HasIndex("HeadId"); + + b.HasIndex("ProjectId"); + + b.HasIndex("TailId"); + + b.ToTable("Edges"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Boundary") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("Order") + .HasColumnType("int"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Issues"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("IssueId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.HasKey("Id"); + + b.HasIndex("IssueId") + .IsUnique(); + + b.HasIndex("ProjectId"); + + b.ToTable("Nodes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.NodeStyle", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("NodeId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("XPosition") + .HasColumnType("float"); + + b.Property("YPosition") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.HasIndex("NodeId") + .IsUnique(); + + b.ToTable("NodeStyles"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Objective", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Objectives"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("DecisionId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Utility") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.HasIndex("DecisionId"); + + b.HasIndex("ProjectId"); + + b.ToTable("Options"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Outcome", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("UncertaintyId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Utility") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UncertaintyId"); + + b.ToTable("Outcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("EndDate") + .HasColumnType("datetimeoffset"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("OpportunityStatement") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("nvarchar(max)"); + + b.Property("ParentProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("ParentProjectName") + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("Public") + .HasColumnType("bit"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Projects"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.ProjectRole", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("Role") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.HasIndex("UserId"); + + b.ToTable("ProjectRoles"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("nvarchar(max)"); + + b.Property("Icon") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("IconColor") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("Rationale") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("nvarchar(max)"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Strategies"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.StrategyOption", b => + { + b.Property("StrategyId") + .HasColumnType("uniqueidentifier"); + + b.Property("OptionId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("StrategyId", "OptionId"); + + b.HasIndex("OptionId"); + + b.ToTable("StrategyOptions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("IsKey") + .HasColumnType("bit"); + + b.Property("IssueId") + .HasColumnType("uniqueidentifier"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.HasKey("Id"); + + b.HasIndex("IssueId") + .IsUnique(); + + b.HasIndex("ProjectId"); + + b.ToTable("Uncertainties"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.User", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.HasKey("Id"); + + b.ToTable("Users"); + + b.HasData( + new + { + Id = "d008bfdf-fe89-48f3-80a8-777bba4d9bbf", + CreatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), + Name = "Deleted User", + UpdatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) + }); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("IssueId") + .HasColumnType("uniqueidentifier"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.HasKey("Id"); + + b.HasIndex("IssueId") + .IsUnique(); + + b.HasIndex("ProjectId"); + + b.ToTable("Utilities"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.ValueMetric", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.HasKey("Id"); + + b.ToTable("ValueMetrics"); + + b.HasData( + new + { + Id = new Guid("288e0811-7ab6-5d24-b80c-9fa925b848a6"), + CreatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), + Name = "value", + UpdatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) + }); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Assessment", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Assessments") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.BoardNode", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("BoardNodes") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Decision", b => + { + b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") + .WithOne("Decision") + .HasForeignKey("PrismaApi.Domain.Entities.Decision", "IssueId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Issue"); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DecisionQualityAssessment", b => + { + b.HasOne("PrismaApi.Domain.Entities.Assessment", "Assessment") + .WithMany("DecisionQualityAssessments") + .HasForeignKey("AssessmentId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("Assessment"); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbability", b => + { + b.HasOne("PrismaApi.Domain.Entities.Outcome", "Outcome") + .WithMany() + .HasForeignKey("OutcomeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Uncertainty", "Uncertainty") + .WithMany("DiscreteProbabilities") + .HasForeignKey("UncertaintyId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Outcome"); + + b.Navigation("Project"); + + b.Navigation("Uncertainty"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOption", b => + { + b.HasOne("PrismaApi.Domain.Entities.DiscreteProbability", "DiscreteProbability") + .WithMany("ParentOptions") + .HasForeignKey("DiscreteProbabilityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Option", "ParentOption") + .WithMany() + .HasForeignKey("ParentOptionId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("DiscreteProbability"); + + b.Navigation("ParentOption"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOutcome", b => + { + b.HasOne("PrismaApi.Domain.Entities.DiscreteProbability", "DiscreteProbability") + .WithMany("ParentOutcomes") + .HasForeignKey("DiscreteProbabilityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Outcome", "ParentOutcome") + .WithMany() + .HasForeignKey("ParentOutcomeId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("DiscreteProbability"); + + b.Navigation("ParentOutcome"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => + { + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Utility", "Utility") + .WithMany("DiscreteUtilities") + .HasForeignKey("UtilityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.ValueMetric", "ValueMetric") + .WithMany() + .HasForeignKey("ValueMetricId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Project"); + + b.Navigation("Utility"); + + b.Navigation("ValueMetric"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOption", b => + { + b.HasOne("PrismaApi.Domain.Entities.DiscreteUtility", "DiscreteUtility") + .WithMany("ParentOptions") + .HasForeignKey("DiscreteUtilityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Option", "ParentOption") + .WithMany() + .HasForeignKey("ParentOptionId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("DiscreteUtility"); + + b.Navigation("ParentOption"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOutcome", b => + { + b.HasOne("PrismaApi.Domain.Entities.DiscreteUtility", "DiscreteUtility") + .WithMany("ParentOutcomes") + .HasForeignKey("DiscreteUtilityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Outcome", "ParentOutcome") + .WithMany() + .HasForeignKey("ParentOutcomeId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("DiscreteUtility"); + + b.Navigation("ParentOutcome"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Edge", b => + { + b.HasOne("PrismaApi.Domain.Entities.Node", "HeadNode") + .WithMany("HeadEdges") + .HasForeignKey("HeadId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Edges") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Node", "TailNode") + .WithMany("TailEdges") + .HasForeignKey("TailId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("HeadNode"); + + b.Navigation("Project"); + + b.Navigation("TailNode"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Issues") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => + { + b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") + .WithOne("Node") + .HasForeignKey("PrismaApi.Domain.Entities.Node", "IssueId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Nodes") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Issue"); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.NodeStyle", b => + { + b.HasOne("PrismaApi.Domain.Entities.Node", "Node") + .WithOne("NodeStyle") + .HasForeignKey("PrismaApi.Domain.Entities.NodeStyle", "NodeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Node"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Objective", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Objectives") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => + { + b.HasOne("PrismaApi.Domain.Entities.Decision", "Decision") + .WithMany("Options") + .HasForeignKey("DecisionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Decision"); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Outcome", b => + { + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Uncertainty", "Uncertainty") + .WithMany("Outcomes") + .HasForeignKey("UncertaintyId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Project"); + + b.Navigation("Uncertainty"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.ProjectRole", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("ProjectRoles") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "User") + .WithMany("ProjectRoles") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Strategies") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.StrategyOption", b => + { + b.HasOne("PrismaApi.Domain.Entities.Option", "Option") + .WithMany("StrategyOptions") + .HasForeignKey("OptionId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Strategy", "Strategy") + .WithMany("StrategyOptions") + .HasForeignKey("StrategyId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Option"); + + b.Navigation("Strategy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => + { + b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") + .WithOne("Uncertainty") + .HasForeignKey("PrismaApi.Domain.Entities.Uncertainty", "IssueId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Issue"); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => + { + b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") + .WithOne("Utility") + .HasForeignKey("PrismaApi.Domain.Entities.Utility", "IssueId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Issue"); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Assessment", b => + { + b.Navigation("DecisionQualityAssessments"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Decision", b => + { + b.Navigation("Options"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbability", b => + { + b.Navigation("ParentOptions"); + + b.Navigation("ParentOutcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => + { + b.Navigation("ParentOptions"); + + b.Navigation("ParentOutcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => + { + b.Navigation("Decision"); + + b.Navigation("Node"); + + b.Navigation("Uncertainty"); + + b.Navigation("Utility"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => + { + b.Navigation("HeadEdges"); + + b.Navigation("NodeStyle"); + + b.Navigation("TailEdges"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => + { + b.Navigation("StrategyOptions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => + { + b.Navigation("Assessments"); + + b.Navigation("BoardNodes"); + + b.Navigation("Edges"); + + b.Navigation("Issues"); + + b.Navigation("Nodes"); + + b.Navigation("Objectives"); + + b.Navigation("ProjectRoles"); + + b.Navigation("Strategies"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => + { + b.Navigation("StrategyOptions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => + { + b.Navigation("DiscreteProbabilities"); + + b.Navigation("Outcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.User", b => + { + b.Navigation("ProjectRoles"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => + { + b.Navigation("DiscreteUtilities"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/PrismaDotnetApi/SqlServerMigrations/20260608114526_AddDeletedUser.cs b/PrismaDotnetApi/SqlServerMigrations/20260608114526_AddDeletedUser.cs new file mode 100644 index 0000000..95eeeb4 --- /dev/null +++ b/PrismaDotnetApi/SqlServerMigrations/20260608114526_AddDeletedUser.cs @@ -0,0 +1,29 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace PrismaApi.Infrastructure.Migrations +{ + /// + public partial class AddDeletedUser : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.InsertData( + table: "Users", + columns: new[] { "Id", "CreatedAt", "Name", "UpdatedAt" }, + values: new object[] { "d008bfdf-fe89-48f3-80a8-777bba4d9bbf", new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), "Deleted User", new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) }); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DeleteData( + table: "Users", + keyColumn: "Id", + keyValue: "d008bfdf-fe89-48f3-80a8-777bba4d9bbf"); + } + } +} diff --git a/PrismaDotnetApi/SqlServerMigrations/AppDbContextModelSnapshot.cs b/PrismaDotnetApi/SqlServerMigrations/AppDbContextModelSnapshot.cs index 1a9083b..c2c052b 100644 --- a/PrismaDotnetApi/SqlServerMigrations/AppDbContextModelSnapshot.cs +++ b/PrismaDotnetApi/SqlServerMigrations/AppDbContextModelSnapshot.cs @@ -1023,6 +1023,15 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasKey("Id"); b.ToTable("Users"); + + b.HasData( + new + { + Id = "d008bfdf-fe89-48f3-80a8-777bba4d9bbf", + CreatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), + Name = "Deleted User", + UpdatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) + }); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => diff --git a/PrismaDotnetApi/SqliteMigrations/20260608114505_AddDeletedUser.Designer.cs b/PrismaDotnetApi/SqliteMigrations/20260608114505_AddDeletedUser.Designer.cs new file mode 100644 index 0000000..edb69bb --- /dev/null +++ b/PrismaDotnetApi/SqliteMigrations/20260608114505_AddDeletedUser.Designer.cs @@ -0,0 +1,1552 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using PrismaApi.Infrastructure.Context; + +#nullable disable + +namespace PrismaApi.Infrastructure.Migrations +{ + [DbContext(typeof(AppDbContext))] + [Migration("20260608114505_AddDeletedUser")] + partial class AddDeletedUser + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "9.0.13"); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Assessment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("IsCompleted") + .HasColumnType("INTEGER"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Assessments", (string)null); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.BoardNode", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("Color") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Data") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Height") + .HasColumnType("REAL"); + + b.Property("Opacity") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasDefaultValue(100); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("Rotation") + .HasColumnType("REAL"); + + b.Property("StrokeStyle") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("TEXT") + .HasDefaultValue("Solid"); + + b.Property("StrokeWidth") + .ValueGeneratedOnAdd() + .HasColumnType("REAL") + .HasDefaultValue(8f); + + b.Property("TextSize") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasDefaultValue(24); + + b.Property("Type") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Width") + .HasColumnType("REAL"); + + b.Property("XPosition") + .HasColumnType("REAL"); + + b.Property("YPosition") + .HasColumnType("REAL"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("BoardNode", (string)null); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Decision", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("IssueId") + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("IssueId") + .IsUnique(); + + b.HasIndex("ProjectId"); + + b.ToTable("Decisions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DecisionQualityAssessment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("AppropriateFrame") + .HasColumnType("INTEGER"); + + b.Property("AssessmentId") + .HasColumnType("TEXT"); + + b.Property("Comment") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("TEXT"); + + b.Property("CommitmentToAction") + .HasColumnType("INTEGER"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("DoableAlternatives") + .HasColumnType("INTEGER"); + + b.Property("InformationReliability") + .HasColumnType("INTEGER"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("ReasoningCorrectness") + .HasColumnType("INTEGER"); + + b.Property("TradeOffAnalysis") + .HasColumnType("INTEGER"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("AssessmentId"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("DecisionQualityAssessments", (string)null); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbability", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("OutcomeId") + .HasColumnType("TEXT"); + + b.Property("Probability") + .HasPrecision(53) + .HasColumnType("REAL"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("UncertaintyId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("OutcomeId"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UncertaintyId"); + + b.ToTable("DiscreteProbabilities"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOption", b => + { + b.Property("DiscreteProbabilityId") + .HasColumnType("TEXT"); + + b.Property("ParentOptionId") + .HasColumnType("TEXT"); + + b.HasKey("DiscreteProbabilityId", "ParentOptionId"); + + b.HasIndex("ParentOptionId"); + + b.ToTable("DiscreteProbabilityParentOptions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOutcome", b => + { + b.Property("DiscreteProbabilityId") + .HasColumnType("TEXT"); + + b.Property("ParentOutcomeId") + .HasColumnType("TEXT"); + + b.HasKey("DiscreteProbabilityId", "ParentOutcomeId"); + + b.HasIndex("ParentOutcomeId"); + + b.ToTable("DiscreteProbabilityParentOutcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("UtilityId") + .HasColumnType("TEXT"); + + b.Property("UtilityValue") + .HasPrecision(53) + .HasColumnType("REAL"); + + b.Property("ValueMetricId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UtilityId"); + + b.HasIndex("ValueMetricId"); + + b.ToTable("DiscreteUtilities"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOption", b => + { + b.Property("DiscreteUtilityId") + .HasColumnType("TEXT"); + + b.Property("ParentOptionId") + .HasColumnType("TEXT"); + + b.HasKey("DiscreteUtilityId", "ParentOptionId"); + + b.HasIndex("ParentOptionId"); + + b.ToTable("DiscreteUtilityParentOptions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOutcome", b => + { + b.Property("DiscreteUtilityId") + .HasColumnType("TEXT"); + + b.Property("ParentOutcomeId") + .HasColumnType("TEXT"); + + b.HasKey("DiscreteUtilityId", "ParentOutcomeId"); + + b.HasIndex("ParentOutcomeId"); + + b.ToTable("DiscreteUtilityParentOutcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Edge", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("HeadId") + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("TailId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("HeadId"); + + b.HasIndex("ProjectId"); + + b.HasIndex("TailId"); + + b.ToTable("Edges"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("Boundary") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("Order") + .HasColumnType("INTEGER"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Issues"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("IssueId") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("IssueId") + .IsUnique(); + + b.HasIndex("ProjectId"); + + b.ToTable("Nodes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.NodeStyle", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("NodeId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("XPosition") + .HasColumnType("REAL"); + + b.Property("YPosition") + .HasColumnType("REAL"); + + b.HasKey("Id"); + + b.HasIndex("NodeId") + .IsUnique(); + + b.ToTable("NodeStyles"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Objective", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Objectives"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("DecisionId") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("Utility") + .HasColumnType("REAL"); + + b.HasKey("Id"); + + b.HasIndex("DecisionId"); + + b.HasIndex("ProjectId"); + + b.ToTable("Options"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Outcome", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("UncertaintyId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("Utility") + .HasColumnType("REAL"); + + b.HasKey("Id"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UncertaintyId"); + + b.ToTable("Outcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("EndDate") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("OpportunityStatement") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("TEXT"); + + b.Property("ParentProjectId") + .HasColumnType("TEXT"); + + b.Property("ParentProjectName") + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("Public") + .HasColumnType("INTEGER"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Projects"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.ProjectRole", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("Role") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.HasIndex("UserId"); + + b.ToTable("ProjectRoles"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("TEXT"); + + b.Property("Icon") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("IconColor") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("Rationale") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Strategies"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.StrategyOption", b => + { + b.Property("StrategyId") + .HasColumnType("TEXT"); + + b.Property("OptionId") + .HasColumnType("TEXT"); + + b.HasKey("StrategyId", "OptionId"); + + b.HasIndex("OptionId"); + + b.ToTable("StrategyOptions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("IsKey") + .HasColumnType("INTEGER"); + + b.Property("IssueId") + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("IssueId") + .IsUnique(); + + b.HasIndex("ProjectId"); + + b.ToTable("Uncertainties"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.User", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.ToTable("Users"); + + b.HasData( + new + { + Id = "d008bfdf-fe89-48f3-80a8-777bba4d9bbf", + CreatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), + Name = "Deleted User", + UpdatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) + }); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("IssueId") + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("IssueId") + .IsUnique(); + + b.HasIndex("ProjectId"); + + b.ToTable("Utilities"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.ValueMetric", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.ToTable("ValueMetrics"); + + b.HasData( + new + { + Id = new Guid("288e0811-7ab6-5d24-b80c-9fa925b848a6"), + CreatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), + Name = "value", + UpdatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) + }); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Assessment", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Assessments") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.BoardNode", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("BoardNodes") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Decision", b => + { + b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") + .WithOne("Decision") + .HasForeignKey("PrismaApi.Domain.Entities.Decision", "IssueId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Issue"); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DecisionQualityAssessment", b => + { + b.HasOne("PrismaApi.Domain.Entities.Assessment", "Assessment") + .WithMany("DecisionQualityAssessments") + .HasForeignKey("AssessmentId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("Assessment"); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbability", b => + { + b.HasOne("PrismaApi.Domain.Entities.Outcome", "Outcome") + .WithMany() + .HasForeignKey("OutcomeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Uncertainty", "Uncertainty") + .WithMany("DiscreteProbabilities") + .HasForeignKey("UncertaintyId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Outcome"); + + b.Navigation("Project"); + + b.Navigation("Uncertainty"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOption", b => + { + b.HasOne("PrismaApi.Domain.Entities.DiscreteProbability", "DiscreteProbability") + .WithMany("ParentOptions") + .HasForeignKey("DiscreteProbabilityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Option", "ParentOption") + .WithMany() + .HasForeignKey("ParentOptionId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("DiscreteProbability"); + + b.Navigation("ParentOption"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOutcome", b => + { + b.HasOne("PrismaApi.Domain.Entities.DiscreteProbability", "DiscreteProbability") + .WithMany("ParentOutcomes") + .HasForeignKey("DiscreteProbabilityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Outcome", "ParentOutcome") + .WithMany() + .HasForeignKey("ParentOutcomeId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("DiscreteProbability"); + + b.Navigation("ParentOutcome"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => + { + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Utility", "Utility") + .WithMany("DiscreteUtilities") + .HasForeignKey("UtilityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.ValueMetric", "ValueMetric") + .WithMany() + .HasForeignKey("ValueMetricId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Project"); + + b.Navigation("Utility"); + + b.Navigation("ValueMetric"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOption", b => + { + b.HasOne("PrismaApi.Domain.Entities.DiscreteUtility", "DiscreteUtility") + .WithMany("ParentOptions") + .HasForeignKey("DiscreteUtilityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Option", "ParentOption") + .WithMany() + .HasForeignKey("ParentOptionId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("DiscreteUtility"); + + b.Navigation("ParentOption"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOutcome", b => + { + b.HasOne("PrismaApi.Domain.Entities.DiscreteUtility", "DiscreteUtility") + .WithMany("ParentOutcomes") + .HasForeignKey("DiscreteUtilityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Outcome", "ParentOutcome") + .WithMany() + .HasForeignKey("ParentOutcomeId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("DiscreteUtility"); + + b.Navigation("ParentOutcome"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Edge", b => + { + b.HasOne("PrismaApi.Domain.Entities.Node", "HeadNode") + .WithMany("HeadEdges") + .HasForeignKey("HeadId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Edges") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Node", "TailNode") + .WithMany("TailEdges") + .HasForeignKey("TailId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("HeadNode"); + + b.Navigation("Project"); + + b.Navigation("TailNode"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Issues") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => + { + b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") + .WithOne("Node") + .HasForeignKey("PrismaApi.Domain.Entities.Node", "IssueId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Nodes") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Issue"); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.NodeStyle", b => + { + b.HasOne("PrismaApi.Domain.Entities.Node", "Node") + .WithOne("NodeStyle") + .HasForeignKey("PrismaApi.Domain.Entities.NodeStyle", "NodeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Node"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Objective", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Objectives") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => + { + b.HasOne("PrismaApi.Domain.Entities.Decision", "Decision") + .WithMany("Options") + .HasForeignKey("DecisionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Decision"); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Outcome", b => + { + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Uncertainty", "Uncertainty") + .WithMany("Outcomes") + .HasForeignKey("UncertaintyId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Project"); + + b.Navigation("Uncertainty"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.ProjectRole", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("ProjectRoles") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "User") + .WithMany("ProjectRoles") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Strategies") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.StrategyOption", b => + { + b.HasOne("PrismaApi.Domain.Entities.Option", "Option") + .WithMany("StrategyOptions") + .HasForeignKey("OptionId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Strategy", "Strategy") + .WithMany("StrategyOptions") + .HasForeignKey("StrategyId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Option"); + + b.Navigation("Strategy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => + { + b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") + .WithOne("Uncertainty") + .HasForeignKey("PrismaApi.Domain.Entities.Uncertainty", "IssueId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Issue"); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => + { + b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") + .WithOne("Utility") + .HasForeignKey("PrismaApi.Domain.Entities.Utility", "IssueId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Issue"); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Assessment", b => + { + b.Navigation("DecisionQualityAssessments"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Decision", b => + { + b.Navigation("Options"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbability", b => + { + b.Navigation("ParentOptions"); + + b.Navigation("ParentOutcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => + { + b.Navigation("ParentOptions"); + + b.Navigation("ParentOutcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => + { + b.Navigation("Decision"); + + b.Navigation("Node"); + + b.Navigation("Uncertainty"); + + b.Navigation("Utility"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => + { + b.Navigation("HeadEdges"); + + b.Navigation("NodeStyle"); + + b.Navigation("TailEdges"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => + { + b.Navigation("StrategyOptions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => + { + b.Navigation("Assessments"); + + b.Navigation("BoardNodes"); + + b.Navigation("Edges"); + + b.Navigation("Issues"); + + b.Navigation("Nodes"); + + b.Navigation("Objectives"); + + b.Navigation("ProjectRoles"); + + b.Navigation("Strategies"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => + { + b.Navigation("StrategyOptions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => + { + b.Navigation("DiscreteProbabilities"); + + b.Navigation("Outcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.User", b => + { + b.Navigation("ProjectRoles"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => + { + b.Navigation("DiscreteUtilities"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/PrismaDotnetApi/SqliteMigrations/20260608114505_AddDeletedUser.cs b/PrismaDotnetApi/SqliteMigrations/20260608114505_AddDeletedUser.cs new file mode 100644 index 0000000..95eeeb4 --- /dev/null +++ b/PrismaDotnetApi/SqliteMigrations/20260608114505_AddDeletedUser.cs @@ -0,0 +1,29 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace PrismaApi.Infrastructure.Migrations +{ + /// + public partial class AddDeletedUser : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.InsertData( + table: "Users", + columns: new[] { "Id", "CreatedAt", "Name", "UpdatedAt" }, + values: new object[] { "d008bfdf-fe89-48f3-80a8-777bba4d9bbf", new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), "Deleted User", new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) }); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DeleteData( + table: "Users", + keyColumn: "Id", + keyValue: "d008bfdf-fe89-48f3-80a8-777bba4d9bbf"); + } + } +} diff --git a/PrismaDotnetApi/SqliteMigrations/AppDbContextModelSnapshot.cs b/PrismaDotnetApi/SqliteMigrations/AppDbContextModelSnapshot.cs index 032a4fd..1989b7c 100644 --- a/PrismaDotnetApi/SqliteMigrations/AppDbContextModelSnapshot.cs +++ b/PrismaDotnetApi/SqliteMigrations/AppDbContextModelSnapshot.cs @@ -1018,6 +1018,15 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasKey("Id"); b.ToTable("Users"); + + b.HasData( + new + { + Id = "d008bfdf-fe89-48f3-80a8-777bba4d9bbf", + CreatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), + Name = "Deleted User", + UpdatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) + }); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => From 1551c63a5bca0e718020c2d9c69eb26e0db99928 Mon Sep 17 00:00:00 2001 From: EinarSalbouvet Date: Wed, 15 Jul 2026 11:43:05 +0200 Subject: [PATCH 10/17] Remove deleted user data from Users table and associated migration files --- .../20260608114526_AddDeletedUser.Designer.cs | 1557 ----------------- .../20260608114526_AddDeletedUser.cs | 29 - .../AppDbContextModelSnapshot.cs | 9 - .../20260608114505_AddDeletedUser.Designer.cs | 1552 ---------------- .../20260608114505_AddDeletedUser.cs | 29 - .../AppDbContextModelSnapshot.cs | 9 - 6 files changed, 3185 deletions(-) delete mode 100644 PrismaDotnetApi/SqlServerMigrations/20260608114526_AddDeletedUser.Designer.cs delete mode 100644 PrismaDotnetApi/SqlServerMigrations/20260608114526_AddDeletedUser.cs delete mode 100644 PrismaDotnetApi/SqliteMigrations/20260608114505_AddDeletedUser.Designer.cs delete mode 100644 PrismaDotnetApi/SqliteMigrations/20260608114505_AddDeletedUser.cs diff --git a/PrismaDotnetApi/SqlServerMigrations/20260608114526_AddDeletedUser.Designer.cs b/PrismaDotnetApi/SqlServerMigrations/20260608114526_AddDeletedUser.Designer.cs deleted file mode 100644 index aafedd8..0000000 --- a/PrismaDotnetApi/SqlServerMigrations/20260608114526_AddDeletedUser.Designer.cs +++ /dev/null @@ -1,1557 +0,0 @@ -// -using System; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using PrismaApi.Infrastructure.Context; - -#nullable disable - -namespace PrismaApi.Infrastructure.Migrations -{ - [DbContext(typeof(AppDbContext))] - [Migration("20260608114526_AddDeletedUser")] - partial class AddDeletedUser - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "9.0.13") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Assessment", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.Property("IsCompleted") - .HasColumnType("bit"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Assessments", (string)null); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.BoardNode", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("Color") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.Property("Data") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Height") - .HasColumnType("float"); - - b.Property("Opacity") - .ValueGeneratedOnAdd() - .HasColumnType("int") - .HasDefaultValue(100); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("Rotation") - .HasColumnType("float"); - - b.Property("StrokeStyle") - .IsRequired() - .ValueGeneratedOnAdd() - .HasColumnType("nvarchar(max)") - .HasDefaultValue("Solid"); - - b.Property("StrokeWidth") - .ValueGeneratedOnAdd() - .HasColumnType("real") - .HasDefaultValue(8f); - - b.Property("TextSize") - .ValueGeneratedOnAdd() - .HasColumnType("int") - .HasDefaultValue(24); - - b.Property("Type") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.Property("Width") - .HasColumnType("float"); - - b.Property("XPosition") - .HasColumnType("float"); - - b.Property("YPosition") - .HasColumnType("float"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("BoardNode", (string)null); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Decision", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("IssueId") - .HasColumnType("uniqueidentifier"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("Type") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.HasKey("Id"); - - b.HasIndex("IssueId") - .IsUnique(); - - b.HasIndex("ProjectId"); - - b.ToTable("Decisions"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DecisionQualityAssessment", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("AppropriateFrame") - .HasColumnType("int"); - - b.Property("AssessmentId") - .HasColumnType("uniqueidentifier"); - - b.Property("Comment") - .IsRequired() - .HasMaxLength(6000) - .HasColumnType("nvarchar(max)"); - - b.Property("CommitmentToAction") - .HasColumnType("int"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.Property("DoableAlternatives") - .HasColumnType("int"); - - b.Property("InformationReliability") - .HasColumnType("int"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("ReasoningCorrectness") - .HasColumnType("int"); - - b.Property("TradeOffAnalysis") - .HasColumnType("int"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.HasKey("Id"); - - b.HasIndex("AssessmentId"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("DecisionQualityAssessments", (string)null); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbability", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("OutcomeId") - .HasColumnType("uniqueidentifier"); - - b.Property("Probability") - .HasPrecision(53) - .HasColumnType("float(53)"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("UncertaintyId") - .HasColumnType("uniqueidentifier"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.HasKey("Id"); - - b.HasIndex("OutcomeId"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UncertaintyId"); - - b.ToTable("DiscreteProbabilities"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOption", b => - { - b.Property("DiscreteProbabilityId") - .HasColumnType("uniqueidentifier"); - - b.Property("ParentOptionId") - .HasColumnType("uniqueidentifier"); - - b.HasKey("DiscreteProbabilityId", "ParentOptionId"); - - b.HasIndex("ParentOptionId"); - - b.ToTable("DiscreteProbabilityParentOptions"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOutcome", b => - { - b.Property("DiscreteProbabilityId") - .HasColumnType("uniqueidentifier"); - - b.Property("ParentOutcomeId") - .HasColumnType("uniqueidentifier"); - - b.HasKey("DiscreteProbabilityId", "ParentOutcomeId"); - - b.HasIndex("ParentOutcomeId"); - - b.ToTable("DiscreteProbabilityParentOutcomes"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("UtilityId") - .HasColumnType("uniqueidentifier"); - - b.Property("UtilityValue") - .HasPrecision(53) - .HasColumnType("float(53)"); - - b.Property("ValueMetricId") - .HasColumnType("uniqueidentifier"); - - b.HasKey("Id"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UtilityId"); - - b.HasIndex("ValueMetricId"); - - b.ToTable("DiscreteUtilities"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOption", b => - { - b.Property("DiscreteUtilityId") - .HasColumnType("uniqueidentifier"); - - b.Property("ParentOptionId") - .HasColumnType("uniqueidentifier"); - - b.HasKey("DiscreteUtilityId", "ParentOptionId"); - - b.HasIndex("ParentOptionId"); - - b.ToTable("DiscreteUtilityParentOptions"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOutcome", b => - { - b.Property("DiscreteUtilityId") - .HasColumnType("uniqueidentifier"); - - b.Property("ParentOutcomeId") - .HasColumnType("uniqueidentifier"); - - b.HasKey("DiscreteUtilityId", "ParentOutcomeId"); - - b.HasIndex("ParentOutcomeId"); - - b.ToTable("DiscreteUtilityParentOutcomes"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Edge", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("HeadId") - .HasColumnType("uniqueidentifier"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("TailId") - .HasColumnType("uniqueidentifier"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.HasKey("Id"); - - b.HasIndex("HeadId"); - - b.HasIndex("ProjectId"); - - b.HasIndex("TailId"); - - b.ToTable("Edges"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("Boundary") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.Property("Description") - .IsRequired() - .HasMaxLength(6000) - .HasColumnType("nvarchar(max)"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("Order") - .HasColumnType("int"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("Type") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Issues"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("IssueId") - .HasColumnType("uniqueidentifier"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.HasKey("Id"); - - b.HasIndex("IssueId") - .IsUnique(); - - b.HasIndex("ProjectId"); - - b.ToTable("Nodes"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.NodeStyle", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("NodeId") - .HasColumnType("uniqueidentifier"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("XPosition") - .HasColumnType("float"); - - b.Property("YPosition") - .HasColumnType("float"); - - b.HasKey("Id"); - - b.HasIndex("NodeId") - .IsUnique(); - - b.ToTable("NodeStyles"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Objective", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.Property("Description") - .IsRequired() - .HasMaxLength(6000) - .HasColumnType("nvarchar(max)"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("Type") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Objectives"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("DecisionId") - .HasColumnType("uniqueidentifier"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("Utility") - .HasColumnType("float"); - - b.HasKey("Id"); - - b.HasIndex("DecisionId"); - - b.HasIndex("ProjectId"); - - b.ToTable("Options"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Outcome", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("UncertaintyId") - .HasColumnType("uniqueidentifier"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("Utility") - .HasColumnType("float"); - - b.HasKey("Id"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UncertaintyId"); - - b.ToTable("Outcomes"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.Property("EndDate") - .HasColumnType("datetimeoffset"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("OpportunityStatement") - .IsRequired() - .HasMaxLength(6000) - .HasColumnType("nvarchar(max)"); - - b.Property("ParentProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("ParentProjectName") - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("Public") - .HasColumnType("bit"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Projects"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.ProjectRole", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("Role") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.Property("UserId") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UpdatedById"); - - b.HasIndex("UserId"); - - b.ToTable("ProjectRoles"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.Property("Description") - .IsRequired() - .HasMaxLength(6000) - .HasColumnType("nvarchar(max)"); - - b.Property("Icon") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("IconColor") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("Rationale") - .IsRequired() - .HasMaxLength(6000) - .HasColumnType("nvarchar(max)"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Strategies"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.StrategyOption", b => - { - b.Property("StrategyId") - .HasColumnType("uniqueidentifier"); - - b.Property("OptionId") - .HasColumnType("uniqueidentifier"); - - b.HasKey("StrategyId", "OptionId"); - - b.HasIndex("OptionId"); - - b.ToTable("StrategyOptions"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("IsKey") - .HasColumnType("bit"); - - b.Property("IssueId") - .HasColumnType("uniqueidentifier"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.HasKey("Id"); - - b.HasIndex("IssueId") - .IsUnique(); - - b.HasIndex("ProjectId"); - - b.ToTable("Uncertainties"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.User", b => - { - b.Property("Id") - .HasColumnType("nvarchar(450)"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.HasKey("Id"); - - b.ToTable("Users"); - - b.HasData( - new - { - Id = "d008bfdf-fe89-48f3-80a8-777bba4d9bbf", - CreatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), - Name = "Deleted User", - UpdatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) - }); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("IssueId") - .HasColumnType("uniqueidentifier"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.HasKey("Id"); - - b.HasIndex("IssueId") - .IsUnique(); - - b.HasIndex("ProjectId"); - - b.ToTable("Utilities"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.ValueMetric", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.HasKey("Id"); - - b.ToTable("ValueMetrics"); - - b.HasData( - new - { - Id = new Guid("288e0811-7ab6-5d24-b80c-9fa925b848a6"), - CreatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), - Name = "value", - UpdatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) - }); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Assessment", b => - { - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("Assessments") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("Project"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.BoardNode", b => - { - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("BoardNodes") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("Project"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Decision", b => - { - b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") - .WithOne("Decision") - .HasForeignKey("PrismaApi.Domain.Entities.Decision", "IssueId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("Issue"); - - b.Navigation("Project"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DecisionQualityAssessment", b => - { - b.HasOne("PrismaApi.Domain.Entities.Assessment", "Assessment") - .WithMany("DecisionQualityAssessments") - .HasForeignKey("AssessmentId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("Assessment"); - - b.Navigation("CreatedBy"); - - b.Navigation("Project"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbability", b => - { - b.HasOne("PrismaApi.Domain.Entities.Outcome", "Outcome") - .WithMany() - .HasForeignKey("OutcomeId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Uncertainty", "Uncertainty") - .WithMany("DiscreteProbabilities") - .HasForeignKey("UncertaintyId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("Outcome"); - - b.Navigation("Project"); - - b.Navigation("Uncertainty"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOption", b => - { - b.HasOne("PrismaApi.Domain.Entities.DiscreteProbability", "DiscreteProbability") - .WithMany("ParentOptions") - .HasForeignKey("DiscreteProbabilityId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Option", "ParentOption") - .WithMany() - .HasForeignKey("ParentOptionId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("DiscreteProbability"); - - b.Navigation("ParentOption"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOutcome", b => - { - b.HasOne("PrismaApi.Domain.Entities.DiscreteProbability", "DiscreteProbability") - .WithMany("ParentOutcomes") - .HasForeignKey("DiscreteProbabilityId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Outcome", "ParentOutcome") - .WithMany() - .HasForeignKey("ParentOutcomeId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("DiscreteProbability"); - - b.Navigation("ParentOutcome"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => - { - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Utility", "Utility") - .WithMany("DiscreteUtilities") - .HasForeignKey("UtilityId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.ValueMetric", "ValueMetric") - .WithMany() - .HasForeignKey("ValueMetricId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Project"); - - b.Navigation("Utility"); - - b.Navigation("ValueMetric"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOption", b => - { - b.HasOne("PrismaApi.Domain.Entities.DiscreteUtility", "DiscreteUtility") - .WithMany("ParentOptions") - .HasForeignKey("DiscreteUtilityId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Option", "ParentOption") - .WithMany() - .HasForeignKey("ParentOptionId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("DiscreteUtility"); - - b.Navigation("ParentOption"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOutcome", b => - { - b.HasOne("PrismaApi.Domain.Entities.DiscreteUtility", "DiscreteUtility") - .WithMany("ParentOutcomes") - .HasForeignKey("DiscreteUtilityId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Outcome", "ParentOutcome") - .WithMany() - .HasForeignKey("ParentOutcomeId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("DiscreteUtility"); - - b.Navigation("ParentOutcome"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Edge", b => - { - b.HasOne("PrismaApi.Domain.Entities.Node", "HeadNode") - .WithMany("HeadEdges") - .HasForeignKey("HeadId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("Edges") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Node", "TailNode") - .WithMany("TailEdges") - .HasForeignKey("TailId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("HeadNode"); - - b.Navigation("Project"); - - b.Navigation("TailNode"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => - { - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("Issues") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("Project"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => - { - b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") - .WithOne("Node") - .HasForeignKey("PrismaApi.Domain.Entities.Node", "IssueId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("Nodes") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("Issue"); - - b.Navigation("Project"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.NodeStyle", b => - { - b.HasOne("PrismaApi.Domain.Entities.Node", "Node") - .WithOne("NodeStyle") - .HasForeignKey("PrismaApi.Domain.Entities.NodeStyle", "NodeId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Node"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Objective", b => - { - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("Objectives") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("Project"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => - { - b.HasOne("PrismaApi.Domain.Entities.Decision", "Decision") - .WithMany("Options") - .HasForeignKey("DecisionId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("Decision"); - - b.Navigation("Project"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Outcome", b => - { - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Uncertainty", "Uncertainty") - .WithMany("Outcomes") - .HasForeignKey("UncertaintyId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Project"); - - b.Navigation("Uncertainty"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => - { - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.ProjectRole", b => - { - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("ProjectRoles") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "User") - .WithMany("ProjectRoles") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("Project"); - - b.Navigation("UpdatedBy"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => - { - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("Strategies") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("Project"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.StrategyOption", b => - { - b.HasOne("PrismaApi.Domain.Entities.Option", "Option") - .WithMany("StrategyOptions") - .HasForeignKey("OptionId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Strategy", "Strategy") - .WithMany("StrategyOptions") - .HasForeignKey("StrategyId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Option"); - - b.Navigation("Strategy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => - { - b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") - .WithOne("Uncertainty") - .HasForeignKey("PrismaApi.Domain.Entities.Uncertainty", "IssueId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("Issue"); - - b.Navigation("Project"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => - { - b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") - .WithOne("Utility") - .HasForeignKey("PrismaApi.Domain.Entities.Utility", "IssueId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("Issue"); - - b.Navigation("Project"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Assessment", b => - { - b.Navigation("DecisionQualityAssessments"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Decision", b => - { - b.Navigation("Options"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbability", b => - { - b.Navigation("ParentOptions"); - - b.Navigation("ParentOutcomes"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => - { - b.Navigation("ParentOptions"); - - b.Navigation("ParentOutcomes"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => - { - b.Navigation("Decision"); - - b.Navigation("Node"); - - b.Navigation("Uncertainty"); - - b.Navigation("Utility"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => - { - b.Navigation("HeadEdges"); - - b.Navigation("NodeStyle"); - - b.Navigation("TailEdges"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => - { - b.Navigation("StrategyOptions"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => - { - b.Navigation("Assessments"); - - b.Navigation("BoardNodes"); - - b.Navigation("Edges"); - - b.Navigation("Issues"); - - b.Navigation("Nodes"); - - b.Navigation("Objectives"); - - b.Navigation("ProjectRoles"); - - b.Navigation("Strategies"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => - { - b.Navigation("StrategyOptions"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => - { - b.Navigation("DiscreteProbabilities"); - - b.Navigation("Outcomes"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.User", b => - { - b.Navigation("ProjectRoles"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => - { - b.Navigation("DiscreteUtilities"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/PrismaDotnetApi/SqlServerMigrations/20260608114526_AddDeletedUser.cs b/PrismaDotnetApi/SqlServerMigrations/20260608114526_AddDeletedUser.cs deleted file mode 100644 index 95eeeb4..0000000 --- a/PrismaDotnetApi/SqlServerMigrations/20260608114526_AddDeletedUser.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace PrismaApi.Infrastructure.Migrations -{ - /// - public partial class AddDeletedUser : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.InsertData( - table: "Users", - columns: new[] { "Id", "CreatedAt", "Name", "UpdatedAt" }, - values: new object[] { "d008bfdf-fe89-48f3-80a8-777bba4d9bbf", new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), "Deleted User", new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DeleteData( - table: "Users", - keyColumn: "Id", - keyValue: "d008bfdf-fe89-48f3-80a8-777bba4d9bbf"); - } - } -} diff --git a/PrismaDotnetApi/SqlServerMigrations/AppDbContextModelSnapshot.cs b/PrismaDotnetApi/SqlServerMigrations/AppDbContextModelSnapshot.cs index c2c052b..1a9083b 100644 --- a/PrismaDotnetApi/SqlServerMigrations/AppDbContextModelSnapshot.cs +++ b/PrismaDotnetApi/SqlServerMigrations/AppDbContextModelSnapshot.cs @@ -1023,15 +1023,6 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasKey("Id"); b.ToTable("Users"); - - b.HasData( - new - { - Id = "d008bfdf-fe89-48f3-80a8-777bba4d9bbf", - CreatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), - Name = "Deleted User", - UpdatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) - }); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => diff --git a/PrismaDotnetApi/SqliteMigrations/20260608114505_AddDeletedUser.Designer.cs b/PrismaDotnetApi/SqliteMigrations/20260608114505_AddDeletedUser.Designer.cs deleted file mode 100644 index edb69bb..0000000 --- a/PrismaDotnetApi/SqliteMigrations/20260608114505_AddDeletedUser.Designer.cs +++ /dev/null @@ -1,1552 +0,0 @@ -// -using System; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using PrismaApi.Infrastructure.Context; - -#nullable disable - -namespace PrismaApi.Infrastructure.Migrations -{ - [DbContext(typeof(AppDbContext))] - [Migration("20260608114505_AddDeletedUser")] - partial class AddDeletedUser - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder.HasAnnotation("ProductVersion", "9.0.13"); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Assessment", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("IsCompleted") - .HasColumnType("INTEGER"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Assessments", (string)null); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.BoardNode", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("Color") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Data") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Height") - .HasColumnType("REAL"); - - b.Property("Opacity") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER") - .HasDefaultValue(100); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("Rotation") - .HasColumnType("REAL"); - - b.Property("StrokeStyle") - .IsRequired() - .ValueGeneratedOnAdd() - .HasColumnType("TEXT") - .HasDefaultValue("Solid"); - - b.Property("StrokeWidth") - .ValueGeneratedOnAdd() - .HasColumnType("REAL") - .HasDefaultValue(8f); - - b.Property("TextSize") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER") - .HasDefaultValue(24); - - b.Property("Type") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Width") - .HasColumnType("REAL"); - - b.Property("XPosition") - .HasColumnType("REAL"); - - b.Property("YPosition") - .HasColumnType("REAL"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("BoardNode", (string)null); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Decision", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("IssueId") - .HasColumnType("TEXT"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("Type") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("IssueId") - .IsUnique(); - - b.HasIndex("ProjectId"); - - b.ToTable("Decisions"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DecisionQualityAssessment", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("AppropriateFrame") - .HasColumnType("INTEGER"); - - b.Property("AssessmentId") - .HasColumnType("TEXT"); - - b.Property("Comment") - .IsRequired() - .HasMaxLength(6000) - .HasColumnType("TEXT"); - - b.Property("CommitmentToAction") - .HasColumnType("INTEGER"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("DoableAlternatives") - .HasColumnType("INTEGER"); - - b.Property("InformationReliability") - .HasColumnType("INTEGER"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("ReasoningCorrectness") - .HasColumnType("INTEGER"); - - b.Property("TradeOffAnalysis") - .HasColumnType("INTEGER"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("AssessmentId"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("DecisionQualityAssessments", (string)null); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbability", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("OutcomeId") - .HasColumnType("TEXT"); - - b.Property("Probability") - .HasPrecision(53) - .HasColumnType("REAL"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("UncertaintyId") - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("OutcomeId"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UncertaintyId"); - - b.ToTable("DiscreteProbabilities"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOption", b => - { - b.Property("DiscreteProbabilityId") - .HasColumnType("TEXT"); - - b.Property("ParentOptionId") - .HasColumnType("TEXT"); - - b.HasKey("DiscreteProbabilityId", "ParentOptionId"); - - b.HasIndex("ParentOptionId"); - - b.ToTable("DiscreteProbabilityParentOptions"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOutcome", b => - { - b.Property("DiscreteProbabilityId") - .HasColumnType("TEXT"); - - b.Property("ParentOutcomeId") - .HasColumnType("TEXT"); - - b.HasKey("DiscreteProbabilityId", "ParentOutcomeId"); - - b.HasIndex("ParentOutcomeId"); - - b.ToTable("DiscreteProbabilityParentOutcomes"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.Property("UtilityId") - .HasColumnType("TEXT"); - - b.Property("UtilityValue") - .HasPrecision(53) - .HasColumnType("REAL"); - - b.Property("ValueMetricId") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UtilityId"); - - b.HasIndex("ValueMetricId"); - - b.ToTable("DiscreteUtilities"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOption", b => - { - b.Property("DiscreteUtilityId") - .HasColumnType("TEXT"); - - b.Property("ParentOptionId") - .HasColumnType("TEXT"); - - b.HasKey("DiscreteUtilityId", "ParentOptionId"); - - b.HasIndex("ParentOptionId"); - - b.ToTable("DiscreteUtilityParentOptions"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOutcome", b => - { - b.Property("DiscreteUtilityId") - .HasColumnType("TEXT"); - - b.Property("ParentOutcomeId") - .HasColumnType("TEXT"); - - b.HasKey("DiscreteUtilityId", "ParentOutcomeId"); - - b.HasIndex("ParentOutcomeId"); - - b.ToTable("DiscreteUtilityParentOutcomes"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Edge", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("HeadId") - .HasColumnType("TEXT"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("TailId") - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("HeadId"); - - b.HasIndex("ProjectId"); - - b.HasIndex("TailId"); - - b.ToTable("Edges"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("Boundary") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Description") - .IsRequired() - .HasMaxLength(6000) - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("Order") - .HasColumnType("INTEGER"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("Type") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Issues"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("IssueId") - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("IssueId") - .IsUnique(); - - b.HasIndex("ProjectId"); - - b.ToTable("Nodes"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.NodeStyle", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("NodeId") - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.Property("XPosition") - .HasColumnType("REAL"); - - b.Property("YPosition") - .HasColumnType("REAL"); - - b.HasKey("Id"); - - b.HasIndex("NodeId") - .IsUnique(); - - b.ToTable("NodeStyles"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Objective", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Description") - .IsRequired() - .HasMaxLength(6000) - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("Type") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Objectives"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("DecisionId") - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.Property("Utility") - .HasColumnType("REAL"); - - b.HasKey("Id"); - - b.HasIndex("DecisionId"); - - b.HasIndex("ProjectId"); - - b.ToTable("Options"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Outcome", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("UncertaintyId") - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.Property("Utility") - .HasColumnType("REAL"); - - b.HasKey("Id"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UncertaintyId"); - - b.ToTable("Outcomes"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("EndDate") - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("OpportunityStatement") - .IsRequired() - .HasMaxLength(6000) - .HasColumnType("TEXT"); - - b.Property("ParentProjectId") - .HasColumnType("TEXT"); - - b.Property("ParentProjectName") - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("Public") - .HasColumnType("INTEGER"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Projects"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.ProjectRole", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("Role") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("UserId") - .IsRequired() - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UpdatedById"); - - b.HasIndex("UserId"); - - b.ToTable("ProjectRoles"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Description") - .IsRequired() - .HasMaxLength(6000) - .HasColumnType("TEXT"); - - b.Property("Icon") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("IconColor") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("Rationale") - .IsRequired() - .HasMaxLength(6000) - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Strategies"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.StrategyOption", b => - { - b.Property("StrategyId") - .HasColumnType("TEXT"); - - b.Property("OptionId") - .HasColumnType("TEXT"); - - b.HasKey("StrategyId", "OptionId"); - - b.HasIndex("OptionId"); - - b.ToTable("StrategyOptions"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("IsKey") - .HasColumnType("INTEGER"); - - b.Property("IssueId") - .HasColumnType("TEXT"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("IssueId") - .IsUnique(); - - b.HasIndex("ProjectId"); - - b.ToTable("Uncertainties"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.User", b => - { - b.Property("Id") - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.ToTable("Users"); - - b.HasData( - new - { - Id = "d008bfdf-fe89-48f3-80a8-777bba4d9bbf", - CreatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), - Name = "Deleted User", - UpdatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) - }); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("IssueId") - .HasColumnType("TEXT"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("IssueId") - .IsUnique(); - - b.HasIndex("ProjectId"); - - b.ToTable("Utilities"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.ValueMetric", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.ToTable("ValueMetrics"); - - b.HasData( - new - { - Id = new Guid("288e0811-7ab6-5d24-b80c-9fa925b848a6"), - CreatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), - Name = "value", - UpdatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) - }); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Assessment", b => - { - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("Assessments") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("Project"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.BoardNode", b => - { - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("BoardNodes") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("Project"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Decision", b => - { - b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") - .WithOne("Decision") - .HasForeignKey("PrismaApi.Domain.Entities.Decision", "IssueId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("Issue"); - - b.Navigation("Project"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DecisionQualityAssessment", b => - { - b.HasOne("PrismaApi.Domain.Entities.Assessment", "Assessment") - .WithMany("DecisionQualityAssessments") - .HasForeignKey("AssessmentId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("Assessment"); - - b.Navigation("CreatedBy"); - - b.Navigation("Project"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbability", b => - { - b.HasOne("PrismaApi.Domain.Entities.Outcome", "Outcome") - .WithMany() - .HasForeignKey("OutcomeId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Uncertainty", "Uncertainty") - .WithMany("DiscreteProbabilities") - .HasForeignKey("UncertaintyId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("Outcome"); - - b.Navigation("Project"); - - b.Navigation("Uncertainty"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOption", b => - { - b.HasOne("PrismaApi.Domain.Entities.DiscreteProbability", "DiscreteProbability") - .WithMany("ParentOptions") - .HasForeignKey("DiscreteProbabilityId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Option", "ParentOption") - .WithMany() - .HasForeignKey("ParentOptionId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("DiscreteProbability"); - - b.Navigation("ParentOption"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOutcome", b => - { - b.HasOne("PrismaApi.Domain.Entities.DiscreteProbability", "DiscreteProbability") - .WithMany("ParentOutcomes") - .HasForeignKey("DiscreteProbabilityId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Outcome", "ParentOutcome") - .WithMany() - .HasForeignKey("ParentOutcomeId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("DiscreteProbability"); - - b.Navigation("ParentOutcome"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => - { - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Utility", "Utility") - .WithMany("DiscreteUtilities") - .HasForeignKey("UtilityId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.ValueMetric", "ValueMetric") - .WithMany() - .HasForeignKey("ValueMetricId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Project"); - - b.Navigation("Utility"); - - b.Navigation("ValueMetric"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOption", b => - { - b.HasOne("PrismaApi.Domain.Entities.DiscreteUtility", "DiscreteUtility") - .WithMany("ParentOptions") - .HasForeignKey("DiscreteUtilityId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Option", "ParentOption") - .WithMany() - .HasForeignKey("ParentOptionId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("DiscreteUtility"); - - b.Navigation("ParentOption"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOutcome", b => - { - b.HasOne("PrismaApi.Domain.Entities.DiscreteUtility", "DiscreteUtility") - .WithMany("ParentOutcomes") - .HasForeignKey("DiscreteUtilityId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Outcome", "ParentOutcome") - .WithMany() - .HasForeignKey("ParentOutcomeId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("DiscreteUtility"); - - b.Navigation("ParentOutcome"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Edge", b => - { - b.HasOne("PrismaApi.Domain.Entities.Node", "HeadNode") - .WithMany("HeadEdges") - .HasForeignKey("HeadId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("Edges") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Node", "TailNode") - .WithMany("TailEdges") - .HasForeignKey("TailId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("HeadNode"); - - b.Navigation("Project"); - - b.Navigation("TailNode"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => - { - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("Issues") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("Project"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => - { - b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") - .WithOne("Node") - .HasForeignKey("PrismaApi.Domain.Entities.Node", "IssueId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("Nodes") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("Issue"); - - b.Navigation("Project"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.NodeStyle", b => - { - b.HasOne("PrismaApi.Domain.Entities.Node", "Node") - .WithOne("NodeStyle") - .HasForeignKey("PrismaApi.Domain.Entities.NodeStyle", "NodeId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Node"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Objective", b => - { - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("Objectives") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("Project"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => - { - b.HasOne("PrismaApi.Domain.Entities.Decision", "Decision") - .WithMany("Options") - .HasForeignKey("DecisionId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("Decision"); - - b.Navigation("Project"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Outcome", b => - { - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Uncertainty", "Uncertainty") - .WithMany("Outcomes") - .HasForeignKey("UncertaintyId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Project"); - - b.Navigation("Uncertainty"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => - { - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.ProjectRole", b => - { - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("ProjectRoles") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "User") - .WithMany("ProjectRoles") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("Project"); - - b.Navigation("UpdatedBy"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => - { - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("Strategies") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("Project"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.StrategyOption", b => - { - b.HasOne("PrismaApi.Domain.Entities.Option", "Option") - .WithMany("StrategyOptions") - .HasForeignKey("OptionId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Strategy", "Strategy") - .WithMany("StrategyOptions") - .HasForeignKey("StrategyId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Option"); - - b.Navigation("Strategy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => - { - b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") - .WithOne("Uncertainty") - .HasForeignKey("PrismaApi.Domain.Entities.Uncertainty", "IssueId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("Issue"); - - b.Navigation("Project"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => - { - b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") - .WithOne("Utility") - .HasForeignKey("PrismaApi.Domain.Entities.Utility", "IssueId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("Issue"); - - b.Navigation("Project"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Assessment", b => - { - b.Navigation("DecisionQualityAssessments"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Decision", b => - { - b.Navigation("Options"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbability", b => - { - b.Navigation("ParentOptions"); - - b.Navigation("ParentOutcomes"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => - { - b.Navigation("ParentOptions"); - - b.Navigation("ParentOutcomes"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => - { - b.Navigation("Decision"); - - b.Navigation("Node"); - - b.Navigation("Uncertainty"); - - b.Navigation("Utility"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => - { - b.Navigation("HeadEdges"); - - b.Navigation("NodeStyle"); - - b.Navigation("TailEdges"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => - { - b.Navigation("StrategyOptions"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => - { - b.Navigation("Assessments"); - - b.Navigation("BoardNodes"); - - b.Navigation("Edges"); - - b.Navigation("Issues"); - - b.Navigation("Nodes"); - - b.Navigation("Objectives"); - - b.Navigation("ProjectRoles"); - - b.Navigation("Strategies"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => - { - b.Navigation("StrategyOptions"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => - { - b.Navigation("DiscreteProbabilities"); - - b.Navigation("Outcomes"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.User", b => - { - b.Navigation("ProjectRoles"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => - { - b.Navigation("DiscreteUtilities"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/PrismaDotnetApi/SqliteMigrations/20260608114505_AddDeletedUser.cs b/PrismaDotnetApi/SqliteMigrations/20260608114505_AddDeletedUser.cs deleted file mode 100644 index 95eeeb4..0000000 --- a/PrismaDotnetApi/SqliteMigrations/20260608114505_AddDeletedUser.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace PrismaApi.Infrastructure.Migrations -{ - /// - public partial class AddDeletedUser : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.InsertData( - table: "Users", - columns: new[] { "Id", "CreatedAt", "Name", "UpdatedAt" }, - values: new object[] { "d008bfdf-fe89-48f3-80a8-777bba4d9bbf", new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), "Deleted User", new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DeleteData( - table: "Users", - keyColumn: "Id", - keyValue: "d008bfdf-fe89-48f3-80a8-777bba4d9bbf"); - } - } -} diff --git a/PrismaDotnetApi/SqliteMigrations/AppDbContextModelSnapshot.cs b/PrismaDotnetApi/SqliteMigrations/AppDbContextModelSnapshot.cs index 1989b7c..032a4fd 100644 --- a/PrismaDotnetApi/SqliteMigrations/AppDbContextModelSnapshot.cs +++ b/PrismaDotnetApi/SqliteMigrations/AppDbContextModelSnapshot.cs @@ -1018,15 +1018,6 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasKey("Id"); b.ToTable("Users"); - - b.HasData( - new - { - Id = "d008bfdf-fe89-48f3-80a8-777bba4d9bbf", - CreatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), - Name = "Deleted User", - UpdatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) - }); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => From 6decc7d8a14f58804dfb7720ce9d6fdcd581c35e Mon Sep 17 00:00:00 2001 From: EinarSalbouvet Date: Wed, 15 Jul 2026 14:12:59 +0200 Subject: [PATCH 11/17] Add migration to insert a "Deleted User" record in the Users table - Created a new migration file to add a user with the name "Deleted User" and specific timestamps. - Updated the AppDbContextModelSnapshot to include the new user data for seeding. --- .../Repositories/UserRepository.cs | 49 +- .../Context/AppDbContext.cs | 2 +- .../Context/AppDbContextFactory.cs | 3 +- .../20260715095316_AddDeletedUser.Designer.cs | 1759 +++++++++++++++++ .../20260715095316_AddDeletedUser.cs | 29 + .../AppDbContextModelSnapshot.cs | 9 + .../20260715095307_AddDeletedUser.Designer.cs | 1754 ++++++++++++++++ .../20260715095307_AddDeletedUser.cs | 29 + .../AppDbContextModelSnapshot.cs | 9 + 9 files changed, 3610 insertions(+), 33 deletions(-) create mode 100644 PrismaDotnetApi/SqlServerMigrations/20260715095316_AddDeletedUser.Designer.cs create mode 100644 PrismaDotnetApi/SqlServerMigrations/20260715095316_AddDeletedUser.cs create mode 100644 PrismaDotnetApi/SqliteMigrations/20260715095307_AddDeletedUser.Designer.cs create mode 100644 PrismaDotnetApi/SqliteMigrations/20260715095307_AddDeletedUser.cs diff --git a/PrismaDotnetApi/PrismaApi.Application/Repositories/UserRepository.cs b/PrismaDotnetApi/PrismaApi.Application/Repositories/UserRepository.cs index c2bab3c..5cb1a0a 100644 --- a/PrismaDotnetApi/PrismaApi.Application/Repositories/UserRepository.cs +++ b/PrismaDotnetApi/PrismaApi.Application/Repositories/UserRepository.cs @@ -82,6 +82,12 @@ public async Task GetOrAddByUserNameAsync(UserIncomingDto dto, Cancellatio return user; } + /// + /// Deletes users by their ids. + /// Before deleting, it updates all auditable entities that reference the user to point to the deleted user entry. + /// This is done to avoid foreign key constraint violations when deleting a user. + /// Also, deletes all related project roles for the user + /// public override async Task DeleteByIdsAsync(IEnumerable ids, Expression>? filterPredicate = null, CancellationToken ct = default) { var entries = await DbContext.Users @@ -103,44 +109,27 @@ public override async Task DeleteByIdsAsync(IEnumerable ids, Expression< }).ToArray(); var inClause = string.Join(",", idParams.Select(p => p.ParameterName)); + // get all auditable entity types that need the user id updated to the deleted user id. + // This is done to avoid foreign key constraint violations when deleting a user. var auditableEntityTypes = DbContext.Model.GetEntityTypes() .Where(t => typeof(AuditableEntity).IsAssignableFrom(t.ClrType) && !t.ClrType.IsAbstract); foreach (var entityType in auditableEntityTypes) { var tableName = entityType.GetTableName(); - try - { - await DbContext.Database.ExecuteSqlRawAsync($""" - UPDATE [{tableName}] - SET CreatedById = '{DomainConstants.DeletedUserId}' - WHERE CreatedById IN ({inClause}); - UPDATE [{tableName}] - SET UpdatedById = '{DomainConstants.DeletedUserId}' - WHERE UpdatedById IN ({inClause}); - """, [.. idParams.Concat(idParams).Cast()], ct); - } - catch (Exception e) - { - - throw e; - } + // using raw SQL over the parameterized ExecuteSqlAsync due to issues with the in clause. + // ExecuteSqlAsync protects against SQL injection, + // but all inputed data are controlled by the api and takes no user input. + await DbContext.Database.ExecuteSqlRawAsync($""" + UPDATE [{tableName}] + SET CreatedById = '{DomainConstants.DeletedUserId}' + WHERE CreatedById IN ({inClause}); + UPDATE [{tableName}] + SET UpdatedById = '{DomainConstants.DeletedUserId}' + WHERE UpdatedById IN ({inClause}); + """, [.. idParams.Concat(idParams).Cast()], ct); } - // var auditableEntitiesToUpdate = DbContext. - - // foreach (var auditableEntity in auditableEntitiesToUpdate) - // { - // if (ids.Contains(auditableEntity.UpdatedById)) - // { - // auditableEntity.UpdatedById = DomainConstants.DeletedUserId; - // } - - // if (ids.Contains(auditableEntity.CreatedById)) - // { - // auditableEntity.CreatedById = DomainConstants.DeletedUserId; - // } - // } // delete project roles var projectRoles = await DbContext.ProjectRoles diff --git a/PrismaDotnetApi/PrismaApi.Infrastructure/Context/AppDbContext.cs b/PrismaDotnetApi/PrismaApi.Infrastructure/Context/AppDbContext.cs index 01ce4a0..bcecfe0 100644 --- a/PrismaDotnetApi/PrismaApi.Infrastructure/Context/AppDbContext.cs +++ b/PrismaDotnetApi/PrismaApi.Infrastructure/Context/AppDbContext.cs @@ -167,7 +167,7 @@ private async Task EnforceMinimumProjectRoles(CancellationToken cancellationToke var currentFacilitatorCount = await ProjectRoles .AsNoTracking() .CountAsync(r => r.ProjectId == projectId && - r.Role.IsFacilitator(), + r.Role.ToLower() == ProjectRoleType.Facilitator.ToString().ToLower(), cancellationToken); if (currentFacilitatorCount - facilitatorsBeingRemoved <= 0) diff --git a/PrismaDotnetApi/PrismaApi.Infrastructure/Context/AppDbContextFactory.cs b/PrismaDotnetApi/PrismaApi.Infrastructure/Context/AppDbContextFactory.cs index 85de9c1..a037f53 100644 --- a/PrismaDotnetApi/PrismaApi.Infrastructure/Context/AppDbContextFactory.cs +++ b/PrismaDotnetApi/PrismaApi.Infrastructure/Context/AppDbContextFactory.cs @@ -9,8 +9,7 @@ public class AppDbContextFactory : IDesignTimeDbContextFactory { public AppDbContext CreateDbContext(string[] args) { - // var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); - var environment = "Local"; + var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); IConfigurationBuilder configurationBuilder = new ConfigurationBuilder(); var apiPath = Path.Combine( diff --git a/PrismaDotnetApi/SqlServerMigrations/20260715095316_AddDeletedUser.Designer.cs b/PrismaDotnetApi/SqlServerMigrations/20260715095316_AddDeletedUser.Designer.cs new file mode 100644 index 0000000..c1c58f4 --- /dev/null +++ b/PrismaDotnetApi/SqlServerMigrations/20260715095316_AddDeletedUser.Designer.cs @@ -0,0 +1,1759 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using PrismaApi.Infrastructure.Context; + +#nullable disable + +namespace PrismaApi.Infrastructure.Migrations +{ + [DbContext(typeof(AppDbContext))] + [Migration("20260715095316_AddDeletedUser")] + partial class AddDeletedUser + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "9.0.13") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Assessment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("IsCompleted") + .HasColumnType("bit"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Assessments", (string)null); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.BoardNode", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Color") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Data") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Height") + .HasColumnType("float"); + + b.Property("Opacity") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasDefaultValue(100); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("Rotation") + .HasColumnType("float"); + + b.Property("StrokeStyle") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("nvarchar(max)") + .HasDefaultValue("Solid"); + + b.Property("StrokeWidth") + .ValueGeneratedOnAdd() + .HasColumnType("real") + .HasDefaultValue(8f); + + b.Property("TextSize") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasDefaultValue(24); + + b.Property("Type") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Width") + .HasColumnType("float"); + + b.Property("XPosition") + .HasColumnType("float"); + + b.Property("YPosition") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("BoardNode", (string)null); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Decision", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("IssueId") + .HasColumnType("uniqueidentifier"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.HasKey("Id"); + + b.HasIndex("IssueId") + .IsUnique(); + + b.HasIndex("ProjectId"); + + b.ToTable("Decisions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DecisionQualityAssessment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AppropriateFrame") + .HasColumnType("int"); + + b.Property("AssessmentId") + .HasColumnType("uniqueidentifier"); + + b.Property("Comment") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("nvarchar(max)"); + + b.Property("CommitmentToAction") + .HasColumnType("int"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("DoableAlternatives") + .HasColumnType("int"); + + b.Property("InformationReliability") + .HasColumnType("int"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("ReasoningCorrectness") + .HasColumnType("int"); + + b.Property("TradeOffAnalysis") + .HasColumnType("int"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("AssessmentId"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("DecisionQualityAssessments", (string)null); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbability", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("OutcomeId") + .HasColumnType("uniqueidentifier"); + + b.Property("Probability") + .HasPrecision(53) + .HasColumnType("float(53)"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("UncertaintyId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.HasKey("Id"); + + b.HasIndex("OutcomeId"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UncertaintyId"); + + b.ToTable("DiscreteProbabilities"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOption", b => + { + b.Property("DiscreteProbabilityId") + .HasColumnType("uniqueidentifier"); + + b.Property("ParentOptionId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("DiscreteProbabilityId", "ParentOptionId"); + + b.HasIndex("ParentOptionId"); + + b.ToTable("DiscreteProbabilityParentOptions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOutcome", b => + { + b.Property("DiscreteProbabilityId") + .HasColumnType("uniqueidentifier"); + + b.Property("ParentOutcomeId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("DiscreteProbabilityId", "ParentOutcomeId"); + + b.HasIndex("ParentOutcomeId"); + + b.ToTable("DiscreteProbabilityParentOutcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("UtilityId") + .HasColumnType("uniqueidentifier"); + + b.Property("UtilityValue") + .HasPrecision(53) + .HasColumnType("float(53)"); + + b.Property("ValueMetricId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UtilityId"); + + b.HasIndex("ValueMetricId"); + + b.ToTable("DiscreteUtilities"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOption", b => + { + b.Property("DiscreteUtilityId") + .HasColumnType("uniqueidentifier"); + + b.Property("ParentOptionId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("DiscreteUtilityId", "ParentOptionId"); + + b.HasIndex("ParentOptionId"); + + b.ToTable("DiscreteUtilityParentOptions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOutcome", b => + { + b.Property("DiscreteUtilityId") + .HasColumnType("uniqueidentifier"); + + b.Property("ParentOutcomeId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("DiscreteUtilityId", "ParentOutcomeId"); + + b.HasIndex("ParentOutcomeId"); + + b.ToTable("DiscreteUtilityParentOutcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Edge", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("HeadId") + .HasColumnType("uniqueidentifier"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("TailId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.HasKey("Id"); + + b.HasIndex("HeadId"); + + b.HasIndex("ProjectId"); + + b.HasIndex("TailId"); + + b.ToTable("Edges"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Boundary") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("Order") + .HasColumnType("int"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Issues"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("IssueId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.HasKey("Id"); + + b.HasIndex("IssueId") + .IsUnique(); + + b.HasIndex("ProjectId"); + + b.ToTable("Nodes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.NodeStyle", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("NodeId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("XPosition") + .HasColumnType("float"); + + b.Property("YPosition") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.HasIndex("NodeId") + .IsUnique(); + + b.ToTable("NodeStyles"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Objective", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Objectives"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("DecisionId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Utility") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.HasIndex("DecisionId"); + + b.HasIndex("ProjectId"); + + b.ToTable("Options"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Outcome", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("UncertaintyId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Utility") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UncertaintyId"); + + b.ToTable("Outcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("EndDate") + .HasColumnType("datetimeoffset"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("OpportunityStatement") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("nvarchar(max)"); + + b.Property("ParentProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("ParentProjectName") + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("Public") + .HasColumnType("bit"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Projects"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.ProjectRole", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("Role") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.HasIndex("UserId"); + + b.ToTable("ProjectRoles"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionEntry", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ChildOptionId") + .HasColumnType("uniqueidentifier"); + + b.Property("ChildOutcomeId") + .HasColumnType("uniqueidentifier"); + + b.Property("ChildStateId") + .ValueGeneratedOnAddOrUpdate() + .HasColumnType("uniqueidentifier") + .HasComputedColumnSql("COALESCE([ChildOptionId], [ChildOutcomeId])", true); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("ParentOptionId") + .HasColumnType("uniqueidentifier"); + + b.Property("ParentOutcomeId") + .HasColumnType("uniqueidentifier"); + + b.Property("ParentStateId") + .ValueGeneratedOnAddOrUpdate() + .HasColumnType("uniqueidentifier") + .HasComputedColumnSql("COALESCE([ParentOptionId], [ParentOutcomeId])", true); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("RestrictionTableId") + .HasColumnType("uniqueidentifier"); + + b.Property("RestrictionValue") + .ValueGeneratedOnAdd() + .HasPrecision(53) + .HasColumnType("float(53)") + .HasDefaultValue(1.0); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.HasKey("Id"); + + b.HasIndex("ChildOptionId"); + + b.HasIndex("ChildOutcomeId"); + + b.HasIndex("ParentOptionId"); + + b.HasIndex("ParentOutcomeId"); + + b.HasIndex("ProjectId"); + + b.HasIndex("RestrictionTableId"); + + b.HasIndex("ParentStateId", "ChildStateId", "RestrictionTableId") + .IsUnique(); + + b.ToTable("RestrictionEntries", t => + { + t.HasCheckConstraint("CK_RestrictionEntry_Child", "([ChildOptionId] IS NULL AND [ChildOutcomeId] IS NOT NULL) OR ([ChildOptionId] IS NOT NULL AND [ChildOutcomeId] IS NULL)"); + + t.HasCheckConstraint("CK_RestrictionEntry_Parent", "([ParentOptionId] IS NULL AND [ParentOutcomeId] IS NOT NULL) OR ([ParentOptionId] IS NOT NULL AND [ParentOutcomeId] IS NULL)"); + }); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionTable", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("EdgeId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("EdgeId") + .IsUnique(); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("RestrictionTables"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("nvarchar(max)"); + + b.Property("Icon") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("IconColor") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("Rationale") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("nvarchar(max)"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Strategies"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.StrategyOption", b => + { + b.Property("StrategyId") + .HasColumnType("uniqueidentifier"); + + b.Property("OptionId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("StrategyId", "OptionId"); + + b.HasIndex("OptionId"); + + b.ToTable("StrategyOptions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("IsKey") + .HasColumnType("bit"); + + b.Property("IssueId") + .HasColumnType("uniqueidentifier"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.HasKey("Id"); + + b.HasIndex("IssueId") + .IsUnique(); + + b.HasIndex("ProjectId"); + + b.ToTable("Uncertainties"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.User", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.HasKey("Id"); + + b.ToTable("Users"); + + b.HasData( + new + { + Id = "d008bfdf-fe89-48f3-80a8-777bba4d9bbf", + CreatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), + Name = "Deleted User", + UpdatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) + }); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("IssueId") + .HasColumnType("uniqueidentifier"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.HasKey("Id"); + + b.HasIndex("IssueId") + .IsUnique(); + + b.HasIndex("ProjectId"); + + b.ToTable("Utilities"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.ValueMetric", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.HasKey("Id"); + + b.ToTable("ValueMetrics"); + + b.HasData( + new + { + Id = new Guid("288e0811-7ab6-5d24-b80c-9fa925b848a6"), + CreatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), + Name = "value", + UpdatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) + }); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Assessment", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Assessments") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.BoardNode", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("BoardNodes") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Decision", b => + { + b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") + .WithOne("Decision") + .HasForeignKey("PrismaApi.Domain.Entities.Decision", "IssueId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Issue"); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DecisionQualityAssessment", b => + { + b.HasOne("PrismaApi.Domain.Entities.Assessment", "Assessment") + .WithMany("DecisionQualityAssessments") + .HasForeignKey("AssessmentId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("Assessment"); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbability", b => + { + b.HasOne("PrismaApi.Domain.Entities.Outcome", "Outcome") + .WithMany() + .HasForeignKey("OutcomeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Uncertainty", "Uncertainty") + .WithMany("DiscreteProbabilities") + .HasForeignKey("UncertaintyId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Outcome"); + + b.Navigation("Project"); + + b.Navigation("Uncertainty"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOption", b => + { + b.HasOne("PrismaApi.Domain.Entities.DiscreteProbability", "DiscreteProbability") + .WithMany("ParentOptions") + .HasForeignKey("DiscreteProbabilityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Option", "ParentOption") + .WithMany() + .HasForeignKey("ParentOptionId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("DiscreteProbability"); + + b.Navigation("ParentOption"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOutcome", b => + { + b.HasOne("PrismaApi.Domain.Entities.DiscreteProbability", "DiscreteProbability") + .WithMany("ParentOutcomes") + .HasForeignKey("DiscreteProbabilityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Outcome", "ParentOutcome") + .WithMany() + .HasForeignKey("ParentOutcomeId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("DiscreteProbability"); + + b.Navigation("ParentOutcome"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => + { + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Utility", "Utility") + .WithMany("DiscreteUtilities") + .HasForeignKey("UtilityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.ValueMetric", "ValueMetric") + .WithMany() + .HasForeignKey("ValueMetricId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Project"); + + b.Navigation("Utility"); + + b.Navigation("ValueMetric"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOption", b => + { + b.HasOne("PrismaApi.Domain.Entities.DiscreteUtility", "DiscreteUtility") + .WithMany("ParentOptions") + .HasForeignKey("DiscreteUtilityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Option", "ParentOption") + .WithMany() + .HasForeignKey("ParentOptionId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("DiscreteUtility"); + + b.Navigation("ParentOption"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOutcome", b => + { + b.HasOne("PrismaApi.Domain.Entities.DiscreteUtility", "DiscreteUtility") + .WithMany("ParentOutcomes") + .HasForeignKey("DiscreteUtilityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Outcome", "ParentOutcome") + .WithMany() + .HasForeignKey("ParentOutcomeId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("DiscreteUtility"); + + b.Navigation("ParentOutcome"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Edge", b => + { + b.HasOne("PrismaApi.Domain.Entities.Node", "HeadNode") + .WithMany("HeadEdges") + .HasForeignKey("HeadId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Edges") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Node", "TailNode") + .WithMany("TailEdges") + .HasForeignKey("TailId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("HeadNode"); + + b.Navigation("Project"); + + b.Navigation("TailNode"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Issues") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => + { + b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") + .WithOne("Node") + .HasForeignKey("PrismaApi.Domain.Entities.Node", "IssueId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Nodes") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Issue"); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.NodeStyle", b => + { + b.HasOne("PrismaApi.Domain.Entities.Node", "Node") + .WithOne("NodeStyle") + .HasForeignKey("PrismaApi.Domain.Entities.NodeStyle", "NodeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Node"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Objective", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Objectives") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => + { + b.HasOne("PrismaApi.Domain.Entities.Decision", "Decision") + .WithMany("Options") + .HasForeignKey("DecisionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Decision"); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Outcome", b => + { + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Uncertainty", "Uncertainty") + .WithMany("Outcomes") + .HasForeignKey("UncertaintyId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Project"); + + b.Navigation("Uncertainty"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.ProjectRole", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("ProjectRoles") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "User") + .WithMany("ProjectRoles") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionEntry", b => + { + b.HasOne("PrismaApi.Domain.Entities.Option", "ChildOption") + .WithMany() + .HasForeignKey("ChildOptionId") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("PrismaApi.Domain.Entities.Outcome", "ChildOutcome") + .WithMany() + .HasForeignKey("ChildOutcomeId") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("PrismaApi.Domain.Entities.Option", "ParentOption") + .WithMany() + .HasForeignKey("ParentOptionId") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("PrismaApi.Domain.Entities.Outcome", "ParentOutcome") + .WithMany() + .HasForeignKey("ParentOutcomeId") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.RestrictionTable", "RestrictionTable") + .WithMany("RestrictionEntries") + .HasForeignKey("RestrictionTableId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ChildOption"); + + b.Navigation("ChildOutcome"); + + b.Navigation("ParentOption"); + + b.Navigation("ParentOutcome"); + + b.Navigation("Project"); + + b.Navigation("RestrictionTable"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionTable", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Edge", "Edge") + .WithOne() + .HasForeignKey("PrismaApi.Domain.Entities.RestrictionTable", "EdgeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Edge"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Strategies") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.StrategyOption", b => + { + b.HasOne("PrismaApi.Domain.Entities.Option", "Option") + .WithMany("StrategyOptions") + .HasForeignKey("OptionId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Strategy", "Strategy") + .WithMany("StrategyOptions") + .HasForeignKey("StrategyId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Option"); + + b.Navigation("Strategy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => + { + b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") + .WithOne("Uncertainty") + .HasForeignKey("PrismaApi.Domain.Entities.Uncertainty", "IssueId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Issue"); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => + { + b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") + .WithOne("Utility") + .HasForeignKey("PrismaApi.Domain.Entities.Utility", "IssueId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Issue"); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Assessment", b => + { + b.Navigation("DecisionQualityAssessments"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Decision", b => + { + b.Navigation("Options"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbability", b => + { + b.Navigation("ParentOptions"); + + b.Navigation("ParentOutcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => + { + b.Navigation("ParentOptions"); + + b.Navigation("ParentOutcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => + { + b.Navigation("Decision"); + + b.Navigation("Node"); + + b.Navigation("Uncertainty"); + + b.Navigation("Utility"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => + { + b.Navigation("HeadEdges"); + + b.Navigation("NodeStyle"); + + b.Navigation("TailEdges"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => + { + b.Navigation("StrategyOptions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => + { + b.Navigation("Assessments"); + + b.Navigation("BoardNodes"); + + b.Navigation("Edges"); + + b.Navigation("Issues"); + + b.Navigation("Nodes"); + + b.Navigation("Objectives"); + + b.Navigation("ProjectRoles"); + + b.Navigation("Strategies"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionTable", b => + { + b.Navigation("RestrictionEntries"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => + { + b.Navigation("StrategyOptions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => + { + b.Navigation("DiscreteProbabilities"); + + b.Navigation("Outcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.User", b => + { + b.Navigation("ProjectRoles"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => + { + b.Navigation("DiscreteUtilities"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/PrismaDotnetApi/SqlServerMigrations/20260715095316_AddDeletedUser.cs b/PrismaDotnetApi/SqlServerMigrations/20260715095316_AddDeletedUser.cs new file mode 100644 index 0000000..95eeeb4 --- /dev/null +++ b/PrismaDotnetApi/SqlServerMigrations/20260715095316_AddDeletedUser.cs @@ -0,0 +1,29 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace PrismaApi.Infrastructure.Migrations +{ + /// + public partial class AddDeletedUser : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.InsertData( + table: "Users", + columns: new[] { "Id", "CreatedAt", "Name", "UpdatedAt" }, + values: new object[] { "d008bfdf-fe89-48f3-80a8-777bba4d9bbf", new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), "Deleted User", new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) }); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DeleteData( + table: "Users", + keyColumn: "Id", + keyValue: "d008bfdf-fe89-48f3-80a8-777bba4d9bbf"); + } + } +} diff --git a/PrismaDotnetApi/SqlServerMigrations/AppDbContextModelSnapshot.cs b/PrismaDotnetApi/SqlServerMigrations/AppDbContextModelSnapshot.cs index 1a9083b..c2c052b 100644 --- a/PrismaDotnetApi/SqlServerMigrations/AppDbContextModelSnapshot.cs +++ b/PrismaDotnetApi/SqlServerMigrations/AppDbContextModelSnapshot.cs @@ -1023,6 +1023,15 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasKey("Id"); b.ToTable("Users"); + + b.HasData( + new + { + Id = "d008bfdf-fe89-48f3-80a8-777bba4d9bbf", + CreatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), + Name = "Deleted User", + UpdatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) + }); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => diff --git a/PrismaDotnetApi/SqliteMigrations/20260715095307_AddDeletedUser.Designer.cs b/PrismaDotnetApi/SqliteMigrations/20260715095307_AddDeletedUser.Designer.cs new file mode 100644 index 0000000..346c929 --- /dev/null +++ b/PrismaDotnetApi/SqliteMigrations/20260715095307_AddDeletedUser.Designer.cs @@ -0,0 +1,1754 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using PrismaApi.Infrastructure.Context; + +#nullable disable + +namespace PrismaApi.Infrastructure.Migrations +{ + [DbContext(typeof(AppDbContext))] + [Migration("20260715095307_AddDeletedUser")] + partial class AddDeletedUser + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "9.0.13"); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Assessment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("IsCompleted") + .HasColumnType("INTEGER"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Assessments", (string)null); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.BoardNode", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("Color") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Data") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Height") + .HasColumnType("REAL"); + + b.Property("Opacity") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasDefaultValue(100); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("Rotation") + .HasColumnType("REAL"); + + b.Property("StrokeStyle") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("TEXT") + .HasDefaultValue("Solid"); + + b.Property("StrokeWidth") + .ValueGeneratedOnAdd() + .HasColumnType("REAL") + .HasDefaultValue(8f); + + b.Property("TextSize") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasDefaultValue(24); + + b.Property("Type") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Width") + .HasColumnType("REAL"); + + b.Property("XPosition") + .HasColumnType("REAL"); + + b.Property("YPosition") + .HasColumnType("REAL"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("BoardNode", (string)null); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Decision", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("IssueId") + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("IssueId") + .IsUnique(); + + b.HasIndex("ProjectId"); + + b.ToTable("Decisions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DecisionQualityAssessment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("AppropriateFrame") + .HasColumnType("INTEGER"); + + b.Property("AssessmentId") + .HasColumnType("TEXT"); + + b.Property("Comment") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("TEXT"); + + b.Property("CommitmentToAction") + .HasColumnType("INTEGER"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("DoableAlternatives") + .HasColumnType("INTEGER"); + + b.Property("InformationReliability") + .HasColumnType("INTEGER"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("ReasoningCorrectness") + .HasColumnType("INTEGER"); + + b.Property("TradeOffAnalysis") + .HasColumnType("INTEGER"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("AssessmentId"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("DecisionQualityAssessments", (string)null); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbability", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("OutcomeId") + .HasColumnType("TEXT"); + + b.Property("Probability") + .HasPrecision(53) + .HasColumnType("REAL"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("UncertaintyId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("OutcomeId"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UncertaintyId"); + + b.ToTable("DiscreteProbabilities"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOption", b => + { + b.Property("DiscreteProbabilityId") + .HasColumnType("TEXT"); + + b.Property("ParentOptionId") + .HasColumnType("TEXT"); + + b.HasKey("DiscreteProbabilityId", "ParentOptionId"); + + b.HasIndex("ParentOptionId"); + + b.ToTable("DiscreteProbabilityParentOptions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOutcome", b => + { + b.Property("DiscreteProbabilityId") + .HasColumnType("TEXT"); + + b.Property("ParentOutcomeId") + .HasColumnType("TEXT"); + + b.HasKey("DiscreteProbabilityId", "ParentOutcomeId"); + + b.HasIndex("ParentOutcomeId"); + + b.ToTable("DiscreteProbabilityParentOutcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("UtilityId") + .HasColumnType("TEXT"); + + b.Property("UtilityValue") + .HasPrecision(53) + .HasColumnType("REAL"); + + b.Property("ValueMetricId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UtilityId"); + + b.HasIndex("ValueMetricId"); + + b.ToTable("DiscreteUtilities"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOption", b => + { + b.Property("DiscreteUtilityId") + .HasColumnType("TEXT"); + + b.Property("ParentOptionId") + .HasColumnType("TEXT"); + + b.HasKey("DiscreteUtilityId", "ParentOptionId"); + + b.HasIndex("ParentOptionId"); + + b.ToTable("DiscreteUtilityParentOptions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOutcome", b => + { + b.Property("DiscreteUtilityId") + .HasColumnType("TEXT"); + + b.Property("ParentOutcomeId") + .HasColumnType("TEXT"); + + b.HasKey("DiscreteUtilityId", "ParentOutcomeId"); + + b.HasIndex("ParentOutcomeId"); + + b.ToTable("DiscreteUtilityParentOutcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Edge", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("HeadId") + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("TailId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("HeadId"); + + b.HasIndex("ProjectId"); + + b.HasIndex("TailId"); + + b.ToTable("Edges"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("Boundary") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("Order") + .HasColumnType("INTEGER"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Issues"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("IssueId") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("IssueId") + .IsUnique(); + + b.HasIndex("ProjectId"); + + b.ToTable("Nodes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.NodeStyle", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("NodeId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("XPosition") + .HasColumnType("REAL"); + + b.Property("YPosition") + .HasColumnType("REAL"); + + b.HasKey("Id"); + + b.HasIndex("NodeId") + .IsUnique(); + + b.ToTable("NodeStyles"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Objective", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Objectives"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("DecisionId") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("Utility") + .HasColumnType("REAL"); + + b.HasKey("Id"); + + b.HasIndex("DecisionId"); + + b.HasIndex("ProjectId"); + + b.ToTable("Options"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Outcome", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("UncertaintyId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("Utility") + .HasColumnType("REAL"); + + b.HasKey("Id"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UncertaintyId"); + + b.ToTable("Outcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("EndDate") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("OpportunityStatement") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("TEXT"); + + b.Property("ParentProjectId") + .HasColumnType("TEXT"); + + b.Property("ParentProjectName") + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("Public") + .HasColumnType("INTEGER"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Projects"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.ProjectRole", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("Role") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.HasIndex("UserId"); + + b.ToTable("ProjectRoles"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionEntry", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("ChildOptionId") + .HasColumnType("TEXT"); + + b.Property("ChildOutcomeId") + .HasColumnType("TEXT"); + + b.Property("ChildStateId") + .ValueGeneratedOnAddOrUpdate() + .HasColumnType("TEXT") + .HasComputedColumnSql("COALESCE([ChildOptionId], [ChildOutcomeId])", true); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("ParentOptionId") + .HasColumnType("TEXT"); + + b.Property("ParentOutcomeId") + .HasColumnType("TEXT"); + + b.Property("ParentStateId") + .ValueGeneratedOnAddOrUpdate() + .HasColumnType("TEXT") + .HasComputedColumnSql("COALESCE([ParentOptionId], [ParentOutcomeId])", true); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("RestrictionTableId") + .HasColumnType("TEXT"); + + b.Property("RestrictionValue") + .ValueGeneratedOnAdd() + .HasPrecision(53) + .HasColumnType("REAL") + .HasDefaultValue(1.0); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("ChildOptionId"); + + b.HasIndex("ChildOutcomeId"); + + b.HasIndex("ParentOptionId"); + + b.HasIndex("ParentOutcomeId"); + + b.HasIndex("ProjectId"); + + b.HasIndex("RestrictionTableId"); + + b.HasIndex("ParentStateId", "ChildStateId", "RestrictionTableId") + .IsUnique(); + + b.ToTable("RestrictionEntries", t => + { + t.HasCheckConstraint("CK_RestrictionEntry_Child", "([ChildOptionId] IS NULL AND [ChildOutcomeId] IS NOT NULL) OR ([ChildOptionId] IS NOT NULL AND [ChildOutcomeId] IS NULL)"); + + t.HasCheckConstraint("CK_RestrictionEntry_Parent", "([ParentOptionId] IS NULL AND [ParentOutcomeId] IS NOT NULL) OR ([ParentOptionId] IS NOT NULL AND [ParentOutcomeId] IS NULL)"); + }); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionTable", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("EdgeId") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("EdgeId") + .IsUnique(); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("RestrictionTables"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("TEXT"); + + b.Property("Icon") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("IconColor") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("Rationale") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Strategies"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.StrategyOption", b => + { + b.Property("StrategyId") + .HasColumnType("TEXT"); + + b.Property("OptionId") + .HasColumnType("TEXT"); + + b.HasKey("StrategyId", "OptionId"); + + b.HasIndex("OptionId"); + + b.ToTable("StrategyOptions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("IsKey") + .HasColumnType("INTEGER"); + + b.Property("IssueId") + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("IssueId") + .IsUnique(); + + b.HasIndex("ProjectId"); + + b.ToTable("Uncertainties"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.User", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.ToTable("Users"); + + b.HasData( + new + { + Id = "d008bfdf-fe89-48f3-80a8-777bba4d9bbf", + CreatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), + Name = "Deleted User", + UpdatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) + }); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("IssueId") + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("IssueId") + .IsUnique(); + + b.HasIndex("ProjectId"); + + b.ToTable("Utilities"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.ValueMetric", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.ToTable("ValueMetrics"); + + b.HasData( + new + { + Id = new Guid("288e0811-7ab6-5d24-b80c-9fa925b848a6"), + CreatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), + Name = "value", + UpdatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) + }); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Assessment", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Assessments") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.BoardNode", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("BoardNodes") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Decision", b => + { + b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") + .WithOne("Decision") + .HasForeignKey("PrismaApi.Domain.Entities.Decision", "IssueId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Issue"); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DecisionQualityAssessment", b => + { + b.HasOne("PrismaApi.Domain.Entities.Assessment", "Assessment") + .WithMany("DecisionQualityAssessments") + .HasForeignKey("AssessmentId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("Assessment"); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbability", b => + { + b.HasOne("PrismaApi.Domain.Entities.Outcome", "Outcome") + .WithMany() + .HasForeignKey("OutcomeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Uncertainty", "Uncertainty") + .WithMany("DiscreteProbabilities") + .HasForeignKey("UncertaintyId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Outcome"); + + b.Navigation("Project"); + + b.Navigation("Uncertainty"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOption", b => + { + b.HasOne("PrismaApi.Domain.Entities.DiscreteProbability", "DiscreteProbability") + .WithMany("ParentOptions") + .HasForeignKey("DiscreteProbabilityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Option", "ParentOption") + .WithMany() + .HasForeignKey("ParentOptionId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("DiscreteProbability"); + + b.Navigation("ParentOption"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOutcome", b => + { + b.HasOne("PrismaApi.Domain.Entities.DiscreteProbability", "DiscreteProbability") + .WithMany("ParentOutcomes") + .HasForeignKey("DiscreteProbabilityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Outcome", "ParentOutcome") + .WithMany() + .HasForeignKey("ParentOutcomeId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("DiscreteProbability"); + + b.Navigation("ParentOutcome"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => + { + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Utility", "Utility") + .WithMany("DiscreteUtilities") + .HasForeignKey("UtilityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.ValueMetric", "ValueMetric") + .WithMany() + .HasForeignKey("ValueMetricId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Project"); + + b.Navigation("Utility"); + + b.Navigation("ValueMetric"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOption", b => + { + b.HasOne("PrismaApi.Domain.Entities.DiscreteUtility", "DiscreteUtility") + .WithMany("ParentOptions") + .HasForeignKey("DiscreteUtilityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Option", "ParentOption") + .WithMany() + .HasForeignKey("ParentOptionId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("DiscreteUtility"); + + b.Navigation("ParentOption"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOutcome", b => + { + b.HasOne("PrismaApi.Domain.Entities.DiscreteUtility", "DiscreteUtility") + .WithMany("ParentOutcomes") + .HasForeignKey("DiscreteUtilityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Outcome", "ParentOutcome") + .WithMany() + .HasForeignKey("ParentOutcomeId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("DiscreteUtility"); + + b.Navigation("ParentOutcome"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Edge", b => + { + b.HasOne("PrismaApi.Domain.Entities.Node", "HeadNode") + .WithMany("HeadEdges") + .HasForeignKey("HeadId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Edges") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Node", "TailNode") + .WithMany("TailEdges") + .HasForeignKey("TailId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("HeadNode"); + + b.Navigation("Project"); + + b.Navigation("TailNode"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Issues") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => + { + b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") + .WithOne("Node") + .HasForeignKey("PrismaApi.Domain.Entities.Node", "IssueId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Nodes") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Issue"); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.NodeStyle", b => + { + b.HasOne("PrismaApi.Domain.Entities.Node", "Node") + .WithOne("NodeStyle") + .HasForeignKey("PrismaApi.Domain.Entities.NodeStyle", "NodeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Node"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Objective", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Objectives") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => + { + b.HasOne("PrismaApi.Domain.Entities.Decision", "Decision") + .WithMany("Options") + .HasForeignKey("DecisionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Decision"); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Outcome", b => + { + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Uncertainty", "Uncertainty") + .WithMany("Outcomes") + .HasForeignKey("UncertaintyId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Project"); + + b.Navigation("Uncertainty"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.ProjectRole", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("ProjectRoles") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "User") + .WithMany("ProjectRoles") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionEntry", b => + { + b.HasOne("PrismaApi.Domain.Entities.Option", "ChildOption") + .WithMany() + .HasForeignKey("ChildOptionId") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("PrismaApi.Domain.Entities.Outcome", "ChildOutcome") + .WithMany() + .HasForeignKey("ChildOutcomeId") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("PrismaApi.Domain.Entities.Option", "ParentOption") + .WithMany() + .HasForeignKey("ParentOptionId") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("PrismaApi.Domain.Entities.Outcome", "ParentOutcome") + .WithMany() + .HasForeignKey("ParentOutcomeId") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.RestrictionTable", "RestrictionTable") + .WithMany("RestrictionEntries") + .HasForeignKey("RestrictionTableId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ChildOption"); + + b.Navigation("ChildOutcome"); + + b.Navigation("ParentOption"); + + b.Navigation("ParentOutcome"); + + b.Navigation("Project"); + + b.Navigation("RestrictionTable"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionTable", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Edge", "Edge") + .WithOne() + .HasForeignKey("PrismaApi.Domain.Entities.RestrictionTable", "EdgeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Edge"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Strategies") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.StrategyOption", b => + { + b.HasOne("PrismaApi.Domain.Entities.Option", "Option") + .WithMany("StrategyOptions") + .HasForeignKey("OptionId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Strategy", "Strategy") + .WithMany("StrategyOptions") + .HasForeignKey("StrategyId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Option"); + + b.Navigation("Strategy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => + { + b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") + .WithOne("Uncertainty") + .HasForeignKey("PrismaApi.Domain.Entities.Uncertainty", "IssueId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Issue"); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => + { + b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") + .WithOne("Utility") + .HasForeignKey("PrismaApi.Domain.Entities.Utility", "IssueId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Issue"); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Assessment", b => + { + b.Navigation("DecisionQualityAssessments"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Decision", b => + { + b.Navigation("Options"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbability", b => + { + b.Navigation("ParentOptions"); + + b.Navigation("ParentOutcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => + { + b.Navigation("ParentOptions"); + + b.Navigation("ParentOutcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => + { + b.Navigation("Decision"); + + b.Navigation("Node"); + + b.Navigation("Uncertainty"); + + b.Navigation("Utility"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => + { + b.Navigation("HeadEdges"); + + b.Navigation("NodeStyle"); + + b.Navigation("TailEdges"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => + { + b.Navigation("StrategyOptions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => + { + b.Navigation("Assessments"); + + b.Navigation("BoardNodes"); + + b.Navigation("Edges"); + + b.Navigation("Issues"); + + b.Navigation("Nodes"); + + b.Navigation("Objectives"); + + b.Navigation("ProjectRoles"); + + b.Navigation("Strategies"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionTable", b => + { + b.Navigation("RestrictionEntries"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => + { + b.Navigation("StrategyOptions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => + { + b.Navigation("DiscreteProbabilities"); + + b.Navigation("Outcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.User", b => + { + b.Navigation("ProjectRoles"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => + { + b.Navigation("DiscreteUtilities"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/PrismaDotnetApi/SqliteMigrations/20260715095307_AddDeletedUser.cs b/PrismaDotnetApi/SqliteMigrations/20260715095307_AddDeletedUser.cs new file mode 100644 index 0000000..95eeeb4 --- /dev/null +++ b/PrismaDotnetApi/SqliteMigrations/20260715095307_AddDeletedUser.cs @@ -0,0 +1,29 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace PrismaApi.Infrastructure.Migrations +{ + /// + public partial class AddDeletedUser : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.InsertData( + table: "Users", + columns: new[] { "Id", "CreatedAt", "Name", "UpdatedAt" }, + values: new object[] { "d008bfdf-fe89-48f3-80a8-777bba4d9bbf", new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), "Deleted User", new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) }); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DeleteData( + table: "Users", + keyColumn: "Id", + keyValue: "d008bfdf-fe89-48f3-80a8-777bba4d9bbf"); + } + } +} diff --git a/PrismaDotnetApi/SqliteMigrations/AppDbContextModelSnapshot.cs b/PrismaDotnetApi/SqliteMigrations/AppDbContextModelSnapshot.cs index 032a4fd..1989b7c 100644 --- a/PrismaDotnetApi/SqliteMigrations/AppDbContextModelSnapshot.cs +++ b/PrismaDotnetApi/SqliteMigrations/AppDbContextModelSnapshot.cs @@ -1018,6 +1018,15 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasKey("Id"); b.ToTable("Users"); + + b.HasData( + new + { + Id = "d008bfdf-fe89-48f3-80a8-777bba4d9bbf", + CreatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), + Name = "Deleted User", + UpdatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) + }); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => From 6055d4ef74ea38c165fd3c6ceaddae1b7f0f11b9 Mon Sep 17 00:00:00 2001 From: EinarSalbouvet <129149934+EinarSalbouvet@users.noreply.github.com> Date: Wed, 15 Jul 2026 14:24:45 +0200 Subject: [PATCH 12/17] Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- .../PrismaApi.Application/Repositories/UserRepository.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/PrismaDotnetApi/PrismaApi.Application/Repositories/UserRepository.cs b/PrismaDotnetApi/PrismaApi.Application/Repositories/UserRepository.cs index 5cb1a0a..c56753d 100644 --- a/PrismaDotnetApi/PrismaApi.Application/Repositories/UserRepository.cs +++ b/PrismaDotnetApi/PrismaApi.Application/Repositories/UserRepository.cs @@ -1,5 +1,4 @@ using Microsoft.EntityFrameworkCore; -using Microsoft.Graph.IdentityGovernance.EntitlementManagement.Assignments.AdditionalAccessWithAccessPackageIdWithIncompatibleAccessPackageId; using PrismaApi.Application.Interfaces.Repositories; using PrismaApi.Application.Mapping; using PrismaApi.Domain.Constants; From 7c0b4bb771125c445cdd55a154a1062bafd8b96f Mon Sep 17 00:00:00 2001 From: EinarSalbouvet Date: Wed, 15 Jul 2026 14:35:48 +0200 Subject: [PATCH 13/17] Fix SQL update statement in DeleteByIdsAsync to prevent redundant parameters --- .../PrismaApi.Application/Repositories/UserRepository.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PrismaDotnetApi/PrismaApi.Application/Repositories/UserRepository.cs b/PrismaDotnetApi/PrismaApi.Application/Repositories/UserRepository.cs index c56753d..e9bdaf9 100644 --- a/PrismaDotnetApi/PrismaApi.Application/Repositories/UserRepository.cs +++ b/PrismaDotnetApi/PrismaApi.Application/Repositories/UserRepository.cs @@ -127,7 +127,7 @@ UPDATE [{tableName}] UPDATE [{tableName}] SET UpdatedById = '{DomainConstants.DeletedUserId}' WHERE UpdatedById IN ({inClause}); - """, [.. idParams.Concat(idParams).Cast()], ct); + """, [.. idParams.Cast()], ct); } // delete project roles From 75713ca3e1ce15bf79095e9fe05add09fc21e828 Mon Sep 17 00:00:00 2001 From: EinarSalbouvet <129149934+EinarSalbouvet@users.noreply.github.com> Date: Wed, 15 Jul 2026 14:31:01 +0200 Subject: [PATCH 14/17] Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- .../PrismaApi.Application/Repositories/UserRepository.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/PrismaDotnetApi/PrismaApi.Application/Repositories/UserRepository.cs b/PrismaDotnetApi/PrismaApi.Application/Repositories/UserRepository.cs index e9bdaf9..b7cb556 100644 --- a/PrismaDotnetApi/PrismaApi.Application/Repositories/UserRepository.cs +++ b/PrismaDotnetApi/PrismaApi.Application/Repositories/UserRepository.cs @@ -90,6 +90,7 @@ public async Task GetOrAddByUserNameAsync(UserIncomingDto dto, Cancellatio public override async Task DeleteByIdsAsync(IEnumerable ids, Expression>? filterPredicate = null, CancellationToken ct = default) { var entries = await DbContext.Users + .OptionalWhere(filterPredicate) .Where(u => ids.Contains(u.Id)) .ToListAsync(cancellationToken: ct); From 78a78336ae0c2ba4346cecfea26c97578fe1e38d Mon Sep 17 00:00:00 2001 From: EinarSalbouvet Date: Wed, 22 Jul 2026 08:53:18 +0200 Subject: [PATCH 15/17] Remove migration for deleted user and update table mappings to use nullable string for table names --- .../Repositories/UserRepository.cs | 83 +- .../20260715095316_AddDeletedUser.Designer.cs | 1759 ----------------- .../20260715095316_AddDeletedUser.cs | 29 - .../AppDbContextModelSnapshot.cs | 57 +- .../20260715095307_AddDeletedUser.Designer.cs | 1754 ---------------- .../20260715095307_AddDeletedUser.cs | 29 - .../AppDbContextModelSnapshot.cs | 57 +- 7 files changed, 99 insertions(+), 3669 deletions(-) delete mode 100644 PrismaDotnetApi/SqlServerMigrations/20260715095316_AddDeletedUser.Designer.cs delete mode 100644 PrismaDotnetApi/SqlServerMigrations/20260715095316_AddDeletedUser.cs delete mode 100644 PrismaDotnetApi/SqliteMigrations/20260715095307_AddDeletedUser.Designer.cs delete mode 100644 PrismaDotnetApi/SqliteMigrations/20260715095307_AddDeletedUser.cs diff --git a/PrismaDotnetApi/PrismaApi.Application/Repositories/UserRepository.cs b/PrismaDotnetApi/PrismaApi.Application/Repositories/UserRepository.cs index b7cb556..feb022c 100644 --- a/PrismaDotnetApi/PrismaApi.Application/Repositories/UserRepository.cs +++ b/PrismaDotnetApi/PrismaApi.Application/Repositories/UserRepository.cs @@ -7,6 +7,7 @@ using PrismaApi.Infrastructure.Context; using PrismaApi.Infrastructure.Extensions; using System.Linq.Expressions; +using System.Reflection; namespace PrismaApi.Application.Repositories; @@ -89,58 +90,76 @@ public async Task GetOrAddByUserNameAsync(UserIncomingDto dto, Cancellatio /// public override async Task DeleteByIdsAsync(IEnumerable ids, Expression>? filterPredicate = null, CancellationToken ct = default) { + var idsList = ids.ToList(); var entries = await DbContext.Users .OptionalWhere(filterPredicate) - .Where(u => ids.Contains(u.Id)) + .Where(u => idsList.Contains(u.Id)) .ToListAsync(cancellationToken: ct); if (entries.Count == 0) return; - // update all auditable entities to point to deleted user entry - var connection = DbContext.Database.GetDbConnection(); - using var cmd = connection.CreateCommand(); - var idParams = ids.Select((id, i) => - { - var param = cmd.CreateParameter(); - param.ParameterName = $"@id{i}"; - param.Value = id; - return param; - }).ToArray(); - var inClause = string.Join(",", idParams.Select(p => p.ParameterName)); - - // get all auditable entity types that need the user id updated to the deleted user id. - // This is done to avoid foreign key constraint violations when deleting a user. var auditableEntityTypes = DbContext.Model.GetEntityTypes() - .Where(t => typeof(AuditableEntity).IsAssignableFrom(t.ClrType) && !t.ClrType.IsAbstract); + .Where(t => typeof(AuditableEntity).IsAssignableFrom(t.ClrType) && !t.ClrType.IsAbstract) + .Select(t => t.ClrType) + .Distinct() + .ToList(); - foreach (var entityType in auditableEntityTypes) + foreach (var auditableEntityType in auditableEntityTypes) { - var tableName = entityType.GetTableName(); - - // using raw SQL over the parameterized ExecuteSqlAsync due to issues with the in clause. - // ExecuteSqlAsync protects against SQL injection, - // but all inputed data are controlled by the api and takes no user input. - await DbContext.Database.ExecuteSqlRawAsync($""" - UPDATE [{tableName}] - SET CreatedById = '{DomainConstants.DeletedUserId}' - WHERE CreatedById IN ({inClause}); - UPDATE [{tableName}] - SET UpdatedById = '{DomainConstants.DeletedUserId}' - WHERE UpdatedById IN ({inClause}); - """, [.. idParams.Cast()], ct); + await UpdateAuditableReferencesByTypeAsync(auditableEntityType, idsList, DomainConstants.DeletedUserId, ct); } // delete project roles var projectRoles = await DbContext.ProjectRoles - .Where(e => ids.Contains(e.UserId)) + .Where(e => idsList.Contains(e.UserId)) .ToListAsync(cancellationToken: ct); - DbContext.ProjectRoles.RemoveRange(projectRoles); + foreach (var entry in entries) { DbContext.Users.Remove(entry); } + await DbContext.SaveChangesAsync(ct); } + + private async Task UpdateAuditableReferencesByTypeAsync( + Type auditableEntityType, + IReadOnlyCollection idsList, + string userId, + CancellationToken ct) + { + // Use reflection to call the generic method with the specific entity type + var UpdateAuditableReferencesByTypeMethod = typeof(UserRepository) + .GetMethod(nameof(UpdateAuditableReferencesByTypeAsync), BindingFlags.NonPublic | BindingFlags.Static)!; + var genericMethod = UpdateAuditableReferencesByTypeMethod.MakeGenericMethod(auditableEntityType); + var updateTask = (Task?)genericMethod.Invoke(null, [DbContext, idsList, userId, ct]); + if (updateTask == null) + { + throw new InvalidOperationException($"Could not execute auditable reference update for type '{auditableEntityType.Name}'."); + } + await updateTask; + } + + private static Task UpdateAuditableReferencesByTypeAsync( + AppDbContext dbContext, + List idsList, + string userId, + CancellationToken ct) where TEntity : AuditableEntity + { + // Use ExecuteUpdateAsync to update the CreatedById and UpdatedById properties to userId for all entities of type TEntity + return dbContext + .Set() + .Where(e => idsList.Contains(e.CreatedById) || idsList.Contains(e.UpdatedById)) + .ExecuteUpdateAsync( + setters => setters + .SetProperty( + e => e.CreatedById, + e => idsList.Contains(e.CreatedById) ? userId : e.CreatedById) + .SetProperty( + e => e.UpdatedById, + e => idsList.Contains(e.UpdatedById) ? userId : e.UpdatedById), + cancellationToken: ct); + } } diff --git a/PrismaDotnetApi/SqlServerMigrations/20260715095316_AddDeletedUser.Designer.cs b/PrismaDotnetApi/SqlServerMigrations/20260715095316_AddDeletedUser.Designer.cs deleted file mode 100644 index c1c58f4..0000000 --- a/PrismaDotnetApi/SqlServerMigrations/20260715095316_AddDeletedUser.Designer.cs +++ /dev/null @@ -1,1759 +0,0 @@ -// -using System; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using PrismaApi.Infrastructure.Context; - -#nullable disable - -namespace PrismaApi.Infrastructure.Migrations -{ - [DbContext(typeof(AppDbContext))] - [Migration("20260715095316_AddDeletedUser")] - partial class AddDeletedUser - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "9.0.13") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Assessment", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.Property("IsCompleted") - .HasColumnType("bit"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Assessments", (string)null); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.BoardNode", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("Color") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.Property("Data") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Height") - .HasColumnType("float"); - - b.Property("Opacity") - .ValueGeneratedOnAdd() - .HasColumnType("int") - .HasDefaultValue(100); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("Rotation") - .HasColumnType("float"); - - b.Property("StrokeStyle") - .IsRequired() - .ValueGeneratedOnAdd() - .HasColumnType("nvarchar(max)") - .HasDefaultValue("Solid"); - - b.Property("StrokeWidth") - .ValueGeneratedOnAdd() - .HasColumnType("real") - .HasDefaultValue(8f); - - b.Property("TextSize") - .ValueGeneratedOnAdd() - .HasColumnType("int") - .HasDefaultValue(24); - - b.Property("Type") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.Property("Width") - .HasColumnType("float"); - - b.Property("XPosition") - .HasColumnType("float"); - - b.Property("YPosition") - .HasColumnType("float"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("BoardNode", (string)null); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Decision", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("IssueId") - .HasColumnType("uniqueidentifier"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("Type") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.HasKey("Id"); - - b.HasIndex("IssueId") - .IsUnique(); - - b.HasIndex("ProjectId"); - - b.ToTable("Decisions"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DecisionQualityAssessment", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("AppropriateFrame") - .HasColumnType("int"); - - b.Property("AssessmentId") - .HasColumnType("uniqueidentifier"); - - b.Property("Comment") - .IsRequired() - .HasMaxLength(6000) - .HasColumnType("nvarchar(max)"); - - b.Property("CommitmentToAction") - .HasColumnType("int"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.Property("DoableAlternatives") - .HasColumnType("int"); - - b.Property("InformationReliability") - .HasColumnType("int"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("ReasoningCorrectness") - .HasColumnType("int"); - - b.Property("TradeOffAnalysis") - .HasColumnType("int"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.HasKey("Id"); - - b.HasIndex("AssessmentId"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("DecisionQualityAssessments", (string)null); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbability", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("OutcomeId") - .HasColumnType("uniqueidentifier"); - - b.Property("Probability") - .HasPrecision(53) - .HasColumnType("float(53)"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("UncertaintyId") - .HasColumnType("uniqueidentifier"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.HasKey("Id"); - - b.HasIndex("OutcomeId"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UncertaintyId"); - - b.ToTable("DiscreteProbabilities"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOption", b => - { - b.Property("DiscreteProbabilityId") - .HasColumnType("uniqueidentifier"); - - b.Property("ParentOptionId") - .HasColumnType("uniqueidentifier"); - - b.HasKey("DiscreteProbabilityId", "ParentOptionId"); - - b.HasIndex("ParentOptionId"); - - b.ToTable("DiscreteProbabilityParentOptions"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOutcome", b => - { - b.Property("DiscreteProbabilityId") - .HasColumnType("uniqueidentifier"); - - b.Property("ParentOutcomeId") - .HasColumnType("uniqueidentifier"); - - b.HasKey("DiscreteProbabilityId", "ParentOutcomeId"); - - b.HasIndex("ParentOutcomeId"); - - b.ToTable("DiscreteProbabilityParentOutcomes"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("UtilityId") - .HasColumnType("uniqueidentifier"); - - b.Property("UtilityValue") - .HasPrecision(53) - .HasColumnType("float(53)"); - - b.Property("ValueMetricId") - .HasColumnType("uniqueidentifier"); - - b.HasKey("Id"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UtilityId"); - - b.HasIndex("ValueMetricId"); - - b.ToTable("DiscreteUtilities"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOption", b => - { - b.Property("DiscreteUtilityId") - .HasColumnType("uniqueidentifier"); - - b.Property("ParentOptionId") - .HasColumnType("uniqueidentifier"); - - b.HasKey("DiscreteUtilityId", "ParentOptionId"); - - b.HasIndex("ParentOptionId"); - - b.ToTable("DiscreteUtilityParentOptions"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOutcome", b => - { - b.Property("DiscreteUtilityId") - .HasColumnType("uniqueidentifier"); - - b.Property("ParentOutcomeId") - .HasColumnType("uniqueidentifier"); - - b.HasKey("DiscreteUtilityId", "ParentOutcomeId"); - - b.HasIndex("ParentOutcomeId"); - - b.ToTable("DiscreteUtilityParentOutcomes"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Edge", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("HeadId") - .HasColumnType("uniqueidentifier"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("TailId") - .HasColumnType("uniqueidentifier"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.HasKey("Id"); - - b.HasIndex("HeadId"); - - b.HasIndex("ProjectId"); - - b.HasIndex("TailId"); - - b.ToTable("Edges"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("Boundary") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.Property("Description") - .IsRequired() - .HasMaxLength(6000) - .HasColumnType("nvarchar(max)"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("Order") - .HasColumnType("int"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("Type") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Issues"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("IssueId") - .HasColumnType("uniqueidentifier"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.HasKey("Id"); - - b.HasIndex("IssueId") - .IsUnique(); - - b.HasIndex("ProjectId"); - - b.ToTable("Nodes"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.NodeStyle", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("NodeId") - .HasColumnType("uniqueidentifier"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("XPosition") - .HasColumnType("float"); - - b.Property("YPosition") - .HasColumnType("float"); - - b.HasKey("Id"); - - b.HasIndex("NodeId") - .IsUnique(); - - b.ToTable("NodeStyles"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Objective", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.Property("Description") - .IsRequired() - .HasMaxLength(6000) - .HasColumnType("nvarchar(max)"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("Type") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Objectives"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("DecisionId") - .HasColumnType("uniqueidentifier"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("Utility") - .HasColumnType("float"); - - b.HasKey("Id"); - - b.HasIndex("DecisionId"); - - b.HasIndex("ProjectId"); - - b.ToTable("Options"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Outcome", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("UncertaintyId") - .HasColumnType("uniqueidentifier"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("Utility") - .HasColumnType("float"); - - b.HasKey("Id"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UncertaintyId"); - - b.ToTable("Outcomes"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.Property("EndDate") - .HasColumnType("datetimeoffset"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("OpportunityStatement") - .IsRequired() - .HasMaxLength(6000) - .HasColumnType("nvarchar(max)"); - - b.Property("ParentProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("ParentProjectName") - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("Public") - .HasColumnType("bit"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Projects"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.ProjectRole", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("Role") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.Property("UserId") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UpdatedById"); - - b.HasIndex("UserId"); - - b.ToTable("ProjectRoles"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionEntry", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("ChildOptionId") - .HasColumnType("uniqueidentifier"); - - b.Property("ChildOutcomeId") - .HasColumnType("uniqueidentifier"); - - b.Property("ChildStateId") - .ValueGeneratedOnAddOrUpdate() - .HasColumnType("uniqueidentifier") - .HasComputedColumnSql("COALESCE([ChildOptionId], [ChildOutcomeId])", true); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("ParentOptionId") - .HasColumnType("uniqueidentifier"); - - b.Property("ParentOutcomeId") - .HasColumnType("uniqueidentifier"); - - b.Property("ParentStateId") - .ValueGeneratedOnAddOrUpdate() - .HasColumnType("uniqueidentifier") - .HasComputedColumnSql("COALESCE([ParentOptionId], [ParentOutcomeId])", true); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("RestrictionTableId") - .HasColumnType("uniqueidentifier"); - - b.Property("RestrictionValue") - .ValueGeneratedOnAdd() - .HasPrecision(53) - .HasColumnType("float(53)") - .HasDefaultValue(1.0); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.HasKey("Id"); - - b.HasIndex("ChildOptionId"); - - b.HasIndex("ChildOutcomeId"); - - b.HasIndex("ParentOptionId"); - - b.HasIndex("ParentOutcomeId"); - - b.HasIndex("ProjectId"); - - b.HasIndex("RestrictionTableId"); - - b.HasIndex("ParentStateId", "ChildStateId", "RestrictionTableId") - .IsUnique(); - - b.ToTable("RestrictionEntries", t => - { - t.HasCheckConstraint("CK_RestrictionEntry_Child", "([ChildOptionId] IS NULL AND [ChildOutcomeId] IS NOT NULL) OR ([ChildOptionId] IS NOT NULL AND [ChildOutcomeId] IS NULL)"); - - t.HasCheckConstraint("CK_RestrictionEntry_Parent", "([ParentOptionId] IS NULL AND [ParentOutcomeId] IS NOT NULL) OR ([ParentOptionId] IS NOT NULL AND [ParentOutcomeId] IS NULL)"); - }); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionTable", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.Property("EdgeId") - .HasColumnType("uniqueidentifier"); - - b.Property("Name") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("EdgeId") - .IsUnique(); - - b.HasIndex("ProjectId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("RestrictionTables"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.Property("Description") - .IsRequired() - .HasMaxLength(6000) - .HasColumnType("nvarchar(max)"); - - b.Property("Icon") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("IconColor") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("Rationale") - .IsRequired() - .HasMaxLength(6000) - .HasColumnType("nvarchar(max)"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Strategies"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.StrategyOption", b => - { - b.Property("StrategyId") - .HasColumnType("uniqueidentifier"); - - b.Property("OptionId") - .HasColumnType("uniqueidentifier"); - - b.HasKey("StrategyId", "OptionId"); - - b.HasIndex("OptionId"); - - b.ToTable("StrategyOptions"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("IsKey") - .HasColumnType("bit"); - - b.Property("IssueId") - .HasColumnType("uniqueidentifier"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.HasKey("Id"); - - b.HasIndex("IssueId") - .IsUnique(); - - b.HasIndex("ProjectId"); - - b.ToTable("Uncertainties"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.User", b => - { - b.Property("Id") - .HasColumnType("nvarchar(450)"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.HasKey("Id"); - - b.ToTable("Users"); - - b.HasData( - new - { - Id = "d008bfdf-fe89-48f3-80a8-777bba4d9bbf", - CreatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), - Name = "Deleted User", - UpdatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) - }); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("IssueId") - .HasColumnType("uniqueidentifier"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.HasKey("Id"); - - b.HasIndex("IssueId") - .IsUnique(); - - b.HasIndex("ProjectId"); - - b.ToTable("Utilities"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.ValueMetric", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier"); - - b.Property("CreatedAt") - .HasColumnType("datetimeoffset"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("nvarchar(1000)"); - - b.Property("UpdatedAt") - .HasColumnType("datetimeoffset"); - - b.HasKey("Id"); - - b.ToTable("ValueMetrics"); - - b.HasData( - new - { - Id = new Guid("288e0811-7ab6-5d24-b80c-9fa925b848a6"), - CreatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), - Name = "value", - UpdatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) - }); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Assessment", b => - { - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("Assessments") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("Project"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.BoardNode", b => - { - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("BoardNodes") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("Project"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Decision", b => - { - b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") - .WithOne("Decision") - .HasForeignKey("PrismaApi.Domain.Entities.Decision", "IssueId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("Issue"); - - b.Navigation("Project"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DecisionQualityAssessment", b => - { - b.HasOne("PrismaApi.Domain.Entities.Assessment", "Assessment") - .WithMany("DecisionQualityAssessments") - .HasForeignKey("AssessmentId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("Assessment"); - - b.Navigation("CreatedBy"); - - b.Navigation("Project"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbability", b => - { - b.HasOne("PrismaApi.Domain.Entities.Outcome", "Outcome") - .WithMany() - .HasForeignKey("OutcomeId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Uncertainty", "Uncertainty") - .WithMany("DiscreteProbabilities") - .HasForeignKey("UncertaintyId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("Outcome"); - - b.Navigation("Project"); - - b.Navigation("Uncertainty"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOption", b => - { - b.HasOne("PrismaApi.Domain.Entities.DiscreteProbability", "DiscreteProbability") - .WithMany("ParentOptions") - .HasForeignKey("DiscreteProbabilityId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Option", "ParentOption") - .WithMany() - .HasForeignKey("ParentOptionId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("DiscreteProbability"); - - b.Navigation("ParentOption"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOutcome", b => - { - b.HasOne("PrismaApi.Domain.Entities.DiscreteProbability", "DiscreteProbability") - .WithMany("ParentOutcomes") - .HasForeignKey("DiscreteProbabilityId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Outcome", "ParentOutcome") - .WithMany() - .HasForeignKey("ParentOutcomeId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("DiscreteProbability"); - - b.Navigation("ParentOutcome"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => - { - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Utility", "Utility") - .WithMany("DiscreteUtilities") - .HasForeignKey("UtilityId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.ValueMetric", "ValueMetric") - .WithMany() - .HasForeignKey("ValueMetricId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Project"); - - b.Navigation("Utility"); - - b.Navigation("ValueMetric"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOption", b => - { - b.HasOne("PrismaApi.Domain.Entities.DiscreteUtility", "DiscreteUtility") - .WithMany("ParentOptions") - .HasForeignKey("DiscreteUtilityId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Option", "ParentOption") - .WithMany() - .HasForeignKey("ParentOptionId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("DiscreteUtility"); - - b.Navigation("ParentOption"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOutcome", b => - { - b.HasOne("PrismaApi.Domain.Entities.DiscreteUtility", "DiscreteUtility") - .WithMany("ParentOutcomes") - .HasForeignKey("DiscreteUtilityId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Outcome", "ParentOutcome") - .WithMany() - .HasForeignKey("ParentOutcomeId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("DiscreteUtility"); - - b.Navigation("ParentOutcome"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Edge", b => - { - b.HasOne("PrismaApi.Domain.Entities.Node", "HeadNode") - .WithMany("HeadEdges") - .HasForeignKey("HeadId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("Edges") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Node", "TailNode") - .WithMany("TailEdges") - .HasForeignKey("TailId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("HeadNode"); - - b.Navigation("Project"); - - b.Navigation("TailNode"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => - { - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("Issues") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("Project"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => - { - b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") - .WithOne("Node") - .HasForeignKey("PrismaApi.Domain.Entities.Node", "IssueId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("Nodes") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("Issue"); - - b.Navigation("Project"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.NodeStyle", b => - { - b.HasOne("PrismaApi.Domain.Entities.Node", "Node") - .WithOne("NodeStyle") - .HasForeignKey("PrismaApi.Domain.Entities.NodeStyle", "NodeId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Node"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Objective", b => - { - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("Objectives") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("Project"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => - { - b.HasOne("PrismaApi.Domain.Entities.Decision", "Decision") - .WithMany("Options") - .HasForeignKey("DecisionId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("Decision"); - - b.Navigation("Project"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Outcome", b => - { - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Uncertainty", "Uncertainty") - .WithMany("Outcomes") - .HasForeignKey("UncertaintyId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Project"); - - b.Navigation("Uncertainty"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => - { - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.ProjectRole", b => - { - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("ProjectRoles") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "User") - .WithMany("ProjectRoles") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("Project"); - - b.Navigation("UpdatedBy"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionEntry", b => - { - b.HasOne("PrismaApi.Domain.Entities.Option", "ChildOption") - .WithMany() - .HasForeignKey("ChildOptionId") - .OnDelete(DeleteBehavior.Restrict); - - b.HasOne("PrismaApi.Domain.Entities.Outcome", "ChildOutcome") - .WithMany() - .HasForeignKey("ChildOutcomeId") - .OnDelete(DeleteBehavior.Restrict); - - b.HasOne("PrismaApi.Domain.Entities.Option", "ParentOption") - .WithMany() - .HasForeignKey("ParentOptionId") - .OnDelete(DeleteBehavior.Restrict); - - b.HasOne("PrismaApi.Domain.Entities.Outcome", "ParentOutcome") - .WithMany() - .HasForeignKey("ParentOutcomeId") - .OnDelete(DeleteBehavior.Restrict); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.RestrictionTable", "RestrictionTable") - .WithMany("RestrictionEntries") - .HasForeignKey("RestrictionTableId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("ChildOption"); - - b.Navigation("ChildOutcome"); - - b.Navigation("ParentOption"); - - b.Navigation("ParentOutcome"); - - b.Navigation("Project"); - - b.Navigation("RestrictionTable"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionTable", b => - { - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Edge", "Edge") - .WithOne() - .HasForeignKey("PrismaApi.Domain.Entities.RestrictionTable", "EdgeId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("Edge"); - - b.Navigation("Project"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => - { - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("Strategies") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("Project"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.StrategyOption", b => - { - b.HasOne("PrismaApi.Domain.Entities.Option", "Option") - .WithMany("StrategyOptions") - .HasForeignKey("OptionId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Strategy", "Strategy") - .WithMany("StrategyOptions") - .HasForeignKey("StrategyId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Option"); - - b.Navigation("Strategy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => - { - b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") - .WithOne("Uncertainty") - .HasForeignKey("PrismaApi.Domain.Entities.Uncertainty", "IssueId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("Issue"); - - b.Navigation("Project"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => - { - b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") - .WithOne("Utility") - .HasForeignKey("PrismaApi.Domain.Entities.Utility", "IssueId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("Issue"); - - b.Navigation("Project"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Assessment", b => - { - b.Navigation("DecisionQualityAssessments"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Decision", b => - { - b.Navigation("Options"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbability", b => - { - b.Navigation("ParentOptions"); - - b.Navigation("ParentOutcomes"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => - { - b.Navigation("ParentOptions"); - - b.Navigation("ParentOutcomes"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => - { - b.Navigation("Decision"); - - b.Navigation("Node"); - - b.Navigation("Uncertainty"); - - b.Navigation("Utility"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => - { - b.Navigation("HeadEdges"); - - b.Navigation("NodeStyle"); - - b.Navigation("TailEdges"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => - { - b.Navigation("StrategyOptions"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => - { - b.Navigation("Assessments"); - - b.Navigation("BoardNodes"); - - b.Navigation("Edges"); - - b.Navigation("Issues"); - - b.Navigation("Nodes"); - - b.Navigation("Objectives"); - - b.Navigation("ProjectRoles"); - - b.Navigation("Strategies"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionTable", b => - { - b.Navigation("RestrictionEntries"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => - { - b.Navigation("StrategyOptions"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => - { - b.Navigation("DiscreteProbabilities"); - - b.Navigation("Outcomes"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.User", b => - { - b.Navigation("ProjectRoles"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => - { - b.Navigation("DiscreteUtilities"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/PrismaDotnetApi/SqlServerMigrations/20260715095316_AddDeletedUser.cs b/PrismaDotnetApi/SqlServerMigrations/20260715095316_AddDeletedUser.cs deleted file mode 100644 index 95eeeb4..0000000 --- a/PrismaDotnetApi/SqlServerMigrations/20260715095316_AddDeletedUser.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace PrismaApi.Infrastructure.Migrations -{ - /// - public partial class AddDeletedUser : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.InsertData( - table: "Users", - columns: new[] { "Id", "CreatedAt", "Name", "UpdatedAt" }, - values: new object[] { "d008bfdf-fe89-48f3-80a8-777bba4d9bbf", new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), "Deleted User", new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DeleteData( - table: "Users", - keyColumn: "Id", - keyValue: "d008bfdf-fe89-48f3-80a8-777bba4d9bbf"); - } - } -} diff --git a/PrismaDotnetApi/SqlServerMigrations/AppDbContextModelSnapshot.cs b/PrismaDotnetApi/SqlServerMigrations/AppDbContextModelSnapshot.cs index c2c052b..3bcc581 100644 --- a/PrismaDotnetApi/SqlServerMigrations/AppDbContextModelSnapshot.cs +++ b/PrismaDotnetApi/SqlServerMigrations/AppDbContextModelSnapshot.cs @@ -222,7 +222,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ProjectId"); - b.ToTable("Decisions"); + b.ToTable("Decisions", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.DecisionQualityAssessment", b => @@ -320,7 +320,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UncertaintyId"); - b.ToTable("DiscreteProbabilities"); + b.ToTable("DiscreteProbabilities", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOption", b => @@ -335,7 +335,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ParentOptionId"); - b.ToTable("DiscreteProbabilityParentOptions"); + b.ToTable("DiscreteProbabilityParentOptions", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOutcome", b => @@ -350,7 +350,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ParentOutcomeId"); - b.ToTable("DiscreteProbabilityParentOutcomes"); + b.ToTable("DiscreteProbabilityParentOutcomes", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => @@ -386,7 +386,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ValueMetricId"); - b.ToTable("DiscreteUtilities"); + b.ToTable("DiscreteUtilities", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOption", b => @@ -401,7 +401,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ParentOptionId"); - b.ToTable("DiscreteUtilityParentOptions"); + b.ToTable("DiscreteUtilityParentOptions", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOutcome", b => @@ -416,7 +416,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ParentOutcomeId"); - b.ToTable("DiscreteUtilityParentOutcomes"); + b.ToTable("DiscreteUtilityParentOutcomes", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Edge", b => @@ -448,7 +448,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("TailId"); - b.ToTable("Edges"); + b.ToTable("Edges", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => @@ -505,7 +505,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UpdatedById"); - b.ToTable("Issues"); + b.ToTable("Issues", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => @@ -538,7 +538,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ProjectId"); - b.ToTable("Nodes"); + b.ToTable("Nodes", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.NodeStyle", b => @@ -567,7 +567,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("NodeId") .IsUnique(); - b.ToTable("NodeStyles"); + b.ToTable("NodeStyles", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Objective", b => @@ -616,7 +616,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UpdatedById"); - b.ToTable("Objectives"); + b.ToTable("Objectives", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => @@ -651,7 +651,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ProjectId"); - b.ToTable("Options"); + b.ToTable("Options", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Outcome", b => @@ -686,7 +686,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UncertaintyId"); - b.ToTable("Outcomes"); + b.ToTable("Outcomes", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => @@ -738,7 +738,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UpdatedById"); - b.ToTable("Projects"); + b.ToTable("Projects", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.ProjectRole", b => @@ -783,7 +783,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UserId"); - b.ToTable("ProjectRoles"); + b.ToTable("ProjectRoles", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionEntry", b => @@ -849,7 +849,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ParentStateId", "ChildStateId", "RestrictionTableId") .IsUnique(); - b.ToTable("RestrictionEntries", t => + b.ToTable("RestrictionEntries", null, t => { t.HasCheckConstraint("CK_RestrictionEntry_Child", "([ChildOptionId] IS NULL AND [ChildOutcomeId] IS NOT NULL) OR ([ChildOptionId] IS NOT NULL AND [ChildOutcomeId] IS NULL)"); @@ -898,7 +898,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UpdatedById"); - b.ToTable("RestrictionTables"); + b.ToTable("RestrictionTables", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => @@ -955,7 +955,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UpdatedById"); - b.ToTable("Strategies"); + b.ToTable("Strategies", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.StrategyOption", b => @@ -970,7 +970,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("OptionId"); - b.ToTable("StrategyOptions"); + b.ToTable("StrategyOptions", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => @@ -1001,7 +1001,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ProjectId"); - b.ToTable("Uncertainties"); + b.ToTable("Uncertainties", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.User", b => @@ -1022,16 +1022,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasKey("Id"); - b.ToTable("Users"); - - b.HasData( - new - { - Id = "d008bfdf-fe89-48f3-80a8-777bba4d9bbf", - CreatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), - Name = "Deleted User", - UpdatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) - }); + b.ToTable("Users", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => @@ -1059,7 +1050,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ProjectId"); - b.ToTable("Utilities"); + b.ToTable("Utilities", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.ValueMetric", b => @@ -1081,7 +1072,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasKey("Id"); - b.ToTable("ValueMetrics"); + b.ToTable("ValueMetrics", (string)null); b.HasData( new diff --git a/PrismaDotnetApi/SqliteMigrations/20260715095307_AddDeletedUser.Designer.cs b/PrismaDotnetApi/SqliteMigrations/20260715095307_AddDeletedUser.Designer.cs deleted file mode 100644 index 346c929..0000000 --- a/PrismaDotnetApi/SqliteMigrations/20260715095307_AddDeletedUser.Designer.cs +++ /dev/null @@ -1,1754 +0,0 @@ -// -using System; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using PrismaApi.Infrastructure.Context; - -#nullable disable - -namespace PrismaApi.Infrastructure.Migrations -{ - [DbContext(typeof(AppDbContext))] - [Migration("20260715095307_AddDeletedUser")] - partial class AddDeletedUser - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder.HasAnnotation("ProductVersion", "9.0.13"); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Assessment", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("IsCompleted") - .HasColumnType("INTEGER"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Assessments", (string)null); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.BoardNode", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("Color") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Data") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Height") - .HasColumnType("REAL"); - - b.Property("Opacity") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER") - .HasDefaultValue(100); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("Rotation") - .HasColumnType("REAL"); - - b.Property("StrokeStyle") - .IsRequired() - .ValueGeneratedOnAdd() - .HasColumnType("TEXT") - .HasDefaultValue("Solid"); - - b.Property("StrokeWidth") - .ValueGeneratedOnAdd() - .HasColumnType("REAL") - .HasDefaultValue(8f); - - b.Property("TextSize") - .ValueGeneratedOnAdd() - .HasColumnType("INTEGER") - .HasDefaultValue(24); - - b.Property("Type") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Width") - .HasColumnType("REAL"); - - b.Property("XPosition") - .HasColumnType("REAL"); - - b.Property("YPosition") - .HasColumnType("REAL"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("BoardNode", (string)null); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Decision", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("IssueId") - .HasColumnType("TEXT"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("Type") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("IssueId") - .IsUnique(); - - b.HasIndex("ProjectId"); - - b.ToTable("Decisions"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DecisionQualityAssessment", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("AppropriateFrame") - .HasColumnType("INTEGER"); - - b.Property("AssessmentId") - .HasColumnType("TEXT"); - - b.Property("Comment") - .IsRequired() - .HasMaxLength(6000) - .HasColumnType("TEXT"); - - b.Property("CommitmentToAction") - .HasColumnType("INTEGER"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("DoableAlternatives") - .HasColumnType("INTEGER"); - - b.Property("InformationReliability") - .HasColumnType("INTEGER"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("ReasoningCorrectness") - .HasColumnType("INTEGER"); - - b.Property("TradeOffAnalysis") - .HasColumnType("INTEGER"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("AssessmentId"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("DecisionQualityAssessments", (string)null); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbability", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("OutcomeId") - .HasColumnType("TEXT"); - - b.Property("Probability") - .HasPrecision(53) - .HasColumnType("REAL"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("UncertaintyId") - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("OutcomeId"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UncertaintyId"); - - b.ToTable("DiscreteProbabilities"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOption", b => - { - b.Property("DiscreteProbabilityId") - .HasColumnType("TEXT"); - - b.Property("ParentOptionId") - .HasColumnType("TEXT"); - - b.HasKey("DiscreteProbabilityId", "ParentOptionId"); - - b.HasIndex("ParentOptionId"); - - b.ToTable("DiscreteProbabilityParentOptions"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOutcome", b => - { - b.Property("DiscreteProbabilityId") - .HasColumnType("TEXT"); - - b.Property("ParentOutcomeId") - .HasColumnType("TEXT"); - - b.HasKey("DiscreteProbabilityId", "ParentOutcomeId"); - - b.HasIndex("ParentOutcomeId"); - - b.ToTable("DiscreteProbabilityParentOutcomes"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.Property("UtilityId") - .HasColumnType("TEXT"); - - b.Property("UtilityValue") - .HasPrecision(53) - .HasColumnType("REAL"); - - b.Property("ValueMetricId") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UtilityId"); - - b.HasIndex("ValueMetricId"); - - b.ToTable("DiscreteUtilities"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOption", b => - { - b.Property("DiscreteUtilityId") - .HasColumnType("TEXT"); - - b.Property("ParentOptionId") - .HasColumnType("TEXT"); - - b.HasKey("DiscreteUtilityId", "ParentOptionId"); - - b.HasIndex("ParentOptionId"); - - b.ToTable("DiscreteUtilityParentOptions"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOutcome", b => - { - b.Property("DiscreteUtilityId") - .HasColumnType("TEXT"); - - b.Property("ParentOutcomeId") - .HasColumnType("TEXT"); - - b.HasKey("DiscreteUtilityId", "ParentOutcomeId"); - - b.HasIndex("ParentOutcomeId"); - - b.ToTable("DiscreteUtilityParentOutcomes"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Edge", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("HeadId") - .HasColumnType("TEXT"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("TailId") - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("HeadId"); - - b.HasIndex("ProjectId"); - - b.HasIndex("TailId"); - - b.ToTable("Edges"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("Boundary") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Description") - .IsRequired() - .HasMaxLength(6000) - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("Order") - .HasColumnType("INTEGER"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("Type") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Issues"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("IssueId") - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("IssueId") - .IsUnique(); - - b.HasIndex("ProjectId"); - - b.ToTable("Nodes"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.NodeStyle", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("NodeId") - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.Property("XPosition") - .HasColumnType("REAL"); - - b.Property("YPosition") - .HasColumnType("REAL"); - - b.HasKey("Id"); - - b.HasIndex("NodeId") - .IsUnique(); - - b.ToTable("NodeStyles"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Objective", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Description") - .IsRequired() - .HasMaxLength(6000) - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("Type") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Objectives"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("DecisionId") - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.Property("Utility") - .HasColumnType("REAL"); - - b.HasKey("Id"); - - b.HasIndex("DecisionId"); - - b.HasIndex("ProjectId"); - - b.ToTable("Options"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Outcome", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("UncertaintyId") - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.Property("Utility") - .HasColumnType("REAL"); - - b.HasKey("Id"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UncertaintyId"); - - b.ToTable("Outcomes"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("EndDate") - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("OpportunityStatement") - .IsRequired() - .HasMaxLength(6000) - .HasColumnType("TEXT"); - - b.Property("ParentProjectId") - .HasColumnType("TEXT"); - - b.Property("ParentProjectName") - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("Public") - .HasColumnType("INTEGER"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Projects"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.ProjectRole", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("Role") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("UserId") - .IsRequired() - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UpdatedById"); - - b.HasIndex("UserId"); - - b.ToTable("ProjectRoles"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionEntry", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("ChildOptionId") - .HasColumnType("TEXT"); - - b.Property("ChildOutcomeId") - .HasColumnType("TEXT"); - - b.Property("ChildStateId") - .ValueGeneratedOnAddOrUpdate() - .HasColumnType("TEXT") - .HasComputedColumnSql("COALESCE([ChildOptionId], [ChildOutcomeId])", true); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("ParentOptionId") - .HasColumnType("TEXT"); - - b.Property("ParentOutcomeId") - .HasColumnType("TEXT"); - - b.Property("ParentStateId") - .ValueGeneratedOnAddOrUpdate() - .HasColumnType("TEXT") - .HasComputedColumnSql("COALESCE([ParentOptionId], [ParentOutcomeId])", true); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("RestrictionTableId") - .HasColumnType("TEXT"); - - b.Property("RestrictionValue") - .ValueGeneratedOnAdd() - .HasPrecision(53) - .HasColumnType("REAL") - .HasDefaultValue(1.0); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("ChildOptionId"); - - b.HasIndex("ChildOutcomeId"); - - b.HasIndex("ParentOptionId"); - - b.HasIndex("ParentOutcomeId"); - - b.HasIndex("ProjectId"); - - b.HasIndex("RestrictionTableId"); - - b.HasIndex("ParentStateId", "ChildStateId", "RestrictionTableId") - .IsUnique(); - - b.ToTable("RestrictionEntries", t => - { - t.HasCheckConstraint("CK_RestrictionEntry_Child", "([ChildOptionId] IS NULL AND [ChildOutcomeId] IS NOT NULL) OR ([ChildOptionId] IS NOT NULL AND [ChildOutcomeId] IS NULL)"); - - t.HasCheckConstraint("CK_RestrictionEntry_Parent", "([ParentOptionId] IS NULL AND [ParentOutcomeId] IS NOT NULL) OR ([ParentOptionId] IS NOT NULL AND [ParentOutcomeId] IS NULL)"); - }); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionTable", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("EdgeId") - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("EdgeId") - .IsUnique(); - - b.HasIndex("ProjectId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("RestrictionTables"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("CreatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Description") - .IsRequired() - .HasMaxLength(6000) - .HasColumnType("TEXT"); - - b.Property("Icon") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("IconColor") - .IsRequired() - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("Rationale") - .IsRequired() - .HasMaxLength(6000) - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.Property("UpdatedById") - .IsRequired() - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("CreatedById"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UpdatedById"); - - b.ToTable("Strategies"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.StrategyOption", b => - { - b.Property("StrategyId") - .HasColumnType("TEXT"); - - b.Property("OptionId") - .HasColumnType("TEXT"); - - b.HasKey("StrategyId", "OptionId"); - - b.HasIndex("OptionId"); - - b.ToTable("StrategyOptions"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("IsKey") - .HasColumnType("INTEGER"); - - b.Property("IssueId") - .HasColumnType("TEXT"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("IssueId") - .IsUnique(); - - b.HasIndex("ProjectId"); - - b.ToTable("Uncertainties"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.User", b => - { - b.Property("Id") - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.ToTable("Users"); - - b.HasData( - new - { - Id = "d008bfdf-fe89-48f3-80a8-777bba4d9bbf", - CreatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), - Name = "Deleted User", - UpdatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) - }); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("IssueId") - .HasColumnType("TEXT"); - - b.Property("ProjectId") - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.HasIndex("IssueId") - .IsUnique(); - - b.HasIndex("ProjectId"); - - b.ToTable("Utilities"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.ValueMetric", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("TEXT"); - - b.Property("CreatedAt") - .HasColumnType("TEXT"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(1000) - .HasColumnType("TEXT"); - - b.Property("UpdatedAt") - .HasColumnType("TEXT"); - - b.HasKey("Id"); - - b.ToTable("ValueMetrics"); - - b.HasData( - new - { - Id = new Guid("288e0811-7ab6-5d24-b80c-9fa925b848a6"), - CreatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), - Name = "value", - UpdatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) - }); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Assessment", b => - { - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("Assessments") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("Project"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.BoardNode", b => - { - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("BoardNodes") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("Project"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Decision", b => - { - b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") - .WithOne("Decision") - .HasForeignKey("PrismaApi.Domain.Entities.Decision", "IssueId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("Issue"); - - b.Navigation("Project"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DecisionQualityAssessment", b => - { - b.HasOne("PrismaApi.Domain.Entities.Assessment", "Assessment") - .WithMany("DecisionQualityAssessments") - .HasForeignKey("AssessmentId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("Assessment"); - - b.Navigation("CreatedBy"); - - b.Navigation("Project"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbability", b => - { - b.HasOne("PrismaApi.Domain.Entities.Outcome", "Outcome") - .WithMany() - .HasForeignKey("OutcomeId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Uncertainty", "Uncertainty") - .WithMany("DiscreteProbabilities") - .HasForeignKey("UncertaintyId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("Outcome"); - - b.Navigation("Project"); - - b.Navigation("Uncertainty"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOption", b => - { - b.HasOne("PrismaApi.Domain.Entities.DiscreteProbability", "DiscreteProbability") - .WithMany("ParentOptions") - .HasForeignKey("DiscreteProbabilityId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Option", "ParentOption") - .WithMany() - .HasForeignKey("ParentOptionId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("DiscreteProbability"); - - b.Navigation("ParentOption"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOutcome", b => - { - b.HasOne("PrismaApi.Domain.Entities.DiscreteProbability", "DiscreteProbability") - .WithMany("ParentOutcomes") - .HasForeignKey("DiscreteProbabilityId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Outcome", "ParentOutcome") - .WithMany() - .HasForeignKey("ParentOutcomeId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("DiscreteProbability"); - - b.Navigation("ParentOutcome"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => - { - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Utility", "Utility") - .WithMany("DiscreteUtilities") - .HasForeignKey("UtilityId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.ValueMetric", "ValueMetric") - .WithMany() - .HasForeignKey("ValueMetricId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Project"); - - b.Navigation("Utility"); - - b.Navigation("ValueMetric"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOption", b => - { - b.HasOne("PrismaApi.Domain.Entities.DiscreteUtility", "DiscreteUtility") - .WithMany("ParentOptions") - .HasForeignKey("DiscreteUtilityId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Option", "ParentOption") - .WithMany() - .HasForeignKey("ParentOptionId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("DiscreteUtility"); - - b.Navigation("ParentOption"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOutcome", b => - { - b.HasOne("PrismaApi.Domain.Entities.DiscreteUtility", "DiscreteUtility") - .WithMany("ParentOutcomes") - .HasForeignKey("DiscreteUtilityId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Outcome", "ParentOutcome") - .WithMany() - .HasForeignKey("ParentOutcomeId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("DiscreteUtility"); - - b.Navigation("ParentOutcome"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Edge", b => - { - b.HasOne("PrismaApi.Domain.Entities.Node", "HeadNode") - .WithMany("HeadEdges") - .HasForeignKey("HeadId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("Edges") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Node", "TailNode") - .WithMany("TailEdges") - .HasForeignKey("TailId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("HeadNode"); - - b.Navigation("Project"); - - b.Navigation("TailNode"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => - { - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("Issues") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("Project"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => - { - b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") - .WithOne("Node") - .HasForeignKey("PrismaApi.Domain.Entities.Node", "IssueId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("Nodes") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("Issue"); - - b.Navigation("Project"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.NodeStyle", b => - { - b.HasOne("PrismaApi.Domain.Entities.Node", "Node") - .WithOne("NodeStyle") - .HasForeignKey("PrismaApi.Domain.Entities.NodeStyle", "NodeId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Node"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Objective", b => - { - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("Objectives") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("Project"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => - { - b.HasOne("PrismaApi.Domain.Entities.Decision", "Decision") - .WithMany("Options") - .HasForeignKey("DecisionId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("Decision"); - - b.Navigation("Project"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Outcome", b => - { - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Uncertainty", "Uncertainty") - .WithMany("Outcomes") - .HasForeignKey("UncertaintyId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Project"); - - b.Navigation("Uncertainty"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => - { - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.ProjectRole", b => - { - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("ProjectRoles") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "User") - .WithMany("ProjectRoles") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("Project"); - - b.Navigation("UpdatedBy"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionEntry", b => - { - b.HasOne("PrismaApi.Domain.Entities.Option", "ChildOption") - .WithMany() - .HasForeignKey("ChildOptionId") - .OnDelete(DeleteBehavior.Restrict); - - b.HasOne("PrismaApi.Domain.Entities.Outcome", "ChildOutcome") - .WithMany() - .HasForeignKey("ChildOutcomeId") - .OnDelete(DeleteBehavior.Restrict); - - b.HasOne("PrismaApi.Domain.Entities.Option", "ParentOption") - .WithMany() - .HasForeignKey("ParentOptionId") - .OnDelete(DeleteBehavior.Restrict); - - b.HasOne("PrismaApi.Domain.Entities.Outcome", "ParentOutcome") - .WithMany() - .HasForeignKey("ParentOutcomeId") - .OnDelete(DeleteBehavior.Restrict); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.RestrictionTable", "RestrictionTable") - .WithMany("RestrictionEntries") - .HasForeignKey("RestrictionTableId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("ChildOption"); - - b.Navigation("ChildOutcome"); - - b.Navigation("ParentOption"); - - b.Navigation("ParentOutcome"); - - b.Navigation("Project"); - - b.Navigation("RestrictionTable"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionTable", b => - { - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Edge", "Edge") - .WithOne() - .HasForeignKey("PrismaApi.Domain.Entities.RestrictionTable", "EdgeId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("Edge"); - - b.Navigation("Project"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => - { - b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") - .WithMany() - .HasForeignKey("CreatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany("Strategies") - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") - .WithMany() - .HasForeignKey("UpdatedById") - .OnDelete(DeleteBehavior.Restrict) - .IsRequired(); - - b.Navigation("CreatedBy"); - - b.Navigation("Project"); - - b.Navigation("UpdatedBy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.StrategyOption", b => - { - b.HasOne("PrismaApi.Domain.Entities.Option", "Option") - .WithMany("StrategyOptions") - .HasForeignKey("OptionId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Strategy", "Strategy") - .WithMany("StrategyOptions") - .HasForeignKey("StrategyId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Option"); - - b.Navigation("Strategy"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => - { - b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") - .WithOne("Uncertainty") - .HasForeignKey("PrismaApi.Domain.Entities.Uncertainty", "IssueId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("Issue"); - - b.Navigation("Project"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => - { - b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") - .WithOne("Utility") - .HasForeignKey("PrismaApi.Domain.Entities.Utility", "IssueId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PrismaApi.Domain.Entities.Project", "Project") - .WithMany() - .HasForeignKey("ProjectId") - .OnDelete(DeleteBehavior.NoAction) - .IsRequired(); - - b.Navigation("Issue"); - - b.Navigation("Project"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Assessment", b => - { - b.Navigation("DecisionQualityAssessments"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Decision", b => - { - b.Navigation("Options"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbability", b => - { - b.Navigation("ParentOptions"); - - b.Navigation("ParentOutcomes"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => - { - b.Navigation("ParentOptions"); - - b.Navigation("ParentOutcomes"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => - { - b.Navigation("Decision"); - - b.Navigation("Node"); - - b.Navigation("Uncertainty"); - - b.Navigation("Utility"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => - { - b.Navigation("HeadEdges"); - - b.Navigation("NodeStyle"); - - b.Navigation("TailEdges"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => - { - b.Navigation("StrategyOptions"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => - { - b.Navigation("Assessments"); - - b.Navigation("BoardNodes"); - - b.Navigation("Edges"); - - b.Navigation("Issues"); - - b.Navigation("Nodes"); - - b.Navigation("Objectives"); - - b.Navigation("ProjectRoles"); - - b.Navigation("Strategies"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionTable", b => - { - b.Navigation("RestrictionEntries"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => - { - b.Navigation("StrategyOptions"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => - { - b.Navigation("DiscreteProbabilities"); - - b.Navigation("Outcomes"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.User", b => - { - b.Navigation("ProjectRoles"); - }); - - modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => - { - b.Navigation("DiscreteUtilities"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/PrismaDotnetApi/SqliteMigrations/20260715095307_AddDeletedUser.cs b/PrismaDotnetApi/SqliteMigrations/20260715095307_AddDeletedUser.cs deleted file mode 100644 index 95eeeb4..0000000 --- a/PrismaDotnetApi/SqliteMigrations/20260715095307_AddDeletedUser.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace PrismaApi.Infrastructure.Migrations -{ - /// - public partial class AddDeletedUser : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.InsertData( - table: "Users", - columns: new[] { "Id", "CreatedAt", "Name", "UpdatedAt" }, - values: new object[] { "d008bfdf-fe89-48f3-80a8-777bba4d9bbf", new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), "Deleted User", new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DeleteData( - table: "Users", - keyColumn: "Id", - keyValue: "d008bfdf-fe89-48f3-80a8-777bba4d9bbf"); - } - } -} diff --git a/PrismaDotnetApi/SqliteMigrations/AppDbContextModelSnapshot.cs b/PrismaDotnetApi/SqliteMigrations/AppDbContextModelSnapshot.cs index 1989b7c..01a040c 100644 --- a/PrismaDotnetApi/SqliteMigrations/AppDbContextModelSnapshot.cs +++ b/PrismaDotnetApi/SqliteMigrations/AppDbContextModelSnapshot.cs @@ -217,7 +217,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ProjectId"); - b.ToTable("Decisions"); + b.ToTable("Decisions", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.DecisionQualityAssessment", b => @@ -315,7 +315,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UncertaintyId"); - b.ToTable("DiscreteProbabilities"); + b.ToTable("DiscreteProbabilities", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOption", b => @@ -330,7 +330,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ParentOptionId"); - b.ToTable("DiscreteProbabilityParentOptions"); + b.ToTable("DiscreteProbabilityParentOptions", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOutcome", b => @@ -345,7 +345,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ParentOutcomeId"); - b.ToTable("DiscreteProbabilityParentOutcomes"); + b.ToTable("DiscreteProbabilityParentOutcomes", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => @@ -381,7 +381,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ValueMetricId"); - b.ToTable("DiscreteUtilities"); + b.ToTable("DiscreteUtilities", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOption", b => @@ -396,7 +396,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ParentOptionId"); - b.ToTable("DiscreteUtilityParentOptions"); + b.ToTable("DiscreteUtilityParentOptions", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOutcome", b => @@ -411,7 +411,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ParentOutcomeId"); - b.ToTable("DiscreteUtilityParentOutcomes"); + b.ToTable("DiscreteUtilityParentOutcomes", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Edge", b => @@ -443,7 +443,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("TailId"); - b.ToTable("Edges"); + b.ToTable("Edges", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => @@ -500,7 +500,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UpdatedById"); - b.ToTable("Issues"); + b.ToTable("Issues", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => @@ -533,7 +533,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ProjectId"); - b.ToTable("Nodes"); + b.ToTable("Nodes", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.NodeStyle", b => @@ -562,7 +562,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("NodeId") .IsUnique(); - b.ToTable("NodeStyles"); + b.ToTable("NodeStyles", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Objective", b => @@ -611,7 +611,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UpdatedById"); - b.ToTable("Objectives"); + b.ToTable("Objectives", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => @@ -646,7 +646,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ProjectId"); - b.ToTable("Options"); + b.ToTable("Options", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Outcome", b => @@ -681,7 +681,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UncertaintyId"); - b.ToTable("Outcomes"); + b.ToTable("Outcomes", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => @@ -733,7 +733,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UpdatedById"); - b.ToTable("Projects"); + b.ToTable("Projects", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.ProjectRole", b => @@ -778,7 +778,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UserId"); - b.ToTable("ProjectRoles"); + b.ToTable("ProjectRoles", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionEntry", b => @@ -844,7 +844,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ParentStateId", "ChildStateId", "RestrictionTableId") .IsUnique(); - b.ToTable("RestrictionEntries", t => + b.ToTable("RestrictionEntries", null, t => { t.HasCheckConstraint("CK_RestrictionEntry_Child", "([ChildOptionId] IS NULL AND [ChildOutcomeId] IS NOT NULL) OR ([ChildOptionId] IS NOT NULL AND [ChildOutcomeId] IS NULL)"); @@ -893,7 +893,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UpdatedById"); - b.ToTable("RestrictionTables"); + b.ToTable("RestrictionTables", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => @@ -950,7 +950,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UpdatedById"); - b.ToTable("Strategies"); + b.ToTable("Strategies", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.StrategyOption", b => @@ -965,7 +965,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("OptionId"); - b.ToTable("StrategyOptions"); + b.ToTable("StrategyOptions", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => @@ -996,7 +996,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ProjectId"); - b.ToTable("Uncertainties"); + b.ToTable("Uncertainties", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.User", b => @@ -1017,16 +1017,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasKey("Id"); - b.ToTable("Users"); - - b.HasData( - new - { - Id = "d008bfdf-fe89-48f3-80a8-777bba4d9bbf", - CreatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), - Name = "Deleted User", - UpdatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) - }); + b.ToTable("Users", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => @@ -1054,7 +1045,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ProjectId"); - b.ToTable("Utilities"); + b.ToTable("Utilities", (string)null); }); modelBuilder.Entity("PrismaApi.Domain.Entities.ValueMetric", b => @@ -1076,7 +1067,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasKey("Id"); - b.ToTable("ValueMetrics"); + b.ToTable("ValueMetrics", (string)null); b.HasData( new From 266def35d89899f47cb3add233c4d13f11ae129b Mon Sep 17 00:00:00 2001 From: EinarSalbouvet Date: Wed, 22 Jul 2026 09:35:41 +0200 Subject: [PATCH 16/17] Add migration to insert a deleted user and update table mappings - Created a new migration `AddDeletedUser` to insert a user with the name "Deleted User" into the Users table. - Updated the AppDbContextModelSnapshot to reflect changes in table mappings by removing null parameters from `ToTable` method calls for various entities. --- .../20260722065559_AddDeletedUser.Designer.cs | 1840 +++++++++++++++++ .../20260722065559_AddDeletedUser.cs | 29 + .../AppDbContextModelSnapshot.cs | 57 +- .../20260722065526_AddDeletedUser.Designer.cs | 1835 ++++++++++++++++ .../20260722065526_AddDeletedUser.cs | 29 + .../AppDbContextModelSnapshot.cs | 57 +- 6 files changed, 3799 insertions(+), 48 deletions(-) create mode 100644 PrismaDotnetApi/SqlServerMigrations/20260722065559_AddDeletedUser.Designer.cs create mode 100644 PrismaDotnetApi/SqlServerMigrations/20260722065559_AddDeletedUser.cs create mode 100644 PrismaDotnetApi/SqliteMigrations/20260722065526_AddDeletedUser.Designer.cs create mode 100644 PrismaDotnetApi/SqliteMigrations/20260722065526_AddDeletedUser.cs diff --git a/PrismaDotnetApi/SqlServerMigrations/20260722065559_AddDeletedUser.Designer.cs b/PrismaDotnetApi/SqlServerMigrations/20260722065559_AddDeletedUser.Designer.cs new file mode 100644 index 0000000..a972b04 --- /dev/null +++ b/PrismaDotnetApi/SqlServerMigrations/20260722065559_AddDeletedUser.Designer.cs @@ -0,0 +1,1840 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using PrismaApi.Infrastructure.Context; + +#nullable disable + +namespace PrismaApi.Infrastructure.Migrations +{ + [DbContext(typeof(AppDbContext))] + [Migration("20260722065559_AddDeletedUser")] + partial class AddDeletedUser + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "9.0.13") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Assessment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("IsCompleted") + .HasColumnType("bit"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Assessments", (string)null); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.BoardNode", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("BoardSheetId") + .HasColumnType("uniqueidentifier"); + + b.Property("Color") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Data") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Height") + .HasColumnType("float"); + + b.Property("Opacity") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasDefaultValue(100); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("Rotation") + .HasColumnType("float"); + + b.Property("StrokeStyle") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("nvarchar(max)") + .HasDefaultValue("Solid"); + + b.Property("StrokeWidth") + .ValueGeneratedOnAdd() + .HasColumnType("real") + .HasDefaultValue(8f); + + b.Property("TextSize") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasDefaultValue(24); + + b.Property("Type") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Width") + .HasColumnType("float"); + + b.Property("XPosition") + .HasColumnType("float"); + + b.Property("YPosition") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.HasIndex("BoardSheetId"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("BoardNode", (string)null); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.BoardSheet", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("BoardSheet", (string)null); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Decision", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("IssueId") + .HasColumnType("uniqueidentifier"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.HasKey("Id"); + + b.HasIndex("IssueId") + .IsUnique(); + + b.HasIndex("ProjectId"); + + b.ToTable("Decisions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DecisionQualityAssessment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AppropriateFrame") + .HasColumnType("int"); + + b.Property("AssessmentId") + .HasColumnType("uniqueidentifier"); + + b.Property("Comment") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("nvarchar(max)"); + + b.Property("CommitmentToAction") + .HasColumnType("int"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("DoableAlternatives") + .HasColumnType("int"); + + b.Property("InformationReliability") + .HasColumnType("int"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("ReasoningCorrectness") + .HasColumnType("int"); + + b.Property("TradeOffAnalysis") + .HasColumnType("int"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("AssessmentId"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("DecisionQualityAssessments", (string)null); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbability", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("OutcomeId") + .HasColumnType("uniqueidentifier"); + + b.Property("Probability") + .HasPrecision(53) + .HasColumnType("float(53)"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("UncertaintyId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.HasKey("Id"); + + b.HasIndex("OutcomeId"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UncertaintyId"); + + b.ToTable("DiscreteProbabilities"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOption", b => + { + b.Property("DiscreteProbabilityId") + .HasColumnType("uniqueidentifier"); + + b.Property("ParentOptionId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("DiscreteProbabilityId", "ParentOptionId"); + + b.HasIndex("ParentOptionId"); + + b.ToTable("DiscreteProbabilityParentOptions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOutcome", b => + { + b.Property("DiscreteProbabilityId") + .HasColumnType("uniqueidentifier"); + + b.Property("ParentOutcomeId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("DiscreteProbabilityId", "ParentOutcomeId"); + + b.HasIndex("ParentOutcomeId"); + + b.ToTable("DiscreteProbabilityParentOutcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("UtilityId") + .HasColumnType("uniqueidentifier"); + + b.Property("UtilityValue") + .HasPrecision(53) + .HasColumnType("float(53)"); + + b.Property("ValueMetricId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UtilityId"); + + b.HasIndex("ValueMetricId"); + + b.ToTable("DiscreteUtilities"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOption", b => + { + b.Property("DiscreteUtilityId") + .HasColumnType("uniqueidentifier"); + + b.Property("ParentOptionId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("DiscreteUtilityId", "ParentOptionId"); + + b.HasIndex("ParentOptionId"); + + b.ToTable("DiscreteUtilityParentOptions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOutcome", b => + { + b.Property("DiscreteUtilityId") + .HasColumnType("uniqueidentifier"); + + b.Property("ParentOutcomeId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("DiscreteUtilityId", "ParentOutcomeId"); + + b.HasIndex("ParentOutcomeId"); + + b.ToTable("DiscreteUtilityParentOutcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Edge", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("HeadId") + .HasColumnType("uniqueidentifier"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("TailId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.HasKey("Id"); + + b.HasIndex("HeadId"); + + b.HasIndex("ProjectId"); + + b.HasIndex("TailId"); + + b.ToTable("Edges"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Boundary") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("Order") + .HasColumnType("int"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Issues"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("IssueId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.HasKey("Id"); + + b.HasIndex("IssueId") + .IsUnique(); + + b.HasIndex("ProjectId"); + + b.ToTable("Nodes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.NodeStyle", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("NodeId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("XPosition") + .HasColumnType("float"); + + b.Property("YPosition") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.HasIndex("NodeId") + .IsUnique(); + + b.ToTable("NodeStyles"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Objective", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Objectives"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("DecisionId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Utility") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.HasIndex("DecisionId"); + + b.HasIndex("ProjectId"); + + b.ToTable("Options"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Outcome", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("UncertaintyId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Utility") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UncertaintyId"); + + b.ToTable("Outcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("EndDate") + .HasColumnType("datetimeoffset"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("OpportunityStatement") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("nvarchar(max)"); + + b.Property("ParentProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("ParentProjectName") + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("Public") + .HasColumnType("bit"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Projects"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.ProjectRole", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("Role") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.HasIndex("UserId"); + + b.ToTable("ProjectRoles"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionEntry", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ChildOptionId") + .HasColumnType("uniqueidentifier"); + + b.Property("ChildOutcomeId") + .HasColumnType("uniqueidentifier"); + + b.Property("ChildStateId") + .ValueGeneratedOnAddOrUpdate() + .HasColumnType("uniqueidentifier") + .HasComputedColumnSql("COALESCE([ChildOptionId], [ChildOutcomeId])", true); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("ParentOptionId") + .HasColumnType("uniqueidentifier"); + + b.Property("ParentOutcomeId") + .HasColumnType("uniqueidentifier"); + + b.Property("ParentStateId") + .ValueGeneratedOnAddOrUpdate() + .HasColumnType("uniqueidentifier") + .HasComputedColumnSql("COALESCE([ParentOptionId], [ParentOutcomeId])", true); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("RestrictionTableId") + .HasColumnType("uniqueidentifier"); + + b.Property("RestrictionValue") + .ValueGeneratedOnAdd() + .HasPrecision(53) + .HasColumnType("float(53)") + .HasDefaultValue(1.0); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.HasKey("Id"); + + b.HasIndex("ChildOptionId"); + + b.HasIndex("ChildOutcomeId"); + + b.HasIndex("ParentOptionId"); + + b.HasIndex("ParentOutcomeId"); + + b.HasIndex("ProjectId"); + + b.HasIndex("RestrictionTableId"); + + b.HasIndex("ParentStateId", "ChildStateId", "RestrictionTableId") + .IsUnique(); + + b.ToTable("RestrictionEntries", t => + { + t.HasCheckConstraint("CK_RestrictionEntry_Child", "([ChildOptionId] IS NULL AND [ChildOutcomeId] IS NOT NULL) OR ([ChildOptionId] IS NOT NULL AND [ChildOutcomeId] IS NULL)"); + + t.HasCheckConstraint("CK_RestrictionEntry_Parent", "([ParentOptionId] IS NULL AND [ParentOutcomeId] IS NOT NULL) OR ([ParentOptionId] IS NOT NULL AND [ParentOutcomeId] IS NULL)"); + }); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionTable", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("EdgeId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("EdgeId") + .IsUnique(); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("RestrictionTables"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("nvarchar(max)"); + + b.Property("Icon") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("IconColor") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("Rationale") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("nvarchar(max)"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Strategies"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.StrategyOption", b => + { + b.Property("StrategyId") + .HasColumnType("uniqueidentifier"); + + b.Property("OptionId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("StrategyId", "OptionId"); + + b.HasIndex("OptionId"); + + b.ToTable("StrategyOptions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("IsKey") + .HasColumnType("bit"); + + b.Property("IssueId") + .HasColumnType("uniqueidentifier"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.HasKey("Id"); + + b.HasIndex("IssueId") + .IsUnique(); + + b.HasIndex("ProjectId"); + + b.ToTable("Uncertainties"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.User", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.HasKey("Id"); + + b.ToTable("Users"); + + b.HasData( + new + { + Id = "d008bfdf-fe89-48f3-80a8-777bba4d9bbf", + CreatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), + Name = "Deleted User", + UpdatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) + }); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("IssueId") + .HasColumnType("uniqueidentifier"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.HasKey("Id"); + + b.HasIndex("IssueId") + .IsUnique(); + + b.HasIndex("ProjectId"); + + b.ToTable("Utilities"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.ValueMetric", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("UpdatedAt") + .HasColumnType("datetimeoffset"); + + b.HasKey("Id"); + + b.ToTable("ValueMetrics"); + + b.HasData( + new + { + Id = new Guid("288e0811-7ab6-5d24-b80c-9fa925b848a6"), + CreatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), + Name = "value", + UpdatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) + }); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Assessment", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Assessments") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.BoardNode", b => + { + b.HasOne("PrismaApi.Domain.Entities.BoardSheet", "BoardSheet") + .WithMany() + .HasForeignKey("BoardSheetId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("BoardNodes") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("BoardSheet"); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.BoardSheet", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("BoardSheets") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Decision", b => + { + b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") + .WithOne("Decision") + .HasForeignKey("PrismaApi.Domain.Entities.Decision", "IssueId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Issue"); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DecisionQualityAssessment", b => + { + b.HasOne("PrismaApi.Domain.Entities.Assessment", "Assessment") + .WithMany("DecisionQualityAssessments") + .HasForeignKey("AssessmentId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("Assessment"); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbability", b => + { + b.HasOne("PrismaApi.Domain.Entities.Outcome", "Outcome") + .WithMany() + .HasForeignKey("OutcomeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Uncertainty", "Uncertainty") + .WithMany("DiscreteProbabilities") + .HasForeignKey("UncertaintyId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Outcome"); + + b.Navigation("Project"); + + b.Navigation("Uncertainty"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOption", b => + { + b.HasOne("PrismaApi.Domain.Entities.DiscreteProbability", "DiscreteProbability") + .WithMany("ParentOptions") + .HasForeignKey("DiscreteProbabilityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Option", "ParentOption") + .WithMany() + .HasForeignKey("ParentOptionId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("DiscreteProbability"); + + b.Navigation("ParentOption"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOutcome", b => + { + b.HasOne("PrismaApi.Domain.Entities.DiscreteProbability", "DiscreteProbability") + .WithMany("ParentOutcomes") + .HasForeignKey("DiscreteProbabilityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Outcome", "ParentOutcome") + .WithMany() + .HasForeignKey("ParentOutcomeId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("DiscreteProbability"); + + b.Navigation("ParentOutcome"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => + { + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Utility", "Utility") + .WithMany("DiscreteUtilities") + .HasForeignKey("UtilityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.ValueMetric", "ValueMetric") + .WithMany() + .HasForeignKey("ValueMetricId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Project"); + + b.Navigation("Utility"); + + b.Navigation("ValueMetric"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOption", b => + { + b.HasOne("PrismaApi.Domain.Entities.DiscreteUtility", "DiscreteUtility") + .WithMany("ParentOptions") + .HasForeignKey("DiscreteUtilityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Option", "ParentOption") + .WithMany() + .HasForeignKey("ParentOptionId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("DiscreteUtility"); + + b.Navigation("ParentOption"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOutcome", b => + { + b.HasOne("PrismaApi.Domain.Entities.DiscreteUtility", "DiscreteUtility") + .WithMany("ParentOutcomes") + .HasForeignKey("DiscreteUtilityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Outcome", "ParentOutcome") + .WithMany() + .HasForeignKey("ParentOutcomeId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("DiscreteUtility"); + + b.Navigation("ParentOutcome"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Edge", b => + { + b.HasOne("PrismaApi.Domain.Entities.Node", "HeadNode") + .WithMany("HeadEdges") + .HasForeignKey("HeadId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Edges") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Node", "TailNode") + .WithMany("TailEdges") + .HasForeignKey("TailId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("HeadNode"); + + b.Navigation("Project"); + + b.Navigation("TailNode"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Issues") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => + { + b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") + .WithOne("Node") + .HasForeignKey("PrismaApi.Domain.Entities.Node", "IssueId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Nodes") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Issue"); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.NodeStyle", b => + { + b.HasOne("PrismaApi.Domain.Entities.Node", "Node") + .WithOne("NodeStyle") + .HasForeignKey("PrismaApi.Domain.Entities.NodeStyle", "NodeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Node"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Objective", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Objectives") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => + { + b.HasOne("PrismaApi.Domain.Entities.Decision", "Decision") + .WithMany("Options") + .HasForeignKey("DecisionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Decision"); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Outcome", b => + { + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Uncertainty", "Uncertainty") + .WithMany("Outcomes") + .HasForeignKey("UncertaintyId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Project"); + + b.Navigation("Uncertainty"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.ProjectRole", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("ProjectRoles") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "User") + .WithMany("ProjectRoles") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionEntry", b => + { + b.HasOne("PrismaApi.Domain.Entities.Option", "ChildOption") + .WithMany() + .HasForeignKey("ChildOptionId") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("PrismaApi.Domain.Entities.Outcome", "ChildOutcome") + .WithMany() + .HasForeignKey("ChildOutcomeId") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("PrismaApi.Domain.Entities.Option", "ParentOption") + .WithMany() + .HasForeignKey("ParentOptionId") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("PrismaApi.Domain.Entities.Outcome", "ParentOutcome") + .WithMany() + .HasForeignKey("ParentOutcomeId") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.RestrictionTable", "RestrictionTable") + .WithMany("RestrictionEntries") + .HasForeignKey("RestrictionTableId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ChildOption"); + + b.Navigation("ChildOutcome"); + + b.Navigation("ParentOption"); + + b.Navigation("ParentOutcome"); + + b.Navigation("Project"); + + b.Navigation("RestrictionTable"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionTable", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Edge", "Edge") + .WithOne() + .HasForeignKey("PrismaApi.Domain.Entities.RestrictionTable", "EdgeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Edge"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Strategies") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.StrategyOption", b => + { + b.HasOne("PrismaApi.Domain.Entities.Option", "Option") + .WithMany("StrategyOptions") + .HasForeignKey("OptionId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Strategy", "Strategy") + .WithMany("StrategyOptions") + .HasForeignKey("StrategyId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Option"); + + b.Navigation("Strategy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => + { + b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") + .WithOne("Uncertainty") + .HasForeignKey("PrismaApi.Domain.Entities.Uncertainty", "IssueId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Issue"); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => + { + b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") + .WithOne("Utility") + .HasForeignKey("PrismaApi.Domain.Entities.Utility", "IssueId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Issue"); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Assessment", b => + { + b.Navigation("DecisionQualityAssessments"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Decision", b => + { + b.Navigation("Options"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbability", b => + { + b.Navigation("ParentOptions"); + + b.Navigation("ParentOutcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => + { + b.Navigation("ParentOptions"); + + b.Navigation("ParentOutcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => + { + b.Navigation("Decision"); + + b.Navigation("Node"); + + b.Navigation("Uncertainty"); + + b.Navigation("Utility"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => + { + b.Navigation("HeadEdges"); + + b.Navigation("NodeStyle"); + + b.Navigation("TailEdges"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => + { + b.Navigation("StrategyOptions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => + { + b.Navigation("Assessments"); + + b.Navigation("BoardNodes"); + + b.Navigation("BoardSheets"); + + b.Navigation("Edges"); + + b.Navigation("Issues"); + + b.Navigation("Nodes"); + + b.Navigation("Objectives"); + + b.Navigation("ProjectRoles"); + + b.Navigation("Strategies"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionTable", b => + { + b.Navigation("RestrictionEntries"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => + { + b.Navigation("StrategyOptions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => + { + b.Navigation("DiscreteProbabilities"); + + b.Navigation("Outcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.User", b => + { + b.Navigation("ProjectRoles"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => + { + b.Navigation("DiscreteUtilities"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/PrismaDotnetApi/SqlServerMigrations/20260722065559_AddDeletedUser.cs b/PrismaDotnetApi/SqlServerMigrations/20260722065559_AddDeletedUser.cs new file mode 100644 index 0000000..95eeeb4 --- /dev/null +++ b/PrismaDotnetApi/SqlServerMigrations/20260722065559_AddDeletedUser.cs @@ -0,0 +1,29 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace PrismaApi.Infrastructure.Migrations +{ + /// + public partial class AddDeletedUser : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.InsertData( + table: "Users", + columns: new[] { "Id", "CreatedAt", "Name", "UpdatedAt" }, + values: new object[] { "d008bfdf-fe89-48f3-80a8-777bba4d9bbf", new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), "Deleted User", new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) }); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DeleteData( + table: "Users", + keyColumn: "Id", + keyValue: "d008bfdf-fe89-48f3-80a8-777bba4d9bbf"); + } + } +} diff --git a/PrismaDotnetApi/SqlServerMigrations/AppDbContextModelSnapshot.cs b/PrismaDotnetApi/SqlServerMigrations/AppDbContextModelSnapshot.cs index 3bcc581..c2c052b 100644 --- a/PrismaDotnetApi/SqlServerMigrations/AppDbContextModelSnapshot.cs +++ b/PrismaDotnetApi/SqlServerMigrations/AppDbContextModelSnapshot.cs @@ -222,7 +222,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ProjectId"); - b.ToTable("Decisions", (string)null); + b.ToTable("Decisions"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.DecisionQualityAssessment", b => @@ -320,7 +320,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UncertaintyId"); - b.ToTable("DiscreteProbabilities", (string)null); + b.ToTable("DiscreteProbabilities"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOption", b => @@ -335,7 +335,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ParentOptionId"); - b.ToTable("DiscreteProbabilityParentOptions", (string)null); + b.ToTable("DiscreteProbabilityParentOptions"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOutcome", b => @@ -350,7 +350,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ParentOutcomeId"); - b.ToTable("DiscreteProbabilityParentOutcomes", (string)null); + b.ToTable("DiscreteProbabilityParentOutcomes"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => @@ -386,7 +386,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ValueMetricId"); - b.ToTable("DiscreteUtilities", (string)null); + b.ToTable("DiscreteUtilities"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOption", b => @@ -401,7 +401,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ParentOptionId"); - b.ToTable("DiscreteUtilityParentOptions", (string)null); + b.ToTable("DiscreteUtilityParentOptions"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOutcome", b => @@ -416,7 +416,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ParentOutcomeId"); - b.ToTable("DiscreteUtilityParentOutcomes", (string)null); + b.ToTable("DiscreteUtilityParentOutcomes"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Edge", b => @@ -448,7 +448,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("TailId"); - b.ToTable("Edges", (string)null); + b.ToTable("Edges"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => @@ -505,7 +505,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UpdatedById"); - b.ToTable("Issues", (string)null); + b.ToTable("Issues"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => @@ -538,7 +538,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ProjectId"); - b.ToTable("Nodes", (string)null); + b.ToTable("Nodes"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.NodeStyle", b => @@ -567,7 +567,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("NodeId") .IsUnique(); - b.ToTable("NodeStyles", (string)null); + b.ToTable("NodeStyles"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Objective", b => @@ -616,7 +616,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UpdatedById"); - b.ToTable("Objectives", (string)null); + b.ToTable("Objectives"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => @@ -651,7 +651,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ProjectId"); - b.ToTable("Options", (string)null); + b.ToTable("Options"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Outcome", b => @@ -686,7 +686,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UncertaintyId"); - b.ToTable("Outcomes", (string)null); + b.ToTable("Outcomes"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => @@ -738,7 +738,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UpdatedById"); - b.ToTable("Projects", (string)null); + b.ToTable("Projects"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.ProjectRole", b => @@ -783,7 +783,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UserId"); - b.ToTable("ProjectRoles", (string)null); + b.ToTable("ProjectRoles"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionEntry", b => @@ -849,7 +849,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ParentStateId", "ChildStateId", "RestrictionTableId") .IsUnique(); - b.ToTable("RestrictionEntries", null, t => + b.ToTable("RestrictionEntries", t => { t.HasCheckConstraint("CK_RestrictionEntry_Child", "([ChildOptionId] IS NULL AND [ChildOutcomeId] IS NOT NULL) OR ([ChildOptionId] IS NOT NULL AND [ChildOutcomeId] IS NULL)"); @@ -898,7 +898,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UpdatedById"); - b.ToTable("RestrictionTables", (string)null); + b.ToTable("RestrictionTables"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => @@ -955,7 +955,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UpdatedById"); - b.ToTable("Strategies", (string)null); + b.ToTable("Strategies"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.StrategyOption", b => @@ -970,7 +970,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("OptionId"); - b.ToTable("StrategyOptions", (string)null); + b.ToTable("StrategyOptions"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => @@ -1001,7 +1001,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ProjectId"); - b.ToTable("Uncertainties", (string)null); + b.ToTable("Uncertainties"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.User", b => @@ -1022,7 +1022,16 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasKey("Id"); - b.ToTable("Users", (string)null); + b.ToTable("Users"); + + b.HasData( + new + { + Id = "d008bfdf-fe89-48f3-80a8-777bba4d9bbf", + CreatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), + Name = "Deleted User", + UpdatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) + }); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => @@ -1050,7 +1059,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ProjectId"); - b.ToTable("Utilities", (string)null); + b.ToTable("Utilities"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.ValueMetric", b => @@ -1072,7 +1081,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasKey("Id"); - b.ToTable("ValueMetrics", (string)null); + b.ToTable("ValueMetrics"); b.HasData( new diff --git a/PrismaDotnetApi/SqliteMigrations/20260722065526_AddDeletedUser.Designer.cs b/PrismaDotnetApi/SqliteMigrations/20260722065526_AddDeletedUser.Designer.cs new file mode 100644 index 0000000..07e355a --- /dev/null +++ b/PrismaDotnetApi/SqliteMigrations/20260722065526_AddDeletedUser.Designer.cs @@ -0,0 +1,1835 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using PrismaApi.Infrastructure.Context; + +#nullable disable + +namespace PrismaApi.Infrastructure.Migrations +{ + [DbContext(typeof(AppDbContext))] + [Migration("20260722065526_AddDeletedUser")] + partial class AddDeletedUser + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "9.0.13"); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Assessment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("IsCompleted") + .HasColumnType("INTEGER"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Assessments", (string)null); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.BoardNode", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("BoardSheetId") + .HasColumnType("TEXT"); + + b.Property("Color") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Data") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Height") + .HasColumnType("REAL"); + + b.Property("Opacity") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasDefaultValue(100); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("Rotation") + .HasColumnType("REAL"); + + b.Property("StrokeStyle") + .IsRequired() + .ValueGeneratedOnAdd() + .HasColumnType("TEXT") + .HasDefaultValue("Solid"); + + b.Property("StrokeWidth") + .ValueGeneratedOnAdd() + .HasColumnType("REAL") + .HasDefaultValue(8f); + + b.Property("TextSize") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER") + .HasDefaultValue(24); + + b.Property("Type") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Width") + .HasColumnType("REAL"); + + b.Property("XPosition") + .HasColumnType("REAL"); + + b.Property("YPosition") + .HasColumnType("REAL"); + + b.HasKey("Id"); + + b.HasIndex("BoardSheetId"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("BoardNode", (string)null); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.BoardSheet", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("BoardSheet", (string)null); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Decision", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("IssueId") + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("IssueId") + .IsUnique(); + + b.HasIndex("ProjectId"); + + b.ToTable("Decisions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DecisionQualityAssessment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("AppropriateFrame") + .HasColumnType("INTEGER"); + + b.Property("AssessmentId") + .HasColumnType("TEXT"); + + b.Property("Comment") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("TEXT"); + + b.Property("CommitmentToAction") + .HasColumnType("INTEGER"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("DoableAlternatives") + .HasColumnType("INTEGER"); + + b.Property("InformationReliability") + .HasColumnType("INTEGER"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("ReasoningCorrectness") + .HasColumnType("INTEGER"); + + b.Property("TradeOffAnalysis") + .HasColumnType("INTEGER"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("AssessmentId"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("DecisionQualityAssessments", (string)null); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbability", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("OutcomeId") + .HasColumnType("TEXT"); + + b.Property("Probability") + .HasPrecision(53) + .HasColumnType("REAL"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("UncertaintyId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("OutcomeId"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UncertaintyId"); + + b.ToTable("DiscreteProbabilities"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOption", b => + { + b.Property("DiscreteProbabilityId") + .HasColumnType("TEXT"); + + b.Property("ParentOptionId") + .HasColumnType("TEXT"); + + b.HasKey("DiscreteProbabilityId", "ParentOptionId"); + + b.HasIndex("ParentOptionId"); + + b.ToTable("DiscreteProbabilityParentOptions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOutcome", b => + { + b.Property("DiscreteProbabilityId") + .HasColumnType("TEXT"); + + b.Property("ParentOutcomeId") + .HasColumnType("TEXT"); + + b.HasKey("DiscreteProbabilityId", "ParentOutcomeId"); + + b.HasIndex("ParentOutcomeId"); + + b.ToTable("DiscreteProbabilityParentOutcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("UtilityId") + .HasColumnType("TEXT"); + + b.Property("UtilityValue") + .HasPrecision(53) + .HasColumnType("REAL"); + + b.Property("ValueMetricId") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UtilityId"); + + b.HasIndex("ValueMetricId"); + + b.ToTable("DiscreteUtilities"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOption", b => + { + b.Property("DiscreteUtilityId") + .HasColumnType("TEXT"); + + b.Property("ParentOptionId") + .HasColumnType("TEXT"); + + b.HasKey("DiscreteUtilityId", "ParentOptionId"); + + b.HasIndex("ParentOptionId"); + + b.ToTable("DiscreteUtilityParentOptions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOutcome", b => + { + b.Property("DiscreteUtilityId") + .HasColumnType("TEXT"); + + b.Property("ParentOutcomeId") + .HasColumnType("TEXT"); + + b.HasKey("DiscreteUtilityId", "ParentOutcomeId"); + + b.HasIndex("ParentOutcomeId"); + + b.ToTable("DiscreteUtilityParentOutcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Edge", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("HeadId") + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("TailId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("HeadId"); + + b.HasIndex("ProjectId"); + + b.HasIndex("TailId"); + + b.ToTable("Edges"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("Boundary") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("Order") + .HasColumnType("INTEGER"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Issues"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("IssueId") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("IssueId") + .IsUnique(); + + b.HasIndex("ProjectId"); + + b.ToTable("Nodes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.NodeStyle", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("NodeId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("XPosition") + .HasColumnType("REAL"); + + b.Property("YPosition") + .HasColumnType("REAL"); + + b.HasKey("Id"); + + b.HasIndex("NodeId") + .IsUnique(); + + b.ToTable("NodeStyles"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Objective", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Objectives"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("DecisionId") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("Utility") + .HasColumnType("REAL"); + + b.HasKey("Id"); + + b.HasIndex("DecisionId"); + + b.HasIndex("ProjectId"); + + b.ToTable("Options"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Outcome", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("UncertaintyId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("Utility") + .HasColumnType("REAL"); + + b.HasKey("Id"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UncertaintyId"); + + b.ToTable("Outcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("EndDate") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("OpportunityStatement") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("TEXT"); + + b.Property("ParentProjectId") + .HasColumnType("TEXT"); + + b.Property("ParentProjectName") + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("Public") + .HasColumnType("INTEGER"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Projects"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.ProjectRole", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("Role") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.HasIndex("UserId"); + + b.ToTable("ProjectRoles"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionEntry", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("ChildOptionId") + .HasColumnType("TEXT"); + + b.Property("ChildOutcomeId") + .HasColumnType("TEXT"); + + b.Property("ChildStateId") + .ValueGeneratedOnAddOrUpdate() + .HasColumnType("TEXT") + .HasComputedColumnSql("COALESCE([ChildOptionId], [ChildOutcomeId])", true); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("ParentOptionId") + .HasColumnType("TEXT"); + + b.Property("ParentOutcomeId") + .HasColumnType("TEXT"); + + b.Property("ParentStateId") + .ValueGeneratedOnAddOrUpdate() + .HasColumnType("TEXT") + .HasComputedColumnSql("COALESCE([ParentOptionId], [ParentOutcomeId])", true); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("RestrictionTableId") + .HasColumnType("TEXT"); + + b.Property("RestrictionValue") + .ValueGeneratedOnAdd() + .HasPrecision(53) + .HasColumnType("REAL") + .HasDefaultValue(1.0); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("ChildOptionId"); + + b.HasIndex("ChildOutcomeId"); + + b.HasIndex("ParentOptionId"); + + b.HasIndex("ParentOutcomeId"); + + b.HasIndex("ProjectId"); + + b.HasIndex("RestrictionTableId"); + + b.HasIndex("ParentStateId", "ChildStateId", "RestrictionTableId") + .IsUnique(); + + b.ToTable("RestrictionEntries", t => + { + t.HasCheckConstraint("CK_RestrictionEntry_Child", "([ChildOptionId] IS NULL AND [ChildOutcomeId] IS NOT NULL) OR ([ChildOptionId] IS NOT NULL AND [ChildOutcomeId] IS NULL)"); + + t.HasCheckConstraint("CK_RestrictionEntry_Parent", "([ParentOptionId] IS NULL AND [ParentOutcomeId] IS NOT NULL) OR ([ParentOptionId] IS NOT NULL AND [ParentOutcomeId] IS NULL)"); + }); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionTable", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("EdgeId") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("EdgeId") + .IsUnique(); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("RestrictionTables"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("CreatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("TEXT"); + + b.Property("Icon") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("IconColor") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("Rationale") + .IsRequired() + .HasMaxLength(6000) + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.Property("UpdatedById") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("Strategies"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.StrategyOption", b => + { + b.Property("StrategyId") + .HasColumnType("TEXT"); + + b.Property("OptionId") + .HasColumnType("TEXT"); + + b.HasKey("StrategyId", "OptionId"); + + b.HasIndex("OptionId"); + + b.ToTable("StrategyOptions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("IsKey") + .HasColumnType("INTEGER"); + + b.Property("IssueId") + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("IssueId") + .IsUnique(); + + b.HasIndex("ProjectId"); + + b.ToTable("Uncertainties"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.User", b => + { + b.Property("Id") + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.ToTable("Users"); + + b.HasData( + new + { + Id = "d008bfdf-fe89-48f3-80a8-777bba4d9bbf", + CreatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), + Name = "Deleted User", + UpdatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) + }); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("IssueId") + .HasColumnType("TEXT"); + + b.Property("ProjectId") + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("IssueId") + .IsUnique(); + + b.HasIndex("ProjectId"); + + b.ToTable("Utilities"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.ValueMetric", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreatedAt") + .HasColumnType("TEXT"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("TEXT"); + + b.Property("UpdatedAt") + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.ToTable("ValueMetrics"); + + b.HasData( + new + { + Id = new Guid("288e0811-7ab6-5d24-b80c-9fa925b848a6"), + CreatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), + Name = "value", + UpdatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) + }); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Assessment", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Assessments") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.BoardNode", b => + { + b.HasOne("PrismaApi.Domain.Entities.BoardSheet", "BoardSheet") + .WithMany() + .HasForeignKey("BoardSheetId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("BoardNodes") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("BoardSheet"); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.BoardSheet", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("BoardSheets") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Decision", b => + { + b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") + .WithOne("Decision") + .HasForeignKey("PrismaApi.Domain.Entities.Decision", "IssueId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Issue"); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DecisionQualityAssessment", b => + { + b.HasOne("PrismaApi.Domain.Entities.Assessment", "Assessment") + .WithMany("DecisionQualityAssessments") + .HasForeignKey("AssessmentId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("Assessment"); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbability", b => + { + b.HasOne("PrismaApi.Domain.Entities.Outcome", "Outcome") + .WithMany() + .HasForeignKey("OutcomeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Uncertainty", "Uncertainty") + .WithMany("DiscreteProbabilities") + .HasForeignKey("UncertaintyId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Outcome"); + + b.Navigation("Project"); + + b.Navigation("Uncertainty"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOption", b => + { + b.HasOne("PrismaApi.Domain.Entities.DiscreteProbability", "DiscreteProbability") + .WithMany("ParentOptions") + .HasForeignKey("DiscreteProbabilityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Option", "ParentOption") + .WithMany() + .HasForeignKey("ParentOptionId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("DiscreteProbability"); + + b.Navigation("ParentOption"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOutcome", b => + { + b.HasOne("PrismaApi.Domain.Entities.DiscreteProbability", "DiscreteProbability") + .WithMany("ParentOutcomes") + .HasForeignKey("DiscreteProbabilityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Outcome", "ParentOutcome") + .WithMany() + .HasForeignKey("ParentOutcomeId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("DiscreteProbability"); + + b.Navigation("ParentOutcome"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => + { + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Utility", "Utility") + .WithMany("DiscreteUtilities") + .HasForeignKey("UtilityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.ValueMetric", "ValueMetric") + .WithMany() + .HasForeignKey("ValueMetricId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Project"); + + b.Navigation("Utility"); + + b.Navigation("ValueMetric"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOption", b => + { + b.HasOne("PrismaApi.Domain.Entities.DiscreteUtility", "DiscreteUtility") + .WithMany("ParentOptions") + .HasForeignKey("DiscreteUtilityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Option", "ParentOption") + .WithMany() + .HasForeignKey("ParentOptionId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("DiscreteUtility"); + + b.Navigation("ParentOption"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOutcome", b => + { + b.HasOne("PrismaApi.Domain.Entities.DiscreteUtility", "DiscreteUtility") + .WithMany("ParentOutcomes") + .HasForeignKey("DiscreteUtilityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Outcome", "ParentOutcome") + .WithMany() + .HasForeignKey("ParentOutcomeId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("DiscreteUtility"); + + b.Navigation("ParentOutcome"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Edge", b => + { + b.HasOne("PrismaApi.Domain.Entities.Node", "HeadNode") + .WithMany("HeadEdges") + .HasForeignKey("HeadId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Edges") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Node", "TailNode") + .WithMany("TailEdges") + .HasForeignKey("TailId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("HeadNode"); + + b.Navigation("Project"); + + b.Navigation("TailNode"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Issues") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => + { + b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") + .WithOne("Node") + .HasForeignKey("PrismaApi.Domain.Entities.Node", "IssueId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Nodes") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Issue"); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.NodeStyle", b => + { + b.HasOne("PrismaApi.Domain.Entities.Node", "Node") + .WithOne("NodeStyle") + .HasForeignKey("PrismaApi.Domain.Entities.NodeStyle", "NodeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Node"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Objective", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Objectives") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => + { + b.HasOne("PrismaApi.Domain.Entities.Decision", "Decision") + .WithMany("Options") + .HasForeignKey("DecisionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Decision"); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Outcome", b => + { + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Uncertainty", "Uncertainty") + .WithMany("Outcomes") + .HasForeignKey("UncertaintyId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Project"); + + b.Navigation("Uncertainty"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.ProjectRole", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("ProjectRoles") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "User") + .WithMany("ProjectRoles") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionEntry", b => + { + b.HasOne("PrismaApi.Domain.Entities.Option", "ChildOption") + .WithMany() + .HasForeignKey("ChildOptionId") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("PrismaApi.Domain.Entities.Outcome", "ChildOutcome") + .WithMany() + .HasForeignKey("ChildOutcomeId") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("PrismaApi.Domain.Entities.Option", "ParentOption") + .WithMany() + .HasForeignKey("ParentOptionId") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("PrismaApi.Domain.Entities.Outcome", "ParentOutcome") + .WithMany() + .HasForeignKey("ParentOutcomeId") + .OnDelete(DeleteBehavior.Restrict); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.RestrictionTable", "RestrictionTable") + .WithMany("RestrictionEntries") + .HasForeignKey("RestrictionTableId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ChildOption"); + + b.Navigation("ChildOutcome"); + + b.Navigation("ParentOption"); + + b.Navigation("ParentOutcome"); + + b.Navigation("Project"); + + b.Navigation("RestrictionTable"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionTable", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Edge", "Edge") + .WithOne() + .HasForeignKey("PrismaApi.Domain.Entities.RestrictionTable", "EdgeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Edge"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => + { + b.HasOne("PrismaApi.Domain.Entities.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany("Strategies") + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Project"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.StrategyOption", b => + { + b.HasOne("PrismaApi.Domain.Entities.Option", "Option") + .WithMany("StrategyOptions") + .HasForeignKey("OptionId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Strategy", "Strategy") + .WithMany("StrategyOptions") + .HasForeignKey("StrategyId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Option"); + + b.Navigation("Strategy"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => + { + b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") + .WithOne("Uncertainty") + .HasForeignKey("PrismaApi.Domain.Entities.Uncertainty", "IssueId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Issue"); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => + { + b.HasOne("PrismaApi.Domain.Entities.Issue", "Issue") + .WithOne("Utility") + .HasForeignKey("PrismaApi.Domain.Entities.Utility", "IssueId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PrismaApi.Domain.Entities.Project", "Project") + .WithMany() + .HasForeignKey("ProjectId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Issue"); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Assessment", b => + { + b.Navigation("DecisionQualityAssessments"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Decision", b => + { + b.Navigation("Options"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbability", b => + { + b.Navigation("ParentOptions"); + + b.Navigation("ParentOutcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => + { + b.Navigation("ParentOptions"); + + b.Navigation("ParentOutcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => + { + b.Navigation("Decision"); + + b.Navigation("Node"); + + b.Navigation("Uncertainty"); + + b.Navigation("Utility"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => + { + b.Navigation("HeadEdges"); + + b.Navigation("NodeStyle"); + + b.Navigation("TailEdges"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => + { + b.Navigation("StrategyOptions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => + { + b.Navigation("Assessments"); + + b.Navigation("BoardNodes"); + + b.Navigation("BoardSheets"); + + b.Navigation("Edges"); + + b.Navigation("Issues"); + + b.Navigation("Nodes"); + + b.Navigation("Objectives"); + + b.Navigation("ProjectRoles"); + + b.Navigation("Strategies"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionTable", b => + { + b.Navigation("RestrictionEntries"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => + { + b.Navigation("StrategyOptions"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => + { + b.Navigation("DiscreteProbabilities"); + + b.Navigation("Outcomes"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.User", b => + { + b.Navigation("ProjectRoles"); + }); + + modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => + { + b.Navigation("DiscreteUtilities"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/PrismaDotnetApi/SqliteMigrations/20260722065526_AddDeletedUser.cs b/PrismaDotnetApi/SqliteMigrations/20260722065526_AddDeletedUser.cs new file mode 100644 index 0000000..95eeeb4 --- /dev/null +++ b/PrismaDotnetApi/SqliteMigrations/20260722065526_AddDeletedUser.cs @@ -0,0 +1,29 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace PrismaApi.Infrastructure.Migrations +{ + /// + public partial class AddDeletedUser : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.InsertData( + table: "Users", + columns: new[] { "Id", "CreatedAt", "Name", "UpdatedAt" }, + values: new object[] { "d008bfdf-fe89-48f3-80a8-777bba4d9bbf", new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), "Deleted User", new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) }); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DeleteData( + table: "Users", + keyColumn: "Id", + keyValue: "d008bfdf-fe89-48f3-80a8-777bba4d9bbf"); + } + } +} diff --git a/PrismaDotnetApi/SqliteMigrations/AppDbContextModelSnapshot.cs b/PrismaDotnetApi/SqliteMigrations/AppDbContextModelSnapshot.cs index 01a040c..1989b7c 100644 --- a/PrismaDotnetApi/SqliteMigrations/AppDbContextModelSnapshot.cs +++ b/PrismaDotnetApi/SqliteMigrations/AppDbContextModelSnapshot.cs @@ -217,7 +217,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ProjectId"); - b.ToTable("Decisions", (string)null); + b.ToTable("Decisions"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.DecisionQualityAssessment", b => @@ -315,7 +315,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UncertaintyId"); - b.ToTable("DiscreteProbabilities", (string)null); + b.ToTable("DiscreteProbabilities"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOption", b => @@ -330,7 +330,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ParentOptionId"); - b.ToTable("DiscreteProbabilityParentOptions", (string)null); + b.ToTable("DiscreteProbabilityParentOptions"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteProbabilityParentOutcome", b => @@ -345,7 +345,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ParentOutcomeId"); - b.ToTable("DiscreteProbabilityParentOutcomes", (string)null); + b.ToTable("DiscreteProbabilityParentOutcomes"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtility", b => @@ -381,7 +381,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ValueMetricId"); - b.ToTable("DiscreteUtilities", (string)null); + b.ToTable("DiscreteUtilities"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOption", b => @@ -396,7 +396,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ParentOptionId"); - b.ToTable("DiscreteUtilityParentOptions", (string)null); + b.ToTable("DiscreteUtilityParentOptions"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.DiscreteUtilityParentOutcome", b => @@ -411,7 +411,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ParentOutcomeId"); - b.ToTable("DiscreteUtilityParentOutcomes", (string)null); + b.ToTable("DiscreteUtilityParentOutcomes"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Edge", b => @@ -443,7 +443,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("TailId"); - b.ToTable("Edges", (string)null); + b.ToTable("Edges"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Issue", b => @@ -500,7 +500,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UpdatedById"); - b.ToTable("Issues", (string)null); + b.ToTable("Issues"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Node", b => @@ -533,7 +533,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ProjectId"); - b.ToTable("Nodes", (string)null); + b.ToTable("Nodes"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.NodeStyle", b => @@ -562,7 +562,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("NodeId") .IsUnique(); - b.ToTable("NodeStyles", (string)null); + b.ToTable("NodeStyles"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Objective", b => @@ -611,7 +611,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UpdatedById"); - b.ToTable("Objectives", (string)null); + b.ToTable("Objectives"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Option", b => @@ -646,7 +646,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ProjectId"); - b.ToTable("Options", (string)null); + b.ToTable("Options"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Outcome", b => @@ -681,7 +681,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UncertaintyId"); - b.ToTable("Outcomes", (string)null); + b.ToTable("Outcomes"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Project", b => @@ -733,7 +733,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UpdatedById"); - b.ToTable("Projects", (string)null); + b.ToTable("Projects"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.ProjectRole", b => @@ -778,7 +778,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UserId"); - b.ToTable("ProjectRoles", (string)null); + b.ToTable("ProjectRoles"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.RestrictionEntry", b => @@ -844,7 +844,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ParentStateId", "ChildStateId", "RestrictionTableId") .IsUnique(); - b.ToTable("RestrictionEntries", null, t => + b.ToTable("RestrictionEntries", t => { t.HasCheckConstraint("CK_RestrictionEntry_Child", "([ChildOptionId] IS NULL AND [ChildOutcomeId] IS NOT NULL) OR ([ChildOptionId] IS NOT NULL AND [ChildOutcomeId] IS NULL)"); @@ -893,7 +893,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UpdatedById"); - b.ToTable("RestrictionTables", (string)null); + b.ToTable("RestrictionTables"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Strategy", b => @@ -950,7 +950,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("UpdatedById"); - b.ToTable("Strategies", (string)null); + b.ToTable("Strategies"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.StrategyOption", b => @@ -965,7 +965,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("OptionId"); - b.ToTable("StrategyOptions", (string)null); + b.ToTable("StrategyOptions"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Uncertainty", b => @@ -996,7 +996,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ProjectId"); - b.ToTable("Uncertainties", (string)null); + b.ToTable("Uncertainties"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.User", b => @@ -1017,7 +1017,16 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasKey("Id"); - b.ToTable("Users", (string)null); + b.ToTable("Users"); + + b.HasData( + new + { + Id = "d008bfdf-fe89-48f3-80a8-777bba4d9bbf", + CreatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(1), new TimeSpan(0, 0, 0, 0, 0)), + Name = "Deleted User", + UpdatedAt = new DateTimeOffset(new DateTime(2020, 1, 1, 1, 1, 1, 1, DateTimeKind.Unspecified).AddTicks(2), new TimeSpan(0, 0, 0, 0, 0)) + }); }); modelBuilder.Entity("PrismaApi.Domain.Entities.Utility", b => @@ -1045,7 +1054,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasIndex("ProjectId"); - b.ToTable("Utilities", (string)null); + b.ToTable("Utilities"); }); modelBuilder.Entity("PrismaApi.Domain.Entities.ValueMetric", b => @@ -1067,7 +1076,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasKey("Id"); - b.ToTable("ValueMetrics", (string)null); + b.ToTable("ValueMetrics"); b.HasData( new From 16abf5f99e994007e23aa38dd0e2180336d5a06e Mon Sep 17 00:00:00 2001 From: EinarSalbouvet Date: Thu, 13 Aug 2026 09:29:42 +0200 Subject: [PATCH 17/17] Add migration to insert a "Deleted User" record into the Users table - Created a new migration file to add a user with the name "Deleted User". - The user is inserted with a specific ID and timestamps for CreatedAt and UpdatedAt. - Implemented the Down method to remove the user if the migration is rolled back. --- ....cs => 20260813065703_AddDeletedUser.Designer.cs} | 12 ++++++------ ...letedUser.cs => 20260813065703_AddDeletedUser.cs} | 0 ....cs => 20260813065648_AddDeletedUser.Designer.cs} | 12 ++++++------ ...letedUser.cs => 20260813065648_AddDeletedUser.cs} | 0 4 files changed, 12 insertions(+), 12 deletions(-) rename PrismaDotnetApi/SqlServerMigrations/{20260722065559_AddDeletedUser.Designer.cs => 20260813065703_AddDeletedUser.Designer.cs} (99%) rename PrismaDotnetApi/SqlServerMigrations/{20260722065559_AddDeletedUser.cs => 20260813065703_AddDeletedUser.cs} (100%) rename PrismaDotnetApi/SqliteMigrations/{20260722065526_AddDeletedUser.Designer.cs => 20260813065648_AddDeletedUser.Designer.cs} (99%) rename PrismaDotnetApi/SqliteMigrations/{20260722065526_AddDeletedUser.cs => 20260813065648_AddDeletedUser.cs} (100%) diff --git a/PrismaDotnetApi/SqlServerMigrations/20260722065559_AddDeletedUser.Designer.cs b/PrismaDotnetApi/SqlServerMigrations/20260813065703_AddDeletedUser.Designer.cs similarity index 99% rename from PrismaDotnetApi/SqlServerMigrations/20260722065559_AddDeletedUser.Designer.cs rename to PrismaDotnetApi/SqlServerMigrations/20260813065703_AddDeletedUser.Designer.cs index a972b04..9fde198 100644 --- a/PrismaDotnetApi/SqlServerMigrations/20260722065559_AddDeletedUser.Designer.cs +++ b/PrismaDotnetApi/SqlServerMigrations/20260813065703_AddDeletedUser.Designer.cs @@ -12,7 +12,7 @@ namespace PrismaApi.Infrastructure.Migrations { [DbContext(typeof(AppDbContext))] - [Migration("20260722065559_AddDeletedUser")] + [Migration("20260813065703_AddDeletedUser")] partial class AddDeletedUser { /// @@ -20,7 +20,7 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) { #pragma warning disable 612, 618 modelBuilder - .HasAnnotation("ProductVersion", "9.0.13") + .HasAnnotation("ProductVersion", "10.0.10") .HasAnnotation("Relational:MaxIdentifierLength", 128); SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); @@ -1577,22 +1577,22 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) b.HasOne("PrismaApi.Domain.Entities.Option", "ChildOption") .WithMany() .HasForeignKey("ChildOptionId") - .OnDelete(DeleteBehavior.Restrict); + .OnDelete(DeleteBehavior.NoAction); b.HasOne("PrismaApi.Domain.Entities.Outcome", "ChildOutcome") .WithMany() .HasForeignKey("ChildOutcomeId") - .OnDelete(DeleteBehavior.Restrict); + .OnDelete(DeleteBehavior.NoAction); b.HasOne("PrismaApi.Domain.Entities.Option", "ParentOption") .WithMany() .HasForeignKey("ParentOptionId") - .OnDelete(DeleteBehavior.Restrict); + .OnDelete(DeleteBehavior.NoAction); b.HasOne("PrismaApi.Domain.Entities.Outcome", "ParentOutcome") .WithMany() .HasForeignKey("ParentOutcomeId") - .OnDelete(DeleteBehavior.Restrict); + .OnDelete(DeleteBehavior.NoAction); b.HasOne("PrismaApi.Domain.Entities.Project", "Project") .WithMany() diff --git a/PrismaDotnetApi/SqlServerMigrations/20260722065559_AddDeletedUser.cs b/PrismaDotnetApi/SqlServerMigrations/20260813065703_AddDeletedUser.cs similarity index 100% rename from PrismaDotnetApi/SqlServerMigrations/20260722065559_AddDeletedUser.cs rename to PrismaDotnetApi/SqlServerMigrations/20260813065703_AddDeletedUser.cs diff --git a/PrismaDotnetApi/SqliteMigrations/20260722065526_AddDeletedUser.Designer.cs b/PrismaDotnetApi/SqliteMigrations/20260813065648_AddDeletedUser.Designer.cs similarity index 99% rename from PrismaDotnetApi/SqliteMigrations/20260722065526_AddDeletedUser.Designer.cs rename to PrismaDotnetApi/SqliteMigrations/20260813065648_AddDeletedUser.Designer.cs index 07e355a..8f2596f 100644 --- a/PrismaDotnetApi/SqliteMigrations/20260722065526_AddDeletedUser.Designer.cs +++ b/PrismaDotnetApi/SqliteMigrations/20260813065648_AddDeletedUser.Designer.cs @@ -11,14 +11,14 @@ namespace PrismaApi.Infrastructure.Migrations { [DbContext(typeof(AppDbContext))] - [Migration("20260722065526_AddDeletedUser")] + [Migration("20260813065648_AddDeletedUser")] partial class AddDeletedUser { /// protected override void BuildTargetModel(ModelBuilder modelBuilder) { #pragma warning disable 612, 618 - modelBuilder.HasAnnotation("ProductVersion", "9.0.13"); + modelBuilder.HasAnnotation("ProductVersion", "10.0.10"); modelBuilder.Entity("PrismaApi.Domain.Entities.Assessment", b => { @@ -1572,22 +1572,22 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) b.HasOne("PrismaApi.Domain.Entities.Option", "ChildOption") .WithMany() .HasForeignKey("ChildOptionId") - .OnDelete(DeleteBehavior.Restrict); + .OnDelete(DeleteBehavior.NoAction); b.HasOne("PrismaApi.Domain.Entities.Outcome", "ChildOutcome") .WithMany() .HasForeignKey("ChildOutcomeId") - .OnDelete(DeleteBehavior.Restrict); + .OnDelete(DeleteBehavior.NoAction); b.HasOne("PrismaApi.Domain.Entities.Option", "ParentOption") .WithMany() .HasForeignKey("ParentOptionId") - .OnDelete(DeleteBehavior.Restrict); + .OnDelete(DeleteBehavior.NoAction); b.HasOne("PrismaApi.Domain.Entities.Outcome", "ParentOutcome") .WithMany() .HasForeignKey("ParentOutcomeId") - .OnDelete(DeleteBehavior.Restrict); + .OnDelete(DeleteBehavior.NoAction); b.HasOne("PrismaApi.Domain.Entities.Project", "Project") .WithMany() diff --git a/PrismaDotnetApi/SqliteMigrations/20260722065526_AddDeletedUser.cs b/PrismaDotnetApi/SqliteMigrations/20260813065648_AddDeletedUser.cs similarity index 100% rename from PrismaDotnetApi/SqliteMigrations/20260722065526_AddDeletedUser.cs rename to PrismaDotnetApi/SqliteMigrations/20260813065648_AddDeletedUser.cs