public async Task <UserDto> CreateOrUpdateUserAsync(UserDto user) { using (MessengerDbContext context = contextFactory.Create()) { User userInfo = await context.Users .Include(opt => opt.UserPublicKeys) .Include(opt => opt.Phones) .Include(opt => opt.Emails) .Include(opt => opt.BlackList) .Include(opt => opt.Tokens) .FirstOrDefaultAsync(opt => opt.Id == user.Id) .ConfigureAwait(false); if (userInfo != null) { userInfo = UserConverter.GetUser(userInfo, user); context.Update(userInfo); } else { userInfo = UserConverter.GetUser(user); await context.AddAsync(userInfo).ConfigureAwait(false); } await context.SaveChangesAsync().ConfigureAwait(false); return(UserConverter.GetUserDto(userInfo, null, null)); } }
private async Task HandleEditUserBlockSegmentAsync(BlockSegmentVm segment) { using (MessengerDbContext _context = CreateContext()) { using (var transaction = await _context.Database.BeginTransactionAsync().ConfigureAwait(false)) { try { var user = await _context.Users.FirstOrDefaultAsync(_user => _user.Id == segment.SegmentHeader.ObjectId).ConfigureAwait(false); if (user != null) { if (TryDecryptPrivateData <UserVm>(segment, out var userData)) { user = UserConverter.GetUser(UserConverter.GetUserDto(userData)); user.Confirmed = true; _context.Users.Update(user); } } else { if (TryDecryptPrivateData <UserVm>(segment, out var userData)) { user = UserConverter.GetUser(UserConverter.GetUserDto(userData)); } else { user = new User { Id = segment.SegmentHeader.ObjectId, NodeId = segment.NodeId, Confirmed = true }; } await _context.Users.AddAsync(user).ConfigureAwait(false); } await _context.SaveChangesAsync().ConfigureAwait(false); transaction.Commit(); } catch (Exception ex) { AddErrorMessage(nameof(HandleNewUserBlockSegmentAsync), ex.ToString()); transaction.Rollback(); } } } }
public async Task <UserVm> EditUserAsync(EditUserVm editableUser, long userId) { using (MessengerDbContext context = contextFactory.Create()) { User editedUser = await context.Users .Include(user => user.Phones) .Include(user => user.Emails) .FirstOrDefaultAsync(user => user.Id == userId && user.Deleted == false) .ConfigureAwait(false); editedUser = UserConverter.GetUser(editedUser, editableUser); context.Update(editedUser); await context.SaveChangesAsync().ConfigureAwait(false); return(UserConverter.GetUserVm(editedUser)); } }