示例#1
0
        public IActionResult PostPerson([FromBody] PersonPostApiModel model)
        {
            var result = ApiValidation(model)
                         .Map(x => new PersonModel {
                FirstName = x.FirstName, LastName = x.LastName
            })
                         .Flatten(LastNameAppService, x => new PersonPostApiError {
                Message = x.Message, Model = model
            })
                         .FlatMap(FirstNameAppService, x => new PersonPostApiError {
                Message = x.Message, Model = model
            });

            return(result.Match <IActionResult>(BadRequest, Ok));
        }
 public Task <IActionResult> PostPerson([FromBody] PersonPostApiModel model)
 {
     return(ApiValidation(model)
            // Using match inside this scope is currently too complex since it requires all type params to be supplied.
            .Map(x => new PersonModel {
         FirstName = x.FirstName, LastName = x.LastName
     })
            .ToAsyncResult()
            .FlattenAsync(
                x => LastNameAppService(x).ToAsyncResult(),
                x => new PersonPostApiError {
         Message = x.Message, Model = model
     }
                )
            .FlatMapAsync(
                x => FirstNameAppService(x).ToAsyncResult(),
                x => new PersonPostApiError {
         Message = x.Message, Model = model
     }
                )
            .Match <IActionResult>(Ok, BadRequest));
 }
示例#3
0
        private static Result <PersonPostApiModel, PersonPostApiError> ApiValidation(PersonPostApiModel model)
        {
            var apiValidation = model
                                .ToResult <PersonPostApiModel, PersonPostApiError>()
                                .Multiple(
                x => x.Filter(y => y.Age > 10, () => new PersonPostApiError {
                Message = "Age needs to be more than 10", Model = model
            }),
                x => x.Flatten(y => ValidateName(y.FirstName), s => new PersonPostApiError {
                Message = s, Model = model
            }),
                x => x.Flatten(y => ValidateName(y.LastName), s => new PersonPostApiError {
                Message = s, Model = model
            })
                );

            return(apiValidation.Match(x => x, x => {
                return (Result <PersonPostApiModel, PersonPostApiError>) new PersonPostApiError {
                    Errors = x.Select(y => y.Message).ToArray(),
                    Message = "Invalid Api Validation.",
                    Model = model
                };
            }));
        }
        private static IResult <PersonPostApiModel, PersonPostApiError> ApiValidation(PersonPostApiModel model)
        {
            var apiValidation = model
                                .ToResult(x => true, x => default(PersonPostApiError))
                                .Multiple(
                x => x.Filter(
                    y => y.Age > 10,
                    y => new PersonPostApiError {
                Message = "Age has to be older than '10'.", Model = model
            }
                    ),
                x => x.Flatten(
                    y => ValidateName(y.FirstName),
                    s => new PersonPostApiError {
                Message = s, Model = model
            }
                    ),
                x => x.Flatten(
                    y => ValidateName(y.LastName),
                    s => new PersonPostApiError {
                Message = s, Model = model
            }
                    )
                );

            return(apiValidation.Match(Result.Value <PersonPostApiModel, PersonPostApiError>, x =>
                                       Result.Error <PersonPostApiModel, PersonPostApiError>(
                                           new PersonPostApiError {
                Errors = x.Select(y => y.Message).ToArray(),
                Message = "Invalid Api Validation.",
                Model = model
            }
                                           )));
        }