示例#1
0
        /// <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));
            }
        }
示例#3
0
        /// <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);
        }