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.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