
de.comhix.twitch.database.dao.UserDao Maven / Gradle / Ivy
package de.comhix.twitch.database.dao;
import com.google.inject.Inject;
import de.comhix.twitch.database.objects.UserDatabaseObject;
import io.reactivex.Completable;
import io.reactivex.Maybe;
import io.reactivex.Single;
import org.bson.types.ObjectId;
import javax.inject.Named;
import java.util.Objects;
import static de.comhix.twitch.database.dao.Query.Operation.EQ;
/**
* @author Benjamin Beeker
*/
public class UserDao implements SimpleDao {
public static final String USER_INJECT = "User_Inject";
private final BaseDao baseDao;
private final String user;
@Inject
public UserDao(BaseDao baseDao, @Named(USER_INJECT) String user) {
this.baseDao = baseDao;
this.user = user;
}
@Override
public Maybe get(String id, Class typeClass) {
return baseDao.get(id, typeClass)
.flatMap(object -> {
if (Objects.equals(object.user, user)) {
return Maybe.just(object);
}
return Maybe.empty();
});
}
@Override
public Single save(Type object) {
//noinspection unchecked
return ((Maybe) baseDao.get(object.id, object.getClass()))
.toSingle(object)
.flatMap(foundObject -> {
if (!Objects.equals(foundObject.user, user)) {
object.id = new ObjectId().toString();
object.version = 0;
}
object.user = user;
return baseDao.save(object);
});
}
@Override
public Completable delete(String id, Class typeClass) {
return baseDao.get(id, typeClass)
.flatMapCompletable(object -> {
if (!Objects.equals(object.user, user)) {
return Completable.complete();
}
return baseDao.delete(id, typeClass);
});
}
@Override
public Query query(Class typeClass) {
return baseDao.query(typeClass).with("user", EQ, user);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy