public async Task <OneOf <ModelWithErrors <ViewModel>, Success> > Handle( Command request, CancellationToken cancellationToken) { var providerVenues = await GetVenuesForProvider(); // Remove any invalid venue IDs request.LocationVenueIds ??= new HashSet <Guid>(); request.LocationVenueIds.Intersect(providerVenues.Select(v => v.VenueId)); var validator = new CommandValidator(_actionContextAccessor); var validationResult = await validator.ValidateAsync(request); // TODO Move this logic into Validation.TLevelValidation when Validator doesn't have to be injected. // This is a limitation of the way the current Date validation works that will go away when // tag helper library supports model binding to DateTimes. await CheckNoExistingTLevelForStartDate(validationResult, request); if (!validationResult.IsValid) { var vm = CreateViewModel(providerVenues); request.Adapt(vm); return(new ModelWithErrors <ViewModel>(vm, validationResult)); } _journeyInstance.UpdateState(state => { state.YourReference = request.YourReference; state.StartDate = request.StartDate.Value.ToDateTime(); state.LocationVenueIds = request.LocationVenueIds.ToList(); state.Website = request.Website; state.WhoFor = request.WhoFor; state.EntryRequirements = request.EntryRequirements; state.WhatYoullLearn = request.WhatYoullLearn; state.HowYoullBeAssessed = request.HowYoullBeAssessed; state.HowYoullLearn = request.HowYoullLearn; state.WhatYouCanDoNext = request.WhatYouCanDoNext; state.IsValid = true; }); return(new Success()); }
public async Task <OneOf <ModelWithErrors <ViewModel>, Success> > Handle( Command request, CancellationToken cancellationToken) { var providerVenues = await GetVenuesForProvider(); // Remove any invalid venue IDs request.LocationVenueIds ??= new HashSet <Guid>(); request.LocationVenueIds.Intersect(providerVenues.Select(v => v.VenueId)); var validator = new CommandValidator( _journeyInstance.State.TLevelId, _journeyInstance.State.ProviderId, _journeyInstance.State.TLevelDefinitionId, _sqlQueryDispatcher); var validationResult = await validator.ValidateAsync(request); if (!validationResult.IsValid) { var vm = CreateViewModel(providerVenues); request.Adapt(vm); return(new ModelWithErrors <ViewModel>(vm, validationResult)); } _journeyInstance.UpdateState(state => { state.YourReference = request.YourReference; state.StartDate = request.StartDate.Value; state.LocationVenueIds = request.LocationVenueIds.ToList(); state.Website = request.Website; state.WhoFor = request.WhoFor; state.EntryRequirements = request.EntryRequirements; state.WhatYoullLearn = request.WhatYoullLearn; state.HowYoullBeAssessed = request.HowYoullBeAssessed; state.HowYoullLearn = request.HowYoullLearn; state.WhatYouCanDoNext = request.WhatYouCanDoNext; state.IsValid = true; }); return(new Success()); }