Beispiel #1
0
        public override async Task <CommonDetailsPostResponse> ExecuteAsync(PortalCentralBankExchangeRateUpdateDetailsPostRequest request)
        {
            CentralBankExchangeRateUpdate entity;

            if (request.Form.Id == null)
            {
                entity = new CentralBankExchangeRateUpdate
                {
                    CentralBankExchangeRateId = request.Form.CentralBankExchangeRateId
                };
                _dbContext.CentralBankExchangeRateUpdates.Add(entity);
            }
            else
            {
                var entityId = request.Form.Id.Value;
                entity = await _dbContext.CentralBankExchangeRateUpdates
                         .Where(x => x.Id == entityId &&
                                x.CentralBankExchangeRateId == request.Form.CentralBankExchangeRateId)
                         .FirstOrDefaultAsync();

                if (entity == null)
                {
                    throw EntityNotFoundException.Create <CentralBankExchangeRate>(entityId);
                }
            }

            // check if it's not duplicate by time
            var updateWithTheSameTimeExists = await _dbContext.CentralBankExchangeRateUpdates
                                              .Where(x => x.CentralBankExchangeRateId == entity.CentralBankExchangeRateId &&
                                                     x.Id != request.Form.Id &&
                                                     x.StartTime == request.Form.StartDateTime)
                                              .AnyAsync();

            if (updateWithTheSameTimeExists)
            {
                throw new InvalidOperationException($"A rate update with the same start date & time '{request.Form.StartDateTime.ToDateTimeString()}' already exists.");
            }

            UpdateFields(entity, request.Form);

            await _dbContext.SaveChangesAsync();

            return(new CommonDetailsPostResponse
            {
                Id = entity.Id,
            });
        }
Beispiel #2
0
 private void UpdateFields(CentralBankExchangeRateUpdate entity, PortalCentralBankExchangeRateUpdateDetailsForm form)
 {
     entity.StartTime = form.StartDateTime;
     entity.Rate      = form.Rate.GetMandatoryValue();
 }