public Transaction GenerateTransactionData( string originatorFullName, string originatorVaan, PlaceOfBirth originatorPlaceOfBirth, PostalAddress originatorPostalAddress, string beneficiaryFullName, string beneficiaryVaan, VirtualAssetType asset, decimal amount, NaturalPersonId[] naturalPersonIds, JuridicalPersonId[] juridicalPersonIds, string bic, TransactionType type) { var sanitizedBeneficiaryVaan = beneficiaryVaan.Replace(" ", ""); var sanitizedOriginatorVaan = originatorVaan.Replace(" ", ""); var transaction = new Transaction { Status = TransactionStatus.Created, OriginatorPostalAddress = originatorPostalAddress, OriginatorPlaceOfBirth = originatorPlaceOfBirth, Amount = amount, Asset = asset, Id = Guid.NewGuid().ToString(), CreationDateTime = DateTime.UtcNow, BeneficiaryVaan = sanitizedBeneficiaryVaan, OriginatorVaan = sanitizedOriginatorVaan, OriginatorFullName = originatorFullName, BeneficiaryFullName = beneficiaryFullName, OriginatorJuridicalPersonIds = juridicalPersonIds, OriginatorBic = bic, OriginatorNaturalPersonIds = naturalPersonIds, Type = type }; return(transaction); }
public async Task <IActionResult> CreateAsync([FromBody] CreateOutgoingTransactionRequestModel model) { if (!ModelState.IsValid) { return(ValidationProblem(ModelState)); } var asset = model.Asset switch { "ETH" => VirtualAssetType.ETH, "BTC" => VirtualAssetType.BTC, _ => throw new NotSupportedException($"Asset {model.Asset} not recognized."), }; PlaceOfBirth placeOfBirth = null; if (model.OriginatorPlaceOfBirth != null) { var originatorPlaceOfBirthCountry = Country .List .Single(x => x.Value.TwoLetterCode == model.OriginatorPlaceOfBirth.CountryIso2Code) .Value; placeOfBirth = new PlaceOfBirth { Country = originatorPlaceOfBirthCountry, Date = model.OriginatorPlaceOfBirth.Date, Town = model.OriginatorPlaceOfBirth.Town }; } var originatorPostalAddressCountry = Country .List .Single(x => x.Value.TwoLetterCode == model.OriginatorPostalAddress.CountryIso2Code) .Value; var transaction = _transactionDataService.GenerateTransactionData( model.OriginatorFullName, model.OriginatorVaan, placeOfBirth, new PostalAddress { Country = originatorPostalAddressCountry, AddressLine = model.OriginatorPostalAddress.AddressLine, Building = model.OriginatorPostalAddress.Building, PostCode = model.OriginatorPostalAddress.PostCode, Street = model.OriginatorPostalAddress.Street, Town = model.OriginatorPostalAddress.Town }, model.BeneficiaryFullName, model.BeneficiaryVaan, asset, model.Amount, model.OriginatorNaturalPersonIds? .Select(x => new NaturalPersonId(x.Id, x.Type, Country.List[x.CountryIso2Code], x.NonStateIssuer)) .ToArray(), model.OriginatorJuridicalPersonIds? .Select(x => new JuridicalPersonId(x.Id, x.Type, Country.List[x.CountryIso2Code], x.NonStateIssuer)) .ToArray(), model.OriginatorBic, TransactionType.Outgoing); transaction = await _transactionsManager.RegisterOutgoingTransactionAsync( transaction, _transactionDataService.CreateVirtualAssetsAccountNumber(model.BeneficiaryVaan)); return(Ok(_mapper.Map <TransactionDetailsModel>(transaction))); }