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)}.")); } } } }
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)); }
public static RpcException FailedPreconditionRpcException(this ServerCallContext context, IdentityResult result, string detail) { context.AddIdentityResultToResponseTrailers(result); return(context.RpcException(new Status(StatusCode.FailedPrecondition, detail))); }
public static RpcException NotFoundRpcException(this ServerCallContext context, string detail) { return(context.RpcException(new Status(StatusCode.NotFound, detail))); }