Пример #1
0
        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());
        }