public void FromDbItem_FullyPopulated_ExpectedContent() { Dictionary <string, AttributeValue> input = GetPopulatedDbItem(); PhotoLikeRecord result = Mappers.PhotoLike.FromDbItem(input); result.CreatedTime.ShouldBe(createdTime); result.PhotoId.ShouldBe(photoId); result.UserId.ShouldBe(userId); }
private async Task AddLikeRecord(UserId userId, PhotoId photoId) { logWriter.LogInformation($"{nameof(AddLikeRecord)}({nameof(userId)} = '{userId}', {nameof(photoId)} = '{photoId}')"); var photo = await photoRepository.GetPhotoById(photoId, Guid.Empty); if (photo.PhotoIsLikedByCurrentUser) { return; } PhotoLikeRecord likeRecord = new PhotoLikeRecord { UserId = userId, PhotoId = photoId, CreatedTime = DateTimeOffset.UtcNow }; var scoreDelta = scoreCalculator.GetLikeScore(likeRecord); var putItemRequest = new PutItemRequest() { TableName = tableName, Item = Mappers.PhotoLike.ToDbItem(likeRecord), }; try { await dynamoDbCore.PutItem(putItemRequest); await UpdateLikeCountAndScore(photo, 1, scoreDelta); } catch (Exception ex) { logWriter.LogError(ex, $"Error in {nameof(AddLikeRecord)}({nameof(userId)} = '{userId}', {nameof(photoId)} = '{photoId}'):\n{ex.ToString()}"); throw; } }
private async Task RemoveLikeRecord(UserId userId, PhotoId photoId) { BatchGetItemRequest request = new BatchGetItemRequest { RequestItems = new Dictionary <string, KeysAndAttributes> { { tableName, new KeysAndAttributes { Keys = new[] { Mappers.PhotoModel.ToDbKey(new PhotoModel { PhotoId = photoId }), Mappers.PhotoLike.ToDbKey(new PhotoLikeRecord { PhotoId = photoId, UserId = userId }) }.ToList() } } } }; var items = await dynamoDbCore.BatchGetItem(request); PhotoModel photo = null; PhotoLikeRecord likeRecord = null; foreach (var item in items[tableName]) { switch (item[FieldMappings.RecordType].S.ToLower()) { case "photo": photo = Mappers.PhotoModel.FromDbItem(item); break; case "photolike": likeRecord = Mappers.PhotoLike.FromDbItem(item); break; } } if (likeRecord == null) { return; } logWriter.LogInformation($"{nameof(RemoveLikeRecord)}({nameof(userId)} = '{userId}', {nameof(photoId)} = '{photoId}')"); var scoreDelta = scoreCalculator.GetLikeScore(likeRecord) * -1; var deleteItemRequest = new DeleteItemRequest( tableName, Mappers.PhotoLike.ToDbKey(new PhotoLikeRecord { UserId = userId, PhotoId = photoId, CreatedTime = system.Time.UtcNow })); try { await dynamoDbCore.DeleteItem(deleteItemRequest); await UpdateLikeCountAndScore(photo, -1, scoreDelta); } catch (Exception ex) { logWriter.LogError(ex, $"Error in {nameof(RemoveLikeRecord)}({nameof(userId)} = '{userId}', {nameof(photoId)} = '{photoId}'):\n{ex.ToString()}"); throw; } }