/// <summary>
        /// Updates a customMeterDimension.
        /// </summary>
        /// <param name="id">The id of the customMeterDimension to update.</param>
        /// <param name="customMeterDimension">The updated customMeterDimension.</param>
        /// <returns>The updated customMeterDimension.</returns>
        public async Task <CustomMeterDimension> UpdateAsync(long id, CustomMeterDimension customMeterDimension)
        {
            if (customMeterDimension is null)
            {
                throw new LunaBadRequestUserException(LoggingUtils.ComposePayloadNotProvidedErrorMessage(typeof(CustomMeterDimension).Name),
                                                      UserErrorCode.PayloadNotProvided);
            }
            _logger.LogInformation(LoggingUtils.ComposeUpdateResourceMessage(
                                       typeof(CustomMeterDimension).Name,
                                       customMeterDimension.Id.ToString(),
                                       planName: customMeterDimension.Plan.PlanName,
                                       payload: JsonSerializer.Serialize(customMeterDimension)));

            // Get the customMeterDimension that matches the id provided
            var customMeterDimensionDb = await GetAsync(id);

            // update the FK to customMeter in case the meterName has been changed
            customMeterDimensionDb.MeterId = (await _customMeterService.GetAsync(customMeterDimension.MeterName)).Id;

            // Copy over the changes
            customMeterDimensionDb.Copy(customMeterDimension);

            // Update customMeterDimensionDb values and save changes in db
            _context.CustomMeterDimensions.Update(customMeterDimensionDb);
            await _context._SaveChangesAsync();

            _logger.LogInformation(LoggingUtils.ComposeResourceUpdatedMessage(
                                       typeof(CustomMeterDimension).Name,
                                       customMeterDimension.Id.ToString(),
                                       planName: customMeterDimension.Plan.PlanName));

            return(customMeterDimensionDb);
        }
Exemple #2
0
        public async Task <ActionResult> CreateOrUpdateAsync(string offerName, string planName, string meterName, [FromBody] CustomMeterDimension customMeterDimension)
        {
            AADAuthHelper.VerifyUserAccess(this.HttpContext, _logger, true);

            if (customMeterDimension == null)
            {
                throw new LunaBadRequestUserException(LoggingUtils.ComposePayloadNotProvidedErrorMessage(nameof(customMeterDimension)), UserErrorCode.PayloadNotProvided);
            }

            if (!planName.Equals(customMeterDimension.PlanName))
            {
                throw new LunaBadRequestUserException(LoggingUtils.ComposeNameMismatchErrorMessage(nameof(offerName)), UserErrorCode.NameMismatch);
            }

            if (!meterName.Equals(customMeterDimension.MeterName))
            {
                throw new LunaBadRequestUserException(LoggingUtils.ComposeNameMismatchErrorMessage(nameof(meterName)), UserErrorCode.NameMismatch);
            }

            if (await _customMeterDimensionService.ExistsAsync(offerName, planName, meterName))
            {
                await _customMeterDimensionService.UpdateAsync(offerName, planName, meterName, customMeterDimension);

                return(Ok(customMeterDimension));
            }
            else
            {
                await _customMeterDimensionService.CreateAsync(offerName, planName, meterName, customMeterDimension);

                return(CreatedAtRoute(nameof(GetAsync) + nameof(CustomMeterDimension),
                                      new { offerName = offerName, planName = planName, meterName = meterName },
                                      customMeterDimension));;
            }
        }
        public async Task <ActionResult> UpdateAsync(long id, [FromBody] CustomMeterDimension customMeterDimension)
        {
            await _customMeterDimensionService.UpdateAsync(id, customMeterDimension);

            return(NoContent());
        }
        /// <summary>
        /// Creates a customMeterDimension within a plan within an offer.
        /// </summary>
        /// <param name="offerName">The name of the offer.</param>
        /// <param name="planUniqueName">The name of the plan.</param>
        /// <param name="customMeterDimension">The customMeterDimension object to create.</param>
        /// <returns>The created customMeterDimension.</returns>
        public async Task <CustomMeterDimension> CreateAsync(string offerName, string planUniqueName, CustomMeterDimension customMeterDimension)
        {
            if (customMeterDimension is null)
            {
                throw new LunaBadRequestUserException(LoggingUtils.ComposePayloadNotProvidedErrorMessage(typeof(CustomMeterDimension).Name),
                                                      UserErrorCode.PayloadNotProvided);
            }

            _logger.LogInformation(LoggingUtils.ComposeCreateResourceMessage(
                                       typeof(CustomMeterDimension).Name,
                                       customMeterDimension.Id.ToString(),
                                       offerName: offerName,
                                       planName: planUniqueName,
                                       payload: JsonSerializer.Serialize(customMeterDimension)));

            // Get the plan associated with the offerName and planUniqueName provided
            var plan = await _planService.GetAsync(offerName, planUniqueName);

            // Set the FK to plan
            customMeterDimension.PlanId = plan.Id;

            // Set the FK to customMeter
            customMeterDimension.MeterId = (await _customMeterService.GetAsync(customMeterDimension.MeterName)).Id;

            // Reset the PK (should not be modified in request)
            customMeterDimension.Id = 0;

            // Add customMeterDimension to db
            _context.CustomMeterDimensions.Add(customMeterDimension);
            await _context._SaveChangesAsync();

            _logger.LogInformation(LoggingUtils.ComposeResourceCreatedMessage(
                                       typeof(ArmTemplateParameter).Name,
                                       customMeterDimension.Id.ToString(),
                                       offerName: offerName,
                                       planName: planUniqueName));

            return(customMeterDimension);
        }
        public async Task <ActionResult> CreateAsync(string offerName, string planName, [FromBody] CustomMeterDimension customMeterDimension)
        {
            await _customMeterDimensionService.CreateAsync(offerName, planName, customMeterDimension);

            return(CreatedAtAction(nameof(GetAsync), new { id = customMeterDimension.Id }, customMeterDimension));
        }