コード例 #1
0
        public async Task CreateAvatarAsync(AvatarDto avatarDto)
        {
            using (var transaction = _photoSNDbContext.Database.BeginTransaction())
            {
                try
                {
                    var currentAvatar = await _photoSNDbContext.Avatars
                                        .FirstOrDefaultAsync(a => (a.UserId == avatarDto.UserId && a.IsCurrent == true));

                    if (currentAvatar != null)
                    {
                        currentAvatar.IsCurrent = false;
                    }

                    var newAvatar = _mapper.Map <Avatar>(avatarDto);
                    newAvatar.IsCurrent = true;

                    await _photoSNDbContext.Avatars.AddAsync(newAvatar);

                    await _photoSNDbContext.SaveChangesAsync();

                    await transaction.CommitAsync();
                }
                catch (Exception e)
                {
                    transaction.Rollback();
                    throw e;
                }
            }
        }
コード例 #2
0
ファイル: UserService.cs プロジェクト: jriley15/jthreads-api
        public async Task <Response> SetAvatar(AvatarDto avatarDto)
        {
            var user = await GetUser();

            user.AvatarUrl = avatarDto.ImageUrl;
            await _userManager.UpdateAsync(user);

            return(new Response().WithSuccess());
        }
コード例 #3
0
 private AvatarDto[] LoadAvatars()
 {
     AvatarDto[] avatars = new AvatarDto[9];
     for (int i = 0; i < 9; i++)
     {
         AvatarDto avatar = new AvatarDto {
             Id = i, Url = "https://randomuser.me/api/portraits/lego/" + i + ".jpg"
         };
         avatars[i] = avatar;
     }
     return(avatars);
 }
コード例 #4
0
        public async Task DeleteAvatarAsync(AvatarDto avatarDto)
        {
            using (var transaction = _photoSNDbContext.Database.BeginTransaction())
            {
                try
                {
                    var avatar = await _photoSNDbContext.Avatars
                                 .FirstOrDefaultAsync(a => (a.UserId == avatarDto.UserId && a.ImageId == avatarDto.ImageId));

                    if (avatar == null)
                    {
                        throw new ArgumentException("Avatar not found.");
                    }

                    if (avatar.IsCurrent == true)
                    {
                        var avatars = _photoSNDbContext.Avatars
                                      .Where(a => a.UserId == avatarDto.UserId)
                                      .ToList();
                        if (avatars.Count != 1)
                        {
                            if (avatars.Last().IsCurrent != true)
                            {
                                avatars.Last().IsCurrent = true;
                            }
                            else
                            {
                                avatars[avatars.Count - 2].IsCurrent = true;
                            }
                        }
                    }

                    _photoSNDbContext.Avatars.Remove(avatar);

                    await _photoSNDbContext.SaveChangesAsync();

                    await transaction.CommitAsync();
                }
                catch (Exception e)
                {
                    transaction.Rollback();
                    throw e;
                }
            }
        }
コード例 #5
0
        public async Task <IActionResult> OnPostAsync()
        {
            var user = await _userManager.GetUserAsync(User);

            if (user == null)
            {
                return(NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."));
            }

            if (!ManageAvatarViewModel.AvatarImage.ContentType.Contains("image"))
            {
                ModelState.AddModelError("FileType", "File type should be image.");
            }

            if (!ModelState.IsValid)
            {
                await LoadAsync(user);

                return(Page());
            }

            var guid = Guid.NewGuid();
            await _imageHelper.SaveAvatarAsync(ManageAvatarViewModel.AvatarImage, guid);

            var createImageDto = new CreateImageDto
            {
                Guid     = guid,
                UserId   = user.Id,
                MimeType = ManageAvatarViewModel.AvatarImage.ContentType
            };
            var newImageId = await _photoSNRepository.CreateImageAsync(createImageDto);

            var createAvatarDto = new AvatarDto
            {
                UserId  = user.Id,
                ImageId = newImageId
            };
            await _photoSNRepository.CreateAvatarAsync(createAvatarDto);

            await _signInManager.RefreshSignInAsync(user);

            StatusMessage = "Your profile picture has been updated";
            return(RedirectToPage());
        }
コード例 #6
0
        public async Task ChangeCurrentAvatarAsync(AvatarDto avatarDto)
        {
            using (var transaction = _photoSNDbContext.Database.BeginTransaction())
            {
                try
                {
                    var avatar = await _photoSNDbContext.Avatars
                                 .FirstOrDefaultAsync(a => (a.UserId == avatarDto.UserId && a.ImageId == avatarDto.ImageId));

                    if (avatar == null)
                    {
                        throw new ArgumentException("Avatar not found.");
                    }
                    if (avatar.IsCurrent)
                    {
                        throw new InvalidOperationException("Avatar is already current.");
                    }

                    var currentAvatar = await _photoSNDbContext.Avatars
                                        .FirstOrDefaultAsync(a => (a.UserId == avatarDto.UserId && a.IsCurrent == true));

                    if (avatar != null)
                    {
                        currentAvatar.IsCurrent = false;
                    }

                    avatar.IsCurrent = true;

                    await _photoSNDbContext.SaveChangesAsync();

                    await transaction.CommitAsync();
                }
                catch (Exception e)
                {
                    transaction.Rollback();
                    throw e;
                }
            }
        }
コード例 #7
0
 public async Task <IActionResult> SetAvatar(AvatarDto avatarDto)
 {
     return(this.GenerateResponse(await _userService.SetAvatar(avatarDto)));
 }