
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.Observable;
import org.bson.types.ObjectId;
import javax.inject.Named;
import java.util.Objects;
import java.util.Optional;
/**
* @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 Observable> get(String id, Class typeClass) {
return baseDao.get(id, typeClass).map(object -> {
if (object.isPresent() && Objects.equals(object.get().user, user)) {
return object;
}
return Optional.empty();
});
}
@Override
public Observable save(Type object) {
return baseDao.get(object.id, object.getClass())
.flatMap(foundObject -> {
if (foundObject.isPresent() && !Objects.equals(foundObject.get().user, user)) {
object.id = new ObjectId().toString();
}
return baseDao.save(object);
});
}
@Override
public Completable delete(String id, Class typeClass) {
return baseDao.get(id, typeClass).flatMapCompletable(object -> {
if (object.isPresent()) {
if (Objects.equals(object.get().user, user)) {
throw new IllegalAccessException();
}
return baseDao.delete(id, typeClass);
}
return Completable.complete();
});
}
@Override
public Query query(Class typeClass) {
return baseDao.query(typeClass).with("user", Query.Operation.EQ, user);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy