예제 #1
0
        public async Task UpdatePreferenceBulk(string userId, UserPreferenceBulkPostRp resource)
        {
            var user = await _userRepository.GetUserById(_identityService.GetUserId());

            if (user == null)
            {
                await _domainManagerService.AddNotFound($"The user with id {userId} does not exists.");

                return;
            }

            var claims = await _userManager.GetClaimsAsync(user);

            foreach (var item in resource.Items)
            {
                var preference = user.GetPreference(item.Name);
                if (preference == null)
                {
                    await _domainManagerService.AddConflict($"The preference with name {item.Name} does not exists.");

                    return;
                }

                user.UpdatePreference(item.Name, item.Value);

                if (item.Name.Equals("Theme", StringComparison.InvariantCultureIgnoreCase))
                {
                    var upThemeClaim = claims.FirstOrDefault(x => x.Type.Equals("up_theme"));
                    await _userManager.RemoveClaimAsync(user, upThemeClaim);

                    await _userManager.AddClaimAsync(user, new Claim("up_theme", item.Value));
                }

                if (item.Name.Equals("Culture", StringComparison.InvariantCultureIgnoreCase))
                {
                    var upCultureClaim = claims.FirstOrDefault(x => x.Type.Equals("up_culture"));
                    await _userManager.RemoveClaimAsync(user, upCultureClaim);

                    await _userManager.AddClaimAsync(user, new Claim("up_culture", item.Value));
                }

                if (item.Name.Equals("TimeZone", StringComparison.InvariantCultureIgnoreCase))
                {
                    var upTimezoneClaim = claims.FirstOrDefault(x => x.Type.Equals("up_timezone"));
                    await _userManager.RemoveClaimAsync(user, upTimezoneClaim);

                    await _userManager.AddClaimAsync(user, new Claim("up_timezone", item.Value));
                }
            }

            _userRepository.Update(user);
            await _userRepository.SaveChanges();
        }
예제 #2
0
        public async Task <IActionResult> UpdatePreferences(string userId, [FromBody] UserPreferenceBulkPostRp resource)
        {
            if (!ModelState.IsValid)
            {
                return(this.BadRequest(ModelState));
            }

            await _userPreferenceService.UpdatePreferenceBulk(userId, resource);

            if (DomainManager.HasNotFounds())
            {
                return(this.Conflict(DomainManager.GetNotFounds()));
            }

            if (DomainManager.HasConflicts())
            {
                return(this.Conflict(DomainManager.GetConflicts()));
            }

            return(this.Ok(this.DefaultResponse));
        }