package com.quickblox.q_municate_db.managers;
import com.j256.ormlite.dao.Dao;
import com.j256.ormlite.stmt.PreparedQuery;
import com.j256.ormlite.stmt.QueryBuilder;
import com.j256.ormlite.stmt.Where;
import com.quickblox.q_municate_db.managers.base.BaseManager;
import com.quickblox.q_municate_db.models.Dialog;
import com.quickblox.q_municate_db.models.DialogOccupant;
import com.quickblox.q_municate_db.models.User;
import com.quickblox.q_municate_db.utils.ErrorUtils;
import java.sql.SQLException;
import java.util.Collections;
import java.util.List;
public class UserDataManager extends BaseManager<User> {
private static final String TAG = UserDataManager.class.getSimpleName();
private Dao<DialogOccupant, Long> dialogOccupantDao;
public UserDataManager(Dao<User, Long> userDao, Dao<DialogOccupant, Long> dialogOccupantDao) {
super(userDao, UserDataManager.class.getSimpleName());
this.dialogOccupantDao = dialogOccupantDao;
}
public boolean isUserOwner(String email) {
User user = null;
try {
QueryBuilder<User, Long> queryBuilder = dao.queryBuilder();
queryBuilder.where().eq(User.Column.EMAIL, email);
PreparedQuery<User> preparedQuery = queryBuilder.prepare();
user = dao.queryForFirst(preparedQuery);
} catch (SQLException e) {
ErrorUtils.logError(e);
}
return user != null && user.getRole() == User.Role.OWNER;
}
public User getOwner() {
User user = null;
try {
QueryBuilder<User, Long> queryBuilder = dao.queryBuilder();
queryBuilder.where().eq(User.Column.ROLE, User.Role.OWNER);
PreparedQuery<User> preparedQuery = queryBuilder.prepare();
user = dao.queryForFirst(preparedQuery);
} catch (SQLException e) {
ErrorUtils.logError(e);
}
return user;
}
public List<User> getAllByIds(List<Integer> idsList) {
List<User> usersList = Collections.emptyList();
try {
QueryBuilder<User, Long> queryBuilder = dao.queryBuilder();
queryBuilder.where().in(User.Column.ID, idsList);
PreparedQuery<User> preparedQuery = queryBuilder.prepare();
usersList = dao.query(preparedQuery);
} catch (SQLException e) {
ErrorUtils.logError(e);
}
return usersList;
}
public List<User> getUsersForGroupChat(String dialogId, List<Integer> idsList) {
List<User> usersList = Collections.emptyList();
try {
QueryBuilder<User, Long> userQueryBuilder = dao.queryBuilder();
userQueryBuilder.where().in(User.Column.ID, idsList);
QueryBuilder<DialogOccupant, Long> dialogOccupantQueryBuilder = dialogOccupantDao.queryBuilder();
Where<DialogOccupant, Long> where = dialogOccupantQueryBuilder.where();
where.and(
where.eq(Dialog.Column.ID, dialogId),
where.eq(DialogOccupant.Column.STATUS, DialogOccupant.Status.ACTUAL)
);
userQueryBuilder.join(dialogOccupantQueryBuilder);
userQueryBuilder.distinct();
userQueryBuilder.orderBy(User.Column.FULL_NAME, true);
PreparedQuery<User> preparedQuery = userQueryBuilder.prepare();
usersList = dao.query(preparedQuery);
} catch (SQLException e) {
ErrorUtils.logError(e);
}
return usersList;
}
}