/// <summary> /// Creates a restrictedUser 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="restrictedUser">The restrictedUser to create.</param> /// <returns>The created restrictedUser.</returns> public async Task <RestrictedUser> CreateAsync(string offerName, string planUniqueName, RestrictedUser restrictedUser) { if (restrictedUser is null) { throw new LunaBadRequestUserException(LoggingUtils.ComposePayloadNotProvidedErrorMessage(typeof(RestrictedUser).Name), UserErrorCode.PayloadNotProvided); } _logger.LogInformation(LoggingUtils.ComposeCreateResourceMessage(typeof(RestrictedUser).Name, restrictedUser.TenantId.ToString(), offerName: offerName, planName: planUniqueName, payload: JsonSerializer.Serialize(restrictedUser))); // Get the plan associated with the offerName and planUniqueName provided var plan = await _planService.GetAsync(offerName, planUniqueName); // Set the FK to plan restrictedUser.PlanId = plan.Id; // Reset the PK (should not be modified in request) restrictedUser.Id = 0; // Add restrictedUser to db _context.RestrictedUsers.Add(restrictedUser); await _context._SaveChangesAsync(); _logger.LogInformation(LoggingUtils.ComposeResourceCreatedMessage(typeof(RestrictedUser).Name, restrictedUser.TenantId.ToString(), offerName: offerName, planName: planUniqueName)); return(restrictedUser); }
public async Task <ActionResult> CreateOrUpdateAsync(string offerName, string planName, Guid tenantId, [FromBody] RestrictedUser restrictedUser) { AADAuthHelper.VerifyUserAccess(this.HttpContext, _logger, true); if (restrictedUser == null) { throw new LunaBadRequestUserException(LoggingUtils.ComposePayloadNotProvidedErrorMessage(nameof(restrictedUser)), UserErrorCode.PayloadNotProvided); } if (!tenantId.Equals(restrictedUser.TenantId)) { throw new LunaBadRequestUserException(LoggingUtils.ComposeNameMismatchErrorMessage(typeof(RestrictedUser).Name), UserErrorCode.NameMismatch); } if (await _restrictedUserService.ExistsAsync(offerName, planName, tenantId)) { _logger.LogInformation($"Update resticted user {tenantId} in plan {planName} in offer {offerName} with payload {JsonSerializer.Serialize(restrictedUser)}."); await _restrictedUserService.UpdateAsync(offerName, planName, restrictedUser); return(Ok(restrictedUser)); } else { _logger.LogInformation($"Create resticted user {tenantId} in plan {planName} in offer {offerName} with payload {JsonSerializer.Serialize(restrictedUser)}."); await _restrictedUserService.CreateAsync(offerName, planName, restrictedUser); return(CreatedAtRoute(nameof(GetAsync) + nameof(RestrictedUser), new { offerName = offerName, planName = planName, tenantId = tenantId }, restrictedUser)); } }
/// <summary> /// Updates a restrictedUser /// </summary> /// <param name="offerName">The offer name.</param> /// <param name="planName">The plan name.</param> /// <param name="restrictedUser">The updated restrictedUser.</param> /// <returns>The updated restrictedUser.</returns> public async Task <RestrictedUser> UpdateAsync(string offerName, string planName, RestrictedUser restrictedUser) { if (restrictedUser is null) { throw new LunaBadRequestUserException(LoggingUtils.ComposePayloadNotProvidedErrorMessage(typeof(RestrictedUser).Name), UserErrorCode.PayloadNotProvided); } _logger.LogInformation(LoggingUtils.ComposeUpdateResourceMessage(typeof(RestrictedUser).Name, restrictedUser.TenantId.ToString(), offerName: offerName, planName: planName, payload: JsonSerializer.Serialize(restrictedUser))); var dbUser = await GetAsync(offerName, planName, restrictedUser.TenantId); dbUser.Copy(restrictedUser); // Update restrictedUserDb values and save changes in db _context.RestrictedUsers.Update(dbUser); await _context._SaveChangesAsync(); _logger.LogInformation(LoggingUtils.ComposeResourceUpdatedMessage(typeof(RestrictedUser).Name, restrictedUser.TenantId.ToString(), offerName: offerName, planName: planName)); return(dbUser); }