public IHttpActionResult Put([FromUri] string externalId, [FromBody] CreateCampaign command) { if (command is null || String.IsNullOrWhiteSpace(externalId) || !ModelState.IsValid) { return(BadRequest(ModelState)); } if (externalId != command.ExternalId) { ModelState.AddModelError(nameof(CreateCampaign.ExternalId), "ExternalId does not match"); } try { command.Validate(); } catch (BreakTypeException ex) { ModelState.AddModelError( nameof(CreateCampaign.BreakType), BreakTypeValueErrorMessage(ex) ); } if (!ModelState.IsValid) { return(BadRequest(ModelState)); } var campaign = _campaignRepository.FindByRef(externalId).FirstOrDefault(); if (_featureManager.IsEnabled(nameof(ProductFeature.IncludeChannelGroupFileForOptimiser))) { try { ValidateCampaigns(new List <CreateCampaign> { command }, campaign == null); } catch (ArgumentException exception) when(exception.ParamName == ReflectionUtilities.PropertyName <CreateCampaign>(c => c.IncludeRightSizer)) // Case for 400 Bad Request Code for IncludeRightSizer value validation { return(this.Error().BadRequest(ApiError.BadRequest(exception.Message))); } catch (Exception ex) { return(BadRequest(ex.Message)); } } if (campaign is null) { AddCampaign(new List <CreateCampaign>() { command }); } else { var newCampaign = _mapper.Map <Campaign>(command); campaign.Update(newCampaign); ApplyDeliveryCurrency(newCampaign); ApplyBookingPositionAndSequencing(newCampaign); _campaignRepository.Update(campaign); } _campaignRepository.SaveChanges(); _campaignPassPrioritiesService.AddNewCampaignPassPrioritiesToAllScenariosInLibrary(); return(Ok(_mapper.Map <CampaignModel>(campaign))); }