package com.bls.mongodb.dao; import javax.validation.ValidationException; import org.mongojack.DBQuery; import com.bls.core.user.User; import com.bls.dao.UserDao; import com.bls.mongodb.core.UserMongodb; import com.google.common.base.Optional; import com.google.inject.Inject; import com.mongodb.DB; public class UserMongodbDao extends CommonMongodbDao<UserMongodb, User<String>, String> implements UserDao<User<String>> { @Inject public UserMongodbDao(final DB db) { super(db); } @Override protected Class<UserMongodb> getMongodbModelType() { return UserMongodb.class; } @Override public Optional<User<String>> findByEmail(String email) { final UserMongodb user = dbCollection.findOne(DBQuery.is("email", email)); if (user == null) { return Optional.absent(); } return Optional.of(convert2coreModel(user)); } @Override public User<String> create(final User<String> user) { return super.create(checkDuplicate(user)); } private User<String> checkDuplicate(final User<String> user) { Optional<User<String>> existingUser = findByEmail(user.getEmail()); if (existingUser.isPresent()) { throw new ValidationException(String.format("User with email: %s already exist", user.getEmail())); } return user; } }