Exemple #1
0
        /// <summary>
        /// Updates a customMeter.
        /// </summary>
        /// <param name="subscriptionId">The subscription id.</param>
        /// <param name="meterName">The name of the customMeter to update.</param>
        /// <param name="customMeter">The updated customMeter.</param>
        /// <returns>The updated customMeter.</returns>
        public async Task <SubscriptionCustomMeterUsage> UpdateAsync(Guid subscriptionId,
                                                                     string meterName,
                                                                     SubscriptionCustomMeterUsage subscriptionCustomMeterUsage)
        {
            if (subscriptionCustomMeterUsage is null)
            {
                throw new LunaBadRequestUserException(LoggingUtils.ComposePayloadNotProvidedErrorMessage(typeof(SubscriptionCustomMeterUsage).Name),
                                                      UserErrorCode.PayloadNotProvided);
            }
            var subscription = await _subscriptionService.GetAsync(subscriptionId);

            var customMeter = await _customMeterService.GetAsync(subscription.OfferName, meterName);

            _logger.LogInformation(LoggingUtils.ComposeUpdateResourceMessage(
                                       typeof(SubscriptionCustomMeterUsage).Name,
                                       customMeter.MeterName,
                                       payload: JsonSerializer.Serialize(customMeter),
                                       subscriptionId: subscriptionId));

            // Get the customMeter that matches the meterName provided
            var subscriptionCustomMeterUsageDb = await GetAsync(subscriptionId, meterName);

            // Check if (the meterName has been updated) &&
            //          (a customMeter with the same new name does not already exist)
            if (subscriptionCustomMeterUsageDb.SubscriptionId != subscriptionCustomMeterUsage.SubscriptionId ||
                subscriptionCustomMeterUsageDb.MeterId != subscriptionCustomMeterUsage.MeterId)
            {
                throw new LunaBadRequestUserException(LoggingUtils.ComposeNameMismatchErrorMessage(typeof(SubscriptionCustomMeterUsage).Name),
                                                      UserErrorCode.NameMismatch);
            }

            // Copy over the changes
            subscriptionCustomMeterUsageDb.Copy(subscriptionCustomMeterUsage);

            // Update customMeterDb values and save changes in db
            _context.SubscriptionCustomMeterUsages.Update(subscriptionCustomMeterUsageDb);
            await _context._SaveChangesAsync();

            _logger.LogInformation(LoggingUtils.ComposeResourceUpdatedMessage(
                                       typeof(SubscriptionCustomMeterUsage).Name,
                                       customMeter.MeterName,
                                       subscriptionId: subscriptionId));

            return(subscriptionCustomMeterUsageDb);
        }
Exemple #2
0
        /// <summary>
        /// Creates a subscriptionCustomMeterUsage.
        /// </summary>
        /// <param name="subscriptionId">The subscription id.</param>
        /// <param name="meterName">The name of the SubscriptionCustomMeterUsage to update.</param>
        /// <param name="subscriptionCustomMeterUsage">The subscriptionCustomMeterUsage to create.</param>
        /// <returns>The created subscriptionCustomMeterUsage.</returns>
        public async Task <SubscriptionCustomMeterUsage> CreateAsync(
            Guid subscriptionId,
            string meterName,
            SubscriptionCustomMeterUsage subscriptionCustomMeterUsage)
        {
            if (subscriptionCustomMeterUsage is null)
            {
                throw new LunaBadRequestUserException(LoggingUtils.ComposePayloadNotProvidedErrorMessage(typeof(SubscriptionCustomMeterUsage).Name),
                                                      UserErrorCode.PayloadNotProvided);
            }
            _logger.LogInformation(LoggingUtils.ComposeCreateResourceMessage(
                                       typeof(SubscriptionCustomMeterUsage).Name,
                                       subscriptionCustomMeterUsage.MeterId.ToString(),
                                       subscriptionId: subscriptionCustomMeterUsage.SubscriptionId,
                                       payload: JsonSerializer.Serialize(subscriptionCustomMeterUsage)));

            var subscription = await _subscriptionService.GetAsync(subscriptionId);

            var customMeter = await _customMeterService.GetAsync(subscription.OfferName, meterName);

            // Check that an SubscriptionCustomMeterUsage with the same name does not already exist
            if (await ExistsAsync(subscriptionId, meterName))
            {
                throw new LunaConflictUserException(LoggingUtils.ComposeAlreadyExistsErrorMessage(
                                                        typeof(SubscriptionCustomMeterUsage).Name,
                                                        customMeter.MeterName,
                                                        subscriptionId: subscriptionId));
            }

            // Add customMeter to db
            _context.SubscriptionCustomMeterUsages.Add(subscriptionCustomMeterUsage);
            await _context._SaveChangesAsync();

            _logger.LogInformation(LoggingUtils.ComposeResourceCreatedMessage(typeof(SubscriptionCustomMeterUsage).Name,
                                                                              meterName, subscriptionId: subscriptionId));

            return(subscriptionCustomMeterUsage);
        }