/// <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); }
/// <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); }