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, }); }
private void UpdateFields(CentralBankExchangeRateUpdate entity, PortalCentralBankExchangeRateUpdateDetailsForm form) { entity.StartTime = form.StartDateTime; entity.Rate = form.Rate.GetMandatoryValue(); }