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)); }
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 } ))); }