Пример #1
0
        public async Task <ICacheableDataDigest> SetAvatarAsync(long userId, ByteData avatar)
        {
            if (avatar is null)
            {
                throw new ArgumentNullException(nameof(avatar));
            }

            await _imageService.ValidateAsync(avatar.Data, avatar.ContentType, true);

            await _basicUserService.ThrowIfUserNotExist(userId);

            var entity = await _database.UserAvatars.Where(a => a.UserId == userId).SingleOrDefaultAsync();

            await using var transaction = await _database.Database.BeginTransactionAsync();

            var tag = await _dataManager.RetainEntryAsync(avatar.Data);

            var now = _clock.GetCurrentTime();

            if (entity is null)
            {
                var newEntity = new UserAvatarEntity
                {
                    DataTag      = tag,
                    Type         = avatar.ContentType,
                    LastModified = now,
                    UserId       = userId
                };
                _database.Add(newEntity);
            }
            else
            {
                if (entity.DataTag is not null)
                {
                    await _dataManager.FreeEntryAsync(entity.DataTag);
                }

                entity.DataTag      = tag;
                entity.Type         = avatar.ContentType;
                entity.LastModified = now;
            }

            await _database.SaveChangesAsync();

            await transaction.CommitAsync();

            _logger.LogInformation(Resource.LogSetAvatar, userId);

            return(new CacheableDataDigest(tag, now));
        }
Пример #2
0
        public async Task <IResult> SetAvatarAsync(long userId, BinaryFile avatar)
        {
            var user = await _userRepository.FirstOrDefaultAsync(u => u.Id == userId);

            var newAvatar = new UserAvatarEntity
            {
                Filename = avatar.Name,
                Avatar   = avatar.Bytes
            };

            await _userAvatarRepository.DeleteAsync(avatar => avatar.UserId == userId);

            user.Avatar = newAvatar;
            await _userRepository.UpdateAsync(user.Id, user);

            await _unitOfWork.SaveChangesAsync();

            return(Result.Success());
        }