public async Task <Guid> CreateAsync(Partner partner) { partner.Id = Guid.NewGuid(); partner.Locations = await _locationService.CreateLocationsContactPersonForPartnerAsync(partner); if (partner.UseGlobalCurrencyRate) { partner.AmountInTokens = null; partner.AmountInCurrency = null; } CredentialsCreateResponse credential; try { credential = await _credentialsClient.Partners.CreateAsync(new PartnerCredentialsCreateRequest { PartnerId = partner.Id.ToString(), ClientId = partner.ClientId, ClientSecret = partner.ClientSecret }); } catch (ClientApiException e) { if (e.HttpStatusCode == HttpStatusCode.BadRequest) { throw new PartnerRegistrationFailedException(e.ErrorResponse.ErrorMessage); } throw; } if (credential.Error == CredentialsError.LoginAlreadyExists) { var exception = new ClientAlreadyExistException($"Client with id '{partner.ClientId}' already exist."); _log.Warning(exception.Message, context: partner); throw exception; } if (credential.Error != CredentialsError.None) { var exception = new PartnerRegistrationFailedException("Register user failed."); _log.Warning(exception.Message, context: partner); throw exception; } var createdPartner = await _partnerRepository.CreateAsync(partner); await _partnerCreatedPublisher.PublishAsync(new PartnerCreatedEvent { CreatedBy = createdPartner.CreatedBy, PartnerId = createdPartner.Id, Timestamp = DateTime.UtcNow }); return(createdPartner.Id); }
public async Task UpdateAsync(Partner partner) { var existingPartner = await _partnerRepository.GetByIdAsync(partner.Id); if (existingPartner == null) { throw new PartnerNotFoundFailedException($"Partner with id '{partner.Id}' not found."); } if (string.IsNullOrEmpty(partner.ClientId)) { partner.ClientId = existingPartner.ClientId; } if (!string.IsNullOrEmpty(partner.ClientSecret)) { CredentialsUpdateResponse credentialUpdate; try { credentialUpdate = await _credentialsClient.Partners.UpdateAsync(new PartnerCredentialsUpdateRequest { PartnerId = partner.Id.ToString(), ClientId = partner.ClientId, ClientSecret = partner.ClientSecret }); } catch (ClientApiException e) { if (e.HttpStatusCode == HttpStatusCode.BadRequest) { throw new PartnerRegistrationFailedException(e.ErrorResponse.ErrorMessage); } throw; } if (credentialUpdate.Error == CredentialsError.LoginAlreadyExists) { var exception = new ClientAlreadyExistException($"Client with id '{partner.ClientId}' already exist."); _log.Warning(exception.Message, context: partner); throw exception; } if (credentialUpdate.Error != CredentialsError.None) { var exception = new PartnerRegistrationUpdateFailedException($"Updating the credentials for partner {partner.Id} failed."); _log.Warning(exception.Message, context: partner); throw exception; } } if (partner.UseGlobalCurrencyRate) { partner.AmountInTokens = null; partner.AmountInCurrency = null; } partner.CreatedAt = existingPartner.CreatedAt; partner.CreatedBy = existingPartner.CreatedBy; partner.Locations = await _locationService.UpdateRangeAsync(partner, partner.Locations, existingPartner.Locations); await _partnerRepository.UpdateAsync(partner); }