All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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;

/**
 * @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", Query.Operation.EQ, user);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy