package com.bahadirakin.dynamodb.dao;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBScanExpression;
import com.amazonaws.services.dynamodbv2.model.AttributeValue;
import com.amazonaws.services.dynamodbv2.model.ComparisonOperator;
import com.amazonaws.services.dynamodbv2.model.Condition;
import com.bahadirakin.dynamodb.model.User;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
//CHECKSTYLE.OFF: AbbreviationAsWordInName
public class UserRepositoryImpl implements UserRepository {
private final DynamoDBMapper dynamoDBMapper;
public UserRepositoryImpl(DynamoDBMapper dynamoDBMapper) {
this.dynamoDBMapper = dynamoDBMapper;
}
@Override
public void put(User user) {
this.dynamoDBMapper.save(user);
}
@Override
public void delete(String username) {
final User user = new User();
user.setUsername(username);
this.dynamoDBMapper.delete(user);
}
@Override
public User get(String username) throws Exception {
return Optional.ofNullable(dynamoDBMapper.load(User.class, username))
.orElseThrow(() -> new Exception(String.format("User for username %s was not found", username)));
}
@Override
public List<User> findAll() {
return dynamoDBMapper.scan(User.class, new DynamoDBScanExpression());
}
@Override
public List<User> findByEmail(String email) {
final List<User> users = dynamoDBMapper.scan(User.class,
new DynamoDBScanExpression().withFilterConditionEntry("email",
new Condition().withComparisonOperator(ComparisonOperator.EQ)
.withAttributeValueList(Collections.singletonList(new AttributeValue(email)))));
if (users == null) {
return Collections.emptyList();
} else {
return users;
}
}
}