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");
            }
        }
Exemplo n.º 2
0
        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");
            }
        }