コード例 #1
0
ファイル: CampaignsController.cs プロジェクト: Morebis-GIT/CI
        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)));
        }