From 254b1d154295bc4c53a6f1f0f774309d0bd5047f Mon Sep 17 00:00:00 2001 From: Zach Hodges Date: Fri, 3 Jan 2025 16:53:04 +0000 Subject: [PATCH 01/24] wip --- .../Commands/CreateProject/CreateProject.cs | 6 +---- .../Entities/ConversionTasksData.cs | 4 +++- .../Dfe.Complete.Domain/Entities/Project.cs | 23 ++++++++++--------- .../Conversion/CreateNewProject.cshtml | 2 -- .../Conversion/CreateNewProject.cshtml.cs | 5 ++-- 5 files changed, 18 insertions(+), 22 deletions(-) diff --git a/src/Core/Dfe.Complete.Application/Projects/Commands/CreateProject/CreateProject.cs b/src/Core/Dfe.Complete.Application/Projects/Commands/CreateProject/CreateProject.cs index 466ada6..6ba4dc0 100644 --- a/src/Core/Dfe.Complete.Application/Projects/Commands/CreateProject/CreateProject.cs +++ b/src/Core/Dfe.Complete.Application/Projects/Commands/CreateProject/CreateProject.cs @@ -19,7 +19,6 @@ public record CreateConversionProjectCommand( string EstablishmentSharepointLink, string IncomingTrustSharepointLink, string GroupReferenceNumber, - DateOnly ProvisionalConversionDate, bool HandingOverToRegionalCaseworkService, string HandoverComments) : IRequest; @@ -49,10 +48,7 @@ public async Task Handle(CreateConversionProjectCommand request, Canc request.AdvisoryBoardConditions, request.EstablishmentSharepointLink, request.IncomingTrustSharepointLink, - request.GroupReferenceNumber, - request.ProvisionalConversionDate, - request.HandingOverToRegionalCaseworkService, - request.HandoverComments); + request.GroupReferenceNumber); await conversionTaskRepository.AddAsync(conversionTask, cancellationToken); await projectRepository.AddAsync(project, cancellationToken); diff --git a/src/Core/Dfe.Complete.Domain/Entities/ConversionTasksData.cs b/src/Core/Dfe.Complete.Domain/Entities/ConversionTasksData.cs index 04e6a01..e7e3cda 100644 --- a/src/Core/Dfe.Complete.Domain/Entities/ConversionTasksData.cs +++ b/src/Core/Dfe.Complete.Domain/Entities/ConversionTasksData.cs @@ -250,11 +250,13 @@ private ConversionTasksData() { } public ConversionTasksData( TaskDataId id, DateTime createdAt, - DateTime updatedAt + DateTime updatedAt, + string handoverNotes ) { Id = id; CreatedAt = createdAt != default ? createdAt : throw new ArgumentNullException(nameof(createdAt)); UpdatedAt = updatedAt != default ? updatedAt : throw new ArgumentNullException(nameof(updatedAt)); + HandoverNotes } } diff --git a/src/Core/Dfe.Complete.Domain/Entities/Project.cs b/src/Core/Dfe.Complete.Domain/Entities/Project.cs index d12e4eb..7874507 100644 --- a/src/Core/Dfe.Complete.Domain/Entities/Project.cs +++ b/src/Core/Dfe.Complete.Domain/Entities/Project.cs @@ -112,8 +112,8 @@ public Project( DateOnly advisoryBoardDate, string advisoryBoardConditions, string establishmentSharepointLink, - string incomingTrustSharepointLink - ) + string incomingTrustSharepointLink, + string groupReferenceNumber) { Urn = urn ?? throw new ArgumentNullException(nameof(urn)); CreatedAt = createdAt != default ? createdAt : throw new ArgumentNullException(nameof(createdAt)); @@ -131,9 +131,12 @@ string incomingTrustSharepointLink AdvisoryBoardConditions = advisoryBoardConditions; EstablishmentSharepointLink = establishmentSharepointLink; IncomingTrustSharepointLink = incomingTrustSharepointLink; + NewTrustReferenceNumber = groupReferenceNumber; + + + } - - + public static Project CreateConversionProject(Urn urn, DateTime createdAt, DateTime updatedAt, @@ -149,11 +152,8 @@ public static Project CreateConversionProject(Urn urn, DateOnly advisoryBoardDate, string advisoryBoardConditions, string establishmentSharepointLink, - string incomingTrustSharepointLink, - string groupReferenceNumber, - DateOnly provisionalConversionDate, - bool handingOverToRegionalCaseworkService, - string handoverComments) + string incomingTrustSharepointLink, + string groupReferenceNumber) { var project = new Project(urn, createdAt, @@ -170,10 +170,11 @@ public static Project CreateConversionProject(Urn urn, advisoryBoardDate, advisoryBoardConditions, establishmentSharepointLink, - incomingTrustSharepointLink); + incomingTrustSharepointLink, + groupReferenceNumber); project.AddDomainEvent(new ProjectCreatedEvent(project)); - + return project; } } \ No newline at end of file diff --git a/src/Frontend/Dfe.Complete/Pages/Projects/Conversion/CreateNewProject.cshtml b/src/Frontend/Dfe.Complete/Pages/Projects/Conversion/CreateNewProject.cshtml index 6666c17..8786e6e 100644 --- a/src/Frontend/Dfe.Complete/Pages/Projects/Conversion/CreateNewProject.cshtml +++ b/src/Frontend/Dfe.Complete/Pages/Projects/Conversion/CreateNewProject.cshtml @@ -15,10 +15,8 @@ const string isDueTo2RIField = nameof(Model.IsDueTo2RI); } -
- @{

Add a conversion

diff --git a/src/Frontend/Dfe.Complete/Pages/Projects/Conversion/CreateNewProject.cshtml.cs b/src/Frontend/Dfe.Complete/Pages/Projects/Conversion/CreateNewProject.cshtml.cs index 4ba91c6..6df29a6 100644 --- a/src/Frontend/Dfe.Complete/Pages/Projects/Conversion/CreateNewProject.cshtml.cs +++ b/src/Frontend/Dfe.Complete/Pages/Projects/Conversion/CreateNewProject.cshtml.cs @@ -33,7 +33,7 @@ public class CreateNewProjectModel(ISender sender, IErrorService errorService) : [BindProperty] [Required(ErrorMessage = "Enter a date for the Advisory Board Date, like 1 4 2023")] [Display(Name = "Advisory Board Date")] - public DateTime AdvisoryBoardDate { get; set; } + public DateTime? AdvisoryBoardDate { get; set; } [BindProperty] public string AdvisoryBoardConditions { get; set; } @@ -93,7 +93,7 @@ public async Task OnPost() var createProjectCommand = new CreateConversionProjectCommand( Urn: new Urn(int.Parse(URN)), - SignificantDate: DateOnly.FromDateTime(DateTime.UtcNow), + SignificantDate: ProvisionalConversionDate.HasValue ? DateOnly.FromDateTime(ProvisionalConversionDate.Value) : default, IsSignificantDateProvisional: true, // will be set to false in the stakeholder kick off task IncomingTrustSharepointLink: IncomingTrustSharePointLink, EstablishmentSharepointLink: SchoolSharePointLink, //todo: is this correct? @@ -104,7 +104,6 @@ public async Task OnPost() IncomingTrustUkprn: new Ukprn(int.Parse(UKPRN)), HasAcademyOrderBeenIssued: DirectiveAcademyOrder ?? default, GroupReferenceNumber: GroupReferenceNumber, - ProvisionalConversionDate: ProvisionalConversionDate.HasValue ? DateOnly.FromDateTime(ProvisionalConversionDate.Value) : default, HandoverComments: HandoverComments, HandingOverToRegionalCaseworkService: IsHandingToRCS ?? default ); From 7affa13c90f2de93495f6210d52e441a811c17be Mon Sep 17 00:00:00 2001 From: Zach Hodges Date: Fri, 3 Jan 2025 21:52:35 +0000 Subject: [PATCH 02/24] wip --- src/Api/Dfe.Complete.Api.Client/Generated/Contracts.g.cs | 4 ---- src/Api/Dfe.Complete.Api.Client/Generated/swagger.json | 4 ---- .../Projects/Commands/CreateProject/CreateProject.cs | 8 ++++++++ .../Dfe.Complete.Domain/Entities/ConversionTasksData.cs | 5 +---- src/Core/Dfe.Complete.Domain/Entities/Project.cs | 5 +---- 5 files changed, 10 insertions(+), 16 deletions(-) diff --git a/src/Api/Dfe.Complete.Api.Client/Generated/Contracts.g.cs b/src/Api/Dfe.Complete.Api.Client/Generated/Contracts.g.cs index 5d58392..a7be70a 100644 --- a/src/Api/Dfe.Complete.Api.Client/Generated/Contracts.g.cs +++ b/src/Api/Dfe.Complete.Api.Client/Generated/Contracts.g.cs @@ -182,10 +182,6 @@ public partial class CreateConversionProjectCommand [Newtonsoft.Json.JsonProperty("groupReferenceNumber", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] public string? GroupReferenceNumber { get; set; } = default!; - [Newtonsoft.Json.JsonProperty("provisionalConversionDate", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - [Newtonsoft.Json.JsonConverter(typeof(DateFormatConverter))] - public System.DateTime? ProvisionalConversionDate { get; set; } = default!; - [Newtonsoft.Json.JsonProperty("handingOverToRegionalCaseworkService", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] public bool? HandingOverToRegionalCaseworkService { get; set; } = default!; diff --git a/src/Api/Dfe.Complete.Api.Client/Generated/swagger.json b/src/Api/Dfe.Complete.Api.Client/Generated/swagger.json index 37b69e5..302b5a3 100644 --- a/src/Api/Dfe.Complete.Api.Client/Generated/swagger.json +++ b/src/Api/Dfe.Complete.Api.Client/Generated/swagger.json @@ -251,10 +251,6 @@ "groupReferenceNumber": { "type": "string" }, - "provisionalConversionDate": { - "type": "string", - "format": "date" - }, "handingOverToRegionalCaseworkService": { "type": "boolean" }, diff --git a/src/Core/Dfe.Complete.Application/Projects/Commands/CreateProject/CreateProject.cs b/src/Core/Dfe.Complete.Application/Projects/Commands/CreateProject/CreateProject.cs index 6ba4dc0..fe34f41 100644 --- a/src/Core/Dfe.Complete.Application/Projects/Commands/CreateProject/CreateProject.cs +++ b/src/Core/Dfe.Complete.Application/Projects/Commands/CreateProject/CreateProject.cs @@ -3,6 +3,7 @@ using Dfe.Complete.Domain.Enums; using Dfe.Complete.Domain.Interfaces.Repositories; using Dfe.Complete.Domain.Entities; +using Dfe.Complete.Infrastructure.Models; namespace Dfe.Complete.Application.Projects.Commands.CreateProject { @@ -49,6 +50,13 @@ public async Task Handle(CreateConversionProjectCommand request, Canc request.EstablishmentSharepointLink, request.IncomingTrustSharepointLink, request.GroupReferenceNumber); + + project.Id = new ProjectId(Guid.NewGuid()); + + project.Notes.Add(new Note + { + Id = new NoteId(Guid.NewGuid()), ProjectId = project.Id, CreatedAt = createdAt, Body = request.HandoverComments + }); await conversionTaskRepository.AddAsync(conversionTask, cancellationToken); await projectRepository.AddAsync(project, cancellationToken); diff --git a/src/Core/Dfe.Complete.Domain/Entities/ConversionTasksData.cs b/src/Core/Dfe.Complete.Domain/Entities/ConversionTasksData.cs index e7e3cda..bde89b6 100644 --- a/src/Core/Dfe.Complete.Domain/Entities/ConversionTasksData.cs +++ b/src/Core/Dfe.Complete.Domain/Entities/ConversionTasksData.cs @@ -250,13 +250,10 @@ private ConversionTasksData() { } public ConversionTasksData( TaskDataId id, DateTime createdAt, - DateTime updatedAt, - string handoverNotes - ) + DateTime updatedAt) { Id = id; CreatedAt = createdAt != default ? createdAt : throw new ArgumentNullException(nameof(createdAt)); UpdatedAt = updatedAt != default ? updatedAt : throw new ArgumentNullException(nameof(updatedAt)); - HandoverNotes } } diff --git a/src/Core/Dfe.Complete.Domain/Entities/Project.cs b/src/Core/Dfe.Complete.Domain/Entities/Project.cs index 7874507..c8efdde 100644 --- a/src/Core/Dfe.Complete.Domain/Entities/Project.cs +++ b/src/Core/Dfe.Complete.Domain/Entities/Project.cs @@ -131,10 +131,7 @@ public Project( AdvisoryBoardConditions = advisoryBoardConditions; EstablishmentSharepointLink = establishmentSharepointLink; IncomingTrustSharepointLink = incomingTrustSharepointLink; - NewTrustReferenceNumber = groupReferenceNumber; - - - + // NewTrustReferenceNumber = groupReferenceNumber; } public static Project CreateConversionProject(Urn urn, From 8aaf9e575772a8d4d181446aa6566bbb48b14e9e Mon Sep 17 00:00:00 2001 From: Zach Hodges Date: Fri, 3 Jan 2025 21:57:52 +0000 Subject: [PATCH 03/24] add proj id to ctor --- src/Core/Dfe.Complete.Domain/Entities/Project.cs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/Core/Dfe.Complete.Domain/Entities/Project.cs b/src/Core/Dfe.Complete.Domain/Entities/Project.cs index c8efdde..f36316b 100644 --- a/src/Core/Dfe.Complete.Domain/Entities/Project.cs +++ b/src/Core/Dfe.Complete.Domain/Entities/Project.cs @@ -97,6 +97,7 @@ private Project() } public Project( + ProjectId Id, Urn urn, DateTime createdAt, DateTime updatedAt, @@ -134,7 +135,9 @@ public Project( // NewTrustReferenceNumber = groupReferenceNumber; } - public static Project CreateConversionProject(Urn urn, + public static Project CreateConversionProject( + ProjectId Id, + Urn urn, DateTime createdAt, DateTime updatedAt, TaskType taskType, @@ -152,7 +155,9 @@ public static Project CreateConversionProject(Urn urn, string incomingTrustSharepointLink, string groupReferenceNumber) { - var project = new Project(urn, + var project = new Project( + Id, + urn, createdAt, updatedAt, taskType, From 011f4cfb58e57f2593f54cd4defa966fbc23209d Mon Sep 17 00:00:00 2001 From: Zach Hodges Date: Sat, 4 Jan 2025 17:03:05 +0000 Subject: [PATCH 04/24] can add note - might not be in right place --- .../Commands/CreateProject/CreateProject.cs | 17 +++++++---------- .../Dfe.Complete.Domain/Entities/Project.cs | 18 ++++++++++++++---- 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/src/Core/Dfe.Complete.Application/Projects/Commands/CreateProject/CreateProject.cs b/src/Core/Dfe.Complete.Application/Projects/Commands/CreateProject/CreateProject.cs index fe34f41..dcfb434 100644 --- a/src/Core/Dfe.Complete.Application/Projects/Commands/CreateProject/CreateProject.cs +++ b/src/Core/Dfe.Complete.Application/Projects/Commands/CreateProject/CreateProject.cs @@ -30,10 +30,13 @@ public async Task Handle(CreateConversionProjectCommand request, Canc { var createdAt = DateTime.UtcNow; var conversionTaskId = Guid.NewGuid(); - + var projectId = new ProjectId(Guid.NewGuid()); + var conversionTask = new ConversionTasksData(new TaskDataId(conversionTaskId), createdAt, createdAt); - var project = Project.CreateConversionProject(request.Urn, + var project = Project.CreateConversionProject( + projectId, + request.Urn, createdAt, createdAt, TaskType.Conversion, @@ -49,14 +52,8 @@ public async Task Handle(CreateConversionProjectCommand request, Canc request.AdvisoryBoardConditions, request.EstablishmentSharepointLink, request.IncomingTrustSharepointLink, - request.GroupReferenceNumber); - - project.Id = new ProjectId(Guid.NewGuid()); - - project.Notes.Add(new Note - { - Id = new NoteId(Guid.NewGuid()), ProjectId = project.Id, CreatedAt = createdAt, Body = request.HandoverComments - }); + request.GroupReferenceNumber, + request.HandoverComments); await conversionTaskRepository.AddAsync(conversionTask, cancellationToken); await projectRepository.AddAsync(project, cancellationToken); diff --git a/src/Core/Dfe.Complete.Domain/Entities/Project.cs b/src/Core/Dfe.Complete.Domain/Entities/Project.cs index f36316b..89fd642 100644 --- a/src/Core/Dfe.Complete.Domain/Entities/Project.cs +++ b/src/Core/Dfe.Complete.Domain/Entities/Project.cs @@ -114,7 +114,8 @@ public Project( string advisoryBoardConditions, string establishmentSharepointLink, string incomingTrustSharepointLink, - string groupReferenceNumber) + string groupReferenceNumber, + string handoverComments) { Urn = urn ?? throw new ArgumentNullException(nameof(urn)); CreatedAt = createdAt != default ? createdAt : throw new ArgumentNullException(nameof(createdAt)); @@ -134,7 +135,7 @@ public Project( IncomingTrustSharepointLink = incomingTrustSharepointLink; // NewTrustReferenceNumber = groupReferenceNumber; } - + public static Project CreateConversionProject( ProjectId Id, Urn urn, @@ -153,7 +154,8 @@ public static Project CreateConversionProject( string advisoryBoardConditions, string establishmentSharepointLink, string incomingTrustSharepointLink, - string groupReferenceNumber) + string groupReferenceNumber, + string handoverCommentsNote) { var project = new Project( Id, @@ -173,7 +175,15 @@ public static Project CreateConversionProject( advisoryBoardConditions, establishmentSharepointLink, incomingTrustSharepointLink, - groupReferenceNumber); + groupReferenceNumber, + handoverCommentsNote); + + if (!string.IsNullOrEmpty(handoverCommentsNote)) + project.Notes.Add(new Note + { + Id = new NoteId(Guid.NewGuid()), CreatedAt = project.CreatedAt, Body = handoverCommentsNote, + ProjectId = Id, TaskIdentifier = "handover", UserId = project.RegionalDeliveryOfficerId + }); project.AddDomainEvent(new ProjectCreatedEvent(project)); From 5caba4badbd3773f6d58ae118c54a1bdec327f52 Mon Sep 17 00:00:00 2001 From: Zach Hodges Date: Mon, 6 Jan 2025 16:38:30 +0000 Subject: [PATCH 05/24] wip --- .../Dfe.Complete.Application.csproj | 4 ++ .../Commands/CreateProject/CreateProject.cs | 41 +++++++++++++++---- .../Dfe.Complete.Domain/Entities/Project.cs | 18 ++------ .../Repositories/ICompleteRepository.cs | 2 + .../Repositories/CompleteRepository.cs | 14 +++++++ .../Conversion/CreateNewProject.cshtml | 1 - ...teConversionProjectCommandCustomization.cs | 2 +- 7 files changed, 58 insertions(+), 24 deletions(-) diff --git a/src/Core/Dfe.Complete.Application/Dfe.Complete.Application.csproj b/src/Core/Dfe.Complete.Application/Dfe.Complete.Application.csproj index 6b3877e..fce1b11 100644 --- a/src/Core/Dfe.Complete.Application/Dfe.Complete.Application.csproj +++ b/src/Core/Dfe.Complete.Application/Dfe.Complete.Application.csproj @@ -19,4 +19,8 @@ + + + + diff --git a/src/Core/Dfe.Complete.Application/Projects/Commands/CreateProject/CreateProject.cs b/src/Core/Dfe.Complete.Application/Projects/Commands/CreateProject/CreateProject.cs index dcfb434..77b35c5 100644 --- a/src/Core/Dfe.Complete.Application/Projects/Commands/CreateProject/CreateProject.cs +++ b/src/Core/Dfe.Complete.Application/Projects/Commands/CreateProject/CreateProject.cs @@ -20,10 +20,11 @@ public record CreateConversionProjectCommand( string EstablishmentSharepointLink, string IncomingTrustSharepointLink, string GroupReferenceNumber, - bool HandingOverToRegionalCaseworkService, + bool HandingOverToRegionalCaseworkService, string HandoverComments) : IRequest; - - public class CreateConversionProjectCommandHandler(ICompleteRepository projectRepository, ICompleteRepository conversionTaskRepository) + + public class CreateConversionProjectCommandHandler(ICompleteRepository projectRepository, + ICompleteRepository conversionTaskRepository) : IRequestHandler { public async Task Handle(CreateConversionProjectCommand request, CancellationToken cancellationToken) @@ -33,7 +34,12 @@ public async Task Handle(CreateConversionProjectCommand request, Canc var projectId = new ProjectId(Guid.NewGuid()); var conversionTask = new ConversionTasksData(new TaskDataId(conversionTaskId), createdAt, createdAt); - + + + var groupId = + await projectRepository.GetProjectGroupIdByIdentifierAsync(request.GroupReferenceNumber, + cancellationToken); + var project = Project.CreateConversionProject( projectId, request.Urn, @@ -46,14 +52,33 @@ public async Task Handle(CreateConversionProjectCommand request, Canc request.IsSignificantDateProvisional, request.IncomingTrustUkprn, request.Region, - request.IsDueTo2Ri, + request.IsDueTo2Ri, request.HasAcademyOrderBeenIssued, request.AdvisoryBoardDate, request.AdvisoryBoardConditions, request.EstablishmentSharepointLink, - request.IncomingTrustSharepointLink, - request.GroupReferenceNumber, - request.HandoverComments); + request.IncomingTrustSharepointLink, + groupId?.Value); + + if (!string.IsNullOrEmpty(request.HandoverComments)) + { + project.Notes.Add(new Note + { + Id = new NoteId(Guid.NewGuid()), CreatedAt = project.CreatedAt, Body = request.HandoverComments, + ProjectId = project.Id, TaskIdentifier = "handover", UserId = project.RegionalDeliveryOfficerId + }); + } + + if (request.HandingOverToRegionalCaseworkService) + { + project.Team = "regional_casework_services"; + } + else + { + project.Team = request.Region.ToString(); + project.AssignedAt = DateTime.UtcNow; + project.AssignedTo = project.RegionalDeliveryOfficer; + } await conversionTaskRepository.AddAsync(conversionTask, cancellationToken); await projectRepository.AddAsync(project, cancellationToken); diff --git a/src/Core/Dfe.Complete.Domain/Entities/Project.cs b/src/Core/Dfe.Complete.Domain/Entities/Project.cs index 89fd642..fefa5cf 100644 --- a/src/Core/Dfe.Complete.Domain/Entities/Project.cs +++ b/src/Core/Dfe.Complete.Domain/Entities/Project.cs @@ -114,8 +114,7 @@ public Project( string advisoryBoardConditions, string establishmentSharepointLink, string incomingTrustSharepointLink, - string groupReferenceNumber, - string handoverComments) + Guid? groupId) { Urn = urn ?? throw new ArgumentNullException(nameof(urn)); CreatedAt = createdAt != default ? createdAt : throw new ArgumentNullException(nameof(createdAt)); @@ -133,7 +132,7 @@ public Project( AdvisoryBoardConditions = advisoryBoardConditions; EstablishmentSharepointLink = establishmentSharepointLink; IncomingTrustSharepointLink = incomingTrustSharepointLink; - // NewTrustReferenceNumber = groupReferenceNumber; + GroupId = groupId; } public static Project CreateConversionProject( @@ -154,8 +153,7 @@ public static Project CreateConversionProject( string advisoryBoardConditions, string establishmentSharepointLink, string incomingTrustSharepointLink, - string groupReferenceNumber, - string handoverCommentsNote) + Guid? groupId) { var project = new Project( Id, @@ -175,15 +173,7 @@ public static Project CreateConversionProject( advisoryBoardConditions, establishmentSharepointLink, incomingTrustSharepointLink, - groupReferenceNumber, - handoverCommentsNote); - - if (!string.IsNullOrEmpty(handoverCommentsNote)) - project.Notes.Add(new Note - { - Id = new NoteId(Guid.NewGuid()), CreatedAt = project.CreatedAt, Body = handoverCommentsNote, - ProjectId = Id, TaskIdentifier = "handover", UserId = project.RegionalDeliveryOfficerId - }); + groupId); project.AddDomainEvent(new ProjectCreatedEvent(project)); diff --git a/src/Core/Dfe.Complete.Domain/Interfaces/Repositories/ICompleteRepository.cs b/src/Core/Dfe.Complete.Domain/Interfaces/Repositories/ICompleteRepository.cs index faf34aa..58cb7f4 100644 --- a/src/Core/Dfe.Complete.Domain/Interfaces/Repositories/ICompleteRepository.cs +++ b/src/Core/Dfe.Complete.Domain/Interfaces/Repositories/ICompleteRepository.cs @@ -1,9 +1,11 @@ using Dfe.Complete.Domain.Common; +using Dfe.Complete.Domain.ValueObjects; namespace Dfe.Complete.Domain.Interfaces.Repositories { public interface ICompleteRepository : IRepository where TAggregate : class, IAggregateRoot { + Task GetProjectGroupIdByIdentifierAsync(string groupIdentifier, CancellationToken cancellationToken); } } diff --git a/src/Core/Dfe.Complete.Infrastructure/Repositories/CompleteRepository.cs b/src/Core/Dfe.Complete.Infrastructure/Repositories/CompleteRepository.cs index 45e9468..d232f65 100644 --- a/src/Core/Dfe.Complete.Infrastructure/Repositories/CompleteRepository.cs +++ b/src/Core/Dfe.Complete.Infrastructure/Repositories/CompleteRepository.cs @@ -1,7 +1,9 @@ using System.Diagnostics.CodeAnalysis; using Dfe.Complete.Domain.Common; using Dfe.Complete.Domain.Interfaces.Repositories; +using Dfe.Complete.Domain.ValueObjects; using Dfe.Complete.Infrastructure.Database; +using Microsoft.EntityFrameworkCore; namespace Dfe.Complete.Infrastructure.Repositories { @@ -10,5 +12,17 @@ public class CompleteRepository(CompleteContext dbContext) : Repository(dbContext), ICompleteRepository where TAggregate : class, IAggregateRoot { + private readonly CompleteContext _dbContext = dbContext; + + public async Task GetProjectGroupIdByIdentifierAsync(string groupIdentifier, + CancellationToken cancellationToken) + { + var result = await _dbContext.ProjectGroups + .AsNoTracking() + .Where(g => g.GroupIdentifier == groupIdentifier) + .FirstOrDefaultAsync(cancellationToken); + + return result?.Id; + } } } \ No newline at end of file diff --git a/src/Frontend/Dfe.Complete/Pages/Projects/Conversion/CreateNewProject.cshtml b/src/Frontend/Dfe.Complete/Pages/Projects/Conversion/CreateNewProject.cshtml index 8786e6e..f3a3425 100644 --- a/src/Frontend/Dfe.Complete/Pages/Projects/Conversion/CreateNewProject.cshtml +++ b/src/Frontend/Dfe.Complete/Pages/Projects/Conversion/CreateNewProject.cshtml @@ -139,7 +139,6 @@ Yes No - diff --git a/src/Tests/Dfe.Complete.Tests.Common/Customizations/Commands/CreateConversionProjectCommandCustomization.cs b/src/Tests/Dfe.Complete.Tests.Common/Customizations/Commands/CreateConversionProjectCommandCustomization.cs index 375589e..bf52b75 100644 --- a/src/Tests/Dfe.Complete.Tests.Common/Customizations/Commands/CreateConversionProjectCommandCustomization.cs +++ b/src/Tests/Dfe.Complete.Tests.Common/Customizations/Commands/CreateConversionProjectCommandCustomization.cs @@ -34,7 +34,7 @@ public void Customize(IFixture fixture) advisoryBoardDate, advisoryBoardConditions, establishmentSharepointLink, - incomingTrustSharepointLink + incomingTrustSharepointLink, ); })); } From 6a23f0cf4a06c35d1153f82d53d10a4f3aba8015 Mon Sep 17 00:00:00 2001 From: Zach Hodges Date: Tue, 7 Jan 2025 12:11:50 +0000 Subject: [PATCH 06/24] wip - retrieved user, need to figure out how to set region --- .../Generated/Contracts.g.cs | 494 +++++++++++++++ .../Generated/swagger.json | 590 ++++++++++++++++++ .../Dfe.Complete.Application.csproj | 4 - .../Extensions/EnumExtensions.cs | 22 + .../Commands/CreateProject/CreateProject.cs | 67 +- .../Dfe.Complete.Domain/Entities/Project.cs | 43 +- src/Core/Dfe.Complete.Domain/Enums/Region.cs | 18 +- .../Repositories/ICompleteRepository.cs | 3 + .../Repositories/CompleteRepository.cs | 16 +- .../Conversion/CreateNewProject.cshtml.cs | 11 +- .../DependencyConfigurationExtensions.cs | 10 +- 11 files changed, 1217 insertions(+), 61 deletions(-) create mode 100644 src/Core/Dfe.Complete.Application/Extensions/EnumExtensions.cs diff --git a/src/Api/Dfe.Complete.Api.Client/Generated/Contracts.g.cs b/src/Api/Dfe.Complete.Api.Client/Generated/Contracts.g.cs index a7be70a..97b23a7 100644 --- a/src/Api/Dfe.Complete.Api.Client/Generated/Contracts.g.cs +++ b/src/Api/Dfe.Complete.Api.Client/Generated/Contracts.g.cs @@ -188,6 +188,9 @@ public partial class CreateConversionProjectCommand [Newtonsoft.Json.JsonProperty("handoverComments", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] public string? HandoverComments { get; set; } = default!; + [Newtonsoft.Json.JsonProperty("regionalDeliveryOfficer", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public User? RegionalDeliveryOfficer { get; set; } = default!; + public string ToJson() { @@ -278,6 +281,497 @@ public enum Region } + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "14.1.0.0 (NJsonSchema v11.0.2.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class User + { + [Newtonsoft.Json.JsonProperty("id", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public UserId? Id { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("email", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Email { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("createdAt", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.DateTime? CreatedAt { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("updatedAt", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.DateTime? UpdatedAt { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("manageTeam", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public bool? ManageTeam { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("addNewProject", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public bool? AddNewProject { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("firstName", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? FirstName { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("lastName", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? LastName { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("activeDirectoryUserId", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? ActiveDirectoryUserId { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("assignToProject", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public bool? AssignToProject { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("manageUserAccounts", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public bool? ManageUserAccounts { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("activeDirectoryUserGroupIds", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? ActiveDirectoryUserGroupIds { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("team", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Team { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("deactivatedAt", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.DateTime? DeactivatedAt { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("manageConversionUrns", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public bool? ManageConversionUrns { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("manageLocalAuthorities", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public bool? ManageLocalAuthorities { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("latestSession", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.DateTime? LatestSession { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("notes", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Collections.Generic.List? Notes { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("projectAssignedTos", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Collections.Generic.List? ProjectAssignedTos { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("projectCaseworkers", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Collections.Generic.List? ProjectCaseworkers { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("projectRegionalDeliveryOfficers", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Collections.Generic.List? ProjectRegionalDeliveryOfficers { get; set; } = default!; + + public string ToJson() + { + + return Newtonsoft.Json.JsonConvert.SerializeObject(this, new Newtonsoft.Json.JsonSerializerSettings()); + + } + public static User FromJson(string data) + { + + return Newtonsoft.Json.JsonConvert.DeserializeObject(data, new Newtonsoft.Json.JsonSerializerSettings()); + + } + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "14.1.0.0 (NJsonSchema v11.0.2.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class UserId + { + [Newtonsoft.Json.JsonProperty("value", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Guid? Value { get; set; } = default!; + + public string ToJson() + { + + return Newtonsoft.Json.JsonConvert.SerializeObject(this, new Newtonsoft.Json.JsonSerializerSettings()); + + } + public static UserId FromJson(string data) + { + + return Newtonsoft.Json.JsonConvert.DeserializeObject(data, new Newtonsoft.Json.JsonSerializerSettings()); + + } + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "14.1.0.0 (NJsonSchema v11.0.2.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class Note + { + [Newtonsoft.Json.JsonProperty("id", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public NoteId? Id { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("body", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Body { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("projectId", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public ProjectId? ProjectId { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("userId", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public UserId? UserId { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("createdAt", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.DateTime? CreatedAt { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("updatedAt", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.DateTime? UpdatedAt { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("taskIdentifier", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? TaskIdentifier { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("notableId", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Guid? NotableId { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("notableType", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? NotableType { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("project", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public Project? Project { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("user", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public User? User { get; set; } = default!; + + public string ToJson() + { + + return Newtonsoft.Json.JsonConvert.SerializeObject(this, new Newtonsoft.Json.JsonSerializerSettings()); + + } + public static Note FromJson(string data) + { + + return Newtonsoft.Json.JsonConvert.DeserializeObject(data, new Newtonsoft.Json.JsonSerializerSettings()); + + } + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "14.1.0.0 (NJsonSchema v11.0.2.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class NoteId + { + [Newtonsoft.Json.JsonProperty("value", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Guid? Value { get; set; } = default!; + + public string ToJson() + { + + return Newtonsoft.Json.JsonConvert.SerializeObject(this, new Newtonsoft.Json.JsonSerializerSettings()); + + } + public static NoteId FromJson(string data) + { + + return Newtonsoft.Json.JsonConvert.DeserializeObject(data, new Newtonsoft.Json.JsonSerializerSettings()); + + } + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "14.1.0.0 (NJsonSchema v11.0.2.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class Project : BaseAggregateRoot + { + [Newtonsoft.Json.JsonProperty("id", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public ProjectId? Id { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("urn", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public Urn? Urn { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("createdAt", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.DateTime? CreatedAt { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("updatedAt", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.DateTime? UpdatedAt { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("incomingTrustUkprn", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public Ukprn? IncomingTrustUkprn { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("regionalDeliveryOfficerId", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public UserId? RegionalDeliveryOfficerId { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("caseworkerId", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public UserId? CaseworkerId { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("assignedAt", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.DateTime? AssignedAt { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("advisoryBoardDate", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + [Newtonsoft.Json.JsonConverter(typeof(DateFormatConverter))] + public System.DateTime? AdvisoryBoardDate { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("advisoryBoardConditions", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? AdvisoryBoardConditions { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("establishmentSharepointLink", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? EstablishmentSharepointLink { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("completedAt", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.DateTime? CompletedAt { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("incomingTrustSharepointLink", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? IncomingTrustSharepointLink { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("type", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))] + public ProjectType? Type { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("assignedToId", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public UserId? AssignedToId { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("significantDate", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + [Newtonsoft.Json.JsonConverter(typeof(DateFormatConverter))] + public System.DateTime? SignificantDate { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("significantDateProvisional", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public bool? SignificantDateProvisional { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("directiveAcademyOrder", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public bool? DirectiveAcademyOrder { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("region", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))] + public Region? Region { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("academyUrn", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public Urn? AcademyUrn { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("tasksDataId", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Guid? TasksDataId { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("tasksDataType", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))] + public TaskType? TasksDataType { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("outgoingTrustUkprn", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public Ukprn? OutgoingTrustUkprn { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("team", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Team { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("twoRequiresImprovement", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public bool? TwoRequiresImprovement { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("outgoingTrustSharepointLink", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? OutgoingTrustSharepointLink { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("allConditionsMet", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public bool? AllConditionsMet { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("mainContactId", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public ContactId? MainContactId { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("establishmentMainContactId", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public ContactId? EstablishmentMainContactId { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("incomingTrustMainContactId", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public ContactId? IncomingTrustMainContactId { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("outgoingTrustMainContactId", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public ContactId? OutgoingTrustMainContactId { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("newTrustReferenceNumber", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? NewTrustReferenceNumber { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("newTrustName", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? NewTrustName { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("state", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public int? State { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("prepareId", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public int? PrepareId { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("localAuthorityMainContactId", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public ContactId? LocalAuthorityMainContactId { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("groupId", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Guid? GroupId { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("assignedTo", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public User? AssignedTo { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("caseworker", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public User? Caseworker { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("contacts", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Collections.Generic.List? Contacts { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("notes", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Collections.Generic.List? Notes { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("regionalDeliveryOfficer", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public User? RegionalDeliveryOfficer { get; set; } = default!; + + public string ToJson() + { + + return Newtonsoft.Json.JsonConvert.SerializeObject(this, new Newtonsoft.Json.JsonSerializerSettings()); + + } + public static Project FromJson(string data) + { + + return Newtonsoft.Json.JsonConvert.DeserializeObject(data, new Newtonsoft.Json.JsonSerializerSettings()); + + } + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "14.1.0.0 (NJsonSchema v11.0.2.0 (Newtonsoft.Json v13.0.0.0))")] + public enum ProjectType + { + + [System.Runtime.Serialization.EnumMember(Value = @"Conversion")] + Conversion = 0, + + [System.Runtime.Serialization.EnumMember(Value = @"Transfer")] + Transfer = 1, + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "14.1.0.0 (NJsonSchema v11.0.2.0 (Newtonsoft.Json v13.0.0.0))")] + public enum TaskType + { + + [System.Runtime.Serialization.EnumMember(Value = @"Conversion")] + Conversion = 0, + + [System.Runtime.Serialization.EnumMember(Value = @"Transfer")] + Transfer = 1, + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "14.1.0.0 (NJsonSchema v11.0.2.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class ContactId + { + [Newtonsoft.Json.JsonProperty("value", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Guid? Value { get; set; } = default!; + + public string ToJson() + { + + return Newtonsoft.Json.JsonConvert.SerializeObject(this, new Newtonsoft.Json.JsonSerializerSettings()); + + } + public static ContactId FromJson(string data) + { + + return Newtonsoft.Json.JsonConvert.DeserializeObject(data, new Newtonsoft.Json.JsonSerializerSettings()); + + } + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "14.1.0.0 (NJsonSchema v11.0.2.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class Contact + { + [Newtonsoft.Json.JsonProperty("id", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public ContactId? Id { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("projectId", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public ProjectId? ProjectId { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("name", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Name { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("title", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Title { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("email", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Email { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("phone", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Phone { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("createdAt", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.DateTime? CreatedAt { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("updatedAt", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.DateTime? UpdatedAt { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("category", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public int? Category { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("organisationName", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? OrganisationName { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("type", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Type { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("localAuthorityId", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public LocalAuthorityId? LocalAuthorityId { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("establishmentUrn", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public int? EstablishmentUrn { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("project", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public Project? Project { get; set; } = default!; + + public string ToJson() + { + + return Newtonsoft.Json.JsonConvert.SerializeObject(this, new Newtonsoft.Json.JsonSerializerSettings()); + + } + public static Contact FromJson(string data) + { + + return Newtonsoft.Json.JsonConvert.DeserializeObject(data, new Newtonsoft.Json.JsonSerializerSettings()); + + } + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "14.1.0.0 (NJsonSchema v11.0.2.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class LocalAuthorityId + { + [Newtonsoft.Json.JsonProperty("value", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Guid? Value { get; set; } = default!; + + public string ToJson() + { + + return Newtonsoft.Json.JsonConvert.SerializeObject(this, new Newtonsoft.Json.JsonSerializerSettings()); + + } + public static LocalAuthorityId FromJson(string data) + { + + return Newtonsoft.Json.JsonConvert.DeserializeObject(data, new Newtonsoft.Json.JsonSerializerSettings()); + + } + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "14.1.0.0 (NJsonSchema v11.0.2.0 (Newtonsoft.Json v13.0.0.0))")] + public abstract partial class BaseAggregateRoot + { + [Newtonsoft.Json.JsonProperty("domainEvents", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Collections.Generic.List? DomainEvents { get; set; } = default!; + + public string ToJson() + { + + return Newtonsoft.Json.JsonConvert.SerializeObject(this, new Newtonsoft.Json.JsonSerializerSettings()); + + } + public static BaseAggregateRoot FromJson(string data) + { + + return Newtonsoft.Json.JsonConvert.DeserializeObject(data, new Newtonsoft.Json.JsonSerializerSettings()); + + } + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "14.1.0.0 (NJsonSchema v11.0.2.0 (Newtonsoft.Json v13.0.0.0))")] + public abstract partial class IDomainEvent + { + [Newtonsoft.Json.JsonProperty("occurredOn", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.DateTime? OccurredOn { get; set; } = default!; + + public string ToJson() + { + + return Newtonsoft.Json.JsonConvert.SerializeObject(this, new Newtonsoft.Json.JsonSerializerSettings()); + + } + public static IDomainEvent FromJson(string data) + { + + return Newtonsoft.Json.JsonConvert.DeserializeObject(data, new Newtonsoft.Json.JsonSerializerSettings()); + + } + + } + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "14.1.0.0 (NJsonSchema v11.0.2.0 (Newtonsoft.Json v13.0.0.0))")] public partial class Principal : Person { diff --git a/src/Api/Dfe.Complete.Api.Client/Generated/swagger.json b/src/Api/Dfe.Complete.Api.Client/Generated/swagger.json index 302b5a3..ce5114f 100644 --- a/src/Api/Dfe.Complete.Api.Client/Generated/swagger.json +++ b/src/Api/Dfe.Complete.Api.Client/Generated/swagger.json @@ -256,6 +256,14 @@ }, "handoverComments": { "type": "string" + }, + "regionalDeliveryOfficer": { + "nullable": true, + "oneOf": [ + { + "$ref": "#/components/schemas/User" + } + ] } } }, @@ -305,6 +313,588 @@ "EastMidlands" ] }, + "User": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "$ref": "#/components/schemas/UserId" + }, + "email": { + "type": "string", + "nullable": true + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + }, + "manageTeam": { + "type": "boolean", + "nullable": true + }, + "addNewProject": { + "type": "boolean" + }, + "firstName": { + "type": "string", + "nullable": true + }, + "lastName": { + "type": "string", + "nullable": true + }, + "activeDirectoryUserId": { + "type": "string", + "nullable": true + }, + "assignToProject": { + "type": "boolean", + "nullable": true + }, + "manageUserAccounts": { + "type": "boolean", + "nullable": true + }, + "activeDirectoryUserGroupIds": { + "type": "string", + "nullable": true + }, + "team": { + "type": "string", + "nullable": true + }, + "deactivatedAt": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "manageConversionUrns": { + "type": "boolean", + "nullable": true + }, + "manageLocalAuthorities": { + "type": "boolean", + "nullable": true + }, + "latestSession": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "notes": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Note" + } + }, + "projectAssignedTos": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Project" + } + }, + "projectCaseworkers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Project" + } + }, + "projectRegionalDeliveryOfficers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Project" + } + } + } + }, + "UserId": { + "type": "object", + "additionalProperties": false, + "properties": { + "value": { + "type": "string", + "format": "guid" + } + } + }, + "Note": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "$ref": "#/components/schemas/NoteId" + }, + "body": { + "type": "string", + "nullable": true + }, + "projectId": { + "nullable": true, + "oneOf": [ + { + "$ref": "#/components/schemas/ProjectId" + } + ] + }, + "userId": { + "nullable": true, + "oneOf": [ + { + "$ref": "#/components/schemas/UserId" + } + ] + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + }, + "taskIdentifier": { + "type": "string", + "nullable": true + }, + "notableId": { + "type": "string", + "format": "guid", + "nullable": true + }, + "notableType": { + "type": "string", + "nullable": true + }, + "project": { + "nullable": true, + "oneOf": [ + { + "$ref": "#/components/schemas/Project" + } + ] + }, + "user": { + "nullable": true, + "oneOf": [ + { + "$ref": "#/components/schemas/User" + } + ] + } + } + }, + "NoteId": { + "type": "object", + "additionalProperties": false, + "properties": { + "value": { + "type": "string", + "format": "guid" + } + } + }, + "Project": { + "allOf": [ + { + "$ref": "#/components/schemas/BaseAggregateRoot" + }, + { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "$ref": "#/components/schemas/ProjectId" + }, + "urn": { + "$ref": "#/components/schemas/Urn" + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + }, + "incomingTrustUkprn": { + "nullable": true, + "oneOf": [ + { + "$ref": "#/components/schemas/Ukprn" + } + ] + }, + "regionalDeliveryOfficerId": { + "nullable": true, + "oneOf": [ + { + "$ref": "#/components/schemas/UserId" + } + ] + }, + "caseworkerId": { + "nullable": true, + "oneOf": [ + { + "$ref": "#/components/schemas/UserId" + } + ] + }, + "assignedAt": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "advisoryBoardDate": { + "type": "string", + "format": "date", + "nullable": true + }, + "advisoryBoardConditions": { + "type": "string", + "nullable": true + }, + "establishmentSharepointLink": { + "type": "string", + "nullable": true + }, + "completedAt": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "incomingTrustSharepointLink": { + "type": "string", + "nullable": true + }, + "type": { + "nullable": true, + "oneOf": [ + { + "$ref": "#/components/schemas/ProjectType" + } + ] + }, + "assignedToId": { + "nullable": true, + "oneOf": [ + { + "$ref": "#/components/schemas/UserId" + } + ] + }, + "significantDate": { + "type": "string", + "format": "date", + "nullable": true + }, + "significantDateProvisional": { + "type": "boolean", + "nullable": true + }, + "directiveAcademyOrder": { + "type": "boolean", + "nullable": true + }, + "region": { + "nullable": true, + "oneOf": [ + { + "$ref": "#/components/schemas/Region" + } + ] + }, + "academyUrn": { + "nullable": true, + "oneOf": [ + { + "$ref": "#/components/schemas/Urn" + } + ] + }, + "tasksDataId": { + "type": "string", + "format": "guid", + "nullable": true + }, + "tasksDataType": { + "nullable": true, + "oneOf": [ + { + "$ref": "#/components/schemas/TaskType" + } + ] + }, + "outgoingTrustUkprn": { + "nullable": true, + "oneOf": [ + { + "$ref": "#/components/schemas/Ukprn" + } + ] + }, + "team": { + "type": "string", + "nullable": true + }, + "twoRequiresImprovement": { + "type": "boolean", + "nullable": true + }, + "outgoingTrustSharepointLink": { + "type": "string", + "nullable": true + }, + "allConditionsMet": { + "type": "boolean", + "nullable": true + }, + "mainContactId": { + "nullable": true, + "oneOf": [ + { + "$ref": "#/components/schemas/ContactId" + } + ] + }, + "establishmentMainContactId": { + "nullable": true, + "oneOf": [ + { + "$ref": "#/components/schemas/ContactId" + } + ] + }, + "incomingTrustMainContactId": { + "nullable": true, + "oneOf": [ + { + "$ref": "#/components/schemas/ContactId" + } + ] + }, + "outgoingTrustMainContactId": { + "nullable": true, + "oneOf": [ + { + "$ref": "#/components/schemas/ContactId" + } + ] + }, + "newTrustReferenceNumber": { + "type": "string", + "nullable": true + }, + "newTrustName": { + "type": "string", + "nullable": true + }, + "state": { + "type": "integer", + "format": "int32" + }, + "prepareId": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "localAuthorityMainContactId": { + "nullable": true, + "oneOf": [ + { + "$ref": "#/components/schemas/ContactId" + } + ] + }, + "groupId": { + "type": "string", + "format": "guid", + "nullable": true + }, + "assignedTo": { + "nullable": true, + "oneOf": [ + { + "$ref": "#/components/schemas/User" + } + ] + }, + "caseworker": { + "nullable": true, + "oneOf": [ + { + "$ref": "#/components/schemas/User" + } + ] + }, + "contacts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Contact" + } + }, + "notes": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Note" + } + }, + "regionalDeliveryOfficer": { + "nullable": true, + "oneOf": [ + { + "$ref": "#/components/schemas/User" + } + ] + } + } + } + ] + }, + "ProjectType": { + "type": "string", + "description": "", + "x-enumNames": [ + "Conversion", + "Transfer" + ], + "enum": [ + "Conversion", + "Transfer" + ] + }, + "TaskType": { + "type": "string", + "description": "", + "x-enumNames": [ + "Conversion", + "Transfer" + ], + "enum": [ + "Conversion", + "Transfer" + ] + }, + "ContactId": { + "type": "object", + "additionalProperties": false, + "properties": { + "value": { + "type": "string", + "format": "guid" + } + } + }, + "Contact": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "$ref": "#/components/schemas/ContactId" + }, + "projectId": { + "nullable": true, + "oneOf": [ + { + "$ref": "#/components/schemas/ProjectId" + } + ] + }, + "name": { + "type": "string" + }, + "title": { + "type": "string" + }, + "email": { + "type": "string", + "nullable": true + }, + "phone": { + "type": "string", + "nullable": true + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + }, + "category": { + "type": "integer", + "format": "int32" + }, + "organisationName": { + "type": "string", + "nullable": true + }, + "type": { + "type": "string", + "nullable": true + }, + "localAuthorityId": { + "nullable": true, + "oneOf": [ + { + "$ref": "#/components/schemas/LocalAuthorityId" + } + ] + }, + "establishmentUrn": { + "type": "integer", + "format": "int32", + "nullable": true + }, + "project": { + "nullable": true, + "oneOf": [ + { + "$ref": "#/components/schemas/Project" + } + ] + } + } + }, + "LocalAuthorityId": { + "type": "object", + "additionalProperties": false, + "properties": { + "value": { + "type": "string", + "format": "guid" + } + } + }, + "BaseAggregateRoot": { + "type": "object", + "x-abstract": true, + "additionalProperties": false, + "properties": { + "domainEvents": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IDomainEvent" + } + } + } + }, + "IDomainEvent": { + "type": "object", + "x-abstract": true, + "additionalProperties": false, + "properties": { + "occurredOn": { + "type": "string", + "format": "date-time" + } + } + }, "Principal": { "allOf": [ { diff --git a/src/Core/Dfe.Complete.Application/Dfe.Complete.Application.csproj b/src/Core/Dfe.Complete.Application/Dfe.Complete.Application.csproj index fce1b11..6b3877e 100644 --- a/src/Core/Dfe.Complete.Application/Dfe.Complete.Application.csproj +++ b/src/Core/Dfe.Complete.Application/Dfe.Complete.Application.csproj @@ -19,8 +19,4 @@ - - - - diff --git a/src/Core/Dfe.Complete.Application/Extensions/EnumExtensions.cs b/src/Core/Dfe.Complete.Application/Extensions/EnumExtensions.cs new file mode 100644 index 0000000..a6b0290 --- /dev/null +++ b/src/Core/Dfe.Complete.Application/Extensions/EnumExtensions.cs @@ -0,0 +1,22 @@ +using System.ComponentModel; +using System.Reflection; + +namespace Microsoft.Extensions.DependencyInjection.Extensions; + +public static class EnumExtensions +{ + public static string ToDescription(this T source) + { + if (source == null) + return string.Empty; + + var fi = source.GetType().GetField(source.ToString() ?? string.Empty); + + if (fi == null) + return string.Empty; + + var attributes = (DescriptionAttribute[]) fi.GetCustomAttributes(typeof(DescriptionAttribute), false); + + return (attributes.Length > 0 ? attributes[0].Description : source.ToString()) ?? string.Empty; + } +} \ No newline at end of file diff --git a/src/Core/Dfe.Complete.Application/Projects/Commands/CreateProject/CreateProject.cs b/src/Core/Dfe.Complete.Application/Projects/Commands/CreateProject/CreateProject.cs index 77b35c5..bada7ca 100644 --- a/src/Core/Dfe.Complete.Application/Projects/Commands/CreateProject/CreateProject.cs +++ b/src/Core/Dfe.Complete.Application/Projects/Commands/CreateProject/CreateProject.cs @@ -4,6 +4,7 @@ using Dfe.Complete.Domain.Interfaces.Repositories; using Dfe.Complete.Domain.Entities; using Dfe.Complete.Infrastructure.Models; +using Microsoft.Extensions.DependencyInjection.Extensions; namespace Dfe.Complete.Application.Projects.Commands.CreateProject { @@ -21,9 +22,11 @@ public record CreateConversionProjectCommand( string IncomingTrustSharepointLink, string GroupReferenceNumber, bool HandingOverToRegionalCaseworkService, - string HandoverComments) : IRequest; + string HandoverComments, + User? RegionalDeliveryOfficer) : IRequest; - public class CreateConversionProjectCommandHandler(ICompleteRepository projectRepository, + public class CreateConversionProjectCommandHandler( + ICompleteRepository projectRepository, ICompleteRepository conversionTaskRepository) : IRequestHandler { @@ -32,14 +35,38 @@ public async Task Handle(CreateConversionProjectCommand request, Canc var createdAt = DateTime.UtcNow; var conversionTaskId = Guid.NewGuid(); var projectId = new ProjectId(Guid.NewGuid()); - + var conversionTask = new ConversionTasksData(new TaskDataId(conversionTaskId), createdAt, createdAt); - - + var groupId = await projectRepository.GetProjectGroupIdByIdentifierAsync(request.GroupReferenceNumber, cancellationToken); - + + string team; + DateTime? assignedAt = null; + User? assignedTo = null; + Note? note = null; + + if (!string.IsNullOrEmpty(request.HandoverComments)) + { + note = new Note + { + Id = new NoteId(Guid.NewGuid()), CreatedAt = createdAt, Body = request.HandoverComments, + ProjectId = projectId, TaskIdentifier = "handover", UserId = request.RegionalDeliveryOfficer?.Id + }; + } + + if (request.HandingOverToRegionalCaseworkService) + { + team = "regional_casework_services"; + } + else + { + team = request.Region.ToDescription(); + assignedAt = DateTime.UtcNow; + assignedTo = request.RegionalDeliveryOfficer; + } + var project = Project.CreateConversionProject( projectId, request.Urn, @@ -52,33 +79,17 @@ await projectRepository.GetProjectGroupIdByIdentifierAsync(request.GroupReferenc request.IsSignificantDateProvisional, request.IncomingTrustUkprn, request.Region, - request.IsDueTo2Ri, + request.IsDueTo2Ri, request.HasAcademyOrderBeenIssued, request.AdvisoryBoardDate, request.AdvisoryBoardConditions, request.EstablishmentSharepointLink, request.IncomingTrustSharepointLink, - groupId?.Value); - - if (!string.IsNullOrEmpty(request.HandoverComments)) - { - project.Notes.Add(new Note - { - Id = new NoteId(Guid.NewGuid()), CreatedAt = project.CreatedAt, Body = request.HandoverComments, - ProjectId = project.Id, TaskIdentifier = "handover", UserId = project.RegionalDeliveryOfficerId - }); - } - - if (request.HandingOverToRegionalCaseworkService) - { - project.Team = "regional_casework_services"; - } - else - { - project.Team = request.Region.ToString(); - project.AssignedAt = DateTime.UtcNow; - project.AssignedTo = project.RegionalDeliveryOfficer; - } + groupId?.Value, + team, + assignedAt, + assignedTo, + note); await conversionTaskRepository.AddAsync(conversionTask, cancellationToken); await projectRepository.AddAsync(project, cancellationToken); diff --git a/src/Core/Dfe.Complete.Domain/Entities/Project.cs b/src/Core/Dfe.Complete.Domain/Entities/Project.cs index fefa5cf..19e4261 100644 --- a/src/Core/Dfe.Complete.Domain/Entities/Project.cs +++ b/src/Core/Dfe.Complete.Domain/Entities/Project.cs @@ -91,13 +91,12 @@ public class Project : BaseAggregateRoot, IEntity public virtual ICollection Notes { get; set; } = new List(); public virtual User? RegionalDeliveryOfficer { get; set; } - + private Project() { } - public Project( - ProjectId Id, + public Project(ProjectId Id, Urn urn, DateTime createdAt, DateTime updatedAt, @@ -114,7 +113,11 @@ public Project( string advisoryBoardConditions, string establishmentSharepointLink, string incomingTrustSharepointLink, - Guid? groupId) + Guid? groupId, + string team, + DateTime? assignedAt = null, + User? assignedTo = null, + Note? note = null) { Urn = urn ?? throw new ArgumentNullException(nameof(urn)); CreatedAt = createdAt != default ? createdAt : throw new ArgumentNullException(nameof(createdAt)); @@ -133,10 +136,14 @@ public Project( EstablishmentSharepointLink = establishmentSharepointLink; IncomingTrustSharepointLink = incomingTrustSharepointLink; GroupId = groupId; + + Team = team; + + AssignTo(assignedTo, assignedAt); + AddNote(note); } - public static Project CreateConversionProject( - ProjectId Id, + public static Project CreateConversionProject(ProjectId Id, Urn urn, DateTime createdAt, DateTime updatedAt, @@ -153,7 +160,11 @@ public static Project CreateConversionProject( string advisoryBoardConditions, string establishmentSharepointLink, string incomingTrustSharepointLink, - Guid? groupId) + Guid? groupId, + string team, + DateTime? assignedAt, + User? assignedTo, + Note? note) { var project = new Project( Id, @@ -173,10 +184,26 @@ public static Project CreateConversionProject( advisoryBoardConditions, establishmentSharepointLink, incomingTrustSharepointLink, - groupId); + groupId, + team, + assignedAt, + assignedTo, + note); project.AddDomainEvent(new ProjectCreatedEvent(project)); return project; } + + private void AssignTo(User? user, DateTime? assignedAt) + { + AssignedTo = user; + AssignedAt = assignedAt; + } + + private void AddNote(Note? note) + { + if (note != null) + Notes.Add(note); + } } \ No newline at end of file diff --git a/src/Core/Dfe.Complete.Domain/Enums/Region.cs b/src/Core/Dfe.Complete.Domain/Enums/Region.cs index c979be6..d012539 100644 --- a/src/Core/Dfe.Complete.Domain/Enums/Region.cs +++ b/src/Core/Dfe.Complete.Domain/Enums/Region.cs @@ -4,23 +4,23 @@ namespace Dfe.Complete.Domain.Enums { public enum Region { - [Description("London")] + [Description("london")] London = 1, - [Description("South East")] + [Description("south_east")] SouthEast = 2, - [Description("Yorkshire and the Humber")] + [Description("yorkshire_and_the_humber")] YorkshireAndTheHumber = 3, - [Description("North West")] + [Description("north_west")] NorthWest = 4, - [Description("East of England")] + [Description("east_of_england")] EastOfEngland = 5, - [Description("West Midlands")] + [Description("west_midlands")] WestMidlands = 6, - [Description("North East")] + [Description("north_east")] NorthEast = 7, - [Description("South West")] + [Description("south_west")] SouthWest = 8, - [Description("East Midlands")] + [Description("east_midlands")] EastMidlands = 9 } } diff --git a/src/Core/Dfe.Complete.Domain/Interfaces/Repositories/ICompleteRepository.cs b/src/Core/Dfe.Complete.Domain/Interfaces/Repositories/ICompleteRepository.cs index 58cb7f4..4a20eee 100644 --- a/src/Core/Dfe.Complete.Domain/Interfaces/Repositories/ICompleteRepository.cs +++ b/src/Core/Dfe.Complete.Domain/Interfaces/Repositories/ICompleteRepository.cs @@ -1,4 +1,5 @@ using Dfe.Complete.Domain.Common; +using Dfe.Complete.Domain.Entities; using Dfe.Complete.Domain.ValueObjects; namespace Dfe.Complete.Domain.Interfaces.Repositories @@ -7,5 +8,7 @@ public interface ICompleteRepository : IRepository where TAggregate : class, IAggregateRoot { Task GetProjectGroupIdByIdentifierAsync(string groupIdentifier, CancellationToken cancellationToken); + + Task GetUserByEmail(string? email, CancellationToken cancellationToken); } } diff --git a/src/Core/Dfe.Complete.Infrastructure/Repositories/CompleteRepository.cs b/src/Core/Dfe.Complete.Infrastructure/Repositories/CompleteRepository.cs index d232f65..a52c7c6 100644 --- a/src/Core/Dfe.Complete.Infrastructure/Repositories/CompleteRepository.cs +++ b/src/Core/Dfe.Complete.Infrastructure/Repositories/CompleteRepository.cs @@ -1,5 +1,6 @@ using System.Diagnostics.CodeAnalysis; using Dfe.Complete.Domain.Common; +using Dfe.Complete.Domain.Entities; using Dfe.Complete.Domain.Interfaces.Repositories; using Dfe.Complete.Domain.ValueObjects; using Dfe.Complete.Infrastructure.Database; @@ -8,8 +9,7 @@ namespace Dfe.Complete.Infrastructure.Repositories { [ExcludeFromCodeCoverage] - public class CompleteRepository(CompleteContext dbContext) - : Repository(dbContext), ICompleteRepository + public class CompleteRepository(CompleteContext dbContext) : Repository(dbContext), ICompleteRepository where TAggregate : class, IAggregateRoot { private readonly CompleteContext _dbContext = dbContext; @@ -17,12 +17,20 @@ public class CompleteRepository(CompleteContext dbContext) public async Task GetProjectGroupIdByIdentifierAsync(string groupIdentifier, CancellationToken cancellationToken) { - var result = await _dbContext.ProjectGroups + var projectGroup = await _dbContext.ProjectGroups .AsNoTracking() .Where(g => g.GroupIdentifier == groupIdentifier) .FirstOrDefaultAsync(cancellationToken); - return result?.Id; + return projectGroup?.Id; + } + + public async Task GetUserByEmail(string? email, CancellationToken cancellationToken) + { + return await _dbContext.Users + .AsNoTracking() + .Where(u => u.Email == email) + .FirstOrDefaultAsync(cancellationToken); } } } \ No newline at end of file diff --git a/src/Frontend/Dfe.Complete/Pages/Projects/Conversion/CreateNewProject.cshtml.cs b/src/Frontend/Dfe.Complete/Pages/Projects/Conversion/CreateNewProject.cshtml.cs index 6df29a6..3853e6e 100644 --- a/src/Frontend/Dfe.Complete/Pages/Projects/Conversion/CreateNewProject.cshtml.cs +++ b/src/Frontend/Dfe.Complete/Pages/Projects/Conversion/CreateNewProject.cshtml.cs @@ -7,12 +7,14 @@ using System.ComponentModel.DataAnnotations; using System.Globalization; using Dfe.Complete.Application.Projects.Commands.CreateProject; +using Dfe.Complete.Domain.Entities; +using Dfe.Complete.Domain.Interfaces.Repositories; using MediatR; using Dfe.Complete.Domain.ValueObjects; namespace Dfe.Complete.Pages.Projects.Conversion { - public class CreateNewProjectModel(ISender sender, IErrorService errorService) : PageModel + public class CreateNewProjectModel(ISender sender, IErrorService errorService, ICompleteRepository completeRepository) : PageModel { [BindProperty] [Required] @@ -78,7 +80,7 @@ public async Task OnGet() return Page(); } - public async Task OnPost() + public async Task OnPost(CancellationToken cancellationToken) { ManuallyValidateGroupReferenceNumber(); @@ -91,6 +93,8 @@ public async Task OnPost() return Page(); } + var currentUser = await completeRepository.GetUserByEmail(User.Identity?.Name?.ToLower(), cancellationToken); + var createProjectCommand = new CreateConversionProjectCommand( Urn: new Urn(int.Parse(URN)), SignificantDate: ProvisionalConversionDate.HasValue ? DateOnly.FromDateTime(ProvisionalConversionDate.Value) : default, @@ -105,7 +109,8 @@ public async Task OnPost() HasAcademyOrderBeenIssued: DirectiveAcademyOrder ?? default, GroupReferenceNumber: GroupReferenceNumber, HandoverComments: HandoverComments, - HandingOverToRegionalCaseworkService: IsHandingToRCS ?? default + HandingOverToRegionalCaseworkService: IsHandingToRCS ?? default, + RegionalDeliveryOfficer: null //todo: query to get delivery officer user ); var createResponse = await sender.Send(createProjectCommand); diff --git a/src/Frontend/Dfe.Complete/StartupConfiguration/DependencyConfigurationExtensions.cs b/src/Frontend/Dfe.Complete/StartupConfiguration/DependencyConfigurationExtensions.cs index 65cc6dc..4e8c6f7 100644 --- a/src/Frontend/Dfe.Complete/StartupConfiguration/DependencyConfigurationExtensions.cs +++ b/src/Frontend/Dfe.Complete/StartupConfiguration/DependencyConfigurationExtensions.cs @@ -1,6 +1,6 @@ -using Dfe.Complete.Services; -using Microsoft.AspNetCore.Hosting; -using Microsoft.Extensions.DependencyInjection; +using Dfe.Complete.Domain.Interfaces.Repositories; +using Dfe.Complete.Infrastructure.Repositories; +using Dfe.Complete.Services; namespace Dfe.Complete.StartupConfiguration { @@ -8,11 +8,11 @@ public static class DependencyConfigurationExtensions { public static IServiceCollection AddClientDependencies(this IServiceCollection services) { - services.AddScoped(); services.AddScoped(); services.AddScoped(); - + + // services.AddScoped(typeof(ICompleteRepository<>), typeof(CompleteRepository<>)); return services; } } From dce47ca7797d3735c8cf3ac1f4d035c0123afb1e Mon Sep 17 00:00:00 2001 From: Zach Hodges Date: Tue, 7 Jan 2025 17:49:22 +0000 Subject: [PATCH 07/24] wip --- .../Generated/Contracts.g.cs | 76 +++++++++++++---- .../Generated/swagger.json | 81 ++++++++++++++----- .../Extensions/EnumExtensions.cs | 22 ----- .../Commands/CreateProject/CreateProject.cs | 11 ++- .../Dfe.Complete.Domain/Entities/Project.cs | 27 ++++--- .../Dfe.Complete.Domain/Enums/EnumMapper.cs | 23 ++++++ src/Core/Dfe.Complete.Domain/Enums/Region.cs | 18 ++--- src/Core/Dfe.Complete.Domain/Enums/Team.cs | 29 +++++++ src/Core/Dfe.Complete.Utils/EnumExtensions.cs | 60 ++++++++++++++ .../Dfe.Complete/Extensions/EnumExtensions.cs | 38 --------- .../Conversion/CreateNewProject.cshtml.cs | 14 +++- .../TagHelpers/SummaryItemTagHelper.cs | 1 + 12 files changed, 275 insertions(+), 125 deletions(-) delete mode 100644 src/Core/Dfe.Complete.Application/Extensions/EnumExtensions.cs create mode 100644 src/Core/Dfe.Complete.Domain/Enums/EnumMapper.cs create mode 100644 src/Core/Dfe.Complete.Domain/Enums/Team.cs create mode 100644 src/Core/Dfe.Complete.Utils/EnumExtensions.cs delete mode 100644 src/Frontend/Dfe.Complete/Extensions/EnumExtensions.cs diff --git a/src/Api/Dfe.Complete.Api.Client/Generated/Contracts.g.cs b/src/Api/Dfe.Complete.Api.Client/Generated/Contracts.g.cs index 97b23a7..a77d1cc 100644 --- a/src/Api/Dfe.Complete.Api.Client/Generated/Contracts.g.cs +++ b/src/Api/Dfe.Complete.Api.Client/Generated/Contracts.g.cs @@ -191,6 +191,10 @@ public partial class CreateConversionProjectCommand [Newtonsoft.Json.JsonProperty("regionalDeliveryOfficer", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] public User? RegionalDeliveryOfficer { get; set; } = default!; + [Newtonsoft.Json.JsonProperty("team", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))] + public Team? Team { get; set; } = default!; + public string ToJson() { @@ -252,32 +256,32 @@ public static Ukprn FromJson(string data) public enum Region { - [System.Runtime.Serialization.EnumMember(Value = @"London")] - London = 0, + [System.Runtime.Serialization.EnumMember(Value = @"NorthEast")] + NorthEast = 0, - [System.Runtime.Serialization.EnumMember(Value = @"SouthEast")] - SouthEast = 1, + [System.Runtime.Serialization.EnumMember(Value = @"NorthWest")] + NorthWest = 1, [System.Runtime.Serialization.EnumMember(Value = @"YorkshireAndTheHumber")] YorkshireAndTheHumber = 2, - [System.Runtime.Serialization.EnumMember(Value = @"NorthWest")] - NorthWest = 3, + [System.Runtime.Serialization.EnumMember(Value = @"EastMidlands")] + EastMidlands = 3, + + [System.Runtime.Serialization.EnumMember(Value = @"WestMidlands")] + WestMidlands = 4, [System.Runtime.Serialization.EnumMember(Value = @"EastOfEngland")] - EastOfEngland = 4, + EastOfEngland = 5, - [System.Runtime.Serialization.EnumMember(Value = @"WestMidlands")] - WestMidlands = 5, + [System.Runtime.Serialization.EnumMember(Value = @"London")] + London = 6, - [System.Runtime.Serialization.EnumMember(Value = @"NorthEast")] - NorthEast = 6, + [System.Runtime.Serialization.EnumMember(Value = @"SouthEast")] + SouthEast = 7, [System.Runtime.Serialization.EnumMember(Value = @"SouthWest")] - SouthWest = 7, - - [System.Runtime.Serialization.EnumMember(Value = @"EastMidlands")] - EastMidlands = 8, + SouthWest = 8, } @@ -516,8 +520,7 @@ public partial class Project : BaseAggregateRoot public bool? DirectiveAcademyOrder { get; set; } = default!; [Newtonsoft.Json.JsonProperty("region", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))] - public Region? Region { get; set; } = default!; + public string? Region { get; set; } = default!; [Newtonsoft.Json.JsonProperty("academyUrn", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] public Urn? AcademyUrn { get; set; } = default!; @@ -772,6 +775,45 @@ public static IDomainEvent FromJson(string data) } + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "14.1.0.0 (NJsonSchema v11.0.2.0 (Newtonsoft.Json v13.0.0.0))")] + public enum Team + { + + [System.Runtime.Serialization.EnumMember(Value = @"RegionalCaseWorkerServices")] + RegionalCaseWorkerServices = 0, + + [System.Runtime.Serialization.EnumMember(Value = @"ServiceSupport")] + ServiceSupport = 1, + + [System.Runtime.Serialization.EnumMember(Value = @"London")] + London = 2, + + [System.Runtime.Serialization.EnumMember(Value = @"SouthEast")] + SouthEast = 3, + + [System.Runtime.Serialization.EnumMember(Value = @"YorkshireAndTheHumber")] + YorkshireAndTheHumber = 4, + + [System.Runtime.Serialization.EnumMember(Value = @"NorthWest")] + NorthWest = 5, + + [System.Runtime.Serialization.EnumMember(Value = @"EastOfEngland")] + EastOfEngland = 6, + + [System.Runtime.Serialization.EnumMember(Value = @"WestMidlands")] + WestMidlands = 7, + + [System.Runtime.Serialization.EnumMember(Value = @"NorthEast")] + NorthEast = 8, + + [System.Runtime.Serialization.EnumMember(Value = @"SouthWest")] + SouthWest = 9, + + [System.Runtime.Serialization.EnumMember(Value = @"EastMidlands")] + EastMidlands = 10, + + } + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "14.1.0.0 (NJsonSchema v11.0.2.0 (Newtonsoft.Json v13.0.0.0))")] public partial class Principal : Person { diff --git a/src/Api/Dfe.Complete.Api.Client/Generated/swagger.json b/src/Api/Dfe.Complete.Api.Client/Generated/swagger.json index ce5114f..dc5b52d 100644 --- a/src/Api/Dfe.Complete.Api.Client/Generated/swagger.json +++ b/src/Api/Dfe.Complete.Api.Client/Generated/swagger.json @@ -227,7 +227,12 @@ "$ref": "#/components/schemas/Ukprn" }, "region": { - "$ref": "#/components/schemas/Region" + "nullable": true, + "oneOf": [ + { + "$ref": "#/components/schemas/Region" + } + ] }, "isDueTo2Ri": { "type": "boolean" @@ -264,6 +269,14 @@ "$ref": "#/components/schemas/User" } ] + }, + "team": { + "nullable": true, + "oneOf": [ + { + "$ref": "#/components/schemas/Team" + } + ] } } }, @@ -291,26 +304,26 @@ "type": "string", "description": "", "x-enumNames": [ - "London", - "SouthEast", - "YorkshireAndTheHumber", + "NorthEast", "NorthWest", - "EastOfEngland", + "YorkshireAndTheHumber", + "EastMidlands", "WestMidlands", - "NorthEast", - "SouthWest", - "EastMidlands" - ], - "enum": [ + "EastOfEngland", "London", "SouthEast", - "YorkshireAndTheHumber", + "SouthWest" + ], + "enum": [ + "NorthEast", "NorthWest", - "EastOfEngland", + "YorkshireAndTheHumber", + "EastMidlands", "WestMidlands", - "NorthEast", - "SouthWest", - "EastMidlands" + "EastOfEngland", + "London", + "SouthEast", + "SouthWest" ] }, "User": { @@ -601,12 +614,8 @@ "nullable": true }, "region": { - "nullable": true, - "oneOf": [ - { - "$ref": "#/components/schemas/Region" - } - ] + "type": "string", + "nullable": true }, "academyUrn": { "nullable": true, @@ -895,6 +904,36 @@ } } }, + "Team": { + "type": "string", + "description": "", + "x-enumNames": [ + "RegionalCaseWorkerServices", + "ServiceSupport", + "London", + "SouthEast", + "YorkshireAndTheHumber", + "NorthWest", + "EastOfEngland", + "WestMidlands", + "NorthEast", + "SouthWest", + "EastMidlands" + ], + "enum": [ + "RegionalCaseWorkerServices", + "ServiceSupport", + "London", + "SouthEast", + "YorkshireAndTheHumber", + "NorthWest", + "EastOfEngland", + "WestMidlands", + "NorthEast", + "SouthWest", + "EastMidlands" + ] + }, "Principal": { "allOf": [ { diff --git a/src/Core/Dfe.Complete.Application/Extensions/EnumExtensions.cs b/src/Core/Dfe.Complete.Application/Extensions/EnumExtensions.cs deleted file mode 100644 index a6b0290..0000000 --- a/src/Core/Dfe.Complete.Application/Extensions/EnumExtensions.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System.ComponentModel; -using System.Reflection; - -namespace Microsoft.Extensions.DependencyInjection.Extensions; - -public static class EnumExtensions -{ - public static string ToDescription(this T source) - { - if (source == null) - return string.Empty; - - var fi = source.GetType().GetField(source.ToString() ?? string.Empty); - - if (fi == null) - return string.Empty; - - var attributes = (DescriptionAttribute[]) fi.GetCustomAttributes(typeof(DescriptionAttribute), false); - - return (attributes.Length > 0 ? attributes[0].Description : source.ToString()) ?? string.Empty; - } -} \ No newline at end of file diff --git a/src/Core/Dfe.Complete.Application/Projects/Commands/CreateProject/CreateProject.cs b/src/Core/Dfe.Complete.Application/Projects/Commands/CreateProject/CreateProject.cs index bada7ca..c8bba19 100644 --- a/src/Core/Dfe.Complete.Application/Projects/Commands/CreateProject/CreateProject.cs +++ b/src/Core/Dfe.Complete.Application/Projects/Commands/CreateProject/CreateProject.cs @@ -4,6 +4,7 @@ using Dfe.Complete.Domain.Interfaces.Repositories; using Dfe.Complete.Domain.Entities; using Dfe.Complete.Infrastructure.Models; +using Dfe.Complete.Utils; using Microsoft.Extensions.DependencyInjection.Extensions; namespace Dfe.Complete.Application.Projects.Commands.CreateProject @@ -13,7 +14,7 @@ public record CreateConversionProjectCommand( DateOnly SignificantDate, bool IsSignificantDateProvisional, Ukprn IncomingTrustUkprn, - Region Region, + Region? Region, bool IsDueTo2Ri, bool HasAcademyOrderBeenIssued, DateOnly AdvisoryBoardDate, @@ -23,7 +24,8 @@ public record CreateConversionProjectCommand( string GroupReferenceNumber, bool HandingOverToRegionalCaseworkService, string HandoverComments, - User? RegionalDeliveryOfficer) : IRequest; + User? RegionalDeliveryOfficer, + Team? Team) : IRequest; public class CreateConversionProjectCommandHandler( ICompleteRepository projectRepository, @@ -62,7 +64,7 @@ await projectRepository.GetProjectGroupIdByIdentifierAsync(request.GroupReferenc } else { - team = request.Region.ToDescription(); + team = request.Team.ToDescription(); assignedAt = DateTime.UtcNow; assignedTo = request.RegionalDeliveryOfficer; } @@ -89,7 +91,8 @@ await projectRepository.GetProjectGroupIdByIdentifierAsync(request.GroupReferenc team, assignedAt, assignedTo, - note); + note, + request.RegionalDeliveryOfficer); await conversionTaskRepository.AddAsync(conversionTask, cancellationToken); await projectRepository.AddAsync(project, cancellationToken); diff --git a/src/Core/Dfe.Complete.Domain/Entities/Project.cs b/src/Core/Dfe.Complete.Domain/Entities/Project.cs index 19e4261..ca0f501 100644 --- a/src/Core/Dfe.Complete.Domain/Entities/Project.cs +++ b/src/Core/Dfe.Complete.Domain/Entities/Project.cs @@ -44,7 +44,7 @@ public class Project : BaseAggregateRoot, IEntity public bool? DirectiveAcademyOrder { get; set; } - public Region? Region { get; set; } + public string? Region { get; set; } public Urn? AcademyUrn { get; set; } @@ -106,7 +106,7 @@ public Project(ProjectId Id, DateOnly significantDate, bool isSignificantDateProvisional, Ukprn incomingTrustUkprn, - Region region, + string? region, bool isDueTo2RI, bool hasAcademyOrderBeenIssued, DateOnly advisoryBoardDate, @@ -115,9 +115,10 @@ public Project(ProjectId Id, string incomingTrustSharepointLink, Guid? groupId, string team, - DateTime? assignedAt = null, - User? assignedTo = null, - Note? note = null) + DateTime? assignedAt, + User? assignedTo, + Note? note, + User? regionalDeliveryOfficer) { Urn = urn ?? throw new ArgumentNullException(nameof(urn)); CreatedAt = createdAt != default ? createdAt : throw new ArgumentNullException(nameof(createdAt)); @@ -136,9 +137,9 @@ public Project(ProjectId Id, EstablishmentSharepointLink = establishmentSharepointLink; IncomingTrustSharepointLink = incomingTrustSharepointLink; GroupId = groupId; - Team = team; - + RegionalDeliveryOfficerId = regionalDeliveryOfficer?.Id; + AssignTo(assignedTo, assignedAt); AddNote(note); } @@ -153,7 +154,7 @@ public static Project CreateConversionProject(ProjectId Id, DateOnly significantDate, bool isSignificantDateProvisional, Ukprn incomingTrustUkprn, - Region region, + Region? region, bool isDueTo2RI, bool hasAcademyOrderBeenIssued, DateOnly advisoryBoardDate, @@ -164,8 +165,11 @@ public static Project CreateConversionProject(ProjectId Id, string team, DateTime? assignedAt, User? assignedTo, - Note? note) + Note? note, + User? regionalDeliveryOfficer) { + var regionCharValue = ((char) region).ToString(); + var project = new Project( Id, urn, @@ -177,7 +181,7 @@ public static Project CreateConversionProject(ProjectId Id, significantDate, isSignificantDateProvisional, incomingTrustUkprn, - region, + regionCharValue, isDueTo2RI, hasAcademyOrderBeenIssued, advisoryBoardDate, @@ -188,7 +192,8 @@ public static Project CreateConversionProject(ProjectId Id, team, assignedAt, assignedTo, - note); + note, + regionalDeliveryOfficer); project.AddDomainEvent(new ProjectCreatedEvent(project)); diff --git a/src/Core/Dfe.Complete.Domain/Enums/EnumMapper.cs b/src/Core/Dfe.Complete.Domain/Enums/EnumMapper.cs new file mode 100644 index 0000000..20dc995 --- /dev/null +++ b/src/Core/Dfe.Complete.Domain/Enums/EnumMapper.cs @@ -0,0 +1,23 @@ +namespace Dfe.Complete.Domain.Enums; + +public static class EnumMapper +{ + public static Region? MapTeamToRegion(Team team) + { + return team switch + { + Team.RegionalCaseWorkerServices => default, + Team.ServiceSupport => default, + Team.London => Region.London, + Team.SouthEast => Region.SouthEast, + Team.YorkshireAndTheHumber => Region.YorkshireAndTheHumber, + Team.NorthWest => Region.NorthWest, + Team.EastOfEngland => Region.EastOfEngland, + Team.WestMidlands => Region.WestMidlands, + Team.NorthEast => Region.NorthEast, + Team.SouthWest => Region.SouthWest, + Team.EastMidlands => Region.EastMidlands, + _ => throw new ArgumentOutOfRangeException(nameof(team), team, null) + }; + } +} \ No newline at end of file diff --git a/src/Core/Dfe.Complete.Domain/Enums/Region.cs b/src/Core/Dfe.Complete.Domain/Enums/Region.cs index d012539..cb41b03 100644 --- a/src/Core/Dfe.Complete.Domain/Enums/Region.cs +++ b/src/Core/Dfe.Complete.Domain/Enums/Region.cs @@ -5,22 +5,22 @@ namespace Dfe.Complete.Domain.Enums public enum Region { [Description("london")] - London = 1, + London = 'H', [Description("south_east")] - SouthEast = 2, + SouthEast = 'J', [Description("yorkshire_and_the_humber")] - YorkshireAndTheHumber = 3, + YorkshireAndTheHumber = 'D', [Description("north_west")] - NorthWest = 4, + NorthWest = 'B', [Description("east_of_england")] - EastOfEngland = 5, + EastOfEngland = 'G', [Description("west_midlands")] - WestMidlands = 6, + WestMidlands = 'F', [Description("north_east")] - NorthEast = 7, + NorthEast = 'A', [Description("south_west")] - SouthWest = 8, + SouthWest = 'K', [Description("east_midlands")] - EastMidlands = 9 + EastMidlands = 'E' } } diff --git a/src/Core/Dfe.Complete.Domain/Enums/Team.cs b/src/Core/Dfe.Complete.Domain/Enums/Team.cs new file mode 100644 index 0000000..ebbbf2a --- /dev/null +++ b/src/Core/Dfe.Complete.Domain/Enums/Team.cs @@ -0,0 +1,29 @@ +using System.ComponentModel; + +namespace Dfe.Complete.Domain.Enums; + +public enum Team +{ + [Description("regional_casework_services")] + RegionalCaseWorkerServices, + [Description("service_support")] + ServiceSupport, + [Description("london")] + London, + [Description("south_east")] + SouthEast, + [Description("yorkshire_and_the_humber")] + YorkshireAndTheHumber, + [Description("north_west")] + NorthWest, + [Description("east_of_england")] + EastOfEngland, + [Description("west_midlands")] + WestMidlands, + [Description("north_east")] + NorthEast, + [Description("south_west")] + SouthWest, + [Description("east_midlands")] + EastMidlands, +} \ No newline at end of file diff --git a/src/Core/Dfe.Complete.Utils/EnumExtensions.cs b/src/Core/Dfe.Complete.Utils/EnumExtensions.cs new file mode 100644 index 0000000..2d30846 --- /dev/null +++ b/src/Core/Dfe.Complete.Utils/EnumExtensions.cs @@ -0,0 +1,60 @@ +using System.ComponentModel; +using System.Reflection; + +namespace Dfe.Complete.Utils +{ + public static class EnumExtensions + { + public static string ToDescription(this T source) + { + if (source == null) + return string.Empty; + + var fi = source.GetType().GetField(source.ToString() ?? string.Empty); + + if (fi == null) + return string.Empty; + + var attributes = (DescriptionAttribute[]) fi.GetCustomAttributes(typeof(DescriptionAttribute), false); + + return (attributes.Length > 0 ? attributes[0].Description : source.ToString()) ?? string.Empty; + } + + public static T? FromDescription(string? description) where T : Enum + { + if (string.IsNullOrEmpty(description)) + throw new ArgumentException("Description cannot be null or empty.", nameof(description)); + + foreach (var field in typeof(T).GetFields()) + { + if (field.IsLiteral) + { + var attribute = field.GetCustomAttribute(); + if (attribute != null && attribute.Description == description) + return (T)field.GetValue(null); + + var fieldValue = field.GetValue(null)?.ToString(); + if (fieldValue == description) + return (T)field.GetValue(null); + } + } + + return default; + } + + public static string ToIntString(this Enum value) + { + if (value == null) return string.Empty; + + return value.ToString("D"); + } + + public static T? ToEnum(this string value) where T : struct + { + if (value == null) return null; + + return (T)Enum.Parse(typeof(T), value); + } + + } +} diff --git a/src/Frontend/Dfe.Complete/Extensions/EnumExtensions.cs b/src/Frontend/Dfe.Complete/Extensions/EnumExtensions.cs deleted file mode 100644 index 3950331..0000000 --- a/src/Frontend/Dfe.Complete/Extensions/EnumExtensions.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System; -using System.ComponentModel; -using System.Reflection; - -namespace Dfe.Complete.Extensions -{ - public static class EnumExtensions - { - public static string ToDescription(this T source) - { - if (source == null) return string.Empty; - - FieldInfo fi = source.GetType().GetField(source.ToString()); - - var attributes = (DescriptionAttribute[])fi.GetCustomAttributes( - typeof(DescriptionAttribute), false); - - return attributes.Length > 0 - ? attributes[0].Description - : source.ToString(); - } - - public static string ToIntString(this Enum value) - { - if (value == null) return string.Empty; - - return value.ToString("D"); - } - - public static T? ToEnum(this string value) where T : struct - { - if (value == null) return null; - - return (T)Enum.Parse(typeof(T), value); - } - - } -} diff --git a/src/Frontend/Dfe.Complete/Pages/Projects/Conversion/CreateNewProject.cshtml.cs b/src/Frontend/Dfe.Complete/Pages/Projects/Conversion/CreateNewProject.cshtml.cs index 3853e6e..d402226 100644 --- a/src/Frontend/Dfe.Complete/Pages/Projects/Conversion/CreateNewProject.cshtml.cs +++ b/src/Frontend/Dfe.Complete/Pages/Projects/Conversion/CreateNewProject.cshtml.cs @@ -8,9 +8,11 @@ using System.Globalization; using Dfe.Complete.Application.Projects.Commands.CreateProject; using Dfe.Complete.Domain.Entities; +using Dfe.Complete.Domain.Enums; using Dfe.Complete.Domain.Interfaces.Repositories; using MediatR; using Dfe.Complete.Domain.ValueObjects; +using Dfe.Complete.Utils; namespace Dfe.Complete.Pages.Projects.Conversion { @@ -94,7 +96,12 @@ public async Task OnPost(CancellationToken cancellationToken) } var currentUser = await completeRepository.GetUserByEmail(User.Identity?.Name?.ToLower(), cancellationToken); + var userTeam = currentUser?.Team; + + var projectTeam = EnumExtensions.FromDescription(userTeam); + var region = EnumMapper.MapTeamToRegion(projectTeam); + var createProjectCommand = new CreateConversionProjectCommand( Urn: new Urn(int.Parse(URN)), SignificantDate: ProvisionalConversionDate.HasValue ? DateOnly.FromDateTime(ProvisionalConversionDate.Value) : default, @@ -103,17 +110,18 @@ public async Task OnPost(CancellationToken cancellationToken) EstablishmentSharepointLink: SchoolSharePointLink, //todo: is this correct? IsDueTo2Ri: IsDueTo2RI ?? false, AdvisoryBoardDate: AdvisoryBoardDate.HasValue ? DateOnly.FromDateTime(AdvisoryBoardDate.Value) : default, - Region: Domain.Enums.Region.NorthWest, + Region: region, AdvisoryBoardConditions: AdvisoryBoardConditions, IncomingTrustUkprn: new Ukprn(int.Parse(UKPRN)), HasAcademyOrderBeenIssued: DirectiveAcademyOrder ?? default, GroupReferenceNumber: GroupReferenceNumber, HandoverComments: HandoverComments, HandingOverToRegionalCaseworkService: IsHandingToRCS ?? default, - RegionalDeliveryOfficer: null //todo: query to get delivery officer user + RegionalDeliveryOfficer: currentUser, + Team: projectTeam ); - var createResponse = await sender.Send(createProjectCommand); + var createResponse = await sender.Send(createProjectCommand, cancellationToken); var projectId = createResponse.Value; diff --git a/src/Frontend/Dfe.Complete/TagHelpers/SummaryItemTagHelper.cs b/src/Frontend/Dfe.Complete/TagHelpers/SummaryItemTagHelper.cs index 15c7b13..6bdfa04 100644 --- a/src/Frontend/Dfe.Complete/TagHelpers/SummaryItemTagHelper.cs +++ b/src/Frontend/Dfe.Complete/TagHelpers/SummaryItemTagHelper.cs @@ -4,6 +4,7 @@ using Microsoft.AspNetCore.Razor.TagHelpers; using System; using System.Globalization; +using Dfe.Complete.Utils; namespace Dfe.Complete.TagHelpers { From 5faac88743632e69c3c74cab2c67fecaad6315d2 Mon Sep 17 00:00:00 2001 From: Zach Hodges Date: Tue, 7 Jan 2025 18:04:39 +0000 Subject: [PATCH 08/24] changed region type to string in order to store char values --- ...hangeProjectRegionTypeToString.Designer.cs | 1965 +++++++++++++++++ ...7175259_ChangeProjectRegionTypeToString.cs | 42 + .../CompleteContextModelSnapshot.cs | 4 +- 3 files changed, 2009 insertions(+), 2 deletions(-) create mode 100644 src/Core/Dfe.Complete.Infrastructure/Migrations/20250107175259_ChangeProjectRegionTypeToString.Designer.cs create mode 100644 src/Core/Dfe.Complete.Infrastructure/Migrations/20250107175259_ChangeProjectRegionTypeToString.cs diff --git a/src/Core/Dfe.Complete.Infrastructure/Migrations/20250107175259_ChangeProjectRegionTypeToString.Designer.cs b/src/Core/Dfe.Complete.Infrastructure/Migrations/20250107175259_ChangeProjectRegionTypeToString.Designer.cs new file mode 100644 index 0000000..2cdd69b --- /dev/null +++ b/src/Core/Dfe.Complete.Infrastructure/Migrations/20250107175259_ChangeProjectRegionTypeToString.Designer.cs @@ -0,0 +1,1965 @@ +// +using System; +using Dfe.Complete.Infrastructure.Database; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Dfe.Complete.Infrastructure.Migrations +{ + [DbContext(typeof(CompleteContext))] + [Migration("20250107175259_ChangeProjectRegionTypeToString")] + partial class ChangeProjectRegionTypeToString + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "8.0.10") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Dfe.Complete.Domain.Entities.Contact", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("Category") + .HasColumnType("int") + .HasColumnName("category"); + + b.Property("CreatedAt") + .HasPrecision(6) + .HasColumnType("datetime2(6)") + .HasColumnName("created_at"); + + b.Property("Email") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("email"); + + b.Property("EstablishmentUrn") + .HasColumnType("int") + .HasColumnName("establishment_urn"); + + b.Property("LocalAuthorityId") + .HasColumnType("uniqueidentifier") + .HasColumnName("local_authority_id"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("name"); + + b.Property("OrganisationName") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("organisation_name"); + + b.Property("Phone") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("phone"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier") + .HasColumnName("project_id"); + + b.Property("Title") + .IsRequired() + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("title"); + + b.Property("Type") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("type"); + + b.Property("UpdatedAt") + .HasPrecision(6) + .HasColumnType("datetime2(6)") + .HasColumnName("updated_at"); + + b.HasKey("Id"); + + b.HasIndex("ProjectId"); + + b.ToTable("contacts", "complete"); + }); + + modelBuilder.Entity("Dfe.Complete.Domain.Entities.ConversionTasksData", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("AcademyDetailsName") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("academy_details_name"); + + b.Property("ArticlesOfAssociationCleared") + .HasColumnType("bit") + .HasColumnName("articles_of_association_cleared"); + + b.Property("ArticlesOfAssociationNotApplicable") + .HasColumnType("bit") + .HasColumnName("articles_of_association_not_applicable"); + + b.Property("ArticlesOfAssociationReceived") + .HasColumnType("bit") + .HasColumnName("articles_of_association_received"); + + b.Property("ArticlesOfAssociationSaved") + .HasColumnType("bit") + .HasColumnName("articles_of_association_saved"); + + b.Property("ArticlesOfAssociationSent") + .HasColumnType("bit") + .HasColumnName("articles_of_association_sent"); + + b.Property("ArticlesOfAssociationSigned") + .HasColumnType("bit") + .HasColumnName("articles_of_association_signed"); + + b.Property("CheckAccuracyOfHigherNeedsConfirmNumber") + .HasColumnType("bit") + .HasColumnName("check_accuracy_of_higher_needs_confirm_number"); + + b.Property("CheckAccuracyOfHigherNeedsConfirmPublishedNumber") + .HasColumnType("bit") + .HasColumnName("check_accuracy_of_higher_needs_confirm_published_number"); + + b.Property("ChurchSupplementalAgreementCleared") + .HasColumnType("bit") + .HasColumnName("church_supplemental_agreement_cleared"); + + b.Property("ChurchSupplementalAgreementNotApplicable") + .HasColumnType("bit") + .HasColumnName("church_supplemental_agreement_not_applicable"); + + b.Property("ChurchSupplementalAgreementReceived") + .HasColumnType("bit") + .HasColumnName("church_supplemental_agreement_received"); + + b.Property("ChurchSupplementalAgreementSaved") + .HasColumnType("bit") + .HasColumnName("church_supplemental_agreement_saved"); + + b.Property("ChurchSupplementalAgreementSent") + .HasColumnType("bit") + .HasColumnName("church_supplemental_agreement_sent"); + + b.Property("ChurchSupplementalAgreementSigned") + .HasColumnType("bit") + .HasColumnName("church_supplemental_agreement_signed"); + + b.Property("ChurchSupplementalAgreementSignedDiocese") + .HasColumnType("bit") + .HasColumnName("church_supplemental_agreement_signed_diocese"); + + b.Property("ChurchSupplementalAgreementSignedSecretaryState") + .HasColumnType("bit") + .HasColumnName("church_supplemental_agreement_signed_secretary_state"); + + b.Property("CommercialTransferAgreementAgreed") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("commercial_transfer_agreement_agreed"); + + b.Property("CommercialTransferAgreementQuestionsChecked") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("commercial_transfer_agreement_questions_checked"); + + b.Property("CommercialTransferAgreementQuestionsReceived") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("commercial_transfer_agreement_questions_received"); + + b.Property("CommercialTransferAgreementSaved") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("commercial_transfer_agreement_saved"); + + b.Property("CommercialTransferAgreementSigned") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("commercial_transfer_agreement_signed"); + + b.Property("CompleteNotificationOfChangeCheckDocument") + .HasColumnType("bit") + .HasColumnName("complete_notification_of_change_check_document"); + + b.Property("CompleteNotificationOfChangeNotApplicable") + .HasColumnType("bit") + .HasColumnName("complete_notification_of_change_not_applicable"); + + b.Property("CompleteNotificationOfChangeSendDocument") + .HasColumnType("bit") + .HasColumnName("complete_notification_of_change_send_document"); + + b.Property("CompleteNotificationOfChangeTellLocalAuthority") + .HasColumnType("bit") + .HasColumnName("complete_notification_of_change_tell_local_authority"); + + b.Property("ConfirmDateAcademyOpenedDateOpened") + .HasColumnType("date") + .HasColumnName("confirm_date_academy_opened_date_opened"); + + b.Property("ConversionGrantCheckVendorAccount") + .HasColumnType("bit") + .HasColumnName("conversion_grant_check_vendor_account"); + + b.Property("ConversionGrantNotApplicable") + .HasColumnType("bit") + .HasColumnName("conversion_grant_not_applicable"); + + b.Property("ConversionGrantPaymentForm") + .HasColumnType("bit") + .HasColumnName("conversion_grant_payment_form"); + + b.Property("ConversionGrantSendInformation") + .HasColumnType("bit") + .HasColumnName("conversion_grant_send_information"); + + b.Property("ConversionGrantSharePaymentDate") + .HasColumnType("bit") + .HasColumnName("conversion_grant_share_payment_date"); + + b.Property("CreatedAt") + .HasPrecision(6) + .HasColumnType("datetime2(6)") + .HasColumnName("created_at"); + + b.Property("DeedOfVariationCleared") + .HasColumnType("bit") + .HasColumnName("deed_of_variation_cleared"); + + b.Property("DeedOfVariationNotApplicable") + .HasColumnType("bit") + .HasColumnName("deed_of_variation_not_applicable"); + + b.Property("DeedOfVariationReceived") + .HasColumnType("bit") + .HasColumnName("deed_of_variation_received"); + + b.Property("DeedOfVariationSaved") + .HasColumnType("bit") + .HasColumnName("deed_of_variation_saved"); + + b.Property("DeedOfVariationSent") + .HasColumnType("bit") + .HasColumnName("deed_of_variation_sent"); + + b.Property("DeedOfVariationSigned") + .HasColumnType("bit") + .HasColumnName("deed_of_variation_signed"); + + b.Property("DeedOfVariationSignedSecretaryState") + .HasColumnType("bit") + .HasColumnName("deed_of_variation_signed_secretary_state"); + + b.Property("DirectionToTransferCleared") + .HasColumnType("bit") + .HasColumnName("direction_to_transfer_cleared"); + + b.Property("DirectionToTransferNotApplicable") + .HasColumnType("bit") + .HasColumnName("direction_to_transfer_not_applicable"); + + b.Property("DirectionToTransferReceived") + .HasColumnType("bit") + .HasColumnName("direction_to_transfer_received"); + + b.Property("DirectionToTransferSaved") + .HasColumnType("bit") + .HasColumnName("direction_to_transfer_saved"); + + b.Property("DirectionToTransferSigned") + .HasColumnType("bit") + .HasColumnName("direction_to_transfer_signed"); + + b.Property("HandoverMeeting") + .HasColumnType("bit") + .HasColumnName("handover_meeting"); + + b.Property("HandoverNotApplicable") + .HasColumnType("bit") + .HasColumnName("handover_not_applicable"); + + b.Property("HandoverNotes") + .HasColumnType("bit") + .HasColumnName("handover_notes"); + + b.Property("HandoverReview") + .HasColumnType("bit") + .HasColumnName("handover_review"); + + b.Property("LandQuestionnaireCleared") + .HasColumnType("bit") + .HasColumnName("land_questionnaire_cleared"); + + b.Property("LandQuestionnaireReceived") + .HasColumnType("bit") + .HasColumnName("land_questionnaire_received"); + + b.Property("LandQuestionnaireSaved") + .HasColumnType("bit") + .HasColumnName("land_questionnaire_saved"); + + b.Property("LandQuestionnaireSigned") + .HasColumnType("bit") + .HasColumnName("land_questionnaire_signed"); + + b.Property("LandRegistryCleared") + .HasColumnType("bit") + .HasColumnName("land_registry_cleared"); + + b.Property("LandRegistryReceived") + .HasColumnType("bit") + .HasColumnName("land_registry_received"); + + b.Property("LandRegistrySaved") + .HasColumnType("bit") + .HasColumnName("land_registry_saved"); + + b.Property("MasterFundingAgreementCleared") + .HasColumnType("bit") + .HasColumnName("master_funding_agreement_cleared"); + + b.Property("MasterFundingAgreementNotApplicable") + .HasColumnType("bit") + .HasColumnName("master_funding_agreement_not_applicable"); + + b.Property("MasterFundingAgreementReceived") + .HasColumnType("bit") + .HasColumnName("master_funding_agreement_received"); + + b.Property("MasterFundingAgreementSaved") + .HasColumnType("bit") + .HasColumnName("master_funding_agreement_saved"); + + b.Property("MasterFundingAgreementSent") + .HasColumnType("bit") + .HasColumnName("master_funding_agreement_sent"); + + b.Property("MasterFundingAgreementSigned") + .HasColumnType("bit") + .HasColumnName("master_funding_agreement_signed"); + + b.Property("MasterFundingAgreementSignedSecretaryState") + .HasColumnType("bit") + .HasColumnName("master_funding_agreement_signed_secretary_state"); + + b.Property("OneHundredAndTwentyFiveYearLeaseEmail") + .HasColumnType("bit") + .HasColumnName("one_hundred_and_twenty_five_year_lease_email"); + + b.Property("OneHundredAndTwentyFiveYearLeaseNotApplicable") + .HasColumnType("bit") + .HasColumnName("one_hundred_and_twenty_five_year_lease_not_applicable"); + + b.Property("OneHundredAndTwentyFiveYearLeaseReceive") + .HasColumnType("bit") + .HasColumnName("one_hundred_and_twenty_five_year_lease_receive"); + + b.Property("OneHundredAndTwentyFiveYearLeaseSaveLease") + .HasColumnType("bit") + .HasColumnName("one_hundred_and_twenty_five_year_lease_save_lease"); + + b.Property("ProposedCapacityOfTheAcademyNotApplicable") + .HasColumnType("bit") + .HasColumnName("proposed_capacity_of_the_academy_not_applicable"); + + b.Property("ProposedCapacityOfTheAcademyReceptionToSixYears") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("proposed_capacity_of_the_academy_reception_to_six_years"); + + b.Property("ProposedCapacityOfTheAcademySevenToElevenYears") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("proposed_capacity_of_the_academy_seven_to_eleven_years"); + + b.Property("ProposedCapacityOfTheAcademyTwelveOrAboveYears") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("proposed_capacity_of_the_academy_twelve_or_above_years"); + + b.Property("ReceiveGrantPaymentCertificateCheckCertificate") + .HasColumnType("bit") + .HasColumnName("receive_grant_payment_certificate_check_certificate"); + + b.Property("ReceiveGrantPaymentCertificateDateReceived") + .HasColumnType("date") + .HasColumnName("receive_grant_payment_certificate_date_received"); + + b.Property("ReceiveGrantPaymentCertificateSaveCertificate") + .HasColumnType("bit") + .HasColumnName("receive_grant_payment_certificate_save_certificate"); + + b.Property("RedactAndSendRedact") + .HasColumnType("bit") + .HasColumnName("redact_and_send_redact"); + + b.Property("RedactAndSendSaveRedaction") + .HasColumnType("bit") + .HasColumnName("redact_and_send_save_redaction"); + + b.Property("RedactAndSendSendRedaction") + .HasColumnType("bit") + .HasColumnName("redact_and_send_send_redaction"); + + b.Property("RedactAndSendSendSolicitors") + .HasColumnType("bit") + .HasColumnName("redact_and_send_send_solicitors"); + + b.Property("RiskProtectionArrangementOption") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("risk_protection_arrangement_option"); + + b.Property("RiskProtectionArrangementReason") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("risk_protection_arrangement_reason"); + + b.Property("SchoolCompletedEmailed") + .HasColumnType("bit") + .HasColumnName("school_completed_emailed"); + + b.Property("SchoolCompletedSaved") + .HasColumnType("bit") + .HasColumnName("school_completed_saved"); + + b.Property("ShareInformationEmail") + .HasColumnType("bit") + .HasColumnName("share_information_email"); + + b.Property("SponsoredSupportGrantInformTrust") + .HasColumnType("bit") + .HasColumnName("sponsored_support_grant_inform_trust"); + + b.Property("SponsoredSupportGrantNotApplicable") + .HasColumnType("bit") + .HasColumnName("sponsored_support_grant_not_applicable"); + + b.Property("SponsoredSupportGrantPaymentAmount") + .HasColumnType("bit") + .HasColumnName("sponsored_support_grant_payment_amount"); + + b.Property("SponsoredSupportGrantPaymentForm") + .HasColumnType("bit") + .HasColumnName("sponsored_support_grant_payment_form"); + + b.Property("SponsoredSupportGrantSendInformation") + .HasColumnType("bit") + .HasColumnName("sponsored_support_grant_send_information"); + + b.Property("SponsoredSupportGrantType") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("sponsored_support_grant_type"); + + b.Property("StakeholderKickOffCheckProvisionalConversionDate") + .HasColumnType("bit") + .HasColumnName("stakeholder_kick_off_check_provisional_conversion_date"); + + b.Property("StakeholderKickOffIntroductoryEmails") + .HasColumnType("bit") + .HasColumnName("stakeholder_kick_off_introductory_emails"); + + b.Property("StakeholderKickOffLocalAuthorityProforma") + .HasColumnType("bit") + .HasColumnName("stakeholder_kick_off_local_authority_proforma"); + + b.Property("StakeholderKickOffMeeting") + .HasColumnType("bit") + .HasColumnName("stakeholder_kick_off_meeting"); + + b.Property("StakeholderKickOffSetupMeeting") + .HasColumnType("bit") + .HasColumnName("stakeholder_kick_off_setup_meeting"); + + b.Property("SubleasesCleared") + .HasColumnType("bit") + .HasColumnName("subleases_cleared"); + + b.Property("SubleasesEmailSigned") + .HasColumnType("bit") + .HasColumnName("subleases_email_signed"); + + b.Property("SubleasesNotApplicable") + .HasColumnType("bit") + .HasColumnName("subleases_not_applicable"); + + b.Property("SubleasesReceiveSigned") + .HasColumnType("bit") + .HasColumnName("subleases_receive_signed"); + + b.Property("SubleasesReceived") + .HasColumnType("bit") + .HasColumnName("subleases_received"); + + b.Property("SubleasesSaveSigned") + .HasColumnType("bit") + .HasColumnName("subleases_save_signed"); + + b.Property("SubleasesSaved") + .HasColumnType("bit") + .HasColumnName("subleases_saved"); + + b.Property("SubleasesSigned") + .HasColumnType("bit") + .HasColumnName("subleases_signed"); + + b.Property("SupplementalFundingAgreementCleared") + .HasColumnType("bit") + .HasColumnName("supplemental_funding_agreement_cleared"); + + b.Property("SupplementalFundingAgreementReceived") + .HasColumnType("bit") + .HasColumnName("supplemental_funding_agreement_received"); + + b.Property("SupplementalFundingAgreementSaved") + .HasColumnType("bit") + .HasColumnName("supplemental_funding_agreement_saved"); + + b.Property("SupplementalFundingAgreementSent") + .HasColumnType("bit") + .HasColumnName("supplemental_funding_agreement_sent"); + + b.Property("SupplementalFundingAgreementSigned") + .HasColumnType("bit") + .HasColumnName("supplemental_funding_agreement_signed"); + + b.Property("SupplementalFundingAgreementSignedSecretaryState") + .HasColumnType("bit") + .HasColumnName("supplemental_funding_agreement_signed_secretary_state"); + + b.Property("TenancyAtWillEmailSigned") + .HasColumnType("bit") + .HasColumnName("tenancy_at_will_email_signed"); + + b.Property("TenancyAtWillNotApplicable") + .HasColumnType("bit") + .HasColumnName("tenancy_at_will_not_applicable"); + + b.Property("TenancyAtWillReceiveSigned") + .HasColumnType("bit") + .HasColumnName("tenancy_at_will_receive_signed"); + + b.Property("TenancyAtWillSaveSigned") + .HasColumnType("bit") + .HasColumnName("tenancy_at_will_save_signed"); + + b.Property("TrustModificationOrderCleared") + .HasColumnType("bit") + .HasColumnName("trust_modification_order_cleared"); + + b.Property("TrustModificationOrderNotApplicable") + .HasColumnType("bit") + .HasColumnName("trust_modification_order_not_applicable"); + + b.Property("TrustModificationOrderReceived") + .HasColumnType("bit") + .HasColumnName("trust_modification_order_received"); + + b.Property("TrustModificationOrderSaved") + .HasColumnType("bit") + .HasColumnName("trust_modification_order_saved"); + + b.Property("TrustModificationOrderSentLegal") + .HasColumnType("bit") + .HasColumnName("trust_modification_order_sent_legal"); + + b.Property("UpdateEsfaUpdate") + .HasColumnType("bit") + .HasColumnName("update_esfa_update"); + + b.Property("UpdatedAt") + .HasPrecision(6) + .HasColumnType("datetime2(6)") + .HasColumnName("updated_at"); + + b.HasKey("Id"); + + b.ToTable("conversion_tasks_data", "complete"); + }); + + modelBuilder.Entity("Dfe.Complete.Domain.Entities.Project", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("AcademyUrn") + .HasColumnType("int") + .HasColumnName("academy_urn"); + + b.Property("AdvisoryBoardConditions") + .HasColumnType("nvarchar(max)") + .HasColumnName("advisory_board_conditions"); + + b.Property("AdvisoryBoardDate") + .HasColumnType("date") + .HasColumnName("advisory_board_date"); + + b.Property("AllConditionsMet") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("all_conditions_met"); + + b.Property("AssignedAt") + .HasPrecision(6) + .HasColumnType("datetime2(6)") + .HasColumnName("assigned_at"); + + b.Property("AssignedToId") + .HasColumnType("uniqueidentifier") + .HasColumnName("assigned_to_id"); + + b.Property("CaseworkerId") + .HasColumnType("uniqueidentifier") + .HasColumnName("caseworker_id"); + + b.Property("CompletedAt") + .HasPrecision(6) + .HasColumnType("datetime2(6)") + .HasColumnName("completed_at"); + + b.Property("CreatedAt") + .HasPrecision(6) + .HasColumnType("datetime2(6)") + .HasColumnName("created_at"); + + b.Property("DirectiveAcademyOrder") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("directive_academy_order"); + + b.Property("EstablishmentMainContactId") + .HasColumnType("uniqueidentifier") + .HasColumnName("establishment_main_contact_id"); + + b.Property("EstablishmentSharepointLink") + .HasColumnType("nvarchar(max)") + .HasColumnName("establishment_sharepoint_link"); + + b.Property("GroupId") + .HasColumnType("uniqueidentifier") + .HasColumnName("group_id"); + + b.Property("IncomingTrustMainContactId") + .HasColumnType("uniqueidentifier") + .HasColumnName("incoming_trust_main_contact_id"); + + b.Property("IncomingTrustSharepointLink") + .HasColumnType("nvarchar(max)") + .HasColumnName("incoming_trust_sharepoint_link"); + + b.Property("IncomingTrustUkprn") + .HasColumnType("int") + .HasColumnName("incoming_trust_ukprn"); + + b.Property("LocalAuthorityMainContactId") + .HasColumnType("uniqueidentifier") + .HasColumnName("local_authority_main_contact_id"); + + b.Property("MainContactId") + .HasColumnType("uniqueidentifier") + .HasColumnName("main_contact_id"); + + b.Property("NewTrustName") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("new_trust_name"); + + b.Property("NewTrustReferenceNumber") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("new_trust_reference_number"); + + b.Property("OutgoingTrustMainContactId") + .HasColumnType("uniqueidentifier") + .HasColumnName("outgoing_trust_main_contact_id"); + + b.Property("OutgoingTrustSharepointLink") + .HasColumnType("nvarchar(max)") + .HasColumnName("outgoing_trust_sharepoint_link"); + + b.Property("OutgoingTrustUkprn") + .HasColumnType("int") + .HasColumnName("outgoing_trust_ukprn"); + + b.Property("PrepareId") + .HasColumnType("int") + .HasColumnName("prepare_id"); + + b.Property("Region") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("region"); + + b.Property("RegionalDeliveryOfficerId") + .HasColumnType("uniqueidentifier") + .HasColumnName("regional_delivery_officer_id"); + + b.Property("SignificantDate") + .HasColumnType("date") + .HasColumnName("significant_date"); + + b.Property("SignificantDateProvisional") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(true) + .HasColumnName("significant_date_provisional"); + + b.Property("State") + .HasColumnType("int") + .HasColumnName("state"); + + b.Property("TasksDataId") + .HasColumnType("uniqueidentifier") + .HasColumnName("tasks_data_id"); + + b.Property("TasksDataType") + .HasMaxLength(4000) + .HasColumnType("int") + .HasColumnName("tasks_data_type"); + + b.Property("Team") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("team"); + + b.Property("TwoRequiresImprovement") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("two_requires_improvement"); + + b.Property("Type") + .HasMaxLength(4000) + .HasColumnType("int") + .HasColumnName("type"); + + b.Property("UpdatedAt") + .HasPrecision(6) + .HasColumnType("datetime2(6)") + .HasColumnName("updated_at"); + + b.Property("Urn") + .HasColumnType("int") + .HasColumnName("urn"); + + b.HasKey("Id"); + + b.HasIndex("AssignedToId"); + + b.HasIndex("CaseworkerId"); + + b.HasIndex("RegionalDeliveryOfficerId"); + + b.ToTable("projects", "complete"); + }); + + modelBuilder.Entity("Dfe.Complete.Domain.Entities.User", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("ActiveDirectoryUserGroupIds") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("active_directory_user_group_ids"); + + b.Property("ActiveDirectoryUserId") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("active_directory_user_id"); + + b.Property("AddNewProject") + .HasColumnType("bit") + .HasColumnName("add_new_project"); + + b.Property("AssignToProject") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("assign_to_project"); + + b.Property("CreatedAt") + .HasPrecision(6) + .HasColumnType("datetime2(6)") + .HasColumnName("created_at"); + + b.Property("DeactivatedAt") + .HasPrecision(6) + .HasColumnType("datetime2(6)") + .HasColumnName("deactivated_at"); + + b.Property("Email") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("email"); + + b.Property("FirstName") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("first_name"); + + b.Property("LastName") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("last_name"); + + b.Property("LatestSession") + .HasPrecision(6) + .HasColumnType("datetime2(6)") + .HasColumnName("latest_session"); + + b.Property("ManageConversionUrns") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("manage_conversion_urns"); + + b.Property("ManageLocalAuthorities") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("manage_local_authorities"); + + b.Property("ManageTeam") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("manage_team"); + + b.Property("ManageUserAccounts") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("manage_user_accounts"); + + b.Property("Team") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("team"); + + b.Property("UpdatedAt") + .HasPrecision(6) + .HasColumnType("datetime2(6)") + .HasColumnName("updated_at"); + + b.HasKey("Id"); + + b.ToTable("users", "complete"); + }); + + modelBuilder.Entity("Dfe.Complete.Infrastructure.Models.DaoRevocation", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("CreatedAt") + .HasPrecision(6) + .HasColumnType("datetime2(6)") + .HasColumnName("created_at"); + + b.Property("DateOfDecision") + .HasColumnType("date") + .HasColumnName("date_of_decision"); + + b.Property("DecisionMakersName") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("decision_makers_name"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier") + .HasColumnName("project_id"); + + b.Property("UpdatedAt") + .HasPrecision(6) + .HasColumnType("datetime2(6)") + .HasColumnName("updated_at"); + + b.HasKey("Id"); + + b.ToTable("dao_revocations", "complete"); + }); + + modelBuilder.Entity("Dfe.Complete.Infrastructure.Models.DaoRevocationReason", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("DaoRevocationId") + .HasColumnType("uniqueidentifier") + .HasColumnName("dao_revocation_id"); + + b.Property("ReasonType") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("reason_type"); + + b.HasKey("Id"); + + b.ToTable("dao_revocation_reasons", "complete"); + }); + + modelBuilder.Entity("Dfe.Complete.Infrastructure.Models.GiasEstablishment", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("AddressAdditional") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("address_additional"); + + b.Property("AddressCounty") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("address_county"); + + b.Property("AddressLocality") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("address_locality"); + + b.Property("AddressPostcode") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("address_postcode"); + + b.Property("AddressStreet") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("address_street"); + + b.Property("AddressTown") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("address_town"); + + b.Property("AgeRangeLower") + .HasColumnType("int") + .HasColumnName("age_range_lower"); + + b.Property("AgeRangeUpper") + .HasColumnType("int") + .HasColumnName("age_range_upper"); + + b.Property("CreatedAt") + .HasPrecision(6) + .HasColumnType("datetime2(6)") + .HasColumnName("created_at"); + + b.Property("DioceseCode") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("diocese_code"); + + b.Property("DioceseName") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("diocese_name"); + + b.Property("EstablishmentNumber") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("establishment_number"); + + b.Property("LocalAuthorityCode") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("local_authority_code"); + + b.Property("LocalAuthorityName") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("local_authority_name"); + + b.Property("Name") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("name"); + + b.Property("OpenDate") + .HasColumnType("date") + .HasColumnName("open_date"); + + b.Property("ParliamentaryConstituencyCode") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("parliamentary_constituency_code"); + + b.Property("ParliamentaryConstituencyName") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("parliamentary_constituency_name"); + + b.Property("PhaseCode") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("phase_code"); + + b.Property("PhaseName") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("phase_name"); + + b.Property("RegionCode") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("region_code"); + + b.Property("RegionName") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("region_name"); + + b.Property("StatusName") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("status_name"); + + b.Property("TypeCode") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("type_code"); + + b.Property("TypeName") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("type_name"); + + b.Property("Ukprn") + .HasColumnType("int") + .HasColumnName("ukprn"); + + b.Property("UpdatedAt") + .HasPrecision(6) + .HasColumnType("datetime2(6)") + .HasColumnName("updated_at"); + + b.Property("Url") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("url"); + + b.Property("Urn") + .HasColumnType("int") + .HasColumnName("urn"); + + b.HasKey("Id"); + + b.ToTable("gias_establishments", "complete"); + }); + + modelBuilder.Entity("Dfe.Complete.Infrastructure.Models.GiasGroup", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("AddressAdditional") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("address_additional"); + + b.Property("AddressCounty") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("address_county"); + + b.Property("AddressLocality") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("address_locality"); + + b.Property("AddressPostcode") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("address_postcode"); + + b.Property("AddressStreet") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("address_street"); + + b.Property("AddressTown") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("address_town"); + + b.Property("CompaniesHouseNumber") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("companies_house_number"); + + b.Property("CreatedAt") + .HasPrecision(6) + .HasColumnType("datetime2(6)") + .HasColumnName("created_at"); + + b.Property("GroupIdentifier") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("group_identifier"); + + b.Property("OriginalName") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("original_name"); + + b.Property("Ukprn") + .HasColumnType("int") + .HasColumnName("ukprn"); + + b.Property("UniqueGroupIdentifier") + .HasColumnType("int") + .HasColumnName("unique_group_identifier"); + + b.Property("UpdatedAt") + .HasPrecision(6) + .HasColumnType("datetime2(6)") + .HasColumnName("updated_at"); + + b.HasKey("Id"); + + b.ToTable("gias_groups", "complete"); + }); + + modelBuilder.Entity("Dfe.Complete.Infrastructure.Models.KeyContact", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("ChairOfGovernorsId") + .HasColumnType("uniqueidentifier") + .HasColumnName("chair_of_governors_id"); + + b.Property("CreatedAt") + .HasPrecision(6) + .HasColumnType("datetime2(6)") + .HasColumnName("created_at"); + + b.Property("HeadteacherId") + .HasColumnType("uniqueidentifier") + .HasColumnName("headteacher_id"); + + b.Property("IncomingTrustCeoId") + .HasColumnType("uniqueidentifier") + .HasColumnName("incoming_trust_ceo_id"); + + b.Property("OutgoingTrustCeoId") + .HasColumnType("uniqueidentifier") + .HasColumnName("outgoing_trust_ceo_id"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier") + .HasColumnName("project_id"); + + b.Property("UpdatedAt") + .HasPrecision(6) + .HasColumnType("datetime2(6)") + .HasColumnName("updated_at"); + + b.HasKey("Id"); + + b.ToTable("key_contacts", "complete"); + }); + + modelBuilder.Entity("Dfe.Complete.Infrastructure.Models.LocalAuthority", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("Address1") + .IsRequired() + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("address_1"); + + b.Property("Address2") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("address_2"); + + b.Property("Address3") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("address_3"); + + b.Property("AddressCounty") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("address_county"); + + b.Property("AddressPostcode") + .IsRequired() + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("address_postcode"); + + b.Property("AddressTown") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("address_town"); + + b.Property("Code") + .IsRequired() + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("code"); + + b.Property("CreatedAt") + .HasPrecision(6) + .HasColumnType("datetime2(6)") + .HasColumnName("created_at"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("name"); + + b.Property("UpdatedAt") + .HasPrecision(6) + .HasColumnType("datetime2(6)") + .HasColumnName("updated_at"); + + b.HasKey("Id"); + + b.ToTable("local_authorities", "complete"); + }); + + modelBuilder.Entity("Dfe.Complete.Infrastructure.Models.Note", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("Body") + .HasColumnType("nvarchar(max)") + .HasColumnName("body"); + + b.Property("CreatedAt") + .HasPrecision(6) + .HasColumnType("datetime2(6)") + .HasColumnName("created_at"); + + b.Property("NotableId") + .HasColumnType("uniqueidentifier") + .HasColumnName("notable_id"); + + b.Property("NotableType") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("notable_type"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier") + .HasColumnName("project_id"); + + b.Property("TaskIdentifier") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("task_identifier"); + + b.Property("UpdatedAt") + .HasPrecision(6) + .HasColumnType("datetime2(6)") + .HasColumnName("updated_at"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.HasIndex("ProjectId"); + + b.HasIndex("UserId"); + + b.ToTable("notes", "complete"); + }); + + modelBuilder.Entity("Dfe.Complete.Infrastructure.Models.ProjectGroup", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("CreatedAt") + .HasPrecision(6) + .HasColumnType("datetime2(6)") + .HasColumnName("created_at"); + + b.Property("GroupIdentifier") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("group_identifier"); + + b.Property("TrustUkprn") + .HasColumnType("int") + .HasColumnName("trust_ukprn"); + + b.Property("UpdatedAt") + .HasPrecision(6) + .HasColumnType("datetime2(6)") + .HasColumnName("updated_at"); + + b.HasKey("Id"); + + b.ToTable("project_groups", "complete"); + }); + + modelBuilder.Entity("Dfe.Complete.Infrastructure.Models.SignificantDateHistory", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("CreatedAt") + .HasPrecision(6) + .HasColumnType("datetime2(6)") + .HasColumnName("created_at"); + + b.Property("PreviousDate") + .HasColumnType("date") + .HasColumnName("previous_date"); + + b.Property("ProjectId") + .HasColumnType("uniqueidentifier") + .HasColumnName("project_id"); + + b.Property("RevisedDate") + .HasColumnType("date") + .HasColumnName("revised_date"); + + b.Property("UpdatedAt") + .HasPrecision(6) + .HasColumnType("datetime2(6)") + .HasColumnName("updated_at"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier") + .HasColumnName("user_id"); + + b.HasKey("Id"); + + b.ToTable("significant_date_histories", "complete"); + }); + + modelBuilder.Entity("Dfe.Complete.Infrastructure.Models.SignificantDateHistoryReason", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("CreatedAt") + .HasPrecision(6) + .HasColumnType("datetime2(6)") + .HasColumnName("created_at"); + + b.Property("ReasonType") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("reason_type"); + + b.Property("SignificantDateHistoryId") + .HasColumnType("uniqueidentifier") + .HasColumnName("significant_date_history_id"); + + b.Property("UpdatedAt") + .HasPrecision(6) + .HasColumnType("datetime2(6)") + .HasColumnName("updated_at"); + + b.HasKey("Id"); + + b.ToTable("significant_date_history_reasons", "complete"); + }); + + modelBuilder.Entity("Dfe.Complete.Infrastructure.Models.TransferTasksData", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier") + .HasColumnName("id"); + + b.Property("ArticlesOfAssociationCleared") + .HasColumnType("bit") + .HasColumnName("articles_of_association_cleared"); + + b.Property("ArticlesOfAssociationNotApplicable") + .HasColumnType("bit") + .HasColumnName("articles_of_association_not_applicable"); + + b.Property("ArticlesOfAssociationReceived") + .HasColumnType("bit") + .HasColumnName("articles_of_association_received"); + + b.Property("ArticlesOfAssociationSaved") + .HasColumnType("bit") + .HasColumnName("articles_of_association_saved"); + + b.Property("ArticlesOfAssociationSent") + .HasColumnType("bit") + .HasColumnName("articles_of_association_sent"); + + b.Property("ArticlesOfAssociationSigned") + .HasColumnType("bit") + .HasColumnName("articles_of_association_signed"); + + b.Property("BankDetailsChangingYesNo") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("bank_details_changing_yes_no"); + + b.Property("CheckAndConfirmFinancialInformationAcademySurplusDeficit") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("check_and_confirm_financial_information_academy_surplus_deficit"); + + b.Property("CheckAndConfirmFinancialInformationNotApplicable") + .HasColumnType("bit") + .HasColumnName("check_and_confirm_financial_information_not_applicable"); + + b.Property("CheckAndConfirmFinancialInformationTrustSurplusDeficit") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("check_and_confirm_financial_information_trust_surplus_deficit"); + + b.Property("ChurchSupplementalAgreementCleared") + .HasColumnType("bit") + .HasColumnName("church_supplemental_agreement_cleared"); + + b.Property("ChurchSupplementalAgreementNotApplicable") + .HasColumnType("bit") + .HasColumnName("church_supplemental_agreement_not_applicable"); + + b.Property("ChurchSupplementalAgreementReceived") + .HasColumnType("bit") + .HasColumnName("church_supplemental_agreement_received"); + + b.Property("ChurchSupplementalAgreementSavedAfterSigningBySecretaryState") + .HasColumnType("bit") + .HasColumnName("church_supplemental_agreement_saved_after_signing_by_secretary_state"); + + b.Property("ChurchSupplementalAgreementSavedAfterSigningByTrustDiocese") + .HasColumnType("bit") + .HasColumnName("church_supplemental_agreement_saved_after_signing_by_trust_diocese"); + + b.Property("ChurchSupplementalAgreementSignedDiocese") + .HasColumnType("bit") + .HasColumnName("church_supplemental_agreement_signed_diocese"); + + b.Property("ChurchSupplementalAgreementSignedIncomingTrust") + .HasColumnType("bit") + .HasColumnName("church_supplemental_agreement_signed_incoming_trust"); + + b.Property("ChurchSupplementalAgreementSignedSecretaryState") + .HasColumnType("bit") + .HasColumnName("church_supplemental_agreement_signed_secretary_state"); + + b.Property("ClosureOrTransferDeclarationCleared") + .HasColumnType("bit") + .HasColumnName("closure_or_transfer_declaration_cleared"); + + b.Property("ClosureOrTransferDeclarationNotApplicable") + .HasColumnType("bit") + .HasColumnName("closure_or_transfer_declaration_not_applicable"); + + b.Property("ClosureOrTransferDeclarationReceived") + .HasColumnType("bit") + .HasColumnName("closure_or_transfer_declaration_received"); + + b.Property("ClosureOrTransferDeclarationSaved") + .HasColumnType("bit") + .HasColumnName("closure_or_transfer_declaration_saved"); + + b.Property("ClosureOrTransferDeclarationSent") + .HasColumnType("bit") + .HasColumnName("closure_or_transfer_declaration_sent"); + + b.Property("CommercialTransferAgreementConfirmAgreed") + .HasColumnType("bit") + .HasColumnName("commercial_transfer_agreement_confirm_agreed"); + + b.Property("CommercialTransferAgreementConfirmSigned") + .HasColumnType("bit") + .HasColumnName("commercial_transfer_agreement_confirm_signed"); + + b.Property("CommercialTransferAgreementQuestionsChecked") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("commercial_transfer_agreement_questions_checked"); + + b.Property("CommercialTransferAgreementQuestionsReceived") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("commercial_transfer_agreement_questions_received"); + + b.Property("CommercialTransferAgreementSaveConfirmationEmails") + .HasColumnType("bit") + .HasColumnName("commercial_transfer_agreement_save_confirmation_emails"); + + b.Property("ConditionsMetBaselineSheetApproved") + .HasColumnType("bit") + .HasColumnName("conditions_met_baseline_sheet_approved"); + + b.Property("ConditionsMetCheckAnyInformationChanged") + .HasColumnType("bit") + .HasColumnName("conditions_met_check_any_information_changed"); + + b.Property("ConfirmDateAcademyTransferredDateTransferred") + .HasColumnType("date") + .HasColumnName("confirm_date_academy_transferred_date_transferred"); + + b.Property("ConfirmIncomingTrustHasCompletedAllActionsEmailed") + .HasColumnType("bit") + .HasColumnName("confirm_incoming_trust_has_completed_all_actions_emailed"); + + b.Property("ConfirmIncomingTrustHasCompletedAllActionsSaved") + .HasColumnType("bit") + .HasColumnName("confirm_incoming_trust_has_completed_all_actions_saved"); + + b.Property("CreatedAt") + .HasPrecision(6) + .HasColumnType("datetime2(6)") + .HasColumnName("created_at"); + + b.Property("DeclarationOfExpenditureCertificateCorrect") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("declaration_of_expenditure_certificate_correct"); + + b.Property("DeclarationOfExpenditureCertificateDateReceived") + .HasColumnType("date") + .HasColumnName("declaration_of_expenditure_certificate_date_received"); + + b.Property("DeclarationOfExpenditureCertificateNotApplicable") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("declaration_of_expenditure_certificate_not_applicable"); + + b.Property("DeclarationOfExpenditureCertificateSaved") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("declaration_of_expenditure_certificate_saved"); + + b.Property("DeedOfNovationAndVariationCleared") + .HasColumnType("bit") + .HasColumnName("deed_of_novation_and_variation_cleared"); + + b.Property("DeedOfNovationAndVariationReceived") + .HasColumnType("bit") + .HasColumnName("deed_of_novation_and_variation_received"); + + b.Property("DeedOfNovationAndVariationSaveAfterSign") + .HasColumnType("bit") + .HasColumnName("deed_of_novation_and_variation_save_after_sign"); + + b.Property("DeedOfNovationAndVariationSaved") + .HasColumnType("bit") + .HasColumnName("deed_of_novation_and_variation_saved"); + + b.Property("DeedOfNovationAndVariationSignedIncomingTrust") + .HasColumnType("bit") + .HasColumnName("deed_of_novation_and_variation_signed_incoming_trust"); + + b.Property("DeedOfNovationAndVariationSignedOutgoingTrust") + .HasColumnType("bit") + .HasColumnName("deed_of_novation_and_variation_signed_outgoing_trust"); + + b.Property("DeedOfNovationAndVariationSignedSecretaryState") + .HasColumnType("bit") + .HasColumnName("deed_of_novation_and_variation_signed_secretary_state"); + + b.Property("DeedOfTerminationForTheMasterFundingAgreementCleared") + .HasColumnType("bit") + .HasColumnName("deed_of_termination_for_the_master_funding_agreement_cleared"); + + b.Property("DeedOfTerminationForTheMasterFundingAgreementContactFinancialReportingTeam") + .HasColumnType("bit") + .HasColumnName("deed_of_termination_for_the_master_funding_agreement_contact_financial_reporting_team"); + + b.Property("DeedOfTerminationForTheMasterFundingAgreementNotApplicable") + .HasColumnType("bit") + .HasColumnName("deed_of_termination_for_the_master_funding_agreement_not_applicable"); + + b.Property("DeedOfTerminationForTheMasterFundingAgreementReceived") + .HasColumnType("bit") + .HasColumnName("deed_of_termination_for_the_master_funding_agreement_received"); + + b.Property("DeedOfTerminationForTheMasterFundingAgreementSavedAcademyAndOutgoingTrustSharepoint") + .HasColumnType("bit") + .HasColumnName("deed_of_termination_for_the_master_funding_agreement_saved_academy_and_outgoing_trust_sharepoint"); + + b.Property("DeedOfTerminationForTheMasterFundingAgreementSavedInAcademySharepointFolder") + .HasColumnType("bit") + .HasColumnName("deed_of_termination_for_the_master_funding_agreement_saved_in_academy_sharepoint_folder"); + + b.Property("DeedOfTerminationForTheMasterFundingAgreementSigned") + .HasColumnType("bit") + .HasColumnName("deed_of_termination_for_the_master_funding_agreement_signed"); + + b.Property("DeedOfTerminationForTheMasterFundingAgreementSignedSecretaryState") + .HasColumnType("bit") + .HasColumnName("deed_of_termination_for_the_master_funding_agreement_signed_secretary_state"); + + b.Property("DeedOfVariationCleared") + .HasColumnType("bit") + .HasColumnName("deed_of_variation_cleared"); + + b.Property("DeedOfVariationNotApplicable") + .HasColumnType("bit") + .HasColumnName("deed_of_variation_not_applicable"); + + b.Property("DeedOfVariationReceived") + .HasColumnType("bit") + .HasColumnName("deed_of_variation_received"); + + b.Property("DeedOfVariationSaved") + .HasColumnType("bit") + .HasColumnName("deed_of_variation_saved"); + + b.Property("DeedOfVariationSent") + .HasColumnType("bit") + .HasColumnName("deed_of_variation_sent"); + + b.Property("DeedOfVariationSigned") + .HasColumnType("bit") + .HasColumnName("deed_of_variation_signed"); + + b.Property("DeedOfVariationSignedSecretaryState") + .HasColumnType("bit") + .HasColumnName("deed_of_variation_signed_secretary_state"); + + b.Property("DeedTerminationChurchAgreementCleared") + .HasColumnType("bit") + .HasColumnName("deed_termination_church_agreement_cleared"); + + b.Property("DeedTerminationChurchAgreementNotApplicable") + .HasColumnType("bit") + .HasColumnName("deed_termination_church_agreement_not_applicable"); + + b.Property("DeedTerminationChurchAgreementReceived") + .HasColumnType("bit") + .HasColumnName("deed_termination_church_agreement_received"); + + b.Property("DeedTerminationChurchAgreementSaved") + .HasColumnType("bit") + .HasColumnName("deed_termination_church_agreement_saved"); + + b.Property("DeedTerminationChurchAgreementSavedAfterSigningBySecretaryState") + .HasColumnType("bit") + .HasColumnName("deed_termination_church_agreement_saved_after_signing_by_secretary_state"); + + b.Property("DeedTerminationChurchAgreementSignedDiocese") + .HasColumnType("bit") + .HasColumnName("deed_termination_church_agreement_signed_diocese"); + + b.Property("DeedTerminationChurchAgreementSignedOutgoingTrust") + .HasColumnType("bit") + .HasColumnName("deed_termination_church_agreement_signed_outgoing_trust"); + + b.Property("DeedTerminationChurchAgreementSignedSecretaryState") + .HasColumnType("bit") + .HasColumnName("deed_termination_church_agreement_signed_secretary_state"); + + b.Property("FinancialSafeguardingGovernanceIssues") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("financial_safeguarding_governance_issues"); + + b.Property("FormMCleared") + .HasColumnType("bit") + .HasColumnName("form_m_cleared"); + + b.Property("FormMNotApplicable") + .HasColumnType("bit") + .HasColumnName("form_m_not_applicable"); + + b.Property("FormMReceivedFormM") + .HasColumnType("bit") + .HasColumnName("form_m_received_form_m"); + + b.Property("FormMReceivedTitlePlans") + .HasColumnType("bit") + .HasColumnName("form_m_received_title_plans"); + + b.Property("FormMSaved") + .HasColumnType("bit") + .HasColumnName("form_m_saved"); + + b.Property("FormMSigned") + .HasColumnType("bit") + .HasColumnName("form_m_signed"); + + b.Property("HandoverMeeting") + .HasColumnType("bit") + .HasColumnName("handover_meeting"); + + b.Property("HandoverNotApplicable") + .HasColumnType("bit") + .HasColumnName("handover_not_applicable"); + + b.Property("HandoverNotes") + .HasColumnType("bit") + .HasColumnName("handover_notes"); + + b.Property("HandoverReview") + .HasColumnType("bit") + .HasColumnName("handover_review"); + + b.Property("InadequateOfsted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("inadequate_ofsted"); + + b.Property("LandConsentLetterDrafted") + .HasColumnType("bit") + .HasColumnName("land_consent_letter_drafted"); + + b.Property("LandConsentLetterNotApplicable") + .HasColumnType("bit") + .HasColumnName("land_consent_letter_not_applicable"); + + b.Property("LandConsentLetterSaved") + .HasColumnType("bit") + .HasColumnName("land_consent_letter_saved"); + + b.Property("LandConsentLetterSent") + .HasColumnType("bit") + .HasColumnName("land_consent_letter_sent"); + + b.Property("LandConsentLetterSigned") + .HasColumnType("bit") + .HasColumnName("land_consent_letter_signed"); + + b.Property("MasterFundingAgreementCleared") + .HasColumnType("bit") + .HasColumnName("master_funding_agreement_cleared"); + + b.Property("MasterFundingAgreementNotApplicable") + .HasColumnType("bit") + .HasColumnName("master_funding_agreement_not_applicable"); + + b.Property("MasterFundingAgreementReceived") + .HasColumnType("bit") + .HasColumnName("master_funding_agreement_received"); + + b.Property("MasterFundingAgreementSaved") + .HasColumnType("bit") + .HasColumnName("master_funding_agreement_saved"); + + b.Property("MasterFundingAgreementSigned") + .HasColumnType("bit") + .HasColumnName("master_funding_agreement_signed"); + + b.Property("MasterFundingAgreementSignedSecretaryState") + .HasColumnType("bit") + .HasColumnName("master_funding_agreement_signed_secretary_state"); + + b.Property("OutgoingTrustToClose") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("outgoing_trust_to_close"); + + b.Property("RedactAndSendDocumentsRedact") + .HasColumnType("bit") + .HasColumnName("redact_and_send_documents_redact"); + + b.Property("RedactAndSendDocumentsSaved") + .HasColumnType("bit") + .HasColumnName("redact_and_send_documents_saved"); + + b.Property("RedactAndSendDocumentsSendToEsfa") + .HasColumnType("bit") + .HasColumnName("redact_and_send_documents_send_to_esfa"); + + b.Property("RedactAndSendDocumentsSendToFundingTeam") + .HasColumnType("bit") + .HasColumnName("redact_and_send_documents_send_to_funding_team"); + + b.Property("RedactAndSendDocumentsSendToSolicitors") + .HasColumnType("bit") + .HasColumnName("redact_and_send_documents_send_to_solicitors"); + + b.Property("RequestNewUrnAndRecordComplete") + .HasColumnType("bit") + .HasColumnName("request_new_urn_and_record_complete"); + + b.Property("RequestNewUrnAndRecordGive") + .HasColumnType("bit") + .HasColumnName("request_new_urn_and_record_give"); + + b.Property("RequestNewUrnAndRecordNotApplicable") + .HasColumnType("bit") + .HasColumnName("request_new_urn_and_record_not_applicable"); + + b.Property("RequestNewUrnAndRecordReceive") + .HasColumnType("bit") + .HasColumnName("request_new_urn_and_record_receive"); + + b.Property("RpaPolicyConfirm") + .HasColumnType("bit") + .HasColumnName("rpa_policy_confirm"); + + b.Property("SponsoredSupportGrantNotApplicable") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("sponsored_support_grant_not_applicable"); + + b.Property("SponsoredSupportGrantType") + .HasMaxLength(4000) + .HasColumnType("nvarchar(4000)") + .HasColumnName("sponsored_support_grant_type"); + + b.Property("StakeholderKickOffIntroductoryEmails") + .HasColumnType("bit") + .HasColumnName("stakeholder_kick_off_introductory_emails"); + + b.Property("StakeholderKickOffMeeting") + .HasColumnType("bit") + .HasColumnName("stakeholder_kick_off_meeting"); + + b.Property("StakeholderKickOffSetupMeeting") + .HasColumnType("bit") + .HasColumnName("stakeholder_kick_off_setup_meeting"); + + b.Property("SupplementalFundingAgreementCleared") + .HasColumnType("bit") + .HasColumnName("supplemental_funding_agreement_cleared"); + + b.Property("SupplementalFundingAgreementReceived") + .HasColumnType("bit") + .HasColumnName("supplemental_funding_agreement_received"); + + b.Property("SupplementalFundingAgreementSaved") + .HasColumnType("bit") + .HasColumnName("supplemental_funding_agreement_saved"); + + b.Property("UpdatedAt") + .HasPrecision(6) + .HasColumnType("datetime2(6)") + .HasColumnName("updated_at"); + + b.HasKey("Id"); + + b.ToTable("transfer_tasks_data", "complete"); + }); + + modelBuilder.Entity("Dfe.Complete.Domain.Entities.Contact", b => + { + b.HasOne("Dfe.Complete.Domain.Entities.Project", "Project") + .WithMany("Contacts") + .HasForeignKey("ProjectId") + .HasConstraintName("fk_rails_b0485f0dbc"); + + b.Navigation("Project"); + }); + + modelBuilder.Entity("Dfe.Complete.Domain.Entities.Project", b => + { + b.HasOne("Dfe.Complete.Domain.Entities.User", "AssignedTo") + .WithMany("ProjectAssignedTos") + .HasForeignKey("AssignedToId") + .HasConstraintName("fk_rails_9cf9d80ba9"); + + b.HasOne("Dfe.Complete.Domain.Entities.User", "Caseworker") + .WithMany("ProjectCaseworkers") + .HasForeignKey("CaseworkerId") + .HasConstraintName("fk_rails_246548228c"); + + b.HasOne("Dfe.Complete.Domain.Entities.User", "RegionalDeliveryOfficer") + .WithMany("ProjectRegionalDeliveryOfficers") + .HasForeignKey("RegionalDeliveryOfficerId") + .HasConstraintName("fk_rails_bba1c6b145"); + + b.Navigation("AssignedTo"); + + b.Navigation("Caseworker"); + + b.Navigation("RegionalDeliveryOfficer"); + }); + + modelBuilder.Entity("Dfe.Complete.Infrastructure.Models.Note", b => + { + b.HasOne("Dfe.Complete.Domain.Entities.Project", "Project") + .WithMany("Notes") + .HasForeignKey("ProjectId") + .HasConstraintName("fk_rails_99e097b079"); + + b.HasOne("Dfe.Complete.Domain.Entities.User", "User") + .WithMany("Notes") + .HasForeignKey("UserId") + .HasConstraintName("fk_rails_7f2323ad43"); + + b.Navigation("Project"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Dfe.Complete.Domain.Entities.Project", b => + { + b.Navigation("Contacts"); + + b.Navigation("Notes"); + }); + + modelBuilder.Entity("Dfe.Complete.Domain.Entities.User", b => + { + b.Navigation("Notes"); + + b.Navigation("ProjectAssignedTos"); + + b.Navigation("ProjectCaseworkers"); + + b.Navigation("ProjectRegionalDeliveryOfficers"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/Core/Dfe.Complete.Infrastructure/Migrations/20250107175259_ChangeProjectRegionTypeToString.cs b/src/Core/Dfe.Complete.Infrastructure/Migrations/20250107175259_ChangeProjectRegionTypeToString.cs new file mode 100644 index 0000000..807470c --- /dev/null +++ b/src/Core/Dfe.Complete.Infrastructure/Migrations/20250107175259_ChangeProjectRegionTypeToString.cs @@ -0,0 +1,42 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Dfe.Complete.Infrastructure.Migrations +{ + /// + public partial class ChangeProjectRegionTypeToString : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AlterColumn( + name: "region", + schema: "complete", + table: "projects", + type: "nvarchar(4000)", + maxLength: 4000, + nullable: true, + oldClrType: typeof(int), + oldType: "int", + oldMaxLength: 4000, + oldNullable: true); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.AlterColumn( + name: "region", + schema: "complete", + table: "projects", + type: "int", + maxLength: 4000, + nullable: true, + oldClrType: typeof(string), + oldType: "nvarchar(4000)", + oldMaxLength: 4000, + oldNullable: true); + } + } +} diff --git a/src/Core/Dfe.Complete.Infrastructure/Migrations/CompleteContextModelSnapshot.cs b/src/Core/Dfe.Complete.Infrastructure/Migrations/CompleteContextModelSnapshot.cs index 72c962b..72e3c9f 100644 --- a/src/Core/Dfe.Complete.Infrastructure/Migrations/CompleteContextModelSnapshot.cs +++ b/src/Core/Dfe.Complete.Infrastructure/Migrations/CompleteContextModelSnapshot.cs @@ -712,9 +712,9 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("int") .HasColumnName("prepare_id"); - b.Property("Region") + b.Property("Region") .HasMaxLength(4000) - .HasColumnType("int") + .HasColumnType("nvarchar(4000)") .HasColumnName("region"); b.Property("RegionalDeliveryOfficerId") From 873ccc423514cb64e9ba88cd129dc35c8772c166 Mon Sep 17 00:00:00 2001 From: Zach Hodges Date: Wed, 8 Jan 2025 10:49:32 +0000 Subject: [PATCH 09/24] wip --- .../Generated/Contracts.g.cs | 4 +- .../Generated/swagger.json | 4 +- .../Commands/CreateProject/CreateProject.cs | 3 +- .../Dfe.Complete.Domain/Entities/Project.cs | 43 +++++++++------- .../Dfe.Complete.Domain/Enums/EnumMapper.cs | 28 +++++----- .../Dfe.Complete.Domain/Enums/ProjectTeam.cs | 51 ++++++++++--------- src/Core/Dfe.Complete.Domain/Enums/Team.cs | 29 ----------- .../Conversion/CreateNewProject.cshtml.cs | 8 ++- .../CreateProjectCommandHandlerTests.cs | 49 ++++++++++-------- ...teConversionProjectCommandCustomization.cs | 23 +++++++-- .../Models/ProjectCustomization.cs | 2 +- 11 files changed, 120 insertions(+), 124 deletions(-) delete mode 100644 src/Core/Dfe.Complete.Domain/Enums/Team.cs diff --git a/src/Api/Dfe.Complete.Api.Client/Generated/Contracts.g.cs b/src/Api/Dfe.Complete.Api.Client/Generated/Contracts.g.cs index a77d1cc..1357528 100644 --- a/src/Api/Dfe.Complete.Api.Client/Generated/Contracts.g.cs +++ b/src/Api/Dfe.Complete.Api.Client/Generated/Contracts.g.cs @@ -193,7 +193,7 @@ public partial class CreateConversionProjectCommand [Newtonsoft.Json.JsonProperty("team", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))] - public Team? Team { get; set; } = default!; + public ProjectTeam? Team { get; set; } = default!; public string ToJson() { @@ -776,7 +776,7 @@ public static IDomainEvent FromJson(string data) } [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "14.1.0.0 (NJsonSchema v11.0.2.0 (Newtonsoft.Json v13.0.0.0))")] - public enum Team + public enum ProjectTeam { [System.Runtime.Serialization.EnumMember(Value = @"RegionalCaseWorkerServices")] diff --git a/src/Api/Dfe.Complete.Api.Client/Generated/swagger.json b/src/Api/Dfe.Complete.Api.Client/Generated/swagger.json index dc5b52d..e97fde4 100644 --- a/src/Api/Dfe.Complete.Api.Client/Generated/swagger.json +++ b/src/Api/Dfe.Complete.Api.Client/Generated/swagger.json @@ -274,7 +274,7 @@ "nullable": true, "oneOf": [ { - "$ref": "#/components/schemas/Team" + "$ref": "#/components/schemas/ProjectTeam" } ] } @@ -904,7 +904,7 @@ } } }, - "Team": { + "ProjectTeam": { "type": "string", "description": "", "x-enumNames": [ diff --git a/src/Core/Dfe.Complete.Application/Projects/Commands/CreateProject/CreateProject.cs b/src/Core/Dfe.Complete.Application/Projects/Commands/CreateProject/CreateProject.cs index c8bba19..404c7b2 100644 --- a/src/Core/Dfe.Complete.Application/Projects/Commands/CreateProject/CreateProject.cs +++ b/src/Core/Dfe.Complete.Application/Projects/Commands/CreateProject/CreateProject.cs @@ -5,7 +5,6 @@ using Dfe.Complete.Domain.Entities; using Dfe.Complete.Infrastructure.Models; using Dfe.Complete.Utils; -using Microsoft.Extensions.DependencyInjection.Extensions; namespace Dfe.Complete.Application.Projects.Commands.CreateProject { @@ -25,7 +24,7 @@ public record CreateConversionProjectCommand( bool HandingOverToRegionalCaseworkService, string HandoverComments, User? RegionalDeliveryOfficer, - Team? Team) : IRequest; + ProjectTeam? Team) : IRequest; public class CreateConversionProjectCommandHandler( ICompleteRepository projectRepository, diff --git a/src/Core/Dfe.Complete.Domain/Entities/Project.cs b/src/Core/Dfe.Complete.Domain/Entities/Project.cs index ca0f501..5eb126c 100644 --- a/src/Core/Dfe.Complete.Domain/Entities/Project.cs +++ b/src/Core/Dfe.Complete.Domain/Entities/Project.cs @@ -91,12 +91,12 @@ public class Project : BaseAggregateRoot, IEntity public virtual ICollection Notes { get; set; } = new List(); public virtual User? RegionalDeliveryOfficer { get; set; } - + private Project() { } - public Project(ProjectId Id, + public Project(ProjectId id, Urn urn, DateTime createdAt, DateTime updatedAt, @@ -106,7 +106,7 @@ public Project(ProjectId Id, DateOnly significantDate, bool isSignificantDateProvisional, Ukprn incomingTrustUkprn, - string? region, + Region? region, bool isDueTo2RI, bool hasAcademyOrderBeenIssued, DateOnly advisoryBoardDate, @@ -117,9 +117,10 @@ public Project(ProjectId Id, string team, DateTime? assignedAt, User? assignedTo, - Note? note, + Note? note, User? regionalDeliveryOfficer) { + Id = id; Urn = urn ?? throw new ArgumentNullException(nameof(urn)); CreatedAt = createdAt != default ? createdAt : throw new ArgumentNullException(nameof(createdAt)); UpdatedAt = updatedAt != default ? updatedAt : throw new ArgumentNullException(nameof(updatedAt)); @@ -129,7 +130,6 @@ public Project(ProjectId Id, SignificantDate = significantDate; SignificantDateProvisional = isSignificantDateProvisional; IncomingTrustUkprn = incomingTrustUkprn; - Region = region; TwoRequiresImprovement = isDueTo2RI; DirectiveAcademyOrder = hasAcademyOrderBeenIssued; AdvisoryBoardDate = advisoryBoardDate; @@ -139,12 +139,14 @@ public Project(ProjectId Id, GroupId = groupId; Team = team; RegionalDeliveryOfficerId = regionalDeliveryOfficer?.Id; - + Region = GetRegionCharValue(region); + AssignTo(assignedTo, assignedAt); AddNote(note); } - public static Project CreateConversionProject(ProjectId Id, + public static Project CreateConversionProject( + ProjectId Id, Urn urn, DateTime createdAt, DateTime updatedAt, @@ -162,14 +164,12 @@ public static Project CreateConversionProject(ProjectId Id, string establishmentSharepointLink, string incomingTrustSharepointLink, Guid? groupId, - string team, - DateTime? assignedAt, - User? assignedTo, + string team, + DateTime? assignedAt, + User? assignedTo, Note? note, User? regionalDeliveryOfficer) { - var regionCharValue = ((char) region).ToString(); - var project = new Project( Id, urn, @@ -181,25 +181,30 @@ public static Project CreateConversionProject(ProjectId Id, significantDate, isSignificantDateProvisional, incomingTrustUkprn, - regionCharValue, + region, isDueTo2RI, hasAcademyOrderBeenIssued, advisoryBoardDate, advisoryBoardConditions, establishmentSharepointLink, incomingTrustSharepointLink, - groupId, - team, - assignedAt, - assignedTo, - note, + groupId, + team, + assignedAt, + assignedTo, + note, regionalDeliveryOfficer); project.AddDomainEvent(new ProjectCreatedEvent(project)); return project; } - + + private static string GetRegionCharValue(Region? region) + { + return region != null ? ((char)region).ToString() : string.Empty; + } + private void AssignTo(User? user, DateTime? assignedAt) { AssignedTo = user; diff --git a/src/Core/Dfe.Complete.Domain/Enums/EnumMapper.cs b/src/Core/Dfe.Complete.Domain/Enums/EnumMapper.cs index 20dc995..d20bbf0 100644 --- a/src/Core/Dfe.Complete.Domain/Enums/EnumMapper.cs +++ b/src/Core/Dfe.Complete.Domain/Enums/EnumMapper.cs @@ -2,22 +2,22 @@ namespace Dfe.Complete.Domain.Enums; public static class EnumMapper { - public static Region? MapTeamToRegion(Team team) + public static Region? MapTeamToRegion(ProjectTeam projectTeam) { - return team switch + return projectTeam switch { - Team.RegionalCaseWorkerServices => default, - Team.ServiceSupport => default, - Team.London => Region.London, - Team.SouthEast => Region.SouthEast, - Team.YorkshireAndTheHumber => Region.YorkshireAndTheHumber, - Team.NorthWest => Region.NorthWest, - Team.EastOfEngland => Region.EastOfEngland, - Team.WestMidlands => Region.WestMidlands, - Team.NorthEast => Region.NorthEast, - Team.SouthWest => Region.SouthWest, - Team.EastMidlands => Region.EastMidlands, - _ => throw new ArgumentOutOfRangeException(nameof(team), team, null) + ProjectTeam.RegionalCaseWorkerServices => default, + ProjectTeam.ServiceSupport => default, + ProjectTeam.London => Region.London, + ProjectTeam.SouthEast => Region.SouthEast, + ProjectTeam.YorkshireAndTheHumber => Region.YorkshireAndTheHumber, + ProjectTeam.NorthWest => Region.NorthWest, + ProjectTeam.EastOfEngland => Region.EastOfEngland, + ProjectTeam.WestMidlands => Region.WestMidlands, + ProjectTeam.NorthEast => Region.NorthEast, + ProjectTeam.SouthWest => Region.SouthWest, + ProjectTeam.EastMidlands => Region.EastMidlands, + _ => throw new ArgumentOutOfRangeException(nameof(projectTeam), projectTeam, null) }; } } \ No newline at end of file diff --git a/src/Core/Dfe.Complete.Domain/Enums/ProjectTeam.cs b/src/Core/Dfe.Complete.Domain/Enums/ProjectTeam.cs index 3a8c29f..693176b 100644 --- a/src/Core/Dfe.Complete.Domain/Enums/ProjectTeam.cs +++ b/src/Core/Dfe.Complete.Domain/Enums/ProjectTeam.cs @@ -1,26 +1,29 @@ -using System.ComponentModel; +using System.ComponentModel; -namespace Dfe.Complete.Domain.Enums +namespace Dfe.Complete.Domain.Enums; + +public enum ProjectTeam { - public enum ProjectTeam - { - [Description("London")] - London = 1, - [Description("South East")] - SouthEast = 2, - [Description("Yorkshire and the Humber")] - YorkshireAndTheHumber = 3, - [Description("North West")] - NorthWest = 4, - [Description("East of England")] - EastOfEngland = 5, - [Description("West Midlands")] - WestMidlands = 6, - [Description("North East")] - NorthEast = 7, - [Description("South West")] - SouthWest = 8, - [Description("East Midlands")] - EastMidlands = 9 - } -} + [Description("regional_casework_services")] + RegionalCaseWorkerServices, + [Description("service_support")] + ServiceSupport, + [Description("london")] + London, + [Description("south_east")] + SouthEast, + [Description("yorkshire_and_the_humber")] + YorkshireAndTheHumber, + [Description("north_west")] + NorthWest, + [Description("east_of_england")] + EastOfEngland, + [Description("west_midlands")] + WestMidlands, + [Description("north_east")] + NorthEast, + [Description("south_west")] + SouthWest, + [Description("east_midlands")] + EastMidlands, +} \ No newline at end of file diff --git a/src/Core/Dfe.Complete.Domain/Enums/Team.cs b/src/Core/Dfe.Complete.Domain/Enums/Team.cs deleted file mode 100644 index ebbbf2a..0000000 --- a/src/Core/Dfe.Complete.Domain/Enums/Team.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System.ComponentModel; - -namespace Dfe.Complete.Domain.Enums; - -public enum Team -{ - [Description("regional_casework_services")] - RegionalCaseWorkerServices, - [Description("service_support")] - ServiceSupport, - [Description("london")] - London, - [Description("south_east")] - SouthEast, - [Description("yorkshire_and_the_humber")] - YorkshireAndTheHumber, - [Description("north_west")] - NorthWest, - [Description("east_of_england")] - EastOfEngland, - [Description("west_midlands")] - WestMidlands, - [Description("north_east")] - NorthEast, - [Description("south_west")] - SouthWest, - [Description("east_midlands")] - EastMidlands, -} \ No newline at end of file diff --git a/src/Frontend/Dfe.Complete/Pages/Projects/Conversion/CreateNewProject.cshtml.cs b/src/Frontend/Dfe.Complete/Pages/Projects/Conversion/CreateNewProject.cshtml.cs index d402226..849ee95 100644 --- a/src/Frontend/Dfe.Complete/Pages/Projects/Conversion/CreateNewProject.cshtml.cs +++ b/src/Frontend/Dfe.Complete/Pages/Projects/Conversion/CreateNewProject.cshtml.cs @@ -5,7 +5,6 @@ using Dfe.Complete.Validators; using Dfe.Complete.Services; using System.ComponentModel.DataAnnotations; -using System.Globalization; using Dfe.Complete.Application.Projects.Commands.CreateProject; using Dfe.Complete.Domain.Entities; using Dfe.Complete.Domain.Enums; @@ -77,16 +76,15 @@ public class CreateNewProjectModel(ISender sender, IErrorService errorService, I [Display(Name = "IsDueTo2RI")] public bool? IsDueTo2RI { get; set; } - public async Task OnGet() + public Task OnGet() { - return Page(); + return Task.FromResult(Page()); } public async Task OnPost(CancellationToken cancellationToken) { ManuallyValidateGroupReferenceNumber(); - //Validate await ValidateAllFields(); if (!ModelState.IsValid) @@ -98,7 +96,7 @@ public async Task OnPost(CancellationToken cancellationToken) var currentUser = await completeRepository.GetUserByEmail(User.Identity?.Name?.ToLower(), cancellationToken); var userTeam = currentUser?.Team; - var projectTeam = EnumExtensions.FromDescription(userTeam); + var projectTeam = EnumExtensions.FromDescription(userTeam); var region = EnumMapper.MapTeamToRegion(projectTeam); diff --git a/src/Tests/Dfe.Complete.Application.Tests/CommandHandlers/Project/CreateProjectCommandHandlerTests.cs b/src/Tests/Dfe.Complete.Application.Tests/CommandHandlers/Project/CreateProjectCommandHandlerTests.cs index a428369..6b0adb5 100644 --- a/src/Tests/Dfe.Complete.Application.Tests/CommandHandlers/Project/CreateProjectCommandHandlerTests.cs +++ b/src/Tests/Dfe.Complete.Application.Tests/CommandHandlers/Project/CreateProjectCommandHandlerTests.cs @@ -1,13 +1,9 @@ using AutoFixture.Xunit2; using DfE.CoreLibs.Testing.AutoFixture.Attributes; -using Dfe.Complete.Application.Schools.Commands.CreateSchool; using Dfe.Complete.Domain.Interfaces.Repositories; -using Dfe.Complete.Domain.Entities; -using Dfe.Complete.Tests.Common.Customizations.Commands; -using Dfe.Complete.Tests.Common.Customizations.Entities; -using Dfe.Complete.Tests.Common.Customizations.Models; using NSubstitute; using Dfe.Complete.Application.Projects.Commands.CreateProject; +using Dfe.Complete.Domain.ValueObjects; using DfE.CoreLibs.Testing.AutoFixture.Customizations; namespace Dfe.Complete.Application.Tests.CommandHandlers.Project @@ -20,26 +16,34 @@ public async Task Handle_ShouldCreateAndReturnProjectId_WhenCommandIsValid( [Frozen] ICompleteRepository mockProjectRepository, CreateConversionProjectCommandHandler handler, CreateConversionProjectCommand command - ) + ) { var now = DateTime.UtcNow; - var project = Domain.Entities.Project.CreateConversionProject(new Domain.ValueObjects.Urn(2), - now, + var project = Domain.Entities.Project.CreateConversionProject( + new ProjectId(Guid.NewGuid()), + new Domain.ValueObjects.Urn(2), now, - Domain.Enums.TaskType.Conversion, - Domain.Enums.ProjectType.Conversion, - Guid.NewGuid(), - DateOnly.MinValue, - true, - new Domain.ValueObjects.Ukprn(2), - Domain.Enums.Region.YorkshireAndTheHumber, - true, + now, + Domain.Enums.TaskType.Conversion, + Domain.Enums.ProjectType.Conversion, + Guid.NewGuid(), + DateOnly.MinValue, + true, + new Domain.ValueObjects.Ukprn(2), + Domain.Enums.Region.YorkshireAndTheHumber, + true, true, - DateOnly.MinValue, - "", - "", - ""); + DateOnly.MinValue, + "", + "", + "", + Guid.Empty, + "", + null, + null, + null, + null); // Arrange mockProjectRepository.AddAsync(Arg.Any(), Arg.Any()) @@ -49,7 +53,8 @@ CreateConversionProjectCommand command await handler.Handle(command, default); // Assert - await mockProjectRepository.Received(1).AddAsync(Arg.Is(s => s.Urn == command.Urn), default); + await mockProjectRepository.Received(1) + .AddAsync(Arg.Is(s => s.Urn == command.Urn), default); } } -} +} \ No newline at end of file diff --git a/src/Tests/Dfe.Complete.Tests.Common/Customizations/Commands/CreateConversionProjectCommandCustomization.cs b/src/Tests/Dfe.Complete.Tests.Common/Customizations/Commands/CreateConversionProjectCommandCustomization.cs index bf52b75..270b470 100644 --- a/src/Tests/Dfe.Complete.Tests.Common/Customizations/Commands/CreateConversionProjectCommandCustomization.cs +++ b/src/Tests/Dfe.Complete.Tests.Common/Customizations/Commands/CreateConversionProjectCommandCustomization.cs @@ -1,7 +1,12 @@ using AutoFixture; -using Dfe.Complete.Application.Projects.Commands.CreateProject; -using Dfe.Complete.Domain.ValueObjects; +using Dfe.Complete.Client.Contracts; using Dfe.Complete.Domain.Enums; +using CreateConversionProjectCommand = Dfe.Complete.Application.Projects.Commands.CreateProject.CreateConversionProjectCommand; +using ProjectTeam = Dfe.Complete.Domain.Enums.ProjectTeam; +using Region = Dfe.Complete.Domain.Enums.Region; +using Ukprn = Dfe.Complete.Domain.ValueObjects.Ukprn; +using Urn = Dfe.Complete.Domain.ValueObjects.Urn; +using User = Dfe.Complete.Domain.Entities.User; namespace Dfe.Complete.Tests.Common.Customizations.Commands { @@ -22,7 +27,12 @@ public void Customize(IFixture fixture) var advisoryBoardConditions = fixture.Create(); var establishmentSharepointLink = fixture.Create().ToString(); var incomingTrustSharepointLink = fixture.Create().ToString(); - + var groupReferenceNumber = fixture.Create(); + var handingOverToRegionalCaseworkService = fixture.Create(); + var handoverComments = fixture.Create(); + var regionalDeliveryOfficer = fixture.Create(); + var team = fixture.Create(); + return new CreateConversionProjectCommand( urn, significantDate, @@ -34,7 +44,12 @@ public void Customize(IFixture fixture) advisoryBoardDate, advisoryBoardConditions, establishmentSharepointLink, - incomingTrustSharepointLink, + incomingTrustSharepointLink, + groupReferenceNumber, + handingOverToRegionalCaseworkService, + handoverComments, + regionalDeliveryOfficer, + team ); })); } diff --git a/src/Tests/Dfe.Complete.Tests.Common/Customizations/Models/ProjectCustomization.cs b/src/Tests/Dfe.Complete.Tests.Common/Customizations/Models/ProjectCustomization.cs index fd86f03..28ee151 100644 --- a/src/Tests/Dfe.Complete.Tests.Common/Customizations/Models/ProjectCustomization.cs +++ b/src/Tests/Dfe.Complete.Tests.Common/Customizations/Models/ProjectCustomization.cs @@ -94,7 +94,7 @@ public void Customize(IFixture fixture) .With(x => x.AssignedToId, AssignedToId ?? fixture.Create()) .With(x => x.SignificantDateProvisional, SignificantDateProvisional ?? fixture.Create()) .With(x => x.DirectiveAcademyOrder, DirectiveAcademyOrder ?? fixture.Create()) - .With(x => x.Region, Region ?? fixture.Create()) + .With(x => x.Region, (Region ?? fixture.Create()).ToString()) .With(x => x.AcademyUrn, AcademyUrn ?? fixture.Create()) .With(x => x.TasksDataId, TasksDataId ?? fixture.Create()) .With(x => x.TasksDataType, TasksDataType ?? fixture.Create()) From 16b418365d5ab78951ca82185b4e4de523d70014 Mon Sep 17 00:00:00 2001 From: Zach Hodges Date: Wed, 8 Jan 2025 11:54:54 +0000 Subject: [PATCH 10/24] Removed migration & modified existing snapchat and initial migration files --- .../Migrations/20241120095224_Initial.cs | 2 +- ...hangeProjectRegionTypeToString.Designer.cs | 1965 ----------------- ...7175259_ChangeProjectRegionTypeToString.cs | 42 - .../Conversion/CreateNewProject.cshtml.cs | 2 +- 4 files changed, 2 insertions(+), 2009 deletions(-) delete mode 100644 src/Core/Dfe.Complete.Infrastructure/Migrations/20250107175259_ChangeProjectRegionTypeToString.Designer.cs delete mode 100644 src/Core/Dfe.Complete.Infrastructure/Migrations/20250107175259_ChangeProjectRegionTypeToString.cs diff --git a/src/Core/Dfe.Complete.Infrastructure/Migrations/20241120095224_Initial.cs b/src/Core/Dfe.Complete.Infrastructure/Migrations/20241120095224_Initial.cs index 9e69fca..3102453 100644 --- a/src/Core/Dfe.Complete.Infrastructure/Migrations/20241120095224_Initial.cs +++ b/src/Core/Dfe.Complete.Infrastructure/Migrations/20241120095224_Initial.cs @@ -507,7 +507,7 @@ protected override void Up(MigrationBuilder migrationBuilder) significant_date = table.Column(type: "date", nullable: true), significant_date_provisional = table.Column(type: "bit", nullable: true, defaultValue: true), directive_academy_order = table.Column(type: "bit", nullable: true, defaultValue: false), - region = table.Column(type: "int", maxLength: 4000, nullable: true), + region = table.Column(type: "nvarchar(4000)", maxLength: 4000, nullable: true), academy_urn = table.Column(type: "int", nullable: true), tasks_data_id = table.Column(type: "uniqueidentifier", nullable: true), tasks_data_type = table.Column(type: "int", maxLength: 4000, nullable: true), diff --git a/src/Core/Dfe.Complete.Infrastructure/Migrations/20250107175259_ChangeProjectRegionTypeToString.Designer.cs b/src/Core/Dfe.Complete.Infrastructure/Migrations/20250107175259_ChangeProjectRegionTypeToString.Designer.cs deleted file mode 100644 index 2cdd69b..0000000 --- a/src/Core/Dfe.Complete.Infrastructure/Migrations/20250107175259_ChangeProjectRegionTypeToString.Designer.cs +++ /dev/null @@ -1,1965 +0,0 @@ -// -using System; -using Dfe.Complete.Infrastructure.Database; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace Dfe.Complete.Infrastructure.Migrations -{ - [DbContext(typeof(CompleteContext))] - [Migration("20250107175259_ChangeProjectRegionTypeToString")] - partial class ChangeProjectRegionTypeToString - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "8.0.10") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("Dfe.Complete.Domain.Entities.Contact", b => - { - b.Property("Id") - .HasColumnType("uniqueidentifier") - .HasColumnName("id"); - - b.Property("Category") - .HasColumnType("int") - .HasColumnName("category"); - - b.Property("CreatedAt") - .HasPrecision(6) - .HasColumnType("datetime2(6)") - .HasColumnName("created_at"); - - b.Property("Email") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("email"); - - b.Property("EstablishmentUrn") - .HasColumnType("int") - .HasColumnName("establishment_urn"); - - b.Property("LocalAuthorityId") - .HasColumnType("uniqueidentifier") - .HasColumnName("local_authority_id"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("name"); - - b.Property("OrganisationName") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("organisation_name"); - - b.Property("Phone") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("phone"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier") - .HasColumnName("project_id"); - - b.Property("Title") - .IsRequired() - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("title"); - - b.Property("Type") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("type"); - - b.Property("UpdatedAt") - .HasPrecision(6) - .HasColumnType("datetime2(6)") - .HasColumnName("updated_at"); - - b.HasKey("Id"); - - b.HasIndex("ProjectId"); - - b.ToTable("contacts", "complete"); - }); - - modelBuilder.Entity("Dfe.Complete.Domain.Entities.ConversionTasksData", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier") - .HasColumnName("id"); - - b.Property("AcademyDetailsName") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("academy_details_name"); - - b.Property("ArticlesOfAssociationCleared") - .HasColumnType("bit") - .HasColumnName("articles_of_association_cleared"); - - b.Property("ArticlesOfAssociationNotApplicable") - .HasColumnType("bit") - .HasColumnName("articles_of_association_not_applicable"); - - b.Property("ArticlesOfAssociationReceived") - .HasColumnType("bit") - .HasColumnName("articles_of_association_received"); - - b.Property("ArticlesOfAssociationSaved") - .HasColumnType("bit") - .HasColumnName("articles_of_association_saved"); - - b.Property("ArticlesOfAssociationSent") - .HasColumnType("bit") - .HasColumnName("articles_of_association_sent"); - - b.Property("ArticlesOfAssociationSigned") - .HasColumnType("bit") - .HasColumnName("articles_of_association_signed"); - - b.Property("CheckAccuracyOfHigherNeedsConfirmNumber") - .HasColumnType("bit") - .HasColumnName("check_accuracy_of_higher_needs_confirm_number"); - - b.Property("CheckAccuracyOfHigherNeedsConfirmPublishedNumber") - .HasColumnType("bit") - .HasColumnName("check_accuracy_of_higher_needs_confirm_published_number"); - - b.Property("ChurchSupplementalAgreementCleared") - .HasColumnType("bit") - .HasColumnName("church_supplemental_agreement_cleared"); - - b.Property("ChurchSupplementalAgreementNotApplicable") - .HasColumnType("bit") - .HasColumnName("church_supplemental_agreement_not_applicable"); - - b.Property("ChurchSupplementalAgreementReceived") - .HasColumnType("bit") - .HasColumnName("church_supplemental_agreement_received"); - - b.Property("ChurchSupplementalAgreementSaved") - .HasColumnType("bit") - .HasColumnName("church_supplemental_agreement_saved"); - - b.Property("ChurchSupplementalAgreementSent") - .HasColumnType("bit") - .HasColumnName("church_supplemental_agreement_sent"); - - b.Property("ChurchSupplementalAgreementSigned") - .HasColumnType("bit") - .HasColumnName("church_supplemental_agreement_signed"); - - b.Property("ChurchSupplementalAgreementSignedDiocese") - .HasColumnType("bit") - .HasColumnName("church_supplemental_agreement_signed_diocese"); - - b.Property("ChurchSupplementalAgreementSignedSecretaryState") - .HasColumnType("bit") - .HasColumnName("church_supplemental_agreement_signed_secretary_state"); - - b.Property("CommercialTransferAgreementAgreed") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("commercial_transfer_agreement_agreed"); - - b.Property("CommercialTransferAgreementQuestionsChecked") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("commercial_transfer_agreement_questions_checked"); - - b.Property("CommercialTransferAgreementQuestionsReceived") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("commercial_transfer_agreement_questions_received"); - - b.Property("CommercialTransferAgreementSaved") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("commercial_transfer_agreement_saved"); - - b.Property("CommercialTransferAgreementSigned") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("commercial_transfer_agreement_signed"); - - b.Property("CompleteNotificationOfChangeCheckDocument") - .HasColumnType("bit") - .HasColumnName("complete_notification_of_change_check_document"); - - b.Property("CompleteNotificationOfChangeNotApplicable") - .HasColumnType("bit") - .HasColumnName("complete_notification_of_change_not_applicable"); - - b.Property("CompleteNotificationOfChangeSendDocument") - .HasColumnType("bit") - .HasColumnName("complete_notification_of_change_send_document"); - - b.Property("CompleteNotificationOfChangeTellLocalAuthority") - .HasColumnType("bit") - .HasColumnName("complete_notification_of_change_tell_local_authority"); - - b.Property("ConfirmDateAcademyOpenedDateOpened") - .HasColumnType("date") - .HasColumnName("confirm_date_academy_opened_date_opened"); - - b.Property("ConversionGrantCheckVendorAccount") - .HasColumnType("bit") - .HasColumnName("conversion_grant_check_vendor_account"); - - b.Property("ConversionGrantNotApplicable") - .HasColumnType("bit") - .HasColumnName("conversion_grant_not_applicable"); - - b.Property("ConversionGrantPaymentForm") - .HasColumnType("bit") - .HasColumnName("conversion_grant_payment_form"); - - b.Property("ConversionGrantSendInformation") - .HasColumnType("bit") - .HasColumnName("conversion_grant_send_information"); - - b.Property("ConversionGrantSharePaymentDate") - .HasColumnType("bit") - .HasColumnName("conversion_grant_share_payment_date"); - - b.Property("CreatedAt") - .HasPrecision(6) - .HasColumnType("datetime2(6)") - .HasColumnName("created_at"); - - b.Property("DeedOfVariationCleared") - .HasColumnType("bit") - .HasColumnName("deed_of_variation_cleared"); - - b.Property("DeedOfVariationNotApplicable") - .HasColumnType("bit") - .HasColumnName("deed_of_variation_not_applicable"); - - b.Property("DeedOfVariationReceived") - .HasColumnType("bit") - .HasColumnName("deed_of_variation_received"); - - b.Property("DeedOfVariationSaved") - .HasColumnType("bit") - .HasColumnName("deed_of_variation_saved"); - - b.Property("DeedOfVariationSent") - .HasColumnType("bit") - .HasColumnName("deed_of_variation_sent"); - - b.Property("DeedOfVariationSigned") - .HasColumnType("bit") - .HasColumnName("deed_of_variation_signed"); - - b.Property("DeedOfVariationSignedSecretaryState") - .HasColumnType("bit") - .HasColumnName("deed_of_variation_signed_secretary_state"); - - b.Property("DirectionToTransferCleared") - .HasColumnType("bit") - .HasColumnName("direction_to_transfer_cleared"); - - b.Property("DirectionToTransferNotApplicable") - .HasColumnType("bit") - .HasColumnName("direction_to_transfer_not_applicable"); - - b.Property("DirectionToTransferReceived") - .HasColumnType("bit") - .HasColumnName("direction_to_transfer_received"); - - b.Property("DirectionToTransferSaved") - .HasColumnType("bit") - .HasColumnName("direction_to_transfer_saved"); - - b.Property("DirectionToTransferSigned") - .HasColumnType("bit") - .HasColumnName("direction_to_transfer_signed"); - - b.Property("HandoverMeeting") - .HasColumnType("bit") - .HasColumnName("handover_meeting"); - - b.Property("HandoverNotApplicable") - .HasColumnType("bit") - .HasColumnName("handover_not_applicable"); - - b.Property("HandoverNotes") - .HasColumnType("bit") - .HasColumnName("handover_notes"); - - b.Property("HandoverReview") - .HasColumnType("bit") - .HasColumnName("handover_review"); - - b.Property("LandQuestionnaireCleared") - .HasColumnType("bit") - .HasColumnName("land_questionnaire_cleared"); - - b.Property("LandQuestionnaireReceived") - .HasColumnType("bit") - .HasColumnName("land_questionnaire_received"); - - b.Property("LandQuestionnaireSaved") - .HasColumnType("bit") - .HasColumnName("land_questionnaire_saved"); - - b.Property("LandQuestionnaireSigned") - .HasColumnType("bit") - .HasColumnName("land_questionnaire_signed"); - - b.Property("LandRegistryCleared") - .HasColumnType("bit") - .HasColumnName("land_registry_cleared"); - - b.Property("LandRegistryReceived") - .HasColumnType("bit") - .HasColumnName("land_registry_received"); - - b.Property("LandRegistrySaved") - .HasColumnType("bit") - .HasColumnName("land_registry_saved"); - - b.Property("MasterFundingAgreementCleared") - .HasColumnType("bit") - .HasColumnName("master_funding_agreement_cleared"); - - b.Property("MasterFundingAgreementNotApplicable") - .HasColumnType("bit") - .HasColumnName("master_funding_agreement_not_applicable"); - - b.Property("MasterFundingAgreementReceived") - .HasColumnType("bit") - .HasColumnName("master_funding_agreement_received"); - - b.Property("MasterFundingAgreementSaved") - .HasColumnType("bit") - .HasColumnName("master_funding_agreement_saved"); - - b.Property("MasterFundingAgreementSent") - .HasColumnType("bit") - .HasColumnName("master_funding_agreement_sent"); - - b.Property("MasterFundingAgreementSigned") - .HasColumnType("bit") - .HasColumnName("master_funding_agreement_signed"); - - b.Property("MasterFundingAgreementSignedSecretaryState") - .HasColumnType("bit") - .HasColumnName("master_funding_agreement_signed_secretary_state"); - - b.Property("OneHundredAndTwentyFiveYearLeaseEmail") - .HasColumnType("bit") - .HasColumnName("one_hundred_and_twenty_five_year_lease_email"); - - b.Property("OneHundredAndTwentyFiveYearLeaseNotApplicable") - .HasColumnType("bit") - .HasColumnName("one_hundred_and_twenty_five_year_lease_not_applicable"); - - b.Property("OneHundredAndTwentyFiveYearLeaseReceive") - .HasColumnType("bit") - .HasColumnName("one_hundred_and_twenty_five_year_lease_receive"); - - b.Property("OneHundredAndTwentyFiveYearLeaseSaveLease") - .HasColumnType("bit") - .HasColumnName("one_hundred_and_twenty_five_year_lease_save_lease"); - - b.Property("ProposedCapacityOfTheAcademyNotApplicable") - .HasColumnType("bit") - .HasColumnName("proposed_capacity_of_the_academy_not_applicable"); - - b.Property("ProposedCapacityOfTheAcademyReceptionToSixYears") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("proposed_capacity_of_the_academy_reception_to_six_years"); - - b.Property("ProposedCapacityOfTheAcademySevenToElevenYears") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("proposed_capacity_of_the_academy_seven_to_eleven_years"); - - b.Property("ProposedCapacityOfTheAcademyTwelveOrAboveYears") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("proposed_capacity_of_the_academy_twelve_or_above_years"); - - b.Property("ReceiveGrantPaymentCertificateCheckCertificate") - .HasColumnType("bit") - .HasColumnName("receive_grant_payment_certificate_check_certificate"); - - b.Property("ReceiveGrantPaymentCertificateDateReceived") - .HasColumnType("date") - .HasColumnName("receive_grant_payment_certificate_date_received"); - - b.Property("ReceiveGrantPaymentCertificateSaveCertificate") - .HasColumnType("bit") - .HasColumnName("receive_grant_payment_certificate_save_certificate"); - - b.Property("RedactAndSendRedact") - .HasColumnType("bit") - .HasColumnName("redact_and_send_redact"); - - b.Property("RedactAndSendSaveRedaction") - .HasColumnType("bit") - .HasColumnName("redact_and_send_save_redaction"); - - b.Property("RedactAndSendSendRedaction") - .HasColumnType("bit") - .HasColumnName("redact_and_send_send_redaction"); - - b.Property("RedactAndSendSendSolicitors") - .HasColumnType("bit") - .HasColumnName("redact_and_send_send_solicitors"); - - b.Property("RiskProtectionArrangementOption") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("risk_protection_arrangement_option"); - - b.Property("RiskProtectionArrangementReason") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("risk_protection_arrangement_reason"); - - b.Property("SchoolCompletedEmailed") - .HasColumnType("bit") - .HasColumnName("school_completed_emailed"); - - b.Property("SchoolCompletedSaved") - .HasColumnType("bit") - .HasColumnName("school_completed_saved"); - - b.Property("ShareInformationEmail") - .HasColumnType("bit") - .HasColumnName("share_information_email"); - - b.Property("SponsoredSupportGrantInformTrust") - .HasColumnType("bit") - .HasColumnName("sponsored_support_grant_inform_trust"); - - b.Property("SponsoredSupportGrantNotApplicable") - .HasColumnType("bit") - .HasColumnName("sponsored_support_grant_not_applicable"); - - b.Property("SponsoredSupportGrantPaymentAmount") - .HasColumnType("bit") - .HasColumnName("sponsored_support_grant_payment_amount"); - - b.Property("SponsoredSupportGrantPaymentForm") - .HasColumnType("bit") - .HasColumnName("sponsored_support_grant_payment_form"); - - b.Property("SponsoredSupportGrantSendInformation") - .HasColumnType("bit") - .HasColumnName("sponsored_support_grant_send_information"); - - b.Property("SponsoredSupportGrantType") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("sponsored_support_grant_type"); - - b.Property("StakeholderKickOffCheckProvisionalConversionDate") - .HasColumnType("bit") - .HasColumnName("stakeholder_kick_off_check_provisional_conversion_date"); - - b.Property("StakeholderKickOffIntroductoryEmails") - .HasColumnType("bit") - .HasColumnName("stakeholder_kick_off_introductory_emails"); - - b.Property("StakeholderKickOffLocalAuthorityProforma") - .HasColumnType("bit") - .HasColumnName("stakeholder_kick_off_local_authority_proforma"); - - b.Property("StakeholderKickOffMeeting") - .HasColumnType("bit") - .HasColumnName("stakeholder_kick_off_meeting"); - - b.Property("StakeholderKickOffSetupMeeting") - .HasColumnType("bit") - .HasColumnName("stakeholder_kick_off_setup_meeting"); - - b.Property("SubleasesCleared") - .HasColumnType("bit") - .HasColumnName("subleases_cleared"); - - b.Property("SubleasesEmailSigned") - .HasColumnType("bit") - .HasColumnName("subleases_email_signed"); - - b.Property("SubleasesNotApplicable") - .HasColumnType("bit") - .HasColumnName("subleases_not_applicable"); - - b.Property("SubleasesReceiveSigned") - .HasColumnType("bit") - .HasColumnName("subleases_receive_signed"); - - b.Property("SubleasesReceived") - .HasColumnType("bit") - .HasColumnName("subleases_received"); - - b.Property("SubleasesSaveSigned") - .HasColumnType("bit") - .HasColumnName("subleases_save_signed"); - - b.Property("SubleasesSaved") - .HasColumnType("bit") - .HasColumnName("subleases_saved"); - - b.Property("SubleasesSigned") - .HasColumnType("bit") - .HasColumnName("subleases_signed"); - - b.Property("SupplementalFundingAgreementCleared") - .HasColumnType("bit") - .HasColumnName("supplemental_funding_agreement_cleared"); - - b.Property("SupplementalFundingAgreementReceived") - .HasColumnType("bit") - .HasColumnName("supplemental_funding_agreement_received"); - - b.Property("SupplementalFundingAgreementSaved") - .HasColumnType("bit") - .HasColumnName("supplemental_funding_agreement_saved"); - - b.Property("SupplementalFundingAgreementSent") - .HasColumnType("bit") - .HasColumnName("supplemental_funding_agreement_sent"); - - b.Property("SupplementalFundingAgreementSigned") - .HasColumnType("bit") - .HasColumnName("supplemental_funding_agreement_signed"); - - b.Property("SupplementalFundingAgreementSignedSecretaryState") - .HasColumnType("bit") - .HasColumnName("supplemental_funding_agreement_signed_secretary_state"); - - b.Property("TenancyAtWillEmailSigned") - .HasColumnType("bit") - .HasColumnName("tenancy_at_will_email_signed"); - - b.Property("TenancyAtWillNotApplicable") - .HasColumnType("bit") - .HasColumnName("tenancy_at_will_not_applicable"); - - b.Property("TenancyAtWillReceiveSigned") - .HasColumnType("bit") - .HasColumnName("tenancy_at_will_receive_signed"); - - b.Property("TenancyAtWillSaveSigned") - .HasColumnType("bit") - .HasColumnName("tenancy_at_will_save_signed"); - - b.Property("TrustModificationOrderCleared") - .HasColumnType("bit") - .HasColumnName("trust_modification_order_cleared"); - - b.Property("TrustModificationOrderNotApplicable") - .HasColumnType("bit") - .HasColumnName("trust_modification_order_not_applicable"); - - b.Property("TrustModificationOrderReceived") - .HasColumnType("bit") - .HasColumnName("trust_modification_order_received"); - - b.Property("TrustModificationOrderSaved") - .HasColumnType("bit") - .HasColumnName("trust_modification_order_saved"); - - b.Property("TrustModificationOrderSentLegal") - .HasColumnType("bit") - .HasColumnName("trust_modification_order_sent_legal"); - - b.Property("UpdateEsfaUpdate") - .HasColumnType("bit") - .HasColumnName("update_esfa_update"); - - b.Property("UpdatedAt") - .HasPrecision(6) - .HasColumnType("datetime2(6)") - .HasColumnName("updated_at"); - - b.HasKey("Id"); - - b.ToTable("conversion_tasks_data", "complete"); - }); - - modelBuilder.Entity("Dfe.Complete.Domain.Entities.Project", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("uniqueidentifier") - .HasColumnName("id"); - - b.Property("AcademyUrn") - .HasColumnType("int") - .HasColumnName("academy_urn"); - - b.Property("AdvisoryBoardConditions") - .HasColumnType("nvarchar(max)") - .HasColumnName("advisory_board_conditions"); - - b.Property("AdvisoryBoardDate") - .HasColumnType("date") - .HasColumnName("advisory_board_date"); - - b.Property("AllConditionsMet") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("all_conditions_met"); - - b.Property("AssignedAt") - .HasPrecision(6) - .HasColumnType("datetime2(6)") - .HasColumnName("assigned_at"); - - b.Property("AssignedToId") - .HasColumnType("uniqueidentifier") - .HasColumnName("assigned_to_id"); - - b.Property("CaseworkerId") - .HasColumnType("uniqueidentifier") - .HasColumnName("caseworker_id"); - - b.Property("CompletedAt") - .HasPrecision(6) - .HasColumnType("datetime2(6)") - .HasColumnName("completed_at"); - - b.Property("CreatedAt") - .HasPrecision(6) - .HasColumnType("datetime2(6)") - .HasColumnName("created_at"); - - b.Property("DirectiveAcademyOrder") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("directive_academy_order"); - - b.Property("EstablishmentMainContactId") - .HasColumnType("uniqueidentifier") - .HasColumnName("establishment_main_contact_id"); - - b.Property("EstablishmentSharepointLink") - .HasColumnType("nvarchar(max)") - .HasColumnName("establishment_sharepoint_link"); - - b.Property("GroupId") - .HasColumnType("uniqueidentifier") - .HasColumnName("group_id"); - - b.Property("IncomingTrustMainContactId") - .HasColumnType("uniqueidentifier") - .HasColumnName("incoming_trust_main_contact_id"); - - b.Property("IncomingTrustSharepointLink") - .HasColumnType("nvarchar(max)") - .HasColumnName("incoming_trust_sharepoint_link"); - - b.Property("IncomingTrustUkprn") - .HasColumnType("int") - .HasColumnName("incoming_trust_ukprn"); - - b.Property("LocalAuthorityMainContactId") - .HasColumnType("uniqueidentifier") - .HasColumnName("local_authority_main_contact_id"); - - b.Property("MainContactId") - .HasColumnType("uniqueidentifier") - .HasColumnName("main_contact_id"); - - b.Property("NewTrustName") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("new_trust_name"); - - b.Property("NewTrustReferenceNumber") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("new_trust_reference_number"); - - b.Property("OutgoingTrustMainContactId") - .HasColumnType("uniqueidentifier") - .HasColumnName("outgoing_trust_main_contact_id"); - - b.Property("OutgoingTrustSharepointLink") - .HasColumnType("nvarchar(max)") - .HasColumnName("outgoing_trust_sharepoint_link"); - - b.Property("OutgoingTrustUkprn") - .HasColumnType("int") - .HasColumnName("outgoing_trust_ukprn"); - - b.Property("PrepareId") - .HasColumnType("int") - .HasColumnName("prepare_id"); - - b.Property("Region") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("region"); - - b.Property("RegionalDeliveryOfficerId") - .HasColumnType("uniqueidentifier") - .HasColumnName("regional_delivery_officer_id"); - - b.Property("SignificantDate") - .HasColumnType("date") - .HasColumnName("significant_date"); - - b.Property("SignificantDateProvisional") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(true) - .HasColumnName("significant_date_provisional"); - - b.Property("State") - .HasColumnType("int") - .HasColumnName("state"); - - b.Property("TasksDataId") - .HasColumnType("uniqueidentifier") - .HasColumnName("tasks_data_id"); - - b.Property("TasksDataType") - .HasMaxLength(4000) - .HasColumnType("int") - .HasColumnName("tasks_data_type"); - - b.Property("Team") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("team"); - - b.Property("TwoRequiresImprovement") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("two_requires_improvement"); - - b.Property("Type") - .HasMaxLength(4000) - .HasColumnType("int") - .HasColumnName("type"); - - b.Property("UpdatedAt") - .HasPrecision(6) - .HasColumnType("datetime2(6)") - .HasColumnName("updated_at"); - - b.Property("Urn") - .HasColumnType("int") - .HasColumnName("urn"); - - b.HasKey("Id"); - - b.HasIndex("AssignedToId"); - - b.HasIndex("CaseworkerId"); - - b.HasIndex("RegionalDeliveryOfficerId"); - - b.ToTable("projects", "complete"); - }); - - modelBuilder.Entity("Dfe.Complete.Domain.Entities.User", b => - { - b.Property("Id") - .HasColumnType("uniqueidentifier") - .HasColumnName("id"); - - b.Property("ActiveDirectoryUserGroupIds") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("active_directory_user_group_ids"); - - b.Property("ActiveDirectoryUserId") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("active_directory_user_id"); - - b.Property("AddNewProject") - .HasColumnType("bit") - .HasColumnName("add_new_project"); - - b.Property("AssignToProject") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("assign_to_project"); - - b.Property("CreatedAt") - .HasPrecision(6) - .HasColumnType("datetime2(6)") - .HasColumnName("created_at"); - - b.Property("DeactivatedAt") - .HasPrecision(6) - .HasColumnType("datetime2(6)") - .HasColumnName("deactivated_at"); - - b.Property("Email") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("email"); - - b.Property("FirstName") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("first_name"); - - b.Property("LastName") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("last_name"); - - b.Property("LatestSession") - .HasPrecision(6) - .HasColumnType("datetime2(6)") - .HasColumnName("latest_session"); - - b.Property("ManageConversionUrns") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("manage_conversion_urns"); - - b.Property("ManageLocalAuthorities") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("manage_local_authorities"); - - b.Property("ManageTeam") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("manage_team"); - - b.Property("ManageUserAccounts") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("manage_user_accounts"); - - b.Property("Team") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("team"); - - b.Property("UpdatedAt") - .HasPrecision(6) - .HasColumnType("datetime2(6)") - .HasColumnName("updated_at"); - - b.HasKey("Id"); - - b.ToTable("users", "complete"); - }); - - modelBuilder.Entity("Dfe.Complete.Infrastructure.Models.DaoRevocation", b => - { - b.Property("Id") - .HasColumnType("uniqueidentifier") - .HasColumnName("id"); - - b.Property("CreatedAt") - .HasPrecision(6) - .HasColumnType("datetime2(6)") - .HasColumnName("created_at"); - - b.Property("DateOfDecision") - .HasColumnType("date") - .HasColumnName("date_of_decision"); - - b.Property("DecisionMakersName") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("decision_makers_name"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier") - .HasColumnName("project_id"); - - b.Property("UpdatedAt") - .HasPrecision(6) - .HasColumnType("datetime2(6)") - .HasColumnName("updated_at"); - - b.HasKey("Id"); - - b.ToTable("dao_revocations", "complete"); - }); - - modelBuilder.Entity("Dfe.Complete.Infrastructure.Models.DaoRevocationReason", b => - { - b.Property("Id") - .HasColumnType("uniqueidentifier") - .HasColumnName("id"); - - b.Property("DaoRevocationId") - .HasColumnType("uniqueidentifier") - .HasColumnName("dao_revocation_id"); - - b.Property("ReasonType") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("reason_type"); - - b.HasKey("Id"); - - b.ToTable("dao_revocation_reasons", "complete"); - }); - - modelBuilder.Entity("Dfe.Complete.Infrastructure.Models.GiasEstablishment", b => - { - b.Property("Id") - .HasColumnType("uniqueidentifier") - .HasColumnName("id"); - - b.Property("AddressAdditional") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("address_additional"); - - b.Property("AddressCounty") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("address_county"); - - b.Property("AddressLocality") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("address_locality"); - - b.Property("AddressPostcode") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("address_postcode"); - - b.Property("AddressStreet") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("address_street"); - - b.Property("AddressTown") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("address_town"); - - b.Property("AgeRangeLower") - .HasColumnType("int") - .HasColumnName("age_range_lower"); - - b.Property("AgeRangeUpper") - .HasColumnType("int") - .HasColumnName("age_range_upper"); - - b.Property("CreatedAt") - .HasPrecision(6) - .HasColumnType("datetime2(6)") - .HasColumnName("created_at"); - - b.Property("DioceseCode") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("diocese_code"); - - b.Property("DioceseName") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("diocese_name"); - - b.Property("EstablishmentNumber") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("establishment_number"); - - b.Property("LocalAuthorityCode") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("local_authority_code"); - - b.Property("LocalAuthorityName") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("local_authority_name"); - - b.Property("Name") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("name"); - - b.Property("OpenDate") - .HasColumnType("date") - .HasColumnName("open_date"); - - b.Property("ParliamentaryConstituencyCode") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("parliamentary_constituency_code"); - - b.Property("ParliamentaryConstituencyName") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("parliamentary_constituency_name"); - - b.Property("PhaseCode") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("phase_code"); - - b.Property("PhaseName") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("phase_name"); - - b.Property("RegionCode") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("region_code"); - - b.Property("RegionName") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("region_name"); - - b.Property("StatusName") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("status_name"); - - b.Property("TypeCode") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("type_code"); - - b.Property("TypeName") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("type_name"); - - b.Property("Ukprn") - .HasColumnType("int") - .HasColumnName("ukprn"); - - b.Property("UpdatedAt") - .HasPrecision(6) - .HasColumnType("datetime2(6)") - .HasColumnName("updated_at"); - - b.Property("Url") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("url"); - - b.Property("Urn") - .HasColumnType("int") - .HasColumnName("urn"); - - b.HasKey("Id"); - - b.ToTable("gias_establishments", "complete"); - }); - - modelBuilder.Entity("Dfe.Complete.Infrastructure.Models.GiasGroup", b => - { - b.Property("Id") - .HasColumnType("uniqueidentifier") - .HasColumnName("id"); - - b.Property("AddressAdditional") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("address_additional"); - - b.Property("AddressCounty") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("address_county"); - - b.Property("AddressLocality") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("address_locality"); - - b.Property("AddressPostcode") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("address_postcode"); - - b.Property("AddressStreet") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("address_street"); - - b.Property("AddressTown") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("address_town"); - - b.Property("CompaniesHouseNumber") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("companies_house_number"); - - b.Property("CreatedAt") - .HasPrecision(6) - .HasColumnType("datetime2(6)") - .HasColumnName("created_at"); - - b.Property("GroupIdentifier") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("group_identifier"); - - b.Property("OriginalName") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("original_name"); - - b.Property("Ukprn") - .HasColumnType("int") - .HasColumnName("ukprn"); - - b.Property("UniqueGroupIdentifier") - .HasColumnType("int") - .HasColumnName("unique_group_identifier"); - - b.Property("UpdatedAt") - .HasPrecision(6) - .HasColumnType("datetime2(6)") - .HasColumnName("updated_at"); - - b.HasKey("Id"); - - b.ToTable("gias_groups", "complete"); - }); - - modelBuilder.Entity("Dfe.Complete.Infrastructure.Models.KeyContact", b => - { - b.Property("Id") - .HasColumnType("uniqueidentifier") - .HasColumnName("id"); - - b.Property("ChairOfGovernorsId") - .HasColumnType("uniqueidentifier") - .HasColumnName("chair_of_governors_id"); - - b.Property("CreatedAt") - .HasPrecision(6) - .HasColumnType("datetime2(6)") - .HasColumnName("created_at"); - - b.Property("HeadteacherId") - .HasColumnType("uniqueidentifier") - .HasColumnName("headteacher_id"); - - b.Property("IncomingTrustCeoId") - .HasColumnType("uniqueidentifier") - .HasColumnName("incoming_trust_ceo_id"); - - b.Property("OutgoingTrustCeoId") - .HasColumnType("uniqueidentifier") - .HasColumnName("outgoing_trust_ceo_id"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier") - .HasColumnName("project_id"); - - b.Property("UpdatedAt") - .HasPrecision(6) - .HasColumnType("datetime2(6)") - .HasColumnName("updated_at"); - - b.HasKey("Id"); - - b.ToTable("key_contacts", "complete"); - }); - - modelBuilder.Entity("Dfe.Complete.Infrastructure.Models.LocalAuthority", b => - { - b.Property("Id") - .HasColumnType("uniqueidentifier") - .HasColumnName("id"); - - b.Property("Address1") - .IsRequired() - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("address_1"); - - b.Property("Address2") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("address_2"); - - b.Property("Address3") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("address_3"); - - b.Property("AddressCounty") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("address_county"); - - b.Property("AddressPostcode") - .IsRequired() - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("address_postcode"); - - b.Property("AddressTown") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("address_town"); - - b.Property("Code") - .IsRequired() - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("code"); - - b.Property("CreatedAt") - .HasPrecision(6) - .HasColumnType("datetime2(6)") - .HasColumnName("created_at"); - - b.Property("Name") - .IsRequired() - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("name"); - - b.Property("UpdatedAt") - .HasPrecision(6) - .HasColumnType("datetime2(6)") - .HasColumnName("updated_at"); - - b.HasKey("Id"); - - b.ToTable("local_authorities", "complete"); - }); - - modelBuilder.Entity("Dfe.Complete.Infrastructure.Models.Note", b => - { - b.Property("Id") - .HasColumnType("uniqueidentifier") - .HasColumnName("id"); - - b.Property("Body") - .HasColumnType("nvarchar(max)") - .HasColumnName("body"); - - b.Property("CreatedAt") - .HasPrecision(6) - .HasColumnType("datetime2(6)") - .HasColumnName("created_at"); - - b.Property("NotableId") - .HasColumnType("uniqueidentifier") - .HasColumnName("notable_id"); - - b.Property("NotableType") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("notable_type"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier") - .HasColumnName("project_id"); - - b.Property("TaskIdentifier") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("task_identifier"); - - b.Property("UpdatedAt") - .HasPrecision(6) - .HasColumnType("datetime2(6)") - .HasColumnName("updated_at"); - - b.Property("UserId") - .HasColumnType("uniqueidentifier") - .HasColumnName("user_id"); - - b.HasKey("Id"); - - b.HasIndex("ProjectId"); - - b.HasIndex("UserId"); - - b.ToTable("notes", "complete"); - }); - - modelBuilder.Entity("Dfe.Complete.Infrastructure.Models.ProjectGroup", b => - { - b.Property("Id") - .HasColumnType("uniqueidentifier") - .HasColumnName("id"); - - b.Property("CreatedAt") - .HasPrecision(6) - .HasColumnType("datetime2(6)") - .HasColumnName("created_at"); - - b.Property("GroupIdentifier") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("group_identifier"); - - b.Property("TrustUkprn") - .HasColumnType("int") - .HasColumnName("trust_ukprn"); - - b.Property("UpdatedAt") - .HasPrecision(6) - .HasColumnType("datetime2(6)") - .HasColumnName("updated_at"); - - b.HasKey("Id"); - - b.ToTable("project_groups", "complete"); - }); - - modelBuilder.Entity("Dfe.Complete.Infrastructure.Models.SignificantDateHistory", b => - { - b.Property("Id") - .HasColumnType("uniqueidentifier") - .HasColumnName("id"); - - b.Property("CreatedAt") - .HasPrecision(6) - .HasColumnType("datetime2(6)") - .HasColumnName("created_at"); - - b.Property("PreviousDate") - .HasColumnType("date") - .HasColumnName("previous_date"); - - b.Property("ProjectId") - .HasColumnType("uniqueidentifier") - .HasColumnName("project_id"); - - b.Property("RevisedDate") - .HasColumnType("date") - .HasColumnName("revised_date"); - - b.Property("UpdatedAt") - .HasPrecision(6) - .HasColumnType("datetime2(6)") - .HasColumnName("updated_at"); - - b.Property("UserId") - .HasColumnType("uniqueidentifier") - .HasColumnName("user_id"); - - b.HasKey("Id"); - - b.ToTable("significant_date_histories", "complete"); - }); - - modelBuilder.Entity("Dfe.Complete.Infrastructure.Models.SignificantDateHistoryReason", b => - { - b.Property("Id") - .HasColumnType("uniqueidentifier") - .HasColumnName("id"); - - b.Property("CreatedAt") - .HasPrecision(6) - .HasColumnType("datetime2(6)") - .HasColumnName("created_at"); - - b.Property("ReasonType") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("reason_type"); - - b.Property("SignificantDateHistoryId") - .HasColumnType("uniqueidentifier") - .HasColumnName("significant_date_history_id"); - - b.Property("UpdatedAt") - .HasPrecision(6) - .HasColumnType("datetime2(6)") - .HasColumnName("updated_at"); - - b.HasKey("Id"); - - b.ToTable("significant_date_history_reasons", "complete"); - }); - - modelBuilder.Entity("Dfe.Complete.Infrastructure.Models.TransferTasksData", b => - { - b.Property("Id") - .HasColumnType("uniqueidentifier") - .HasColumnName("id"); - - b.Property("ArticlesOfAssociationCleared") - .HasColumnType("bit") - .HasColumnName("articles_of_association_cleared"); - - b.Property("ArticlesOfAssociationNotApplicable") - .HasColumnType("bit") - .HasColumnName("articles_of_association_not_applicable"); - - b.Property("ArticlesOfAssociationReceived") - .HasColumnType("bit") - .HasColumnName("articles_of_association_received"); - - b.Property("ArticlesOfAssociationSaved") - .HasColumnType("bit") - .HasColumnName("articles_of_association_saved"); - - b.Property("ArticlesOfAssociationSent") - .HasColumnType("bit") - .HasColumnName("articles_of_association_sent"); - - b.Property("ArticlesOfAssociationSigned") - .HasColumnType("bit") - .HasColumnName("articles_of_association_signed"); - - b.Property("BankDetailsChangingYesNo") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("bank_details_changing_yes_no"); - - b.Property("CheckAndConfirmFinancialInformationAcademySurplusDeficit") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("check_and_confirm_financial_information_academy_surplus_deficit"); - - b.Property("CheckAndConfirmFinancialInformationNotApplicable") - .HasColumnType("bit") - .HasColumnName("check_and_confirm_financial_information_not_applicable"); - - b.Property("CheckAndConfirmFinancialInformationTrustSurplusDeficit") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("check_and_confirm_financial_information_trust_surplus_deficit"); - - b.Property("ChurchSupplementalAgreementCleared") - .HasColumnType("bit") - .HasColumnName("church_supplemental_agreement_cleared"); - - b.Property("ChurchSupplementalAgreementNotApplicable") - .HasColumnType("bit") - .HasColumnName("church_supplemental_agreement_not_applicable"); - - b.Property("ChurchSupplementalAgreementReceived") - .HasColumnType("bit") - .HasColumnName("church_supplemental_agreement_received"); - - b.Property("ChurchSupplementalAgreementSavedAfterSigningBySecretaryState") - .HasColumnType("bit") - .HasColumnName("church_supplemental_agreement_saved_after_signing_by_secretary_state"); - - b.Property("ChurchSupplementalAgreementSavedAfterSigningByTrustDiocese") - .HasColumnType("bit") - .HasColumnName("church_supplemental_agreement_saved_after_signing_by_trust_diocese"); - - b.Property("ChurchSupplementalAgreementSignedDiocese") - .HasColumnType("bit") - .HasColumnName("church_supplemental_agreement_signed_diocese"); - - b.Property("ChurchSupplementalAgreementSignedIncomingTrust") - .HasColumnType("bit") - .HasColumnName("church_supplemental_agreement_signed_incoming_trust"); - - b.Property("ChurchSupplementalAgreementSignedSecretaryState") - .HasColumnType("bit") - .HasColumnName("church_supplemental_agreement_signed_secretary_state"); - - b.Property("ClosureOrTransferDeclarationCleared") - .HasColumnType("bit") - .HasColumnName("closure_or_transfer_declaration_cleared"); - - b.Property("ClosureOrTransferDeclarationNotApplicable") - .HasColumnType("bit") - .HasColumnName("closure_or_transfer_declaration_not_applicable"); - - b.Property("ClosureOrTransferDeclarationReceived") - .HasColumnType("bit") - .HasColumnName("closure_or_transfer_declaration_received"); - - b.Property("ClosureOrTransferDeclarationSaved") - .HasColumnType("bit") - .HasColumnName("closure_or_transfer_declaration_saved"); - - b.Property("ClosureOrTransferDeclarationSent") - .HasColumnType("bit") - .HasColumnName("closure_or_transfer_declaration_sent"); - - b.Property("CommercialTransferAgreementConfirmAgreed") - .HasColumnType("bit") - .HasColumnName("commercial_transfer_agreement_confirm_agreed"); - - b.Property("CommercialTransferAgreementConfirmSigned") - .HasColumnType("bit") - .HasColumnName("commercial_transfer_agreement_confirm_signed"); - - b.Property("CommercialTransferAgreementQuestionsChecked") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("commercial_transfer_agreement_questions_checked"); - - b.Property("CommercialTransferAgreementQuestionsReceived") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("commercial_transfer_agreement_questions_received"); - - b.Property("CommercialTransferAgreementSaveConfirmationEmails") - .HasColumnType("bit") - .HasColumnName("commercial_transfer_agreement_save_confirmation_emails"); - - b.Property("ConditionsMetBaselineSheetApproved") - .HasColumnType("bit") - .HasColumnName("conditions_met_baseline_sheet_approved"); - - b.Property("ConditionsMetCheckAnyInformationChanged") - .HasColumnType("bit") - .HasColumnName("conditions_met_check_any_information_changed"); - - b.Property("ConfirmDateAcademyTransferredDateTransferred") - .HasColumnType("date") - .HasColumnName("confirm_date_academy_transferred_date_transferred"); - - b.Property("ConfirmIncomingTrustHasCompletedAllActionsEmailed") - .HasColumnType("bit") - .HasColumnName("confirm_incoming_trust_has_completed_all_actions_emailed"); - - b.Property("ConfirmIncomingTrustHasCompletedAllActionsSaved") - .HasColumnType("bit") - .HasColumnName("confirm_incoming_trust_has_completed_all_actions_saved"); - - b.Property("CreatedAt") - .HasPrecision(6) - .HasColumnType("datetime2(6)") - .HasColumnName("created_at"); - - b.Property("DeclarationOfExpenditureCertificateCorrect") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("declaration_of_expenditure_certificate_correct"); - - b.Property("DeclarationOfExpenditureCertificateDateReceived") - .HasColumnType("date") - .HasColumnName("declaration_of_expenditure_certificate_date_received"); - - b.Property("DeclarationOfExpenditureCertificateNotApplicable") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("declaration_of_expenditure_certificate_not_applicable"); - - b.Property("DeclarationOfExpenditureCertificateSaved") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("declaration_of_expenditure_certificate_saved"); - - b.Property("DeedOfNovationAndVariationCleared") - .HasColumnType("bit") - .HasColumnName("deed_of_novation_and_variation_cleared"); - - b.Property("DeedOfNovationAndVariationReceived") - .HasColumnType("bit") - .HasColumnName("deed_of_novation_and_variation_received"); - - b.Property("DeedOfNovationAndVariationSaveAfterSign") - .HasColumnType("bit") - .HasColumnName("deed_of_novation_and_variation_save_after_sign"); - - b.Property("DeedOfNovationAndVariationSaved") - .HasColumnType("bit") - .HasColumnName("deed_of_novation_and_variation_saved"); - - b.Property("DeedOfNovationAndVariationSignedIncomingTrust") - .HasColumnType("bit") - .HasColumnName("deed_of_novation_and_variation_signed_incoming_trust"); - - b.Property("DeedOfNovationAndVariationSignedOutgoingTrust") - .HasColumnType("bit") - .HasColumnName("deed_of_novation_and_variation_signed_outgoing_trust"); - - b.Property("DeedOfNovationAndVariationSignedSecretaryState") - .HasColumnType("bit") - .HasColumnName("deed_of_novation_and_variation_signed_secretary_state"); - - b.Property("DeedOfTerminationForTheMasterFundingAgreementCleared") - .HasColumnType("bit") - .HasColumnName("deed_of_termination_for_the_master_funding_agreement_cleared"); - - b.Property("DeedOfTerminationForTheMasterFundingAgreementContactFinancialReportingTeam") - .HasColumnType("bit") - .HasColumnName("deed_of_termination_for_the_master_funding_agreement_contact_financial_reporting_team"); - - b.Property("DeedOfTerminationForTheMasterFundingAgreementNotApplicable") - .HasColumnType("bit") - .HasColumnName("deed_of_termination_for_the_master_funding_agreement_not_applicable"); - - b.Property("DeedOfTerminationForTheMasterFundingAgreementReceived") - .HasColumnType("bit") - .HasColumnName("deed_of_termination_for_the_master_funding_agreement_received"); - - b.Property("DeedOfTerminationForTheMasterFundingAgreementSavedAcademyAndOutgoingTrustSharepoint") - .HasColumnType("bit") - .HasColumnName("deed_of_termination_for_the_master_funding_agreement_saved_academy_and_outgoing_trust_sharepoint"); - - b.Property("DeedOfTerminationForTheMasterFundingAgreementSavedInAcademySharepointFolder") - .HasColumnType("bit") - .HasColumnName("deed_of_termination_for_the_master_funding_agreement_saved_in_academy_sharepoint_folder"); - - b.Property("DeedOfTerminationForTheMasterFundingAgreementSigned") - .HasColumnType("bit") - .HasColumnName("deed_of_termination_for_the_master_funding_agreement_signed"); - - b.Property("DeedOfTerminationForTheMasterFundingAgreementSignedSecretaryState") - .HasColumnType("bit") - .HasColumnName("deed_of_termination_for_the_master_funding_agreement_signed_secretary_state"); - - b.Property("DeedOfVariationCleared") - .HasColumnType("bit") - .HasColumnName("deed_of_variation_cleared"); - - b.Property("DeedOfVariationNotApplicable") - .HasColumnType("bit") - .HasColumnName("deed_of_variation_not_applicable"); - - b.Property("DeedOfVariationReceived") - .HasColumnType("bit") - .HasColumnName("deed_of_variation_received"); - - b.Property("DeedOfVariationSaved") - .HasColumnType("bit") - .HasColumnName("deed_of_variation_saved"); - - b.Property("DeedOfVariationSent") - .HasColumnType("bit") - .HasColumnName("deed_of_variation_sent"); - - b.Property("DeedOfVariationSigned") - .HasColumnType("bit") - .HasColumnName("deed_of_variation_signed"); - - b.Property("DeedOfVariationSignedSecretaryState") - .HasColumnType("bit") - .HasColumnName("deed_of_variation_signed_secretary_state"); - - b.Property("DeedTerminationChurchAgreementCleared") - .HasColumnType("bit") - .HasColumnName("deed_termination_church_agreement_cleared"); - - b.Property("DeedTerminationChurchAgreementNotApplicable") - .HasColumnType("bit") - .HasColumnName("deed_termination_church_agreement_not_applicable"); - - b.Property("DeedTerminationChurchAgreementReceived") - .HasColumnType("bit") - .HasColumnName("deed_termination_church_agreement_received"); - - b.Property("DeedTerminationChurchAgreementSaved") - .HasColumnType("bit") - .HasColumnName("deed_termination_church_agreement_saved"); - - b.Property("DeedTerminationChurchAgreementSavedAfterSigningBySecretaryState") - .HasColumnType("bit") - .HasColumnName("deed_termination_church_agreement_saved_after_signing_by_secretary_state"); - - b.Property("DeedTerminationChurchAgreementSignedDiocese") - .HasColumnType("bit") - .HasColumnName("deed_termination_church_agreement_signed_diocese"); - - b.Property("DeedTerminationChurchAgreementSignedOutgoingTrust") - .HasColumnType("bit") - .HasColumnName("deed_termination_church_agreement_signed_outgoing_trust"); - - b.Property("DeedTerminationChurchAgreementSignedSecretaryState") - .HasColumnType("bit") - .HasColumnName("deed_termination_church_agreement_signed_secretary_state"); - - b.Property("FinancialSafeguardingGovernanceIssues") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("financial_safeguarding_governance_issues"); - - b.Property("FormMCleared") - .HasColumnType("bit") - .HasColumnName("form_m_cleared"); - - b.Property("FormMNotApplicable") - .HasColumnType("bit") - .HasColumnName("form_m_not_applicable"); - - b.Property("FormMReceivedFormM") - .HasColumnType("bit") - .HasColumnName("form_m_received_form_m"); - - b.Property("FormMReceivedTitlePlans") - .HasColumnType("bit") - .HasColumnName("form_m_received_title_plans"); - - b.Property("FormMSaved") - .HasColumnType("bit") - .HasColumnName("form_m_saved"); - - b.Property("FormMSigned") - .HasColumnType("bit") - .HasColumnName("form_m_signed"); - - b.Property("HandoverMeeting") - .HasColumnType("bit") - .HasColumnName("handover_meeting"); - - b.Property("HandoverNotApplicable") - .HasColumnType("bit") - .HasColumnName("handover_not_applicable"); - - b.Property("HandoverNotes") - .HasColumnType("bit") - .HasColumnName("handover_notes"); - - b.Property("HandoverReview") - .HasColumnType("bit") - .HasColumnName("handover_review"); - - b.Property("InadequateOfsted") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("inadequate_ofsted"); - - b.Property("LandConsentLetterDrafted") - .HasColumnType("bit") - .HasColumnName("land_consent_letter_drafted"); - - b.Property("LandConsentLetterNotApplicable") - .HasColumnType("bit") - .HasColumnName("land_consent_letter_not_applicable"); - - b.Property("LandConsentLetterSaved") - .HasColumnType("bit") - .HasColumnName("land_consent_letter_saved"); - - b.Property("LandConsentLetterSent") - .HasColumnType("bit") - .HasColumnName("land_consent_letter_sent"); - - b.Property("LandConsentLetterSigned") - .HasColumnType("bit") - .HasColumnName("land_consent_letter_signed"); - - b.Property("MasterFundingAgreementCleared") - .HasColumnType("bit") - .HasColumnName("master_funding_agreement_cleared"); - - b.Property("MasterFundingAgreementNotApplicable") - .HasColumnType("bit") - .HasColumnName("master_funding_agreement_not_applicable"); - - b.Property("MasterFundingAgreementReceived") - .HasColumnType("bit") - .HasColumnName("master_funding_agreement_received"); - - b.Property("MasterFundingAgreementSaved") - .HasColumnType("bit") - .HasColumnName("master_funding_agreement_saved"); - - b.Property("MasterFundingAgreementSigned") - .HasColumnType("bit") - .HasColumnName("master_funding_agreement_signed"); - - b.Property("MasterFundingAgreementSignedSecretaryState") - .HasColumnType("bit") - .HasColumnName("master_funding_agreement_signed_secretary_state"); - - b.Property("OutgoingTrustToClose") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("outgoing_trust_to_close"); - - b.Property("RedactAndSendDocumentsRedact") - .HasColumnType("bit") - .HasColumnName("redact_and_send_documents_redact"); - - b.Property("RedactAndSendDocumentsSaved") - .HasColumnType("bit") - .HasColumnName("redact_and_send_documents_saved"); - - b.Property("RedactAndSendDocumentsSendToEsfa") - .HasColumnType("bit") - .HasColumnName("redact_and_send_documents_send_to_esfa"); - - b.Property("RedactAndSendDocumentsSendToFundingTeam") - .HasColumnType("bit") - .HasColumnName("redact_and_send_documents_send_to_funding_team"); - - b.Property("RedactAndSendDocumentsSendToSolicitors") - .HasColumnType("bit") - .HasColumnName("redact_and_send_documents_send_to_solicitors"); - - b.Property("RequestNewUrnAndRecordComplete") - .HasColumnType("bit") - .HasColumnName("request_new_urn_and_record_complete"); - - b.Property("RequestNewUrnAndRecordGive") - .HasColumnType("bit") - .HasColumnName("request_new_urn_and_record_give"); - - b.Property("RequestNewUrnAndRecordNotApplicable") - .HasColumnType("bit") - .HasColumnName("request_new_urn_and_record_not_applicable"); - - b.Property("RequestNewUrnAndRecordReceive") - .HasColumnType("bit") - .HasColumnName("request_new_urn_and_record_receive"); - - b.Property("RpaPolicyConfirm") - .HasColumnType("bit") - .HasColumnName("rpa_policy_confirm"); - - b.Property("SponsoredSupportGrantNotApplicable") - .ValueGeneratedOnAdd() - .HasColumnType("bit") - .HasDefaultValue(false) - .HasColumnName("sponsored_support_grant_not_applicable"); - - b.Property("SponsoredSupportGrantType") - .HasMaxLength(4000) - .HasColumnType("nvarchar(4000)") - .HasColumnName("sponsored_support_grant_type"); - - b.Property("StakeholderKickOffIntroductoryEmails") - .HasColumnType("bit") - .HasColumnName("stakeholder_kick_off_introductory_emails"); - - b.Property("StakeholderKickOffMeeting") - .HasColumnType("bit") - .HasColumnName("stakeholder_kick_off_meeting"); - - b.Property("StakeholderKickOffSetupMeeting") - .HasColumnType("bit") - .HasColumnName("stakeholder_kick_off_setup_meeting"); - - b.Property("SupplementalFundingAgreementCleared") - .HasColumnType("bit") - .HasColumnName("supplemental_funding_agreement_cleared"); - - b.Property("SupplementalFundingAgreementReceived") - .HasColumnType("bit") - .HasColumnName("supplemental_funding_agreement_received"); - - b.Property("SupplementalFundingAgreementSaved") - .HasColumnType("bit") - .HasColumnName("supplemental_funding_agreement_saved"); - - b.Property("UpdatedAt") - .HasPrecision(6) - .HasColumnType("datetime2(6)") - .HasColumnName("updated_at"); - - b.HasKey("Id"); - - b.ToTable("transfer_tasks_data", "complete"); - }); - - modelBuilder.Entity("Dfe.Complete.Domain.Entities.Contact", b => - { - b.HasOne("Dfe.Complete.Domain.Entities.Project", "Project") - .WithMany("Contacts") - .HasForeignKey("ProjectId") - .HasConstraintName("fk_rails_b0485f0dbc"); - - b.Navigation("Project"); - }); - - modelBuilder.Entity("Dfe.Complete.Domain.Entities.Project", b => - { - b.HasOne("Dfe.Complete.Domain.Entities.User", "AssignedTo") - .WithMany("ProjectAssignedTos") - .HasForeignKey("AssignedToId") - .HasConstraintName("fk_rails_9cf9d80ba9"); - - b.HasOne("Dfe.Complete.Domain.Entities.User", "Caseworker") - .WithMany("ProjectCaseworkers") - .HasForeignKey("CaseworkerId") - .HasConstraintName("fk_rails_246548228c"); - - b.HasOne("Dfe.Complete.Domain.Entities.User", "RegionalDeliveryOfficer") - .WithMany("ProjectRegionalDeliveryOfficers") - .HasForeignKey("RegionalDeliveryOfficerId") - .HasConstraintName("fk_rails_bba1c6b145"); - - b.Navigation("AssignedTo"); - - b.Navigation("Caseworker"); - - b.Navigation("RegionalDeliveryOfficer"); - }); - - modelBuilder.Entity("Dfe.Complete.Infrastructure.Models.Note", b => - { - b.HasOne("Dfe.Complete.Domain.Entities.Project", "Project") - .WithMany("Notes") - .HasForeignKey("ProjectId") - .HasConstraintName("fk_rails_99e097b079"); - - b.HasOne("Dfe.Complete.Domain.Entities.User", "User") - .WithMany("Notes") - .HasForeignKey("UserId") - .HasConstraintName("fk_rails_7f2323ad43"); - - b.Navigation("Project"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Dfe.Complete.Domain.Entities.Project", b => - { - b.Navigation("Contacts"); - - b.Navigation("Notes"); - }); - - modelBuilder.Entity("Dfe.Complete.Domain.Entities.User", b => - { - b.Navigation("Notes"); - - b.Navigation("ProjectAssignedTos"); - - b.Navigation("ProjectCaseworkers"); - - b.Navigation("ProjectRegionalDeliveryOfficers"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/src/Core/Dfe.Complete.Infrastructure/Migrations/20250107175259_ChangeProjectRegionTypeToString.cs b/src/Core/Dfe.Complete.Infrastructure/Migrations/20250107175259_ChangeProjectRegionTypeToString.cs deleted file mode 100644 index 807470c..0000000 --- a/src/Core/Dfe.Complete.Infrastructure/Migrations/20250107175259_ChangeProjectRegionTypeToString.cs +++ /dev/null @@ -1,42 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace Dfe.Complete.Infrastructure.Migrations -{ - /// - public partial class ChangeProjectRegionTypeToString : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.AlterColumn( - name: "region", - schema: "complete", - table: "projects", - type: "nvarchar(4000)", - maxLength: 4000, - nullable: true, - oldClrType: typeof(int), - oldType: "int", - oldMaxLength: 4000, - oldNullable: true); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.AlterColumn( - name: "region", - schema: "complete", - table: "projects", - type: "int", - maxLength: 4000, - nullable: true, - oldClrType: typeof(string), - oldType: "nvarchar(4000)", - oldMaxLength: 4000, - oldNullable: true); - } - } -} diff --git a/src/Frontend/Dfe.Complete/Pages/Projects/Conversion/CreateNewProject.cshtml.cs b/src/Frontend/Dfe.Complete/Pages/Projects/Conversion/CreateNewProject.cshtml.cs index a479575..1f3b8f3 100644 --- a/src/Frontend/Dfe.Complete/Pages/Projects/Conversion/CreateNewProject.cshtml.cs +++ b/src/Frontend/Dfe.Complete/Pages/Projects/Conversion/CreateNewProject.cshtml.cs @@ -83,7 +83,7 @@ public async Task OnGet() return Page(); } - public async Task OnPost() + public async Task OnPost(CancellationToken cancellationToken) { ManuallyValidateGroupReferenceNumber(); From aa0a421bcd78e2f00e5f355ce3ce34667d6e0f74 Mon Sep 17 00:00:00 2001 From: Zach Hodges Date: Wed, 8 Jan 2025 13:45:50 +0000 Subject: [PATCH 11/24] changed type --- .../Migrations/20241120095224_Initial.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Core/Dfe.Complete.Infrastructure/Migrations/20241120095224_Initial.cs b/src/Core/Dfe.Complete.Infrastructure/Migrations/20241120095224_Initial.cs index 3102453..61ba752 100644 --- a/src/Core/Dfe.Complete.Infrastructure/Migrations/20241120095224_Initial.cs +++ b/src/Core/Dfe.Complete.Infrastructure/Migrations/20241120095224_Initial.cs @@ -507,7 +507,7 @@ protected override void Up(MigrationBuilder migrationBuilder) significant_date = table.Column(type: "date", nullable: true), significant_date_provisional = table.Column(type: "bit", nullable: true, defaultValue: true), directive_academy_order = table.Column(type: "bit", nullable: true, defaultValue: false), - region = table.Column(type: "nvarchar(4000)", maxLength: 4000, nullable: true), + region = table.Column(type: "nvarchar(4000)", maxLength: 4000, nullable: true), academy_urn = table.Column(type: "int", nullable: true), tasks_data_id = table.Column(type: "uniqueidentifier", nullable: true), tasks_data_type = table.Column(type: "int", maxLength: 4000, nullable: true), From 211aea54c904408e162e5296ba6547dfd46d801f Mon Sep 17 00:00:00 2001 From: Zach Hodges Date: Wed, 8 Jan 2025 15:29:58 +0000 Subject: [PATCH 12/24] wip --- src/Core/Dfe.Complete.Domain/Entities/Note.cs | 7 +- .../Dfe.Complete.Domain/Entities/Project.cs | 2 +- .../CreateProjectCommandHandlerTests.cs | 2 +- .../Aggregates/ProjectTests.cs | 290 +++++++++++------- .../Models/ProjectCustomization.cs | 7 +- 5 files changed, 183 insertions(+), 125 deletions(-) diff --git a/src/Core/Dfe.Complete.Domain/Entities/Note.cs b/src/Core/Dfe.Complete.Domain/Entities/Note.cs index 5969765..7dec912 100644 --- a/src/Core/Dfe.Complete.Domain/Entities/Note.cs +++ b/src/Core/Dfe.Complete.Domain/Entities/Note.cs @@ -1,9 +1,6 @@ -using System; -using System.Collections.Generic; -using Dfe.Complete.Domain.Entities; -using Dfe.Complete.Domain.ValueObjects; +using Dfe.Complete.Domain.ValueObjects; -namespace Dfe.Complete.Infrastructure.Models; +namespace Dfe.Complete.Domain.Entities; public class Note { diff --git a/src/Core/Dfe.Complete.Domain/Entities/Project.cs b/src/Core/Dfe.Complete.Domain/Entities/Project.cs index 5eb126c..557202c 100644 --- a/src/Core/Dfe.Complete.Domain/Entities/Project.cs +++ b/src/Core/Dfe.Complete.Domain/Entities/Project.cs @@ -120,7 +120,7 @@ public Project(ProjectId id, Note? note, User? regionalDeliveryOfficer) { - Id = id; + Id = id ?? throw new ArgumentNullException(nameof(id)); Urn = urn ?? throw new ArgumentNullException(nameof(urn)); CreatedAt = createdAt != default ? createdAt : throw new ArgumentNullException(nameof(createdAt)); UpdatedAt = updatedAt != default ? updatedAt : throw new ArgumentNullException(nameof(updatedAt)); diff --git a/src/Tests/Dfe.Complete.Application.Tests/CommandHandlers/Project/CreateProjectCommandHandlerTests.cs b/src/Tests/Dfe.Complete.Application.Tests/CommandHandlers/Project/CreateProjectCommandHandlerTests.cs index b8f145f..a2e8273 100644 --- a/src/Tests/Dfe.Complete.Application.Tests/CommandHandlers/Project/CreateProjectCommandHandlerTests.cs +++ b/src/Tests/Dfe.Complete.Application.Tests/CommandHandlers/Project/CreateProjectCommandHandlerTests.cs @@ -22,7 +22,7 @@ CreateConversionProjectCommand command var project = Domain.Entities.Project.CreateConversionProject( new ProjectId(Guid.NewGuid()), - new Domain.ValueObjects.Urn(2), + new Urn(2), now, now, Domain.Enums.TaskType.Conversion, diff --git a/src/Tests/Dfe.Complete.Domain.Tests/Aggregates/ProjectTests.cs b/src/Tests/Dfe.Complete.Domain.Tests/Aggregates/ProjectTests.cs index 6ec46d4..1ada050 100644 --- a/src/Tests/Dfe.Complete.Domain.Tests/Aggregates/ProjectTests.cs +++ b/src/Tests/Dfe.Complete.Domain.Tests/Aggregates/ProjectTests.cs @@ -1,9 +1,15 @@ using DfE.CoreLibs.Testing.AutoFixture.Attributes; -using Dfe.Complete.Domain.Entities; -using Dfe.Complete.Domain.Enums; -using Dfe.Complete.Domain.ValueObjects; using Dfe.Complete.Tests.Common.Customizations.Models; using DfE.CoreLibs.Testing.AutoFixture.Customizations; +using Project = Dfe.Complete.Domain.Entities.Project; +using ProjectId = Dfe.Complete.Domain.ValueObjects.ProjectId; +using ProjectType = Dfe.Complete.Domain.Enums.ProjectType; +using Region = Dfe.Complete.Domain.Enums.Region; +using TaskType = Dfe.Complete.Domain.Enums.TaskType; +using Ukprn = Dfe.Complete.Domain.ValueObjects.Ukprn; +using Urn = Dfe.Complete.Domain.ValueObjects.Urn; +using User = Dfe.Complete.Domain.Entities.User; +using Note = Dfe.Complete.Domain.Entities.Note; namespace Dfe.Complete.Domain.Tests.Aggregates { @@ -12,6 +18,7 @@ public class ProjectTests [Theory] [CustomAutoData(typeof(ProjectCustomization), typeof(DateOnlyCustomization))] public void Constructor_ShouldThrowArgumentNullException_WhenProjectUrnIsNull( + ProjectId id, DateTime createdAt, DateTime updatedAt, TaskType taskType, @@ -27,26 +34,34 @@ public void Constructor_ShouldThrowArgumentNullException_WhenProjectUrnIsNull( string advisoryBoardConditions, string establishmentSharepointLink, string incomingTrustSharepointLink - ) + ) { // Act & Assert var exception = Assert.Throws(() => - new Project(null, - createdAt, - updatedAt, - taskType, - projectType, - tasksDataId, - significantDate, - isSignificantDateProvisional, - incomingTrustUkprn, - region, - isDueTo2RI, - hasAcademyOrderBeenIssued, - advisoryBoardDate, - advisoryBoardConditions, - establishmentSharepointLink, - incomingTrustSharepointLink)); + new Project( + id, + null, + createdAt, + updatedAt, + taskType, + projectType, + tasksDataId, + significantDate, + isSignificantDateProvisional, + incomingTrustUkprn, + region, + isDueTo2RI, + hasAcademyOrderBeenIssued, + advisoryBoardDate, + advisoryBoardConditions, + establishmentSharepointLink, + incomingTrustSharepointLink, + null, + "", + null, + null, + null, + null)); Assert.Equal("urn", exception.ParamName); } @@ -54,6 +69,7 @@ string incomingTrustSharepointLink [Theory] [CustomAutoData(typeof(ProjectCustomization), typeof(DateOnlyCustomization))] public void Constructor_ShouldThrowArgumentNullException_WhenProjectCreatedAtIsDefault( + ProjectId id, Urn urn, DateTime updatedAt, TaskType taskType, @@ -69,26 +85,34 @@ public void Constructor_ShouldThrowArgumentNullException_WhenProjectCreatedAtIsD string advisoryBoardConditions, string establishmentSharepointLink, string incomingTrustSharepointLink - ) + ) { // Act & Assert var exception = Assert.Throws(() => - new Project(urn, - default, - updatedAt, - taskType, - projectType, - tasksDataId, - significantDate, - isSignificantDateProvisional, - incomingTrustUkprn, - region, - isDueTo2RI, - hasAcademyOrderBeenIssued, - advisoryBoardDate, - advisoryBoardConditions, - establishmentSharepointLink, - incomingTrustSharepointLink)); + new Project( + id, + urn, + default, + updatedAt, + taskType, + projectType, + tasksDataId, + significantDate, + isSignificantDateProvisional, + incomingTrustUkprn, + region, + isDueTo2RI, + hasAcademyOrderBeenIssued, + advisoryBoardDate, + advisoryBoardConditions, + establishmentSharepointLink, + incomingTrustSharepointLink, + null, + "", + null, + null, + null, + null)); Assert.Equal("createdAt", exception.ParamName); } @@ -96,6 +120,7 @@ string incomingTrustSharepointLink [Theory] [CustomAutoData(typeof(ProjectCustomization), typeof(DateOnlyCustomization))] public void Constructor_ShouldThrowArgumentNullException_WhenProjectUpdatedAtIsDefault( + ProjectId id, Urn urn, DateTime createdAt, TaskType taskType, @@ -111,26 +136,34 @@ public void Constructor_ShouldThrowArgumentNullException_WhenProjectUpdatedAtIsD string advisoryBoardConditions, string establishmentSharepointLink, string incomingTrustSharepointLink - ) + ) { // Act & Assert var exception = Assert.Throws(() => - new Project(urn, - createdAt, - default, - taskType, - projectType, - tasksDataId, - significantDate, - isSignificantDateProvisional, - incomingTrustUkprn, - region, - isDueTo2RI, - hasAcademyOrderBeenIssued, - advisoryBoardDate, - advisoryBoardConditions, - establishmentSharepointLink, - incomingTrustSharepointLink)); + new Project( + id, + urn, + createdAt, + default, + taskType, + projectType, + tasksDataId, + significantDate, + isSignificantDateProvisional, + incomingTrustUkprn, + region, + isDueTo2RI, + hasAcademyOrderBeenIssued, + advisoryBoardDate, + advisoryBoardConditions, + establishmentSharepointLink, + incomingTrustSharepointLink, + null, + "", + null, + null, + null, + null)); Assert.Equal("updatedAt", exception.ParamName); } @@ -139,6 +172,7 @@ string incomingTrustSharepointLink [Theory] [CustomAutoData(typeof(ProjectCustomization), typeof(DateOnlyCustomization))] public void Constructor_ShouldCorrectlySetFields( + ProjectId id, Urn urn, DateTime createdAt, DateTime updatedAt, @@ -154,26 +188,40 @@ public void Constructor_ShouldCorrectlySetFields( DateOnly advisoryBoardDate, string advisoryBoardConditions, string establishmentSharepointLink, - string incomingTrustSharepointLink - ) + string incomingTrustSharepointLink, + Guid? groupId, + string team, + DateTime? assignedAt, + User? assignedTo, + Note? note, + User? regionalDeliveryOfficer + ) { // Act & Assert - var project = new Project(urn, - createdAt, - updatedAt, - taskType, - projectType, - tasksDataId, - significantDate, - isSignificantDateProvisional, - incomingTrustUkprn, - region, - isDueTo2RI, - hasAcademyOrderBeenIssued, - advisoryBoardDate, - advisoryBoardConditions, - establishmentSharepointLink, - incomingTrustSharepointLink); + var project = new Project( + id, + urn, + createdAt, + updatedAt, + taskType, + projectType, + tasksDataId, + significantDate, + isSignificantDateProvisional, + incomingTrustUkprn, + region, + isDueTo2RI, + hasAcademyOrderBeenIssued, + advisoryBoardDate, + advisoryBoardConditions, + establishmentSharepointLink, + incomingTrustSharepointLink, + groupId, + team, + assignedAt, + assignedTo, + note, + regionalDeliveryOfficer); Assert.Equal(urn, project.Urn); } @@ -181,49 +229,59 @@ string incomingTrustSharepointLink [Theory] [CustomAutoData(typeof(ProjectCustomization), typeof(DateOnlyCustomization))] public void Factory_Create_ShouldCorrectlySetFields( - Urn urn, - DateTime createdAt, - DateTime updatedAt, - TaskType taskType, - ProjectType projectType, - Guid tasksDataId, - DateOnly significantDate, - bool isSignificantDateProvisional, - Ukprn incomingTrustUkprn, - Region region, - bool isDueTo2RI, - bool hasAcademyOrderBeenIssued, - DateOnly advisoryBoardDate, - string advisoryBoardConditions, - string establishmentSharepointLink, - string incomingTrustSharepointLink, - string groupReferenceNumber, - DateOnly provisionalConversionDate, - bool handingOverToRegionalCaseworkService, - string handoverComments - ) + ProjectId id, + Urn urn, + DateTime createdAt, + DateTime updatedAt, + TaskType taskType, + ProjectType projectType, + Guid tasksDataId, + DateOnly significantDate, + bool isSignificantDateProvisional, + Ukprn incomingTrustUkprn, + Region region, + bool isDueTo2RI, + bool hasAcademyOrderBeenIssued, + DateOnly advisoryBoardDate, + string advisoryBoardConditions, + string establishmentSharepointLink, + string incomingTrustSharepointLink, + DateOnly provisionalConversionDate, + bool handingOverToRegionalCaseworkService, + string handoverComments, + Guid? groupId, + string team, + DateTime? assignedAt, + User? assignedTo, + Note? note, + User? regionalDeliveryOfficer + ) { // Act & Assert - var project = Project.CreateConversionProject(urn, - createdAt, - updatedAt, - taskType, - projectType, - tasksDataId, - significantDate, - isSignificantDateProvisional, - incomingTrustUkprn, - region, - isDueTo2RI, - hasAcademyOrderBeenIssued, - advisoryBoardDate, - advisoryBoardConditions, - establishmentSharepointLink, - incomingTrustSharepointLink, - groupReferenceNumber, - provisionalConversionDate, - handingOverToRegionalCaseworkService, - handoverComments); + var project = Project.CreateConversionProject( + id, + urn, + createdAt, + updatedAt, + taskType, + projectType, + tasksDataId, + significantDate, + isSignificantDateProvisional, + incomingTrustUkprn, + region, + isDueTo2RI, + hasAcademyOrderBeenIssued, + advisoryBoardDate, + advisoryBoardConditions, + establishmentSharepointLink, + incomingTrustSharepointLink, + groupId, + team, + assignedAt, + assignedTo, + note, + regionalDeliveryOfficer); Assert.Equal(urn, project.Urn); Assert.Equal(createdAt, project.CreatedAt); @@ -234,15 +292,13 @@ string handoverComments Assert.Equal(significantDate, project.SignificantDate); Assert.Equal(isSignificantDateProvisional, project.SignificantDateProvisional); Assert.Equal(incomingTrustUkprn, project.IncomingTrustUkprn); - Assert.Equal(region, project.Region); + Assert.Equal(region.ToString(), project.Region); Assert.Equal(isDueTo2RI, project.TwoRequiresImprovement); Assert.Equal(hasAcademyOrderBeenIssued, project.DirectiveAcademyOrder); Assert.Equal(advisoryBoardDate, project.AdvisoryBoardDate); Assert.Equal(advisoryBoardConditions, project.AdvisoryBoardConditions); Assert.Equal(establishmentSharepointLink, project.EstablishmentSharepointLink); Assert.Equal(incomingTrustSharepointLink, project.IncomingTrustSharepointLink); - - } } -} +} \ No newline at end of file diff --git a/src/Tests/Dfe.Complete.Tests.Common/Customizations/Models/ProjectCustomization.cs b/src/Tests/Dfe.Complete.Tests.Common/Customizations/Models/ProjectCustomization.cs index 28ee151..af5fe54 100644 --- a/src/Tests/Dfe.Complete.Tests.Common/Customizations/Models/ProjectCustomization.cs +++ b/src/Tests/Dfe.Complete.Tests.Common/Customizations/Models/ProjectCustomization.cs @@ -80,6 +80,8 @@ public class ProjectCustomization : ICustomization public ContactId? LocalAuthorityMainContactId { get; set; } public Guid? GroupId { get; set; } + + public ICollection? Notes { get; set; } public void Customize(IFixture fixture) { @@ -108,7 +110,10 @@ public void Customize(IFixture fixture) .With(x => x.IncomingTrustMainContactId, IncomingTrustMainContactId ?? fixture.Create()) .With(x => x.OutgoingTrustMainContactId, OutgoingTrustMainContactId ?? fixture.Create()) .With(x => x.NewTrustReferenceNumber, NewTrustReferenceNumber ?? fixture.Create()) - .With(x => x.NewTrustName, NewTrustName ?? fixture.Create())); + .With(x => x.NewTrustName, NewTrustName ?? fixture.Create()) + .With(x => x.GroupId, GroupId ?? fixture.Create()) + .With(x => x.AssignedAt, AssignedAt ?? fixture.Create()) + .With(x => x.Notes, Notes ?? fixture.Create>())); } } } From 8e4fcb8cc8375a609723e3b63eb06d9b79a682d2 Mon Sep 17 00:00:00 2001 From: Zach Hodges Date: Thu, 9 Jan 2025 08:43:01 +0000 Subject: [PATCH 13/24] wip --- .../Generated/Contracts.g.cs | 491 --------------- .../Generated/swagger.json | 582 ------------------ src/Core/Dfe.Complete.Domain/Entities/Note.cs | 5 +- .../GetProjectByUrnQueryHandlerTests.cs | 13 +- .../Aggregates/ProjectTests.cs | 2 +- .../Models/ProjectCustomization.cs | 1 + 6 files changed, 14 insertions(+), 1080 deletions(-) diff --git a/src/Api/Dfe.Complete.Api.Client/Generated/Contracts.g.cs b/src/Api/Dfe.Complete.Api.Client/Generated/Contracts.g.cs index 26ea97f..aefe023 100644 --- a/src/Api/Dfe.Complete.Api.Client/Generated/Contracts.g.cs +++ b/src/Api/Dfe.Complete.Api.Client/Generated/Contracts.g.cs @@ -836,497 +836,6 @@ public enum ProjectTeam } - [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "14.1.0.0 (NJsonSchema v11.0.2.0 (Newtonsoft.Json v13.0.0.0))")] - public partial class Project : BaseAggregateRoot - { - [Newtonsoft.Json.JsonProperty("id", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public ProjectId? Id { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("urn", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public Urn? Urn { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("createdAt", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public System.DateTime? CreatedAt { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("updatedAt", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public System.DateTime? UpdatedAt { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("incomingTrustUkprn", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public Ukprn? IncomingTrustUkprn { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("regionalDeliveryOfficerId", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public UserId? RegionalDeliveryOfficerId { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("caseworkerId", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public UserId? CaseworkerId { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("assignedAt", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public System.DateTime? AssignedAt { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("advisoryBoardDate", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - [Newtonsoft.Json.JsonConverter(typeof(DateFormatConverter))] - public System.DateTime? AdvisoryBoardDate { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("advisoryBoardConditions", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public string? AdvisoryBoardConditions { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("establishmentSharepointLink", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public string? EstablishmentSharepointLink { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("completedAt", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public System.DateTime? CompletedAt { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("incomingTrustSharepointLink", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public string? IncomingTrustSharepointLink { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("type", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))] - public ProjectType? Type { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("assignedToId", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public UserId? AssignedToId { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("significantDate", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - [Newtonsoft.Json.JsonConverter(typeof(DateFormatConverter))] - public System.DateTime? SignificantDate { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("significantDateProvisional", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public bool? SignificantDateProvisional { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("directiveAcademyOrder", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public bool? DirectiveAcademyOrder { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("region", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))] - public Region? Region { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("academyUrn", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public Urn? AcademyUrn { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("tasksDataId", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public System.Guid? TasksDataId { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("tasksDataType", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))] - public TaskType? TasksDataType { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("outgoingTrustUkprn", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public Ukprn? OutgoingTrustUkprn { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("team", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public string? Team { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("twoRequiresImprovement", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public bool? TwoRequiresImprovement { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("outgoingTrustSharepointLink", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public string? OutgoingTrustSharepointLink { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("allConditionsMet", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public bool? AllConditionsMet { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("mainContactId", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public ContactId? MainContactId { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("establishmentMainContactId", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public ContactId? EstablishmentMainContactId { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("incomingTrustMainContactId", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public ContactId? IncomingTrustMainContactId { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("outgoingTrustMainContactId", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public ContactId? OutgoingTrustMainContactId { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("newTrustReferenceNumber", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public string? NewTrustReferenceNumber { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("newTrustName", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public string? NewTrustName { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("state", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public int? State { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("prepareId", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public int? PrepareId { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("localAuthorityMainContactId", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public ContactId? LocalAuthorityMainContactId { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("groupId", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public System.Guid? GroupId { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("assignedTo", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public User? AssignedTo { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("caseworker", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public User? Caseworker { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("contacts", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public System.Collections.Generic.List? Contacts { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("notes", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public System.Collections.Generic.List? Notes { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("regionalDeliveryOfficer", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public User? RegionalDeliveryOfficer { get; set; } = default!; - - public string ToJson() - { - - return Newtonsoft.Json.JsonConvert.SerializeObject(this, new Newtonsoft.Json.JsonSerializerSettings()); - - } - public static Project FromJson(string data) - { - - return Newtonsoft.Json.JsonConvert.DeserializeObject(data, new Newtonsoft.Json.JsonSerializerSettings()); - - } - - } - - [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "14.1.0.0 (NJsonSchema v11.0.2.0 (Newtonsoft.Json v13.0.0.0))")] - public partial class UserId - { - [Newtonsoft.Json.JsonProperty("value", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public System.Guid? Value { get; set; } = default!; - - public string ToJson() - { - - return Newtonsoft.Json.JsonConvert.SerializeObject(this, new Newtonsoft.Json.JsonSerializerSettings()); - - } - public static UserId FromJson(string data) - { - - return Newtonsoft.Json.JsonConvert.DeserializeObject(data, new Newtonsoft.Json.JsonSerializerSettings()); - - } - - } - - [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "14.1.0.0 (NJsonSchema v11.0.2.0 (Newtonsoft.Json v13.0.0.0))")] - public enum ProjectType - { - - [System.Runtime.Serialization.EnumMember(Value = @"Conversion")] - Conversion = 0, - - [System.Runtime.Serialization.EnumMember(Value = @"Transfer")] - Transfer = 1, - - } - - [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "14.1.0.0 (NJsonSchema v11.0.2.0 (Newtonsoft.Json v13.0.0.0))")] - public enum TaskType - { - - [System.Runtime.Serialization.EnumMember(Value = @"Conversion")] - Conversion = 0, - - [System.Runtime.Serialization.EnumMember(Value = @"Transfer")] - Transfer = 1, - - } - - [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "14.1.0.0 (NJsonSchema v11.0.2.0 (Newtonsoft.Json v13.0.0.0))")] - public partial class ContactId - { - [Newtonsoft.Json.JsonProperty("value", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public System.Guid? Value { get; set; } = default!; - - public string ToJson() - { - - return Newtonsoft.Json.JsonConvert.SerializeObject(this, new Newtonsoft.Json.JsonSerializerSettings()); - - } - public static ContactId FromJson(string data) - { - - return Newtonsoft.Json.JsonConvert.DeserializeObject(data, new Newtonsoft.Json.JsonSerializerSettings()); - - } - - } - - [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "14.1.0.0 (NJsonSchema v11.0.2.0 (Newtonsoft.Json v13.0.0.0))")] - public partial class User - { - [Newtonsoft.Json.JsonProperty("id", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public UserId? Id { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("email", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public string? Email { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("createdAt", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public System.DateTime? CreatedAt { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("updatedAt", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public System.DateTime? UpdatedAt { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("manageTeam", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public bool? ManageTeam { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("addNewProject", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public bool? AddNewProject { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("firstName", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public string? FirstName { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("lastName", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public string? LastName { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("activeDirectoryUserId", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public string? ActiveDirectoryUserId { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("assignToProject", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public bool? AssignToProject { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("manageUserAccounts", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public bool? ManageUserAccounts { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("activeDirectoryUserGroupIds", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public string? ActiveDirectoryUserGroupIds { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("team", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public string? Team { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("deactivatedAt", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public System.DateTime? DeactivatedAt { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("manageConversionUrns", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public bool? ManageConversionUrns { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("manageLocalAuthorities", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public bool? ManageLocalAuthorities { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("latestSession", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public System.DateTime? LatestSession { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("notes", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public System.Collections.Generic.List? Notes { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("projectAssignedTos", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public System.Collections.Generic.List? ProjectAssignedTos { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("projectCaseworkers", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public System.Collections.Generic.List? ProjectCaseworkers { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("projectRegionalDeliveryOfficers", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public System.Collections.Generic.List? ProjectRegionalDeliveryOfficers { get; set; } = default!; - - public string ToJson() - { - - return Newtonsoft.Json.JsonConvert.SerializeObject(this, new Newtonsoft.Json.JsonSerializerSettings()); - - } - public static User FromJson(string data) - { - - return Newtonsoft.Json.JsonConvert.DeserializeObject(data, new Newtonsoft.Json.JsonSerializerSettings()); - - } - - } - - [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "14.1.0.0 (NJsonSchema v11.0.2.0 (Newtonsoft.Json v13.0.0.0))")] - public partial class Note - { - [Newtonsoft.Json.JsonProperty("id", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public NoteId? Id { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("body", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public string? Body { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("projectId", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public ProjectId? ProjectId { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("userId", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public UserId? UserId { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("createdAt", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public System.DateTime? CreatedAt { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("updatedAt", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public System.DateTime? UpdatedAt { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("taskIdentifier", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public string? TaskIdentifier { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("notableId", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public System.Guid? NotableId { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("notableType", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public string? NotableType { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("project", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public Project? Project { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("user", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public User? User { get; set; } = default!; - - public string ToJson() - { - - return Newtonsoft.Json.JsonConvert.SerializeObject(this, new Newtonsoft.Json.JsonSerializerSettings()); - - } - public static Note FromJson(string data) - { - - return Newtonsoft.Json.JsonConvert.DeserializeObject(data, new Newtonsoft.Json.JsonSerializerSettings()); - - } - - } - - [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "14.1.0.0 (NJsonSchema v11.0.2.0 (Newtonsoft.Json v13.0.0.0))")] - public partial class NoteId - { - [Newtonsoft.Json.JsonProperty("value", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public System.Guid? Value { get; set; } = default!; - - public string ToJson() - { - - return Newtonsoft.Json.JsonConvert.SerializeObject(this, new Newtonsoft.Json.JsonSerializerSettings()); - - } - public static NoteId FromJson(string data) - { - - return Newtonsoft.Json.JsonConvert.DeserializeObject(data, new Newtonsoft.Json.JsonSerializerSettings()); - - } - - } - - [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "14.1.0.0 (NJsonSchema v11.0.2.0 (Newtonsoft.Json v13.0.0.0))")] - public partial class Contact - { - [Newtonsoft.Json.JsonProperty("id", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public ContactId? Id { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("projectId", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public ProjectId? ProjectId { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("name", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public string? Name { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("title", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public string? Title { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("email", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public string? Email { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("phone", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public string? Phone { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("createdAt", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public System.DateTime? CreatedAt { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("updatedAt", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public System.DateTime? UpdatedAt { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("category", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public int? Category { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("organisationName", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public string? OrganisationName { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("type", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public string? Type { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("localAuthorityId", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public LocalAuthorityId? LocalAuthorityId { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("establishmentUrn", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public int? EstablishmentUrn { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("project", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public Project? Project { get; set; } = default!; - - public string ToJson() - { - - return Newtonsoft.Json.JsonConvert.SerializeObject(this, new Newtonsoft.Json.JsonSerializerSettings()); - - } - public static Contact FromJson(string data) - { - - return Newtonsoft.Json.JsonConvert.DeserializeObject(data, new Newtonsoft.Json.JsonSerializerSettings()); - - } - - } - - [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "14.1.0.0 (NJsonSchema v11.0.2.0 (Newtonsoft.Json v13.0.0.0))")] - public partial class LocalAuthorityId - { - [Newtonsoft.Json.JsonProperty("value", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public System.Guid? Value { get; set; } = default!; - - public string ToJson() - { - - return Newtonsoft.Json.JsonConvert.SerializeObject(this, new Newtonsoft.Json.JsonSerializerSettings()); - - } - public static LocalAuthorityId FromJson(string data) - { - - return Newtonsoft.Json.JsonConvert.DeserializeObject(data, new Newtonsoft.Json.JsonSerializerSettings()); - - } - - } - - [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "14.1.0.0 (NJsonSchema v11.0.2.0 (Newtonsoft.Json v13.0.0.0))")] - public abstract partial class BaseAggregateRoot - { - [Newtonsoft.Json.JsonProperty("domainEvents", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public System.Collections.Generic.List? DomainEvents { get; set; } = default!; - - public string ToJson() - { - - return Newtonsoft.Json.JsonConvert.SerializeObject(this, new Newtonsoft.Json.JsonSerializerSettings()); - - } - public static BaseAggregateRoot FromJson(string data) - { - - return Newtonsoft.Json.JsonConvert.DeserializeObject(data, new Newtonsoft.Json.JsonSerializerSettings()); - - } - - } - - [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "14.1.0.0 (NJsonSchema v11.0.2.0 (Newtonsoft.Json v13.0.0.0))")] - public abstract partial class IDomainEvent - { - [Newtonsoft.Json.JsonProperty("occurredOn", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public System.DateTime? OccurredOn { get; set; } = default!; - - public string ToJson() - { - - return Newtonsoft.Json.JsonConvert.SerializeObject(this, new Newtonsoft.Json.JsonSerializerSettings()); - - } - public static IDomainEvent FromJson(string data) - { - - return Newtonsoft.Json.JsonConvert.DeserializeObject(data, new Newtonsoft.Json.JsonSerializerSettings()); - - } - - } - [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "14.1.0.0 (NJsonSchema v11.0.2.0 (Newtonsoft.Json v13.0.0.0))")] public partial class GetProjectByUrnQuery { diff --git a/src/Api/Dfe.Complete.Api.Client/Generated/swagger.json b/src/Api/Dfe.Complete.Api.Client/Generated/swagger.json index 55e441a..10f92f1 100644 --- a/src/Api/Dfe.Complete.Api.Client/Generated/swagger.json +++ b/src/Api/Dfe.Complete.Api.Client/Generated/swagger.json @@ -969,588 +969,6 @@ "EastMidlands" ] }, - "Project": { - "allOf": [ - { - "$ref": "#/components/schemas/BaseAggregateRoot" - }, - { - "type": "object", - "additionalProperties": false, - "properties": { - "id": { - "$ref": "#/components/schemas/ProjectId" - }, - "urn": { - "$ref": "#/components/schemas/Urn" - }, - "createdAt": { - "type": "string", - "format": "date-time" - }, - "updatedAt": { - "type": "string", - "format": "date-time" - }, - "incomingTrustUkprn": { - "nullable": true, - "oneOf": [ - { - "$ref": "#/components/schemas/Ukprn" - } - ] - }, - "regionalDeliveryOfficerId": { - "nullable": true, - "oneOf": [ - { - "$ref": "#/components/schemas/UserId" - } - ] - }, - "caseworkerId": { - "nullable": true, - "oneOf": [ - { - "$ref": "#/components/schemas/UserId" - } - ] - }, - "assignedAt": { - "type": "string", - "format": "date-time", - "nullable": true - }, - "advisoryBoardDate": { - "type": "string", - "format": "date", - "nullable": true - }, - "advisoryBoardConditions": { - "type": "string", - "nullable": true - }, - "establishmentSharepointLink": { - "type": "string", - "nullable": true - }, - "completedAt": { - "type": "string", - "format": "date-time", - "nullable": true - }, - "incomingTrustSharepointLink": { - "type": "string", - "nullable": true - }, - "type": { - "nullable": true, - "oneOf": [ - { - "$ref": "#/components/schemas/ProjectType" - } - ] - }, - "assignedToId": { - "nullable": true, - "oneOf": [ - { - "$ref": "#/components/schemas/UserId" - } - ] - }, - "significantDate": { - "type": "string", - "format": "date", - "nullable": true - }, - "significantDateProvisional": { - "type": "boolean", - "nullable": true - }, - "directiveAcademyOrder": { - "type": "boolean", - "nullable": true - }, - "region": { - "nullable": true, - "oneOf": [ - { - "$ref": "#/components/schemas/Region" - } - ] - }, - "academyUrn": { - "nullable": true, - "oneOf": [ - { - "$ref": "#/components/schemas/Urn" - } - ] - }, - "tasksDataId": { - "type": "string", - "format": "guid", - "nullable": true - }, - "tasksDataType": { - "nullable": true, - "oneOf": [ - { - "$ref": "#/components/schemas/TaskType" - } - ] - }, - "outgoingTrustUkprn": { - "nullable": true, - "oneOf": [ - { - "$ref": "#/components/schemas/Ukprn" - } - ] - }, - "team": { - "type": "string", - "nullable": true - }, - "twoRequiresImprovement": { - "type": "boolean", - "nullable": true - }, - "outgoingTrustSharepointLink": { - "type": "string", - "nullable": true - }, - "allConditionsMet": { - "type": "boolean", - "nullable": true - }, - "mainContactId": { - "nullable": true, - "oneOf": [ - { - "$ref": "#/components/schemas/ContactId" - } - ] - }, - "establishmentMainContactId": { - "nullable": true, - "oneOf": [ - { - "$ref": "#/components/schemas/ContactId" - } - ] - }, - "incomingTrustMainContactId": { - "nullable": true, - "oneOf": [ - { - "$ref": "#/components/schemas/ContactId" - } - ] - }, - "outgoingTrustMainContactId": { - "nullable": true, - "oneOf": [ - { - "$ref": "#/components/schemas/ContactId" - } - ] - }, - "newTrustReferenceNumber": { - "type": "string", - "nullable": true - }, - "newTrustName": { - "type": "string", - "nullable": true - }, - "state": { - "type": "integer", - "format": "int32" - }, - "prepareId": { - "type": "integer", - "format": "int32", - "nullable": true - }, - "localAuthorityMainContactId": { - "nullable": true, - "oneOf": [ - { - "$ref": "#/components/schemas/ContactId" - } - ] - }, - "groupId": { - "type": "string", - "format": "guid", - "nullable": true - }, - "assignedTo": { - "nullable": true, - "oneOf": [ - { - "$ref": "#/components/schemas/User" - } - ] - }, - "caseworker": { - "nullable": true, - "oneOf": [ - { - "$ref": "#/components/schemas/User" - } - ] - }, - "contacts": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Contact" - } - }, - "notes": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Note" - } - }, - "regionalDeliveryOfficer": { - "nullable": true, - "oneOf": [ - { - "$ref": "#/components/schemas/User" - } - ] - } - } - } - ] - }, - "UserId": { - "type": "object", - "additionalProperties": false, - "properties": { - "value": { - "type": "string", - "format": "guid" - } - } - }, - "ProjectType": { - "type": "string", - "description": "", - "x-enumNames": [ - "Conversion", - "Transfer" - ], - "enum": [ - "Conversion", - "Transfer" - ] - }, - "TaskType": { - "type": "string", - "description": "", - "x-enumNames": [ - "Conversion", - "Transfer" - ], - "enum": [ - "Conversion", - "Transfer" - ] - }, - "ContactId": { - "type": "object", - "additionalProperties": false, - "properties": { - "value": { - "type": "string", - "format": "guid" - } - } - }, - "User": { - "type": "object", - "additionalProperties": false, - "properties": { - "id": { - "$ref": "#/components/schemas/UserId" - }, - "email": { - "type": "string", - "nullable": true - }, - "createdAt": { - "type": "string", - "format": "date-time" - }, - "updatedAt": { - "type": "string", - "format": "date-time" - }, - "manageTeam": { - "type": "boolean", - "nullable": true - }, - "addNewProject": { - "type": "boolean" - }, - "firstName": { - "type": "string", - "nullable": true - }, - "lastName": { - "type": "string", - "nullable": true - }, - "activeDirectoryUserId": { - "type": "string", - "nullable": true - }, - "assignToProject": { - "type": "boolean", - "nullable": true - }, - "manageUserAccounts": { - "type": "boolean", - "nullable": true - }, - "activeDirectoryUserGroupIds": { - "type": "string", - "nullable": true - }, - "team": { - "type": "string", - "nullable": true - }, - "deactivatedAt": { - "type": "string", - "format": "date-time", - "nullable": true - }, - "manageConversionUrns": { - "type": "boolean", - "nullable": true - }, - "manageLocalAuthorities": { - "type": "boolean", - "nullable": true - }, - "latestSession": { - "type": "string", - "format": "date-time", - "nullable": true - }, - "notes": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Note" - } - }, - "projectAssignedTos": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Project" - } - }, - "projectCaseworkers": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Project" - } - }, - "projectRegionalDeliveryOfficers": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Project" - } - } - } - }, - "Note": { - "type": "object", - "additionalProperties": false, - "properties": { - "id": { - "$ref": "#/components/schemas/NoteId" - }, - "body": { - "type": "string", - "nullable": true - }, - "projectId": { - "nullable": true, - "oneOf": [ - { - "$ref": "#/components/schemas/ProjectId" - } - ] - }, - "userId": { - "nullable": true, - "oneOf": [ - { - "$ref": "#/components/schemas/UserId" - } - ] - }, - "createdAt": { - "type": "string", - "format": "date-time" - }, - "updatedAt": { - "type": "string", - "format": "date-time" - }, - "taskIdentifier": { - "type": "string", - "nullable": true - }, - "notableId": { - "type": "string", - "format": "guid", - "nullable": true - }, - "notableType": { - "type": "string", - "nullable": true - }, - "project": { - "nullable": true, - "oneOf": [ - { - "$ref": "#/components/schemas/Project" - } - ] - }, - "user": { - "nullable": true, - "oneOf": [ - { - "$ref": "#/components/schemas/User" - } - ] - } - } - }, - "NoteId": { - "type": "object", - "additionalProperties": false, - "properties": { - "value": { - "type": "string", - "format": "guid" - } - } - }, - "Contact": { - "type": "object", - "additionalProperties": false, - "properties": { - "id": { - "$ref": "#/components/schemas/ContactId" - }, - "projectId": { - "nullable": true, - "oneOf": [ - { - "$ref": "#/components/schemas/ProjectId" - } - ] - }, - "name": { - "type": "string" - }, - "title": { - "type": "string" - }, - "email": { - "type": "string", - "nullable": true - }, - "phone": { - "type": "string", - "nullable": true - }, - "createdAt": { - "type": "string", - "format": "date-time" - }, - "updatedAt": { - "type": "string", - "format": "date-time" - }, - "category": { - "type": "integer", - "format": "int32" - }, - "organisationName": { - "type": "string", - "nullable": true - }, - "type": { - "type": "string", - "nullable": true - }, - "localAuthorityId": { - "nullable": true, - "oneOf": [ - { - "$ref": "#/components/schemas/LocalAuthorityId" - } - ] - }, - "establishmentUrn": { - "type": "integer", - "format": "int32", - "nullable": true - }, - "project": { - "nullable": true, - "oneOf": [ - { - "$ref": "#/components/schemas/Project" - } - ] - } - } - }, - "LocalAuthorityId": { - "type": "object", - "additionalProperties": false, - "properties": { - "value": { - "type": "string", - "format": "guid" - } - } - }, - "BaseAggregateRoot": { - "type": "object", - "x-abstract": true, - "additionalProperties": false, - "properties": { - "domainEvents": { - "type": "array", - "items": { - "$ref": "#/components/schemas/IDomainEvent" - } - } - } - }, - "IDomainEvent": { - "type": "object", - "x-abstract": true, - "additionalProperties": false, - "properties": { - "occurredOn": { - "type": "string", - "format": "date-time" - } - } - }, "GetProjectByUrnQuery": { "type": "object", "additionalProperties": false, diff --git a/src/Core/Dfe.Complete.Domain/Entities/Note.cs b/src/Core/Dfe.Complete.Domain/Entities/Note.cs index 7dec912..d94c87b 100644 --- a/src/Core/Dfe.Complete.Domain/Entities/Note.cs +++ b/src/Core/Dfe.Complete.Domain/Entities/Note.cs @@ -1,6 +1,7 @@ -using Dfe.Complete.Domain.ValueObjects; +using Dfe.Complete.Domain.Entities; +using Dfe.Complete.Domain.ValueObjects; -namespace Dfe.Complete.Domain.Entities; +namespace Dfe.Complete.Infrastructure.Models; public class Note { diff --git a/src/Tests/Dfe.Complete.Application.Tests/QueryHandlers/Project/GetProjectByUrnQueryHandlerTests.cs b/src/Tests/Dfe.Complete.Application.Tests/QueryHandlers/Project/GetProjectByUrnQueryHandlerTests.cs index 267d647..da08094 100644 --- a/src/Tests/Dfe.Complete.Application.Tests/QueryHandlers/Project/GetProjectByUrnQueryHandlerTests.cs +++ b/src/Tests/Dfe.Complete.Application.Tests/QueryHandlers/Project/GetProjectByUrnQueryHandlerTests.cs @@ -7,6 +7,7 @@ using Dfe.Complete.Application.Common.Models; using DfE.CoreLibs.Caching.Helpers; using Dfe.Complete.Application.Projects.Queries.GetProject; +using Dfe.Complete.Domain.ValueObjects; namespace Dfe.Complete.Application.Tests.QueryHandlers.Project { @@ -25,7 +26,9 @@ GetProjectByUrnQuery command var urn = 123456; - var project = Domain.Entities.Project.CreateConversionProject(new Domain.ValueObjects.Urn(urn), + var project = Domain.Entities.Project.CreateConversionProject( + new ProjectId(Guid.NewGuid()), + new Domain.ValueObjects.Urn(urn), now, now, Domain.Enums.TaskType.Conversion, @@ -41,10 +44,12 @@ GetProjectByUrnQuery command "", "", "", + null, "", - DateOnly.MinValue, - false, - ""); + null, + null, + null, + null); var cacheKey = $"Project_{CacheKeyHelper.GenerateHashedCacheKey(urn.ToString())}"; diff --git a/src/Tests/Dfe.Complete.Domain.Tests/Aggregates/ProjectTests.cs b/src/Tests/Dfe.Complete.Domain.Tests/Aggregates/ProjectTests.cs index 1ada050..a2ed8e4 100644 --- a/src/Tests/Dfe.Complete.Domain.Tests/Aggregates/ProjectTests.cs +++ b/src/Tests/Dfe.Complete.Domain.Tests/Aggregates/ProjectTests.cs @@ -1,3 +1,4 @@ +using Dfe.Complete.Infrastructure.Models; using DfE.CoreLibs.Testing.AutoFixture.Attributes; using Dfe.Complete.Tests.Common.Customizations.Models; using DfE.CoreLibs.Testing.AutoFixture.Customizations; @@ -9,7 +10,6 @@ using Ukprn = Dfe.Complete.Domain.ValueObjects.Ukprn; using Urn = Dfe.Complete.Domain.ValueObjects.Urn; using User = Dfe.Complete.Domain.Entities.User; -using Note = Dfe.Complete.Domain.Entities.Note; namespace Dfe.Complete.Domain.Tests.Aggregates { diff --git a/src/Tests/Dfe.Complete.Tests.Common/Customizations/Models/ProjectCustomization.cs b/src/Tests/Dfe.Complete.Tests.Common/Customizations/Models/ProjectCustomization.cs index af5fe54..625d59a 100644 --- a/src/Tests/Dfe.Complete.Tests.Common/Customizations/Models/ProjectCustomization.cs +++ b/src/Tests/Dfe.Complete.Tests.Common/Customizations/Models/ProjectCustomization.cs @@ -2,6 +2,7 @@ using Dfe.Complete.Domain.Entities; using Dfe.Complete.Domain.Enums; using Dfe.Complete.Domain.ValueObjects; +using Dfe.Complete.Infrastructure.Models; namespace Dfe.Complete.Tests.Common.Customizations.Models { From d53ed98a45ae86ecbc158734879807541535bfd8 Mon Sep 17 00:00:00 2001 From: Zach Hodges Date: Fri, 3 Jan 2025 21:52:35 +0000 Subject: [PATCH 14/24] refactor adding note out of entity --- .../Commands/CreateProject/CreateProject.cs | 20 +++++++++---------- src/Core/Dfe.Complete.Domain/Entities/Note.cs | 5 ++--- .../Dfe.Complete.Domain/Entities/Project.cs | 10 ---------- .../CreateProjectCommandHandlerTests.cs | 1 - .../GetProjectByUrnQueryHandlerTests.cs | 1 - .../Aggregates/ProjectTests.cs | 1 + 6 files changed, 12 insertions(+), 26 deletions(-) diff --git a/src/Core/Dfe.Complete.Application/Projects/Commands/CreateProject/CreateProject.cs b/src/Core/Dfe.Complete.Application/Projects/Commands/CreateProject/CreateProject.cs index 404c7b2..7951786 100644 --- a/src/Core/Dfe.Complete.Application/Projects/Commands/CreateProject/CreateProject.cs +++ b/src/Core/Dfe.Complete.Application/Projects/Commands/CreateProject/CreateProject.cs @@ -46,16 +46,6 @@ await projectRepository.GetProjectGroupIdByIdentifierAsync(request.GroupReferenc string team; DateTime? assignedAt = null; User? assignedTo = null; - Note? note = null; - - if (!string.IsNullOrEmpty(request.HandoverComments)) - { - note = new Note - { - Id = new NoteId(Guid.NewGuid()), CreatedAt = createdAt, Body = request.HandoverComments, - ProjectId = projectId, TaskIdentifier = "handover", UserId = request.RegionalDeliveryOfficer?.Id - }; - } if (request.HandingOverToRegionalCaseworkService) { @@ -90,9 +80,17 @@ await projectRepository.GetProjectGroupIdByIdentifierAsync(request.GroupReferenc team, assignedAt, assignedTo, - note, request.RegionalDeliveryOfficer); + if (!string.IsNullOrEmpty(request.HandoverComments)) + { + project.Notes.Add(new Note + { + Id = new NoteId(Guid.NewGuid()), CreatedAt = createdAt, Body = request.HandoverComments, + ProjectId = projectId, TaskIdentifier = "handover", UserId = request.RegionalDeliveryOfficer?.Id + }); + } + await conversionTaskRepository.AddAsync(conversionTask, cancellationToken); await projectRepository.AddAsync(project, cancellationToken); diff --git a/src/Core/Dfe.Complete.Domain/Entities/Note.cs b/src/Core/Dfe.Complete.Domain/Entities/Note.cs index d94c87b..7dec912 100644 --- a/src/Core/Dfe.Complete.Domain/Entities/Note.cs +++ b/src/Core/Dfe.Complete.Domain/Entities/Note.cs @@ -1,7 +1,6 @@ -using Dfe.Complete.Domain.Entities; -using Dfe.Complete.Domain.ValueObjects; +using Dfe.Complete.Domain.ValueObjects; -namespace Dfe.Complete.Infrastructure.Models; +namespace Dfe.Complete.Domain.Entities; public class Note { diff --git a/src/Core/Dfe.Complete.Domain/Entities/Project.cs b/src/Core/Dfe.Complete.Domain/Entities/Project.cs index 557202c..053661f 100644 --- a/src/Core/Dfe.Complete.Domain/Entities/Project.cs +++ b/src/Core/Dfe.Complete.Domain/Entities/Project.cs @@ -117,7 +117,6 @@ public Project(ProjectId id, string team, DateTime? assignedAt, User? assignedTo, - Note? note, User? regionalDeliveryOfficer) { Id = id ?? throw new ArgumentNullException(nameof(id)); @@ -142,7 +141,6 @@ public Project(ProjectId id, Region = GetRegionCharValue(region); AssignTo(assignedTo, assignedAt); - AddNote(note); } public static Project CreateConversionProject( @@ -167,7 +165,6 @@ public static Project CreateConversionProject( string team, DateTime? assignedAt, User? assignedTo, - Note? note, User? regionalDeliveryOfficer) { var project = new Project( @@ -192,7 +189,6 @@ public static Project CreateConversionProject( team, assignedAt, assignedTo, - note, regionalDeliveryOfficer); project.AddDomainEvent(new ProjectCreatedEvent(project)); @@ -210,10 +206,4 @@ private void AssignTo(User? user, DateTime? assignedAt) AssignedTo = user; AssignedAt = assignedAt; } - - private void AddNote(Note? note) - { - if (note != null) - Notes.Add(note); - } } \ No newline at end of file diff --git a/src/Tests/Dfe.Complete.Application.Tests/CommandHandlers/Project/CreateProjectCommandHandlerTests.cs b/src/Tests/Dfe.Complete.Application.Tests/CommandHandlers/Project/CreateProjectCommandHandlerTests.cs index a2e8273..8f928fc 100644 --- a/src/Tests/Dfe.Complete.Application.Tests/CommandHandlers/Project/CreateProjectCommandHandlerTests.cs +++ b/src/Tests/Dfe.Complete.Application.Tests/CommandHandlers/Project/CreateProjectCommandHandlerTests.cs @@ -42,7 +42,6 @@ CreateConversionProjectCommand command "", null, null, - null, null); // Arrange diff --git a/src/Tests/Dfe.Complete.Application.Tests/QueryHandlers/Project/GetProjectByUrnQueryHandlerTests.cs b/src/Tests/Dfe.Complete.Application.Tests/QueryHandlers/Project/GetProjectByUrnQueryHandlerTests.cs index da08094..e3b04eb 100644 --- a/src/Tests/Dfe.Complete.Application.Tests/QueryHandlers/Project/GetProjectByUrnQueryHandlerTests.cs +++ b/src/Tests/Dfe.Complete.Application.Tests/QueryHandlers/Project/GetProjectByUrnQueryHandlerTests.cs @@ -48,7 +48,6 @@ GetProjectByUrnQuery command "", null, null, - null, null); var cacheKey = $"Project_{CacheKeyHelper.GenerateHashedCacheKey(urn.ToString())}"; diff --git a/src/Tests/Dfe.Complete.Domain.Tests/Aggregates/ProjectTests.cs b/src/Tests/Dfe.Complete.Domain.Tests/Aggregates/ProjectTests.cs index a2ed8e4..1d34aa5 100644 --- a/src/Tests/Dfe.Complete.Domain.Tests/Aggregates/ProjectTests.cs +++ b/src/Tests/Dfe.Complete.Domain.Tests/Aggregates/ProjectTests.cs @@ -1,3 +1,4 @@ +using Dfe.Complete.Domain.Entities; using Dfe.Complete.Infrastructure.Models; using DfE.CoreLibs.Testing.AutoFixture.Attributes; using Dfe.Complete.Tests.Common.Customizations.Models; From 854952689016fdfc5ba0c901f1555293ef06db64 Mon Sep 17 00:00:00 2001 From: Zach Hodges Date: Thu, 9 Jan 2025 11:36:46 +0000 Subject: [PATCH 15/24] Refactor - get user in app layer by adId. Test now failing for different reason --- .../Generated/Contracts.g.cs | 432 +++++++---------- .../Generated/swagger.json | 450 ++++++++---------- .../Commands/CreateProject/CreateProject.cs | 26 +- .../Dfe.Complete.Domain/Entities/Project.cs | 29 +- .../Repositories/ICompleteRepository.cs | 16 +- .../Repositories/CompleteRepository.cs | 4 +- .../Conversion/CreateNewProject.cshtml.cs | 23 +- ...teConversionProjectCommandCustomization.cs | 7 +- .../Models/ProjectCustomization.cs | 5 +- 9 files changed, 407 insertions(+), 585 deletions(-) diff --git a/src/Api/Dfe.Complete.Api.Client/Generated/Contracts.g.cs b/src/Api/Dfe.Complete.Api.Client/Generated/Contracts.g.cs index aefe023..fd6b066 100644 --- a/src/Api/Dfe.Complete.Api.Client/Generated/Contracts.g.cs +++ b/src/Api/Dfe.Complete.Api.Client/Generated/Contracts.g.cs @@ -178,10 +178,6 @@ public partial class CreateConversionProjectCommand [Newtonsoft.Json.JsonProperty("incomingTrustUkprn", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] public Ukprn? IncomingTrustUkprn { get; set; } = default!; - [Newtonsoft.Json.JsonProperty("region", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))] - public Region? Region { get; set; } = default!; - [Newtonsoft.Json.JsonProperty("isDueTo2Ri", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] public bool? IsDueTo2Ri { get; set; } = default!; @@ -210,12 +206,8 @@ public partial class CreateConversionProjectCommand [Newtonsoft.Json.JsonProperty("handoverComments", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] public string? HandoverComments { get; set; } = default!; - [Newtonsoft.Json.JsonProperty("regionalDeliveryOfficer", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public User? RegionalDeliveryOfficer { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("team", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))] - public ProjectTeam? Team { get; set; } = default!; + [Newtonsoft.Json.JsonProperty("userAdId", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? UserAdId { get; set; } = default!; public string ToJson() { @@ -274,213 +266,6 @@ public static Ukprn FromJson(string data) } - [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "14.1.0.0 (NJsonSchema v11.0.2.0 (Newtonsoft.Json v13.0.0.0))")] - public enum Region - { - - [System.Runtime.Serialization.EnumMember(Value = @"NorthEast")] - NorthEast = 0, - - [System.Runtime.Serialization.EnumMember(Value = @"NorthWest")] - NorthWest = 1, - - [System.Runtime.Serialization.EnumMember(Value = @"YorkshireAndTheHumber")] - YorkshireAndTheHumber = 2, - - [System.Runtime.Serialization.EnumMember(Value = @"EastMidlands")] - EastMidlands = 3, - - [System.Runtime.Serialization.EnumMember(Value = @"WestMidlands")] - WestMidlands = 4, - - [System.Runtime.Serialization.EnumMember(Value = @"EastOfEngland")] - EastOfEngland = 5, - - [System.Runtime.Serialization.EnumMember(Value = @"London")] - London = 6, - - [System.Runtime.Serialization.EnumMember(Value = @"SouthEast")] - SouthEast = 7, - - [System.Runtime.Serialization.EnumMember(Value = @"SouthWest")] - SouthWest = 8, - - } - - [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "14.1.0.0 (NJsonSchema v11.0.2.0 (Newtonsoft.Json v13.0.0.0))")] - public partial class User - { - [Newtonsoft.Json.JsonProperty("id", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public UserId? Id { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("email", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public string? Email { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("createdAt", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public System.DateTime? CreatedAt { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("updatedAt", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public System.DateTime? UpdatedAt { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("manageTeam", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public bool? ManageTeam { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("addNewProject", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public bool? AddNewProject { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("firstName", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public string? FirstName { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("lastName", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public string? LastName { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("activeDirectoryUserId", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public string? ActiveDirectoryUserId { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("assignToProject", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public bool? AssignToProject { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("manageUserAccounts", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public bool? ManageUserAccounts { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("activeDirectoryUserGroupIds", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public string? ActiveDirectoryUserGroupIds { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("team", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public string? Team { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("deactivatedAt", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public System.DateTime? DeactivatedAt { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("manageConversionUrns", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public bool? ManageConversionUrns { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("manageLocalAuthorities", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public bool? ManageLocalAuthorities { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("latestSession", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public System.DateTime? LatestSession { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("notes", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public System.Collections.Generic.List? Notes { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("projectAssignedTos", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public System.Collections.Generic.List? ProjectAssignedTos { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("projectCaseworkers", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public System.Collections.Generic.List? ProjectCaseworkers { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("projectRegionalDeliveryOfficers", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public System.Collections.Generic.List? ProjectRegionalDeliveryOfficers { get; set; } = default!; - - public string ToJson() - { - - return Newtonsoft.Json.JsonConvert.SerializeObject(this, new Newtonsoft.Json.JsonSerializerSettings()); - - } - public static User FromJson(string data) - { - - return Newtonsoft.Json.JsonConvert.DeserializeObject(data, new Newtonsoft.Json.JsonSerializerSettings()); - - } - - } - - [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "14.1.0.0 (NJsonSchema v11.0.2.0 (Newtonsoft.Json v13.0.0.0))")] - public partial class UserId - { - [Newtonsoft.Json.JsonProperty("value", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public System.Guid? Value { get; set; } = default!; - - public string ToJson() - { - - return Newtonsoft.Json.JsonConvert.SerializeObject(this, new Newtonsoft.Json.JsonSerializerSettings()); - - } - public static UserId FromJson(string data) - { - - return Newtonsoft.Json.JsonConvert.DeserializeObject(data, new Newtonsoft.Json.JsonSerializerSettings()); - - } - - } - - [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "14.1.0.0 (NJsonSchema v11.0.2.0 (Newtonsoft.Json v13.0.0.0))")] - public partial class Note - { - [Newtonsoft.Json.JsonProperty("id", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public NoteId? Id { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("body", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public string? Body { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("projectId", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public ProjectId? ProjectId { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("userId", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public UserId? UserId { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("createdAt", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public System.DateTime? CreatedAt { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("updatedAt", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public System.DateTime? UpdatedAt { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("taskIdentifier", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public string? TaskIdentifier { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("notableId", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public System.Guid? NotableId { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("notableType", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public string? NotableType { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("project", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public Project? Project { get; set; } = default!; - - [Newtonsoft.Json.JsonProperty("user", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public User? User { get; set; } = default!; - - public string ToJson() - { - - return Newtonsoft.Json.JsonConvert.SerializeObject(this, new Newtonsoft.Json.JsonSerializerSettings()); - - } - public static Note FromJson(string data) - { - - return Newtonsoft.Json.JsonConvert.DeserializeObject(data, new Newtonsoft.Json.JsonSerializerSettings()); - - } - - } - - [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "14.1.0.0 (NJsonSchema v11.0.2.0 (Newtonsoft.Json v13.0.0.0))")] - public partial class NoteId - { - [Newtonsoft.Json.JsonProperty("value", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] - public System.Guid? Value { get; set; } = default!; - - public string ToJson() - { - - return Newtonsoft.Json.JsonConvert.SerializeObject(this, new Newtonsoft.Json.JsonSerializerSettings()); - - } - public static NoteId FromJson(string data) - { - - return Newtonsoft.Json.JsonConvert.DeserializeObject(data, new Newtonsoft.Json.JsonSerializerSettings()); - - } - - } - [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "14.1.0.0 (NJsonSchema v11.0.2.0 (Newtonsoft.Json v13.0.0.0))")] public partial class Project : BaseAggregateRoot { @@ -629,6 +414,27 @@ public static Project FromJson(string data) } + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "14.1.0.0 (NJsonSchema v11.0.2.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class UserId + { + [Newtonsoft.Json.JsonProperty("value", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Guid? Value { get; set; } = default!; + + public string ToJson() + { + + return Newtonsoft.Json.JsonConvert.SerializeObject(this, new Newtonsoft.Json.JsonSerializerSettings()); + + } + public static UserId FromJson(string data) + { + + return Newtonsoft.Json.JsonConvert.DeserializeObject(data, new Newtonsoft.Json.JsonSerializerSettings()); + + } + + } + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "14.1.0.0 (NJsonSchema v11.0.2.0 (Newtonsoft.Json v13.0.0.0))")] public enum ProjectType { @@ -674,6 +480,159 @@ public static ContactId FromJson(string data) } + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "14.1.0.0 (NJsonSchema v11.0.2.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class User + { + [Newtonsoft.Json.JsonProperty("id", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public UserId? Id { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("email", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Email { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("createdAt", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.DateTime? CreatedAt { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("updatedAt", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.DateTime? UpdatedAt { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("manageTeam", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public bool? ManageTeam { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("addNewProject", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public bool? AddNewProject { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("firstName", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? FirstName { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("lastName", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? LastName { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("activeDirectoryUserId", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? ActiveDirectoryUserId { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("assignToProject", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public bool? AssignToProject { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("manageUserAccounts", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public bool? ManageUserAccounts { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("activeDirectoryUserGroupIds", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? ActiveDirectoryUserGroupIds { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("team", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Team { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("deactivatedAt", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.DateTime? DeactivatedAt { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("manageConversionUrns", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public bool? ManageConversionUrns { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("manageLocalAuthorities", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public bool? ManageLocalAuthorities { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("latestSession", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.DateTime? LatestSession { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("notes", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Collections.Generic.List? Notes { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("projectAssignedTos", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Collections.Generic.List? ProjectAssignedTos { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("projectCaseworkers", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Collections.Generic.List? ProjectCaseworkers { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("projectRegionalDeliveryOfficers", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Collections.Generic.List? ProjectRegionalDeliveryOfficers { get; set; } = default!; + + public string ToJson() + { + + return Newtonsoft.Json.JsonConvert.SerializeObject(this, new Newtonsoft.Json.JsonSerializerSettings()); + + } + public static User FromJson(string data) + { + + return Newtonsoft.Json.JsonConvert.DeserializeObject(data, new Newtonsoft.Json.JsonSerializerSettings()); + + } + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "14.1.0.0 (NJsonSchema v11.0.2.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class Note + { + [Newtonsoft.Json.JsonProperty("id", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public NoteId? Id { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("body", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? Body { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("projectId", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public ProjectId? ProjectId { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("userId", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public UserId? UserId { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("createdAt", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.DateTime? CreatedAt { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("updatedAt", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.DateTime? UpdatedAt { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("taskIdentifier", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? TaskIdentifier { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("notableId", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Guid? NotableId { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("notableType", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public string? NotableType { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("project", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public Project? Project { get; set; } = default!; + + [Newtonsoft.Json.JsonProperty("user", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public User? User { get; set; } = default!; + + public string ToJson() + { + + return Newtonsoft.Json.JsonConvert.SerializeObject(this, new Newtonsoft.Json.JsonSerializerSettings()); + + } + public static Note FromJson(string data) + { + + return Newtonsoft.Json.JsonConvert.DeserializeObject(data, new Newtonsoft.Json.JsonSerializerSettings()); + + } + + } + + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "14.1.0.0 (NJsonSchema v11.0.2.0 (Newtonsoft.Json v13.0.0.0))")] + public partial class NoteId + { + [Newtonsoft.Json.JsonProperty("value", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] + public System.Guid? Value { get; set; } = default!; + + public string ToJson() + { + + return Newtonsoft.Json.JsonConvert.SerializeObject(this, new Newtonsoft.Json.JsonSerializerSettings()); + + } + public static NoteId FromJson(string data) + { + + return Newtonsoft.Json.JsonConvert.DeserializeObject(data, new Newtonsoft.Json.JsonSerializerSettings()); + + } + + } + [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "14.1.0.0 (NJsonSchema v11.0.2.0 (Newtonsoft.Json v13.0.0.0))")] public partial class Contact { @@ -797,45 +756,6 @@ public static IDomainEvent FromJson(string data) } - [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "14.1.0.0 (NJsonSchema v11.0.2.0 (Newtonsoft.Json v13.0.0.0))")] - public enum ProjectTeam - { - - [System.Runtime.Serialization.EnumMember(Value = @"RegionalCaseWorkerServices")] - RegionalCaseWorkerServices = 0, - - [System.Runtime.Serialization.EnumMember(Value = @"ServiceSupport")] - ServiceSupport = 1, - - [System.Runtime.Serialization.EnumMember(Value = @"London")] - London = 2, - - [System.Runtime.Serialization.EnumMember(Value = @"SouthEast")] - SouthEast = 3, - - [System.Runtime.Serialization.EnumMember(Value = @"YorkshireAndTheHumber")] - YorkshireAndTheHumber = 4, - - [System.Runtime.Serialization.EnumMember(Value = @"NorthWest")] - NorthWest = 5, - - [System.Runtime.Serialization.EnumMember(Value = @"EastOfEngland")] - EastOfEngland = 6, - - [System.Runtime.Serialization.EnumMember(Value = @"WestMidlands")] - WestMidlands = 7, - - [System.Runtime.Serialization.EnumMember(Value = @"NorthEast")] - NorthEast = 8, - - [System.Runtime.Serialization.EnumMember(Value = @"SouthWest")] - SouthWest = 9, - - [System.Runtime.Serialization.EnumMember(Value = @"EastMidlands")] - EastMidlands = 10, - - } - [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "14.1.0.0 (NJsonSchema v11.0.2.0 (Newtonsoft.Json v13.0.0.0))")] public partial class GetProjectByUrnQuery { diff --git a/src/Api/Dfe.Complete.Api.Client/Generated/swagger.json b/src/Api/Dfe.Complete.Api.Client/Generated/swagger.json index 10f92f1..2017e07 100644 --- a/src/Api/Dfe.Complete.Api.Client/Generated/swagger.json +++ b/src/Api/Dfe.Complete.Api.Client/Generated/swagger.json @@ -261,14 +261,6 @@ "incomingTrustUkprn": { "$ref": "#/components/schemas/Ukprn" }, - "region": { - "nullable": true, - "oneOf": [ - { - "$ref": "#/components/schemas/Region" - } - ] - }, "isDueTo2Ri": { "type": "boolean" }, @@ -297,21 +289,9 @@ "handoverComments": { "type": "string" }, - "regionalDeliveryOfficer": { - "nullable": true, - "oneOf": [ - { - "$ref": "#/components/schemas/User" - } - ] - }, - "team": { - "nullable": true, - "oneOf": [ - { - "$ref": "#/components/schemas/ProjectTeam" - } - ] + "userAdId": { + "type": "string", + "nullable": true } } }, @@ -335,216 +315,6 @@ } } }, - "Region": { - "type": "string", - "description": "", - "x-enumNames": [ - "NorthEast", - "NorthWest", - "YorkshireAndTheHumber", - "EastMidlands", - "WestMidlands", - "EastOfEngland", - "London", - "SouthEast", - "SouthWest" - ], - "enum": [ - "NorthEast", - "NorthWest", - "YorkshireAndTheHumber", - "EastMidlands", - "WestMidlands", - "EastOfEngland", - "London", - "SouthEast", - "SouthWest" - ] - }, - "User": { - "type": "object", - "additionalProperties": false, - "properties": { - "id": { - "$ref": "#/components/schemas/UserId" - }, - "email": { - "type": "string", - "nullable": true - }, - "createdAt": { - "type": "string", - "format": "date-time" - }, - "updatedAt": { - "type": "string", - "format": "date-time" - }, - "manageTeam": { - "type": "boolean", - "nullable": true - }, - "addNewProject": { - "type": "boolean" - }, - "firstName": { - "type": "string", - "nullable": true - }, - "lastName": { - "type": "string", - "nullable": true - }, - "activeDirectoryUserId": { - "type": "string", - "nullable": true - }, - "assignToProject": { - "type": "boolean", - "nullable": true - }, - "manageUserAccounts": { - "type": "boolean", - "nullable": true - }, - "activeDirectoryUserGroupIds": { - "type": "string", - "nullable": true - }, - "team": { - "type": "string", - "nullable": true - }, - "deactivatedAt": { - "type": "string", - "format": "date-time", - "nullable": true - }, - "manageConversionUrns": { - "type": "boolean", - "nullable": true - }, - "manageLocalAuthorities": { - "type": "boolean", - "nullable": true - }, - "latestSession": { - "type": "string", - "format": "date-time", - "nullable": true - }, - "notes": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Note" - } - }, - "projectAssignedTos": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Project" - } - }, - "projectCaseworkers": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Project" - } - }, - "projectRegionalDeliveryOfficers": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Project" - } - } - } - }, - "UserId": { - "type": "object", - "additionalProperties": false, - "properties": { - "value": { - "type": "string", - "format": "guid" - } - } - }, - "Note": { - "type": "object", - "additionalProperties": false, - "properties": { - "id": { - "$ref": "#/components/schemas/NoteId" - }, - "body": { - "type": "string", - "nullable": true - }, - "projectId": { - "nullable": true, - "oneOf": [ - { - "$ref": "#/components/schemas/ProjectId" - } - ] - }, - "userId": { - "nullable": true, - "oneOf": [ - { - "$ref": "#/components/schemas/UserId" - } - ] - }, - "createdAt": { - "type": "string", - "format": "date-time" - }, - "updatedAt": { - "type": "string", - "format": "date-time" - }, - "taskIdentifier": { - "type": "string", - "nullable": true - }, - "notableId": { - "type": "string", - "format": "guid", - "nullable": true - }, - "notableType": { - "type": "string", - "nullable": true - }, - "project": { - "nullable": true, - "oneOf": [ - { - "$ref": "#/components/schemas/Project" - } - ] - }, - "user": { - "nullable": true, - "oneOf": [ - { - "$ref": "#/components/schemas/User" - } - ] - } - } - }, - "NoteId": { - "type": "object", - "additionalProperties": false, - "properties": { - "value": { - "type": "string", - "format": "guid" - } - } - }, "Project": { "allOf": [ { @@ -799,6 +569,16 @@ } ] }, + "UserId": { + "type": "object", + "additionalProperties": false, + "properties": { + "value": { + "type": "string", + "format": "guid" + } + } + }, "ProjectType": { "type": "string", "description": "", @@ -833,6 +613,180 @@ } } }, + "User": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "$ref": "#/components/schemas/UserId" + }, + "email": { + "type": "string", + "nullable": true + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + }, + "manageTeam": { + "type": "boolean", + "nullable": true + }, + "addNewProject": { + "type": "boolean" + }, + "firstName": { + "type": "string", + "nullable": true + }, + "lastName": { + "type": "string", + "nullable": true + }, + "activeDirectoryUserId": { + "type": "string", + "nullable": true + }, + "assignToProject": { + "type": "boolean", + "nullable": true + }, + "manageUserAccounts": { + "type": "boolean", + "nullable": true + }, + "activeDirectoryUserGroupIds": { + "type": "string", + "nullable": true + }, + "team": { + "type": "string", + "nullable": true + }, + "deactivatedAt": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "manageConversionUrns": { + "type": "boolean", + "nullable": true + }, + "manageLocalAuthorities": { + "type": "boolean", + "nullable": true + }, + "latestSession": { + "type": "string", + "format": "date-time", + "nullable": true + }, + "notes": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Note" + } + }, + "projectAssignedTos": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Project" + } + }, + "projectCaseworkers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Project" + } + }, + "projectRegionalDeliveryOfficers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Project" + } + } + } + }, + "Note": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "$ref": "#/components/schemas/NoteId" + }, + "body": { + "type": "string", + "nullable": true + }, + "projectId": { + "nullable": true, + "oneOf": [ + { + "$ref": "#/components/schemas/ProjectId" + } + ] + }, + "userId": { + "nullable": true, + "oneOf": [ + { + "$ref": "#/components/schemas/UserId" + } + ] + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + }, + "taskIdentifier": { + "type": "string", + "nullable": true + }, + "notableId": { + "type": "string", + "format": "guid", + "nullable": true + }, + "notableType": { + "type": "string", + "nullable": true + }, + "project": { + "nullable": true, + "oneOf": [ + { + "$ref": "#/components/schemas/Project" + } + ] + }, + "user": { + "nullable": true, + "oneOf": [ + { + "$ref": "#/components/schemas/User" + } + ] + } + } + }, + "NoteId": { + "type": "object", + "additionalProperties": false, + "properties": { + "value": { + "type": "string", + "format": "guid" + } + } + }, "Contact": { "type": "object", "additionalProperties": false, @@ -939,36 +893,6 @@ } } }, - "ProjectTeam": { - "type": "string", - "description": "", - "x-enumNames": [ - "RegionalCaseWorkerServices", - "ServiceSupport", - "London", - "SouthEast", - "YorkshireAndTheHumber", - "NorthWest", - "EastOfEngland", - "WestMidlands", - "NorthEast", - "SouthWest", - "EastMidlands" - ], - "enum": [ - "RegionalCaseWorkerServices", - "ServiceSupport", - "London", - "SouthEast", - "YorkshireAndTheHumber", - "NorthWest", - "EastOfEngland", - "WestMidlands", - "NorthEast", - "SouthWest", - "EastMidlands" - ] - }, "GetProjectByUrnQuery": { "type": "object", "additionalProperties": false, diff --git a/src/Core/Dfe.Complete.Application/Projects/Commands/CreateProject/CreateProject.cs b/src/Core/Dfe.Complete.Application/Projects/Commands/CreateProject/CreateProject.cs index 7951786..3a96b7a 100644 --- a/src/Core/Dfe.Complete.Application/Projects/Commands/CreateProject/CreateProject.cs +++ b/src/Core/Dfe.Complete.Application/Projects/Commands/CreateProject/CreateProject.cs @@ -13,7 +13,6 @@ public record CreateConversionProjectCommand( DateOnly SignificantDate, bool IsSignificantDateProvisional, Ukprn IncomingTrustUkprn, - Region? Region, bool IsDueTo2Ri, bool HasAcademyOrderBeenIssued, DateOnly AdvisoryBoardDate, @@ -23,8 +22,7 @@ public record CreateConversionProjectCommand( string GroupReferenceNumber, bool HandingOverToRegionalCaseworkService, string HandoverComments, - User? RegionalDeliveryOfficer, - ProjectTeam? Team) : IRequest; + string? UserAdId) : IRequest; public class CreateConversionProjectCommandHandler( ICompleteRepository projectRepository, @@ -33,6 +31,12 @@ public class CreateConversionProjectCommandHandler( { public async Task Handle(CreateConversionProjectCommand request, CancellationToken cancellationToken) { + var user = await projectRepository.GetUserByAdId(request.UserAdId, cancellationToken); + var userTeam = user?.Team; + + var projectTeam = EnumExtensions.FromDescription(userTeam); + var region = EnumMapper.MapTeamToRegion(projectTeam); + var createdAt = DateTime.UtcNow; var conversionTaskId = Guid.NewGuid(); var projectId = new ProjectId(Guid.NewGuid()); @@ -53,9 +57,9 @@ await projectRepository.GetProjectGroupIdByIdentifierAsync(request.GroupReferenc } else { - team = request.Team.ToDescription(); + team = projectTeam.ToDescription(); assignedAt = DateTime.UtcNow; - assignedTo = request.RegionalDeliveryOfficer; + assignedTo = user; } var project = Project.CreateConversionProject( @@ -69,7 +73,7 @@ await projectRepository.GetProjectGroupIdByIdentifierAsync(request.GroupReferenc request.SignificantDate, request.IsSignificantDateProvisional, request.IncomingTrustUkprn, - request.Region, + region, request.IsDueTo2Ri, request.HasAcademyOrderBeenIssued, request.AdvisoryBoardDate, @@ -77,17 +81,17 @@ await projectRepository.GetProjectGroupIdByIdentifierAsync(request.GroupReferenc request.EstablishmentSharepointLink, request.IncomingTrustSharepointLink, groupId?.Value, - team, - assignedAt, - assignedTo, - request.RegionalDeliveryOfficer); + team, + user?.Id, + assignedTo, + assignedAt); if (!string.IsNullOrEmpty(request.HandoverComments)) { project.Notes.Add(new Note { Id = new NoteId(Guid.NewGuid()), CreatedAt = createdAt, Body = request.HandoverComments, - ProjectId = projectId, TaskIdentifier = "handover", UserId = request.RegionalDeliveryOfficer?.Id + ProjectId = projectId, TaskIdentifier = "handover", UserId = user?.Id }); } diff --git a/src/Core/Dfe.Complete.Domain/Entities/Project.cs b/src/Core/Dfe.Complete.Domain/Entities/Project.cs index 053661f..99970d9 100644 --- a/src/Core/Dfe.Complete.Domain/Entities/Project.cs +++ b/src/Core/Dfe.Complete.Domain/Entities/Project.cs @@ -115,9 +115,9 @@ public Project(ProjectId id, string incomingTrustSharepointLink, Guid? groupId, string team, - DateTime? assignedAt, - User? assignedTo, - User? regionalDeliveryOfficer) + UserId? regionalDeliveryOfficerId, + User assignedTo, + DateTime? assignedAt) { Id = id ?? throw new ArgumentNullException(nameof(id)); Urn = urn ?? throw new ArgumentNullException(nameof(urn)); @@ -137,10 +137,11 @@ public Project(ProjectId id, IncomingTrustSharepointLink = incomingTrustSharepointLink; GroupId = groupId; Team = team; - RegionalDeliveryOfficerId = regionalDeliveryOfficer?.Id; + RegionalDeliveryOfficerId = regionalDeliveryOfficerId; Region = GetRegionCharValue(region); - AssignTo(assignedTo, assignedAt); + AssignedAt = assignedAt; + AssignedTo = assignedTo; } public static Project CreateConversionProject( @@ -162,10 +163,10 @@ public static Project CreateConversionProject( string establishmentSharepointLink, string incomingTrustSharepointLink, Guid? groupId, - string team, - DateTime? assignedAt, - User? assignedTo, - User? regionalDeliveryOfficer) + string team, + UserId? regionalDeliveryOfficerId, + User? assignedTo, + DateTime? assignedAt) { var project = new Project( Id, @@ -187,9 +188,7 @@ public static Project CreateConversionProject( incomingTrustSharepointLink, groupId, team, - assignedAt, - assignedTo, - regionalDeliveryOfficer); + regionalDeliveryOfficerId, assignedTo, assignedAt); project.AddDomainEvent(new ProjectCreatedEvent(project)); @@ -200,10 +199,4 @@ private static string GetRegionCharValue(Region? region) { return region != null ? ((char)region).ToString() : string.Empty; } - - private void AssignTo(User? user, DateTime? assignedAt) - { - AssignedTo = user; - AssignedAt = assignedAt; - } } \ No newline at end of file diff --git a/src/Core/Dfe.Complete.Domain/Interfaces/Repositories/ICompleteRepository.cs b/src/Core/Dfe.Complete.Domain/Interfaces/Repositories/ICompleteRepository.cs index 4a20eee..da2d958 100644 --- a/src/Core/Dfe.Complete.Domain/Interfaces/Repositories/ICompleteRepository.cs +++ b/src/Core/Dfe.Complete.Domain/Interfaces/Repositories/ICompleteRepository.cs @@ -2,13 +2,13 @@ using Dfe.Complete.Domain.Entities; using Dfe.Complete.Domain.ValueObjects; -namespace Dfe.Complete.Domain.Interfaces.Repositories +namespace Dfe.Complete.Domain.Interfaces.Repositories; + +public interface ICompleteRepository : IRepository + where TAggregate : class, IAggregateRoot { - public interface ICompleteRepository : IRepository - where TAggregate : class, IAggregateRoot - { - Task GetProjectGroupIdByIdentifierAsync(string groupIdentifier, CancellationToken cancellationToken); + Task GetProjectGroupIdByIdentifierAsync(string groupIdentifier, + CancellationToken cancellationToken); - Task GetUserByEmail(string? email, CancellationToken cancellationToken); - } -} + Task GetUserByAdId(string? userAdId, CancellationToken cancellationToken); +} \ No newline at end of file diff --git a/src/Core/Dfe.Complete.Infrastructure/Repositories/CompleteRepository.cs b/src/Core/Dfe.Complete.Infrastructure/Repositories/CompleteRepository.cs index a52c7c6..d7a06b0 100644 --- a/src/Core/Dfe.Complete.Infrastructure/Repositories/CompleteRepository.cs +++ b/src/Core/Dfe.Complete.Infrastructure/Repositories/CompleteRepository.cs @@ -25,11 +25,11 @@ public class CompleteRepository(CompleteContext dbContext) : Reposit return projectGroup?.Id; } - public async Task GetUserByEmail(string? email, CancellationToken cancellationToken) + public async Task GetUserByAdId(string? userAdId, CancellationToken cancellationToken) { return await _dbContext.Users .AsNoTracking() - .Where(u => u.Email == email) + .Where(u => u.ActiveDirectoryUserId == userAdId) .FirstOrDefaultAsync(cancellationToken); } } diff --git a/src/Frontend/Dfe.Complete/Pages/Projects/Conversion/CreateNewProject.cshtml.cs b/src/Frontend/Dfe.Complete/Pages/Projects/Conversion/CreateNewProject.cshtml.cs index 4c4622d..138d734 100644 --- a/src/Frontend/Dfe.Complete/Pages/Projects/Conversion/CreateNewProject.cshtml.cs +++ b/src/Frontend/Dfe.Complete/Pages/Projects/Conversion/CreateNewProject.cshtml.cs @@ -1,27 +1,21 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; -using System.Text.RegularExpressions; -using Dfe.Complete.Extensions; using Dfe.Complete.Validators; using Dfe.Complete.Services; using System.ComponentModel.DataAnnotations; using Dfe.Complete.Application.Projects.Commands.CreateProject; -using Dfe.Complete.Domain.Entities; -using Dfe.Complete.Domain.Enums; -using Dfe.Complete.Domain.Interfaces.Repositories; using MediatR; using Dfe.Complete.Domain.ValueObjects; using Microsoft.AspNetCore.Authorization; -using Dfe.Complete.Utils; namespace Dfe.Complete.Pages.Projects.Conversion { [Authorize(policy: "CanCreateProjects")] - public class CreateNewProjectModel(ISender sender, IErrorService errorService, ICompleteRepository completeRepository) : PageModel + public class CreateNewProjectModel(ISender sender, IErrorService errorService) : PageModel { [BindProperty] [Required] - [Urn] + // [Urn] [Display(Name = "Urn")] public string URN { get; set; } @@ -94,13 +88,8 @@ public async Task OnPost(CancellationToken cancellationToken) return Page(); } - var currentUser = await completeRepository.GetUserByEmail(User.Identity?.Name?.ToLower(), cancellationToken); - var userTeam = currentUser?.Team; - - var projectTeam = EnumExtensions.FromDescription(userTeam); + var userAdId = User.Claims.SingleOrDefault(c => c.Type.Contains("objectidentifier"))?.Value; - var region = EnumMapper.MapTeamToRegion(projectTeam); - var createProjectCommand = new CreateConversionProjectCommand( Urn: new Urn(int.Parse(URN)), SignificantDate: ProvisionalConversionDate.HasValue ? DateOnly.FromDateTime(ProvisionalConversionDate.Value) : default, @@ -109,15 +98,13 @@ public async Task OnPost(CancellationToken cancellationToken) EstablishmentSharepointLink: SchoolSharePointLink, //todo: is this correct? IsDueTo2Ri: IsDueTo2RI ?? false, AdvisoryBoardDate: AdvisoryBoardDate.HasValue ? DateOnly.FromDateTime(AdvisoryBoardDate.Value) : default, - Region: region, AdvisoryBoardConditions: AdvisoryBoardConditions, IncomingTrustUkprn: new Ukprn(int.Parse(UKPRN)), HasAcademyOrderBeenIssued: DirectiveAcademyOrder ?? default, GroupReferenceNumber: GroupReferenceNumber, + HandingOverToRegionalCaseworkService: IsHandingToRCS ?? default, HandoverComments: HandoverComments, - HandingOverToRegionalCaseworkService: IsHandingToRCS ?? default, - RegionalDeliveryOfficer: currentUser, - Team: projectTeam + UserAdId: userAdId ); var createResponse = await sender.Send(createProjectCommand, cancellationToken); diff --git a/src/Tests/Dfe.Complete.Tests.Common/Customizations/Commands/CreateConversionProjectCommandCustomization.cs b/src/Tests/Dfe.Complete.Tests.Common/Customizations/Commands/CreateConversionProjectCommandCustomization.cs index 032a4d3..013f467 100644 --- a/src/Tests/Dfe.Complete.Tests.Common/Customizations/Commands/CreateConversionProjectCommandCustomization.cs +++ b/src/Tests/Dfe.Complete.Tests.Common/Customizations/Commands/CreateConversionProjectCommandCustomization.cs @@ -28,15 +28,13 @@ public void Customize(IFixture fixture) var groupReferenceNumber = fixture.Create(); var handingOverToRegionalCaseworkService = fixture.Create(); var handoverComments = fixture.Create(); - var regionalDeliveryOfficer = fixture.Create(); - var team = fixture.Create(); + var userAdId = fixture.Create(); return new CreateConversionProjectCommand( urn, significantDate, isSignificantDateProvisional, incomingTrustUkprn, - region, isDueTo2Ri, hasAcademyOrderBeenIssued, advisoryBoardDate, @@ -46,8 +44,7 @@ public void Customize(IFixture fixture) groupReferenceNumber, handingOverToRegionalCaseworkService, handoverComments, - regionalDeliveryOfficer, - team + userAdId ); })); } diff --git a/src/Tests/Dfe.Complete.Tests.Common/Customizations/Models/ProjectCustomization.cs b/src/Tests/Dfe.Complete.Tests.Common/Customizations/Models/ProjectCustomization.cs index 625d59a..0dd4bda 100644 --- a/src/Tests/Dfe.Complete.Tests.Common/Customizations/Models/ProjectCustomization.cs +++ b/src/Tests/Dfe.Complete.Tests.Common/Customizations/Models/ProjectCustomization.cs @@ -82,8 +82,6 @@ public class ProjectCustomization : ICustomization public Guid? GroupId { get; set; } - public ICollection? Notes { get; set; } - public void Customize(IFixture fixture) { fixture.Customize(composer => composer @@ -113,8 +111,7 @@ public void Customize(IFixture fixture) .With(x => x.NewTrustReferenceNumber, NewTrustReferenceNumber ?? fixture.Create()) .With(x => x.NewTrustName, NewTrustName ?? fixture.Create()) .With(x => x.GroupId, GroupId ?? fixture.Create()) - .With(x => x.AssignedAt, AssignedAt ?? fixture.Create()) - .With(x => x.Notes, Notes ?? fixture.Create>())); + .With(x => x.AssignedAt, AssignedAt ?? fixture.Create())); } } } From 711d0e0524d917830d91184803e37af5582dab68 Mon Sep 17 00:00:00 2001 From: Zach Hodges Date: Thu, 9 Jan 2025 12:17:50 +0000 Subject: [PATCH 16/24] wip --- .../Commands/CreateProject/CreateProject.cs | 3 ++- src/Core/Dfe.Complete.Domain/Entities/Project.cs | 15 ++++++--------- src/Core/Dfe.Complete.Utils/EnumExtensions.cs | 5 +++++ .../Project/CreateProjectCommandHandlerTests.cs | 11 +++++++++-- .../Project/GetProjectByUrnQueryHandlerTests.cs | 4 ++-- ...CreateConversionProjectCommandCustomization.cs | 1 - 6 files changed, 24 insertions(+), 15 deletions(-) diff --git a/src/Core/Dfe.Complete.Application/Projects/Commands/CreateProject/CreateProject.cs b/src/Core/Dfe.Complete.Application/Projects/Commands/CreateProject/CreateProject.cs index 3a96b7a..ac681c4 100644 --- a/src/Core/Dfe.Complete.Application/Projects/Commands/CreateProject/CreateProject.cs +++ b/src/Core/Dfe.Complete.Application/Projects/Commands/CreateProject/CreateProject.cs @@ -36,6 +36,7 @@ public async Task Handle(CreateConversionProjectCommand request, Canc var projectTeam = EnumExtensions.FromDescription(userTeam); var region = EnumMapper.MapTeamToRegion(projectTeam); + var regionCharValue = region.GetCharValue(); var createdAt = DateTime.UtcNow; var conversionTaskId = Guid.NewGuid(); @@ -73,7 +74,7 @@ await projectRepository.GetProjectGroupIdByIdentifierAsync(request.GroupReferenc request.SignificantDate, request.IsSignificantDateProvisional, request.IncomingTrustUkprn, - region, + regionCharValue, request.IsDueTo2Ri, request.HasAcademyOrderBeenIssued, request.AdvisoryBoardDate, diff --git a/src/Core/Dfe.Complete.Domain/Entities/Project.cs b/src/Core/Dfe.Complete.Domain/Entities/Project.cs index 99970d9..9d88ffe 100644 --- a/src/Core/Dfe.Complete.Domain/Entities/Project.cs +++ b/src/Core/Dfe.Complete.Domain/Entities/Project.cs @@ -106,7 +106,7 @@ public Project(ProjectId id, DateOnly significantDate, bool isSignificantDateProvisional, Ukprn incomingTrustUkprn, - Region? region, + string? region, bool isDueTo2RI, bool hasAcademyOrderBeenIssued, DateOnly advisoryBoardDate, @@ -138,7 +138,7 @@ public Project(ProjectId id, GroupId = groupId; Team = team; RegionalDeliveryOfficerId = regionalDeliveryOfficerId; - Region = GetRegionCharValue(region); + Region = region; AssignedAt = assignedAt; AssignedTo = assignedTo; @@ -155,7 +155,7 @@ public static Project CreateConversionProject( DateOnly significantDate, bool isSignificantDateProvisional, Ukprn incomingTrustUkprn, - Region? region, + string? region, bool isDueTo2RI, bool hasAcademyOrderBeenIssued, DateOnly advisoryBoardDate, @@ -188,15 +188,12 @@ public static Project CreateConversionProject( incomingTrustSharepointLink, groupId, team, - regionalDeliveryOfficerId, assignedTo, assignedAt); + regionalDeliveryOfficerId, + assignedTo, + assignedAt); project.AddDomainEvent(new ProjectCreatedEvent(project)); return project; } - - private static string GetRegionCharValue(Region? region) - { - return region != null ? ((char)region).ToString() : string.Empty; - } } \ No newline at end of file diff --git a/src/Core/Dfe.Complete.Utils/EnumExtensions.cs b/src/Core/Dfe.Complete.Utils/EnumExtensions.cs index 2d30846..c287c81 100644 --- a/src/Core/Dfe.Complete.Utils/EnumExtensions.cs +++ b/src/Core/Dfe.Complete.Utils/EnumExtensions.cs @@ -5,6 +5,11 @@ namespace Dfe.Complete.Utils { public static class EnumExtensions { + public static string GetCharValue(this TEnum? enumValue) where TEnum : struct, Enum + { + return enumValue.HasValue ? ((char)Convert.ToUInt16(enumValue.Value)).ToString() : string.Empty; + } + public static string ToDescription(this T source) { if (source == null) diff --git a/src/Tests/Dfe.Complete.Application.Tests/CommandHandlers/Project/CreateProjectCommandHandlerTests.cs b/src/Tests/Dfe.Complete.Application.Tests/CommandHandlers/Project/CreateProjectCommandHandlerTests.cs index 8f928fc..973af5b 100644 --- a/src/Tests/Dfe.Complete.Application.Tests/CommandHandlers/Project/CreateProjectCommandHandlerTests.cs +++ b/src/Tests/Dfe.Complete.Application.Tests/CommandHandlers/Project/CreateProjectCommandHandlerTests.cs @@ -3,6 +3,8 @@ using Dfe.Complete.Domain.Interfaces.Repositories; using NSubstitute; using Dfe.Complete.Application.Projects.Commands.CreateProject; +using Dfe.Complete.Domain.Entities; +using Dfe.Complete.Domain.Enums; using Dfe.Complete.Domain.ValueObjects; using DfE.CoreLibs.Testing.AutoFixture.Customizations; @@ -18,8 +20,13 @@ public async Task Handle_ShouldCreateAndReturnProjectId_WhenCommandIsValid( CreateConversionProjectCommand command ) { + mockProjectRepository.GetUserByAdId("randomid", CancellationToken.None).Returns(new User + { + Id = new UserId(Guid.NewGuid()), Team = "someteam" + }); + var now = DateTime.UtcNow; - + var project = Domain.Entities.Project.CreateConversionProject( new ProjectId(Guid.NewGuid()), new Urn(2), @@ -31,7 +38,7 @@ CreateConversionProjectCommand command DateOnly.MinValue, true, new Domain.ValueObjects.Ukprn(2), - Domain.Enums.Region.YorkshireAndTheHumber, + "region", true, true, DateOnly.MinValue, diff --git a/src/Tests/Dfe.Complete.Application.Tests/QueryHandlers/Project/GetProjectByUrnQueryHandlerTests.cs b/src/Tests/Dfe.Complete.Application.Tests/QueryHandlers/Project/GetProjectByUrnQueryHandlerTests.cs index e3b04eb..ed7b064 100644 --- a/src/Tests/Dfe.Complete.Application.Tests/QueryHandlers/Project/GetProjectByUrnQueryHandlerTests.cs +++ b/src/Tests/Dfe.Complete.Application.Tests/QueryHandlers/Project/GetProjectByUrnQueryHandlerTests.cs @@ -25,7 +25,7 @@ GetProjectByUrnQuery command var now = DateTime.UtcNow; var urn = 123456; - + var project = Domain.Entities.Project.CreateConversionProject( new ProjectId(Guid.NewGuid()), new Domain.ValueObjects.Urn(urn), @@ -37,7 +37,7 @@ GetProjectByUrnQuery command DateOnly.MinValue, true, new Domain.ValueObjects.Ukprn(2), - Domain.Enums.Region.YorkshireAndTheHumber, + "region", true, true, DateOnly.MinValue, diff --git a/src/Tests/Dfe.Complete.Tests.Common/Customizations/Commands/CreateConversionProjectCommandCustomization.cs b/src/Tests/Dfe.Complete.Tests.Common/Customizations/Commands/CreateConversionProjectCommandCustomization.cs index 013f467..076f14f 100644 --- a/src/Tests/Dfe.Complete.Tests.Common/Customizations/Commands/CreateConversionProjectCommandCustomization.cs +++ b/src/Tests/Dfe.Complete.Tests.Common/Customizations/Commands/CreateConversionProjectCommandCustomization.cs @@ -18,7 +18,6 @@ public void Customize(IFixture fixture) var significantDate = fixture.Create(); var isSignificantDateProvisional = fixture.Create(); var incomingTrustUkprn = new Ukprn(fixture.Create()); - var region = fixture.Create(); var isDueTo2Ri = fixture.Create(); var hasAcademyOrderBeenIssued = fixture.Create(); var advisoryBoardDate = fixture.Create(); From a298dababcddc9dee21ebcc3bae8b0d1cbaccc1f Mon Sep 17 00:00:00 2001 From: Zach Hodges Date: Thu, 9 Jan 2025 13:51:14 +0000 Subject: [PATCH 17/24] fix handler test --- .../Project/CreateProjectCommandHandlerTests.cs | 5 +++-- .../School/GetPrincipalBySchoolQueryHandlerTests.cs | 3 +-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Tests/Dfe.Complete.Application.Tests/CommandHandlers/Project/CreateProjectCommandHandlerTests.cs b/src/Tests/Dfe.Complete.Application.Tests/CommandHandlers/Project/CreateProjectCommandHandlerTests.cs index 973af5b..b96cd58 100644 --- a/src/Tests/Dfe.Complete.Application.Tests/CommandHandlers/Project/CreateProjectCommandHandlerTests.cs +++ b/src/Tests/Dfe.Complete.Application.Tests/CommandHandlers/Project/CreateProjectCommandHandlerTests.cs @@ -6,6 +6,7 @@ using Dfe.Complete.Domain.Entities; using Dfe.Complete.Domain.Enums; using Dfe.Complete.Domain.ValueObjects; +using Dfe.Complete.Utils; using DfE.CoreLibs.Testing.AutoFixture.Customizations; namespace Dfe.Complete.Application.Tests.CommandHandlers.Project @@ -20,9 +21,9 @@ public async Task Handle_ShouldCreateAndReturnProjectId_WhenCommandIsValid( CreateConversionProjectCommand command ) { - mockProjectRepository.GetUserByAdId("randomid", CancellationToken.None).Returns(new User + mockProjectRepository.GetUserByAdId(Arg.Any(), Arg.Any()).Returns(new User { - Id = new UserId(Guid.NewGuid()), Team = "someteam" + Id = new UserId(Guid.NewGuid()), Team = ProjectTeam.WestMidlands.ToDescription() }); var now = DateTime.UtcNow; diff --git a/src/Tests/Dfe.Complete.Application.Tests/QueryHandlers/School/GetPrincipalBySchoolQueryHandlerTests.cs b/src/Tests/Dfe.Complete.Application.Tests/QueryHandlers/School/GetPrincipalBySchoolQueryHandlerTests.cs index 17d4e9f..72c532b 100644 --- a/src/Tests/Dfe.Complete.Application.Tests/QueryHandlers/School/GetPrincipalBySchoolQueryHandlerTests.cs +++ b/src/Tests/Dfe.Complete.Application.Tests/QueryHandlers/School/GetPrincipalBySchoolQueryHandlerTests.cs @@ -39,8 +39,7 @@ public async Task Handle_ShouldReturnMemberOfParliament_WhenSchoolExists( var cacheKey = $"Principal_{CacheKeyHelper.GenerateHashedCacheKey(query.SchoolName)}"; - mockSchoolRepository.GetPrincipalBySchoolAsync(query.SchoolName, default) - .Returns(school); + mockSchoolRepository.GetPrincipalBySchoolAsync(query.SchoolName, default).Returns(school); mockCacheService.GetOrAddAsync( cacheKey, From 6166279d3871f7fbc225d3fb37b993c68e3a053d Mon Sep 17 00:00:00 2001 From: Zach Hodges Date: Thu, 9 Jan 2025 14:19:22 +0000 Subject: [PATCH 18/24] wip tests --- .../CreateProjectCommandHandlerTests.cs | 23 +++++++------ .../Aggregates/ProjectTests.cs | 33 +++++++++---------- 2 files changed, 26 insertions(+), 30 deletions(-) diff --git a/src/Tests/Dfe.Complete.Application.Tests/CommandHandlers/Project/CreateProjectCommandHandlerTests.cs b/src/Tests/Dfe.Complete.Application.Tests/CommandHandlers/Project/CreateProjectCommandHandlerTests.cs index b96cd58..d6e6797 100644 --- a/src/Tests/Dfe.Complete.Application.Tests/CommandHandlers/Project/CreateProjectCommandHandlerTests.cs +++ b/src/Tests/Dfe.Complete.Application.Tests/CommandHandlers/Project/CreateProjectCommandHandlerTests.cs @@ -19,20 +19,18 @@ public async Task Handle_ShouldCreateAndReturnProjectId_WhenCommandIsValid( [Frozen] ICompleteRepository mockProjectRepository, CreateConversionProjectCommandHandler handler, CreateConversionProjectCommand command - ) + ) { - mockProjectRepository.GetUserByAdId(Arg.Any(), Arg.Any()).Returns(new User - { - Id = new UserId(Guid.NewGuid()), Team = ProjectTeam.WestMidlands.ToDescription() - }); - + mockProjectRepository.GetUserByAdId(Arg.Any(), Arg.Any()).Returns( + new User { Id = new UserId(Guid.NewGuid()), Team = ProjectTeam.WestMidlands.ToDescription() }); + var now = DateTime.UtcNow; - + var project = Domain.Entities.Project.CreateConversionProject( new ProjectId(Guid.NewGuid()), new Urn(2), - now, - now, + now, + now, Domain.Enums.TaskType.Conversion, Domain.Enums.ProjectType.Conversion, Guid.NewGuid(), @@ -46,7 +44,7 @@ CreateConversionProjectCommand command "", "", "", - Guid.Empty, + Guid.Empty, "", null, null, @@ -60,7 +58,8 @@ CreateConversionProjectCommand command await handler.Handle(command, default); // Assert - await mockProjectRepository.Received(1).AddAsync(Arg.Is(s => s.Urn == command.Urn), default); + await mockProjectRepository.Received(1) + .AddAsync(Arg.Is(s => s.Urn == command.Urn), default); } } -} +} \ No newline at end of file diff --git a/src/Tests/Dfe.Complete.Domain.Tests/Aggregates/ProjectTests.cs b/src/Tests/Dfe.Complete.Domain.Tests/Aggregates/ProjectTests.cs index 1d34aa5..9b14938 100644 --- a/src/Tests/Dfe.Complete.Domain.Tests/Aggregates/ProjectTests.cs +++ b/src/Tests/Dfe.Complete.Domain.Tests/Aggregates/ProjectTests.cs @@ -1,8 +1,9 @@ -using Dfe.Complete.Domain.Entities; +using Dfe.Complete.Client.Contracts; using Dfe.Complete.Infrastructure.Models; using DfE.CoreLibs.Testing.AutoFixture.Attributes; using Dfe.Complete.Tests.Common.Customizations.Models; using DfE.CoreLibs.Testing.AutoFixture.Customizations; +using Note = Dfe.Complete.Domain.Entities.Note; using Project = Dfe.Complete.Domain.Entities.Project; using ProjectId = Dfe.Complete.Domain.ValueObjects.ProjectId; using ProjectType = Dfe.Complete.Domain.Enums.ProjectType; @@ -11,6 +12,7 @@ using Ukprn = Dfe.Complete.Domain.ValueObjects.Ukprn; using Urn = Dfe.Complete.Domain.ValueObjects.Urn; using User = Dfe.Complete.Domain.Entities.User; +using UserId = Dfe.Complete.Domain.ValueObjects.UserId; namespace Dfe.Complete.Domain.Tests.Aggregates { @@ -28,7 +30,7 @@ public void Constructor_ShouldThrowArgumentNullException_WhenProjectUrnIsNull( DateOnly significantDate, bool isSignificantDateProvisional, Ukprn incomingTrustUkprn, - Region region, + string region, bool isDueTo2RI, bool hasAcademyOrderBeenIssued, DateOnly advisoryBoardDate, @@ -61,7 +63,6 @@ string incomingTrustSharepointLink "", null, null, - null, null)); Assert.Equal("urn", exception.ParamName); @@ -79,7 +80,7 @@ public void Constructor_ShouldThrowArgumentNullException_WhenProjectCreatedAtIsD DateOnly significantDate, bool isSignificantDateProvisional, Ukprn incomingTrustUkprn, - Region region, + string region, bool isDueTo2RI, bool hasAcademyOrderBeenIssued, DateOnly advisoryBoardDate, @@ -112,7 +113,6 @@ string incomingTrustSharepointLink "", null, null, - null, null)); Assert.Equal("createdAt", exception.ParamName); @@ -130,7 +130,7 @@ public void Constructor_ShouldThrowArgumentNullException_WhenProjectUpdatedAtIsD DateOnly significantDate, bool isSignificantDateProvisional, Ukprn incomingTrustUkprn, - Region region, + string region, bool isDueTo2RI, bool hasAcademyOrderBeenIssued, DateOnly advisoryBoardDate, @@ -163,7 +163,6 @@ string incomingTrustSharepointLink "", null, null, - null, null)); Assert.Equal("updatedAt", exception.ParamName); @@ -183,7 +182,7 @@ public void Constructor_ShouldCorrectlySetFields( DateOnly significantDate, bool isSignificantDateProvisional, Ukprn incomingTrustUkprn, - Region region, + string region, bool isDueTo2RI, bool hasAcademyOrderBeenIssued, DateOnly advisoryBoardDate, @@ -195,7 +194,7 @@ public void Constructor_ShouldCorrectlySetFields( DateTime? assignedAt, User? assignedTo, Note? note, - User? regionalDeliveryOfficer + UserId? regionalDeliveryOfficer ) { // Act & Assert @@ -219,10 +218,9 @@ public void Constructor_ShouldCorrectlySetFields( incomingTrustSharepointLink, groupId, team, - assignedAt, + regionalDeliveryOfficer, assignedTo, - note, - regionalDeliveryOfficer); + assignedAt); Assert.Equal(urn, project.Urn); } @@ -240,7 +238,7 @@ public void Factory_Create_ShouldCorrectlySetFields( DateOnly significantDate, bool isSignificantDateProvisional, Ukprn incomingTrustUkprn, - Region region, + string region, bool isDueTo2RI, bool hasAcademyOrderBeenIssued, DateOnly advisoryBoardDate, @@ -255,7 +253,7 @@ public void Factory_Create_ShouldCorrectlySetFields( DateTime? assignedAt, User? assignedTo, Note? note, - User? regionalDeliveryOfficer + UserId? regionalDeliveryOfficer ) { // Act & Assert @@ -279,10 +277,9 @@ public void Factory_Create_ShouldCorrectlySetFields( incomingTrustSharepointLink, groupId, team, - assignedAt, - assignedTo, - note, - regionalDeliveryOfficer); + regionalDeliveryOfficer, + assignedTo, + assignedAt); Assert.Equal(urn, project.Urn); Assert.Equal(createdAt, project.CreatedAt); From 498c08fb7467d1a305ff1eb7313552c91b5d1220 Mon Sep 17 00:00:00 2001 From: Zach Hodges Date: Thu, 9 Jan 2025 14:46:39 +0000 Subject: [PATCH 19/24] refactor to set assign to id --- .../Commands/CreateProject/CreateProject.cs | 20 +++++++++---------- .../Dfe.Complete.Domain/Entities/Project.cs | 8 ++++---- .../Aggregates/ProjectTests.cs | 10 +++++----- 3 files changed, 19 insertions(+), 19 deletions(-) diff --git a/src/Core/Dfe.Complete.Application/Projects/Commands/CreateProject/CreateProject.cs b/src/Core/Dfe.Complete.Application/Projects/Commands/CreateProject/CreateProject.cs index ac681c4..8fa4267 100644 --- a/src/Core/Dfe.Complete.Application/Projects/Commands/CreateProject/CreateProject.cs +++ b/src/Core/Dfe.Complete.Application/Projects/Commands/CreateProject/CreateProject.cs @@ -3,7 +3,6 @@ using Dfe.Complete.Domain.Enums; using Dfe.Complete.Domain.Interfaces.Repositories; using Dfe.Complete.Domain.Entities; -using Dfe.Complete.Infrastructure.Models; using Dfe.Complete.Utils; namespace Dfe.Complete.Application.Projects.Commands.CreateProject @@ -31,10 +30,11 @@ public class CreateConversionProjectCommandHandler( { public async Task Handle(CreateConversionProjectCommand request, CancellationToken cancellationToken) { - var user = await projectRepository.GetUserByAdId(request.UserAdId, cancellationToken); - var userTeam = user?.Team; + var projectUser = await projectRepository.GetUserByAdId(request.UserAdId, cancellationToken); + var projectUserTeam = projectUser?.Team; + var projectUserId = projectUser?.Id; - var projectTeam = EnumExtensions.FromDescription(userTeam); + var projectTeam = EnumExtensions.FromDescription(projectUserTeam); var region = EnumMapper.MapTeamToRegion(projectTeam); var regionCharValue = region.GetCharValue(); @@ -50,7 +50,7 @@ await projectRepository.GetProjectGroupIdByIdentifierAsync(request.GroupReferenc string team; DateTime? assignedAt = null; - User? assignedTo = null; + UserId? projectUserAssignedToId = null; if (request.HandingOverToRegionalCaseworkService) { @@ -60,9 +60,9 @@ await projectRepository.GetProjectGroupIdByIdentifierAsync(request.GroupReferenc { team = projectTeam.ToDescription(); assignedAt = DateTime.UtcNow; - assignedTo = user; + projectUserAssignedToId = projectUserId; } - + var project = Project.CreateConversionProject( projectId, request.Urn, @@ -83,8 +83,8 @@ await projectRepository.GetProjectGroupIdByIdentifierAsync(request.GroupReferenc request.IncomingTrustSharepointLink, groupId?.Value, team, - user?.Id, - assignedTo, + projectUser?.Id, + projectUserAssignedToId, assignedAt); if (!string.IsNullOrEmpty(request.HandoverComments)) @@ -92,7 +92,7 @@ await projectRepository.GetProjectGroupIdByIdentifierAsync(request.GroupReferenc project.Notes.Add(new Note { Id = new NoteId(Guid.NewGuid()), CreatedAt = createdAt, Body = request.HandoverComments, - ProjectId = projectId, TaskIdentifier = "handover", UserId = user?.Id + ProjectId = projectId, TaskIdentifier = "handover", UserId = projectUser?.Id }); } diff --git a/src/Core/Dfe.Complete.Domain/Entities/Project.cs b/src/Core/Dfe.Complete.Domain/Entities/Project.cs index 9d88ffe..c10c49a 100644 --- a/src/Core/Dfe.Complete.Domain/Entities/Project.cs +++ b/src/Core/Dfe.Complete.Domain/Entities/Project.cs @@ -116,7 +116,7 @@ public Project(ProjectId id, Guid? groupId, string team, UserId? regionalDeliveryOfficerId, - User assignedTo, + UserId? assignedTo, DateTime? assignedAt) { Id = id ?? throw new ArgumentNullException(nameof(id)); @@ -141,7 +141,7 @@ public Project(ProjectId id, Region = region; AssignedAt = assignedAt; - AssignedTo = assignedTo; + AssignedToId = assignedTo; } public static Project CreateConversionProject( @@ -165,7 +165,7 @@ public static Project CreateConversionProject( Guid? groupId, string team, UserId? regionalDeliveryOfficerId, - User? assignedTo, + UserId? assignedToId, DateTime? assignedAt) { var project = new Project( @@ -189,7 +189,7 @@ public static Project CreateConversionProject( groupId, team, regionalDeliveryOfficerId, - assignedTo, + assignedToId, assignedAt); project.AddDomainEvent(new ProjectCreatedEvent(project)); diff --git a/src/Tests/Dfe.Complete.Domain.Tests/Aggregates/ProjectTests.cs b/src/Tests/Dfe.Complete.Domain.Tests/Aggregates/ProjectTests.cs index 9b14938..28f93fb 100644 --- a/src/Tests/Dfe.Complete.Domain.Tests/Aggregates/ProjectTests.cs +++ b/src/Tests/Dfe.Complete.Domain.Tests/Aggregates/ProjectTests.cs @@ -192,7 +192,7 @@ public void Constructor_ShouldCorrectlySetFields( Guid? groupId, string team, DateTime? assignedAt, - User? assignedTo, + UserId? assignedToId, Note? note, UserId? regionalDeliveryOfficer ) @@ -219,7 +219,7 @@ public void Constructor_ShouldCorrectlySetFields( groupId, team, regionalDeliveryOfficer, - assignedTo, + assignedToId, assignedAt); Assert.Equal(urn, project.Urn); @@ -251,7 +251,7 @@ public void Factory_Create_ShouldCorrectlySetFields( Guid? groupId, string team, DateTime? assignedAt, - User? assignedTo, + UserId? assignedToId, Note? note, UserId? regionalDeliveryOfficer ) @@ -278,7 +278,7 @@ public void Factory_Create_ShouldCorrectlySetFields( groupId, team, regionalDeliveryOfficer, - assignedTo, + assignedToId, assignedAt); Assert.Equal(urn, project.Urn); @@ -290,7 +290,7 @@ public void Factory_Create_ShouldCorrectlySetFields( Assert.Equal(significantDate, project.SignificantDate); Assert.Equal(isSignificantDateProvisional, project.SignificantDateProvisional); Assert.Equal(incomingTrustUkprn, project.IncomingTrustUkprn); - Assert.Equal(region.ToString(), project.Region); + Assert.Equal(region, project.Region); Assert.Equal(isDueTo2RI, project.TwoRequiresImprovement); Assert.Equal(hasAcademyOrderBeenIssued, project.DirectiveAcademyOrder); Assert.Equal(advisoryBoardDate, project.AdvisoryBoardDate); From 8dd25221e6201f16b2c8886bbb5b77c26f134ae7 Mon Sep 17 00:00:00 2001 From: Zach Hodges Date: Thu, 9 Jan 2025 15:04:02 +0000 Subject: [PATCH 20/24] remove Note causing circular ref --- .../Dfe.Complete.Domain.Tests/Aggregates/ProjectTests.cs | 7 ------- .../CreateConversionProjectCommandCustomization.cs | 3 --- 2 files changed, 10 deletions(-) diff --git a/src/Tests/Dfe.Complete.Domain.Tests/Aggregates/ProjectTests.cs b/src/Tests/Dfe.Complete.Domain.Tests/Aggregates/ProjectTests.cs index 28f93fb..99d1c96 100644 --- a/src/Tests/Dfe.Complete.Domain.Tests/Aggregates/ProjectTests.cs +++ b/src/Tests/Dfe.Complete.Domain.Tests/Aggregates/ProjectTests.cs @@ -1,17 +1,12 @@ -using Dfe.Complete.Client.Contracts; -using Dfe.Complete.Infrastructure.Models; using DfE.CoreLibs.Testing.AutoFixture.Attributes; using Dfe.Complete.Tests.Common.Customizations.Models; using DfE.CoreLibs.Testing.AutoFixture.Customizations; -using Note = Dfe.Complete.Domain.Entities.Note; using Project = Dfe.Complete.Domain.Entities.Project; using ProjectId = Dfe.Complete.Domain.ValueObjects.ProjectId; using ProjectType = Dfe.Complete.Domain.Enums.ProjectType; -using Region = Dfe.Complete.Domain.Enums.Region; using TaskType = Dfe.Complete.Domain.Enums.TaskType; using Ukprn = Dfe.Complete.Domain.ValueObjects.Ukprn; using Urn = Dfe.Complete.Domain.ValueObjects.Urn; -using User = Dfe.Complete.Domain.Entities.User; using UserId = Dfe.Complete.Domain.ValueObjects.UserId; namespace Dfe.Complete.Domain.Tests.Aggregates @@ -193,7 +188,6 @@ public void Constructor_ShouldCorrectlySetFields( string team, DateTime? assignedAt, UserId? assignedToId, - Note? note, UserId? regionalDeliveryOfficer ) { @@ -252,7 +246,6 @@ public void Factory_Create_ShouldCorrectlySetFields( string team, DateTime? assignedAt, UserId? assignedToId, - Note? note, UserId? regionalDeliveryOfficer ) { diff --git a/src/Tests/Dfe.Complete.Tests.Common/Customizations/Commands/CreateConversionProjectCommandCustomization.cs b/src/Tests/Dfe.Complete.Tests.Common/Customizations/Commands/CreateConversionProjectCommandCustomization.cs index 076f14f..f88cbf4 100644 --- a/src/Tests/Dfe.Complete.Tests.Common/Customizations/Commands/CreateConversionProjectCommandCustomization.cs +++ b/src/Tests/Dfe.Complete.Tests.Common/Customizations/Commands/CreateConversionProjectCommandCustomization.cs @@ -1,10 +1,7 @@ using AutoFixture; using CreateConversionProjectCommand = Dfe.Complete.Application.Projects.Commands.CreateProject.CreateConversionProjectCommand; -using ProjectTeam = Dfe.Complete.Domain.Enums.ProjectTeam; -using Region = Dfe.Complete.Domain.Enums.Region; using Ukprn = Dfe.Complete.Domain.ValueObjects.Ukprn; using Urn = Dfe.Complete.Domain.ValueObjects.Urn; -using User = Dfe.Complete.Domain.Entities.User; namespace Dfe.Complete.Tests.Common.Customizations.Commands { From 6b0892956a60d2efc9e670b7ab1fa3ba9c99bf31 Mon Sep 17 00:00:00 2001 From: Zach Hodges Date: Thu, 9 Jan 2025 16:05:16 +0000 Subject: [PATCH 21/24] project controller tests working --- .../Controllers/ProjectsControllerTests.cs | 20 ++++++++++++++++++- ...pplicationDbContextFactoryCustomization.cs | 4 ++-- .../Seeders/CompleteContextSeeder.cs | 20 ++++++++++++++++++- 3 files changed, 40 insertions(+), 4 deletions(-) diff --git a/src/Tests/Dfe.Complete.Api.Tests.Integration/Controllers/ProjectsControllerTests.cs b/src/Tests/Dfe.Complete.Api.Tests.Integration/Controllers/ProjectsControllerTests.cs index 79d95d4..a18533c 100644 --- a/src/Tests/Dfe.Complete.Api.Tests.Integration/Controllers/ProjectsControllerTests.cs +++ b/src/Tests/Dfe.Complete.Api.Tests.Integration/Controllers/ProjectsControllerTests.cs @@ -1,9 +1,18 @@ using System.Net; +using AutoFixture.Xunit2; using Dfe.Complete.Client.Contracts; +using Dfe.Complete.Domain.Enums; +using Dfe.Complete.Domain.Interfaces.Repositories; +using Dfe.Complete.Infrastructure.Database; using Dfe.Complete.Tests.Common.Customizations; using Dfe.Complete.Tests.Common.Customizations.Commands; +using Dfe.Complete.Utils; using DfE.CoreLibs.Testing.AutoFixture.Attributes; using DfE.CoreLibs.Testing.Mocks.WebApplicationFactory; +using Microsoft.EntityFrameworkCore; +using NSubstitute; +using UserId = Dfe.Complete.Domain.ValueObjects.UserId; +using User = Dfe.Complete.Domain.Entities.User; namespace Dfe.Complete.Api.Tests.Integration.Controllers; @@ -20,6 +29,16 @@ public async Task CreateProject_Async_ShouldCreateConversionProject( //todo: when auth is done, add this back in // factory.TestClaims = [new Claim(ClaimTypes.Role, "API.Write")]; + var testUserAdId = createConversionProjectCommand.UserAdId; + + var dbContext = factory.GetDbContext(); + + var testUser = await dbContext.Users.FirstOrDefaultAsync(); + testUser.ActiveDirectoryUserId = testUserAdId; + + dbContext.Users.Update(testUser); + await dbContext.SaveChangesAsync(); + var result = await createProjectClient.Projects_CreateProject_Async(createConversionProjectCommand); Assert.NotNull(result); @@ -38,7 +57,6 @@ public async Task CreateProject_WithNullRequest_ThrowsException( createConversionProjectCommand.Urn = null; - //todo: change exception type? var exception = await Assert.ThrowsAsync(async () => await createProjectClient.Projects_CreateProject_Async(createConversionProjectCommand)); diff --git a/src/Tests/Dfe.Complete.Tests.Common/Customizations/CustomWebApplicationDbContextFactoryCustomization.cs b/src/Tests/Dfe.Complete.Tests.Common/Customizations/CustomWebApplicationDbContextFactoryCustomization.cs index 4d2d35f..20fcdab 100644 --- a/src/Tests/Dfe.Complete.Tests.Common/Customizations/CustomWebApplicationDbContextFactoryCustomization.cs +++ b/src/Tests/Dfe.Complete.Tests.Common/Customizations/CustomWebApplicationDbContextFactoryCustomization.cs @@ -28,8 +28,8 @@ public void Customize(IFixture fixture) SeedData = new Dictionary> { //TODO: add this but for CompleteContext when needed: - //typeof(CompleteContext), context => CompleteContextSeeder.Seed((CompleteContext)context) - { typeof(CompleteContext), context => {} }, + { typeof(CompleteContext), context => CompleteContextSeeder.Seed((CompleteContext)context) } + // { typeof(CompleteContext), context => {} }, }, ExternalServicesConfiguration = services => { diff --git a/src/Tests/Dfe.Complete.Tests.Common/Seeders/CompleteContextSeeder.cs b/src/Tests/Dfe.Complete.Tests.Common/Seeders/CompleteContextSeeder.cs index 90dcb10..e5093e4 100644 --- a/src/Tests/Dfe.Complete.Tests.Common/Seeders/CompleteContextSeeder.cs +++ b/src/Tests/Dfe.Complete.Tests.Common/Seeders/CompleteContextSeeder.cs @@ -1,6 +1,24 @@ +using Dfe.Complete.Domain.Entities; +using Dfe.Complete.Domain.Enums; +using Dfe.Complete.Domain.ValueObjects; +using Dfe.Complete.Infrastructure.Database; +using Dfe.Complete.Utils; + namespace Dfe.Complete.Tests.Common.Seeders; -public class CompleteContextSeeder +public static class CompleteContextSeeder { //TODO: implement when needed + + public static void Seed(CompleteContext context) + { + var projectUser = new User + { + Id = new UserId(Guid.NewGuid()), + Team = ProjectTeam.WestMidlands.ToDescription() + }; + + context.Users.Add(projectUser); + context.SaveChanges(); + } } \ No newline at end of file From fb6c91a5ac425cb9a6591ad9137a2f36e554628e Mon Sep 17 00:00:00 2001 From: Zach Hodges Date: Thu, 9 Jan 2025 16:05:37 +0000 Subject: [PATCH 22/24] removed usings --- .../Controllers/ProjectsControllerTests.cs | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/Tests/Dfe.Complete.Api.Tests.Integration/Controllers/ProjectsControllerTests.cs b/src/Tests/Dfe.Complete.Api.Tests.Integration/Controllers/ProjectsControllerTests.cs index a18533c..3f600c6 100644 --- a/src/Tests/Dfe.Complete.Api.Tests.Integration/Controllers/ProjectsControllerTests.cs +++ b/src/Tests/Dfe.Complete.Api.Tests.Integration/Controllers/ProjectsControllerTests.cs @@ -1,18 +1,11 @@ using System.Net; -using AutoFixture.Xunit2; using Dfe.Complete.Client.Contracts; -using Dfe.Complete.Domain.Enums; -using Dfe.Complete.Domain.Interfaces.Repositories; using Dfe.Complete.Infrastructure.Database; using Dfe.Complete.Tests.Common.Customizations; using Dfe.Complete.Tests.Common.Customizations.Commands; -using Dfe.Complete.Utils; using DfE.CoreLibs.Testing.AutoFixture.Attributes; using DfE.CoreLibs.Testing.Mocks.WebApplicationFactory; using Microsoft.EntityFrameworkCore; -using NSubstitute; -using UserId = Dfe.Complete.Domain.ValueObjects.UserId; -using User = Dfe.Complete.Domain.Entities.User; namespace Dfe.Complete.Api.Tests.Integration.Controllers; From b1a2a349468bd96bf62790d983c897c8c7ded617 Mon Sep 17 00:00:00 2001 From: Zach Hodges Date: Thu, 9 Jan 2025 17:54:30 +0000 Subject: [PATCH 23/24] additional test working --- .../CreateProjectCommandHandlerTests.cs | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/src/Tests/Dfe.Complete.Application.Tests/CommandHandlers/Project/CreateProjectCommandHandlerTests.cs b/src/Tests/Dfe.Complete.Application.Tests/CommandHandlers/Project/CreateProjectCommandHandlerTests.cs index d6e6797..345eef7 100644 --- a/src/Tests/Dfe.Complete.Application.Tests/CommandHandlers/Project/CreateProjectCommandHandlerTests.cs +++ b/src/Tests/Dfe.Complete.Application.Tests/CommandHandlers/Project/CreateProjectCommandHandlerTests.cs @@ -6,6 +6,7 @@ using Dfe.Complete.Domain.Entities; using Dfe.Complete.Domain.Enums; using Dfe.Complete.Domain.ValueObjects; +using Dfe.Complete.Tests.Common.Customizations.Models; using Dfe.Complete.Utils; using DfE.CoreLibs.Testing.AutoFixture.Customizations; @@ -61,5 +62,53 @@ CreateConversionProjectCommand command await mockProjectRepository.Received(1) .AddAsync(Arg.Is(s => s.Urn == command.Urn), default); } + + [Theory] + [CustomAutoData(typeof(DateOnlyCustomization))] + public async Task Handle_ShouldSetTeamToRCcs_WhenHandOverToRcsIsTrue( + [Frozen] ICompleteRepository mockProjectRepository, + CreateConversionProjectCommandHandler handler, + CreateConversionProjectCommand command + ) + { + mockProjectRepository.GetUserByAdId(Arg.Any(), Arg.Any()).Returns( + new User { Id = new UserId(Guid.NewGuid()), Team = ProjectTeam.WestMidlands.ToDescription() }); + + var now = DateTime.UtcNow; + var project = Domain.Entities.Project.CreateConversionProject( + new ProjectId(Guid.NewGuid()), + new Urn(2), + now, + now, + Domain.Enums.TaskType.Conversion, + Domain.Enums.ProjectType.Conversion, + Guid.NewGuid(), + DateOnly.MinValue, + true, + new Domain.ValueObjects.Ukprn(2), + "region", + true, + true, + DateOnly.MinValue, + "", + "", + "", + Guid.Empty, + "", + null, + null, + null); + + command = command with { HandingOverToRegionalCaseworkService = true }; + + mockProjectRepository.AddAsync(Arg.Any(), Arg.Any()) + .Returns(Task.FromResult(project)); + + await handler.Handle(command, default); + + await mockProjectRepository.Received(1) + .AddAsync(Arg.Is(s => s.Team == "regional_casework_services"), default); + } + } } \ No newline at end of file From 94ca7f210dd36c7739e08f94b59cde9aaf462b2c Mon Sep 17 00:00:00 2001 From: Zach Hodges Date: Fri, 10 Jan 2025 11:16:36 +0000 Subject: [PATCH 24/24] handler tests & added description to project type --- .../Dfe.Complete.Domain/Enums/ProjectType.cs | 3 + .../CreateProjectCommandHandlerTests.cs | 265 ++++++++++++------ 2 files changed, 179 insertions(+), 89 deletions(-) diff --git a/src/Core/Dfe.Complete.Domain/Enums/ProjectType.cs b/src/Core/Dfe.Complete.Domain/Enums/ProjectType.cs index b9e41fa..2dff1e4 100644 --- a/src/Core/Dfe.Complete.Domain/Enums/ProjectType.cs +++ b/src/Core/Dfe.Complete.Domain/Enums/ProjectType.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -8,7 +9,9 @@ namespace Dfe.Complete.Domain.Enums { public enum ProjectType { + [Description("Conversion::TasksData")] Conversion = 1, + [Description("Transfer::TasksData")] Transfer = 2 } } diff --git a/src/Tests/Dfe.Complete.Application.Tests/CommandHandlers/Project/CreateProjectCommandHandlerTests.cs b/src/Tests/Dfe.Complete.Application.Tests/CommandHandlers/Project/CreateProjectCommandHandlerTests.cs index 345eef7..33d016e 100644 --- a/src/Tests/Dfe.Complete.Application.Tests/CommandHandlers/Project/CreateProjectCommandHandlerTests.cs +++ b/src/Tests/Dfe.Complete.Application.Tests/CommandHandlers/Project/CreateProjectCommandHandlerTests.cs @@ -6,109 +6,196 @@ using Dfe.Complete.Domain.Entities; using Dfe.Complete.Domain.Enums; using Dfe.Complete.Domain.ValueObjects; -using Dfe.Complete.Tests.Common.Customizations.Models; using Dfe.Complete.Utils; using DfE.CoreLibs.Testing.AutoFixture.Customizations; -namespace Dfe.Complete.Application.Tests.CommandHandlers.Project +namespace Dfe.Complete.Application.Tests.CommandHandlers.Project; + +public class CreateConversionProjectCommandHandlerTests { - public class CreateConversionProjectCommandHandlerTests + [Theory] + [CustomAutoData(typeof(DateOnlyCustomization))] + public async Task Handle_ShouldCreateAndReturnProjectId_WhenCommandIsValid( + [Frozen] ICompleteRepository mockProjectRepository, + CreateConversionProjectCommandHandler handler, + CreateConversionProjectCommand command + ) { - [Theory] - [CustomAutoData(typeof(DateOnlyCustomization))] - public async Task Handle_ShouldCreateAndReturnProjectId_WhenCommandIsValid( - [Frozen] ICompleteRepository mockProjectRepository, - CreateConversionProjectCommandHandler handler, - CreateConversionProjectCommand command - ) + // Arrange + var user = new User { - mockProjectRepository.GetUserByAdId(Arg.Any(), Arg.Any()).Returns( - new User { Id = new UserId(Guid.NewGuid()), Team = ProjectTeam.WestMidlands.ToDescription() }); - - var now = DateTime.UtcNow; + Id = new UserId(Guid.NewGuid()), + Team = ProjectTeam.WestMidlands.ToDescription() + }; + mockProjectRepository.GetUserByAdId(Arg.Any(), Arg.Any()).Returns(user); - var project = Domain.Entities.Project.CreateConversionProject( - new ProjectId(Guid.NewGuid()), - new Urn(2), - now, - now, - Domain.Enums.TaskType.Conversion, - Domain.Enums.ProjectType.Conversion, - Guid.NewGuid(), - DateOnly.MinValue, - true, - new Domain.ValueObjects.Ukprn(2), - "region", - true, - true, - DateOnly.MinValue, - "", - "", - "", - Guid.Empty, - "", - null, - null, - null); + var now = DateTime.UtcNow; + var project = CreateTestProject(user.Team, now); - // Arrange - mockProjectRepository.AddAsync(Arg.Any(), Arg.Any()) - .Returns(Task.FromResult(project)); + mockProjectRepository.AddAsync(Arg.Any(), Arg.Any()) + .Returns(Task.FromResult(project)); - // Act - await handler.Handle(command, default); + // Act + await handler.Handle(command, default); - // Assert - await mockProjectRepository.Received(1) - .AddAsync(Arg.Is(s => s.Urn == command.Urn), default); - } + // Assert + await mockProjectRepository.Received(1) + .AddAsync(Arg.Is(s => s.Urn == command.Urn), default); + } - [Theory] - [CustomAutoData(typeof(DateOnlyCustomization))] - public async Task Handle_ShouldSetTeamToRCcs_WhenHandOverToRcsIsTrue( - [Frozen] ICompleteRepository mockProjectRepository, - CreateConversionProjectCommandHandler handler, - CreateConversionProjectCommand command - ) + [Theory] + [CustomAutoData(typeof(DateOnlyCustomization))] + public async Task Handle_ShouldSetTeamToRCcs_WhenHandOverToRcsIsTrue( + [Frozen] ICompleteRepository mockProjectRepository, + CreateConversionProjectCommandHandler handler, + CreateConversionProjectCommand command + ) + { + // Arrange + var user = new User { - mockProjectRepository.GetUserByAdId(Arg.Any(), Arg.Any()).Returns( - new User { Id = new UserId(Guid.NewGuid()), Team = ProjectTeam.WestMidlands.ToDescription() }); - - var now = DateTime.UtcNow; - var project = Domain.Entities.Project.CreateConversionProject( - new ProjectId(Guid.NewGuid()), - new Urn(2), - now, - now, - Domain.Enums.TaskType.Conversion, - Domain.Enums.ProjectType.Conversion, - Guid.NewGuid(), - DateOnly.MinValue, - true, - new Domain.ValueObjects.Ukprn(2), - "region", - true, - true, - DateOnly.MinValue, - "", - "", - "", - Guid.Empty, - "", - null, - null, - null); - - command = command with { HandingOverToRegionalCaseworkService = true }; + Id = new UserId(Guid.NewGuid()), + Team = ProjectTeam.WestMidlands.ToDescription() + }; + mockProjectRepository.GetUserByAdId(Arg.Any(), Arg.Any()).Returns(user); - mockProjectRepository.AddAsync(Arg.Any(), Arg.Any()) - .Returns(Task.FromResult(project)); - - await handler.Handle(command, default); + var now = DateTime.UtcNow; + var project = CreateTestProject(user.Team, now); + command = command with { HandingOverToRegionalCaseworkService = true }; - await mockProjectRepository.Received(1) - .AddAsync(Arg.Is(s => s.Team == "regional_casework_services"), default); - } + mockProjectRepository.AddAsync(Arg.Any(), Arg.Any()) + .Returns(Task.FromResult(project)); + // Act + await handler.Handle(command, default); + + // Assert + await mockProjectRepository.Received(1) + .AddAsync(Arg.Is(s => s.Team == "regional_casework_services"), default); + } + + [Theory] + [CustomAutoData(typeof(DateOnlyCustomization))] + public async Task Handle_ShouldSet_Team_And_AssignedTo_And_AssignedAt_WhenHandingOverToRcsFalse( + [Frozen] ICompleteRepository mockProjectRepository, + CreateConversionProjectCommandHandler handler, + CreateConversionProjectCommand command + ) + { + // Arrange + var team = ProjectTeam.WestMidlands.ToDescription(); + var user = new User + { + Id = new UserId(Guid.NewGuid()), + Team = team + }; + + mockProjectRepository.GetUserByAdId(Arg.Any(), Arg.Any()).Returns(user); + + var now = DateTime.UtcNow; + var project = CreateTestProject(team, now); + command = command with { HandingOverToRegionalCaseworkService = false }; + + mockProjectRepository.AddAsync(Arg.Any(), Arg.Any()) + .Returns(Task.FromResult(project)); + + // Act + await handler.Handle(command, default); + + // Assert + await mockProjectRepository.Received(1) + .AddAsync(Arg.Is(p => p.Team == team && p.AssignedToId == user.Id && p.AssignedAt.HasValue), default); + } + + [Theory] + [CustomAutoData(typeof(DateOnlyCustomization))] + public async Task Handle_ShouldSetHandover( + [Frozen] ICompleteRepository mockProjectRepository, + CreateConversionProjectCommandHandler handler, + CreateConversionProjectCommand command + ) + { + // Arrange + var team = ProjectTeam.WestMidlands.ToDescription(); + var user = new User + { + Id = new UserId(Guid.NewGuid()), + Team = team + }; + + mockProjectRepository.GetUserByAdId(Arg.Any(), Arg.Any()).Returns(user); + + var now = DateTime.UtcNow; + var project = CreateTestProject(team, now); + command = command with { HandingOverToRegionalCaseworkService = false }; + + mockProjectRepository.AddAsync(Arg.Any(), Arg.Any()) + .Returns(Task.FromResult(project)); + + // Act + await handler.Handle(command, default); + + // Assert + await mockProjectRepository.Received(1) + .AddAsync(Arg.Is(p => p.Team == team && p.AssignedToId == user.Id && p.AssignedAt.HasValue), default); + } + + [Theory] + [CustomAutoData(typeof(DateOnlyCustomization))] + public async Task Handle_ShouldAddNotes_WhenHandoverComments( + [Frozen] ICompleteRepository mockProjectRepository, + CreateConversionProjectCommandHandler handler, + CreateConversionProjectCommand command + ) + { + // Arrange + var team = ProjectTeam.WestMidlands.ToDescription(); + var user = new User + { + Id = new UserId(Guid.NewGuid()), + Team = team + }; + mockProjectRepository.GetUserByAdId(Arg.Any(), Arg.Any()).Returns(user); + + var now = DateTime.UtcNow; + var project = CreateTestProject(team, now); + command = command with { HandingOverToRegionalCaseworkService = false, HandoverComments = "this is a test note"}; + + + mockProjectRepository.AddAsync(Arg.Any(), Arg.Any()) + .Returns(Task.FromResult(project)); + + // Act + await handler.Handle(command, default); + + // Assert + await mockProjectRepository.Received(1) + .AddAsync(Arg.Is(p => p.Notes.FirstOrDefault().Body == command.HandoverComments), default); } + + private static Domain.Entities.Project CreateTestProject(string team, DateTime now) => + Domain.Entities.Project.CreateConversionProject( + new ProjectId(Guid.NewGuid()), + new Urn(2), + now, + now, + TaskType.Conversion, + ProjectType.Conversion, + Guid.NewGuid(), + DateOnly.MinValue, + true, + new Ukprn(2), + "region", + true, + true, + DateOnly.MinValue, + "", + "", + "", + Guid.Empty, + "", + null, + null, + null + ); } \ No newline at end of file