Exemplo n.º 1
0
        public override async Task <CreateTransactionResponse> CreateTransaction(CreateTransactionRequest request, ServerCallContext context)
        {
            var httpContext = context.GetHttpContext();

            var userId = httpContext.GetUserId();

            var account = await _accountService.FindAccountOrNullAsync(userId);

            if (account == null)
            {
                throw context.NotFoundRpcException("User account not found.");
            }

            var result = await CreateTransactionByOneofCaseAsync();

            if (result.IsValid)
            {
                var response = new CreateTransactionResponse
                {
                    Transaction = _mapper.Map <TransactionDto>(result.Response)
                };

                return(context.Ok(response));
            }

            throw context.FailedPreconditionRpcException(result);

            async Task <DomainValidationResult <ITransaction> > CreateTransactionByOneofCaseAsync()
            {
                switch (request.TransactionCase)
                {
                case CreateTransactionRequest.TransactionOneofCase.Bundle:
                {
                    return(await _accountService.CreateTransactionAsync(account !, request.Bundle, new TransactionMetadata(request.Metadata)));
                }

                case CreateTransactionRequest.TransactionOneofCase.Custom:
                {
                    return(await _accountService.CreateTransactionAsync(
                               account !,
                               request.Custom.Currency.Amount,
                               request.Custom.Currency.Type.ToEnumeration <CurrencyType>(),
                               request.Custom.Type.ToEnumeration <TransactionType>(),
                               new TransactionMetadata(request.Metadata)));
                }

                default:
                {
                    throw context.RpcException(
                              new Status(
                                  StatusCode.InvalidArgument,
                                  $"The case ({request.TransactionCase}) is not supported for {nameof(this.CreateTransaction)}."));
                }
                }
            }
        }
Exemplo n.º 2
0
        public static RpcException FailedPreconditionRpcException <TResponse>(this ServerCallContext context, DomainValidationResult <TResponse> result)
            where TResponse : class
        {
            var status = new Status(StatusCode.FailedPrecondition, Detail);

            var trailers = new Metadata
            {
                { Errors, result.ToJsonErrors() }
            };

            return(context.RpcException(status, trailers));
        }
Exemplo n.º 3
0
        public static RpcException FailedPreconditionRpcException(this ServerCallContext context, IdentityResult result, string detail)
        {
            context.AddIdentityResultToResponseTrailers(result);

            return(context.RpcException(new Status(StatusCode.FailedPrecondition, detail)));
        }
Exemplo n.º 4
0
 public static RpcException NotFoundRpcException(this ServerCallContext context, string detail)
 {
     return(context.RpcException(new Status(StatusCode.NotFound, detail)));
 }