public async Task <IActionResult> PostLoginAsync([FromBody] LoginModel loginModel) { if (!ModelState.IsValid) { return(BadRequest()); } var commandResult = await commandDispatcher.PostAsync <LoginCommand, UserViewModel>(new LoginCommand(loginModel.Username, loginModel.Password), null); switch (commandResult) { case SuccessResult <UserViewModel> successResult: var tokenString = GenerateJSONWebToken(successResult.Value); return(Ok(new { token = tokenString, user = successResult.Value })); case FailureResult <UserViewModel> failureResult: switch (failureResult.Code) { case FailureResultCode.Unauthorized: return(new UnauthorizedResult()); case FailureResultCode.Forbidden: return(new ForbidResult()); default: var message = failureMessageService.GetMessageFromResult(failureResult); return(new BadRequestObjectResult(message)); } default: throw new InvalidOperationException("internal server error"); } }
public static IActionResult HandleResult <TResult>(Result <TResult> result, IFailureMessageService failureMessageService) { switch (result) { case SuccessResult <TResult> successResult: return(new OkObjectResult(successResult.Value)); case FailureResult <TResult> failureResult: switch (failureResult.Code) { case FailureResultCode.Unauthorized: return(new UnauthorizedResult()); case FailureResultCode.Forbidden: return(new ForbidResult()); default: var message = failureMessageService.GetMessageFromResult(failureResult); return(new BadRequestObjectResult(message)); } default: throw new InvalidOperationException("internal server error"); } }