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