package org.iatoki.judgels.uriel.services.impls;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;
import org.iatoki.judgels.play.IdentityUtils;
import org.iatoki.judgels.play.Page;
import org.iatoki.judgels.uriel.ContestManager;
import org.iatoki.judgels.uriel.models.daos.ContestDao;
import org.iatoki.judgels.uriel.models.daos.ContestManagerDao;
import org.iatoki.judgels.uriel.models.entities.ContestManagerModel;
import org.iatoki.judgels.uriel.models.entities.ContestManagerModel_;
import org.iatoki.judgels.uriel.models.entities.ContestModel;
import org.iatoki.judgels.uriel.services.ContestManagerService;
import javax.inject.Inject;
import javax.inject.Named;
import javax.inject.Singleton;
import java.util.List;
@Singleton
@Named("contestManagerService")
public final class ContestManagerServiceImpl implements ContestManagerService {
private final ContestDao contestDao;
private final ContestManagerDao contestManagerDao;
@Inject
public ContestManagerServiceImpl(ContestDao contestDao, ContestManagerDao contestManagerDao) {
this.contestDao = contestDao;
this.contestManagerDao = contestManagerDao;
}
@Override
public boolean isContestManagerInContestByUserJid(String contestJid, String contestManagerJid) {
return contestManagerDao.existsByContestJidAndManagerJid(contestJid, contestManagerJid);
}
@Override
public Page<ContestManager> pageContestManagersByContestJid(String contestJid, long pageIndex, long pageSize, String orderBy, String orderDir, String filterString) {
long totalPages = contestManagerDao.countByFilters(filterString, ImmutableMap.of(ContestManagerModel_.contestJid, contestJid), ImmutableMap.of());
List<ContestManagerModel> contestManagerModels = contestManagerDao.findSortedByFilters(orderBy, orderDir, filterString, ImmutableMap.of(ContestManagerModel_.contestJid, contestJid), ImmutableMap.of(), pageIndex * pageSize, pageSize);
List<ContestManager> contestManagers = Lists.transform(contestManagerModels, m -> createContestManagerFromModel(m));
return new Page<>(contestManagers, totalPages, pageIndex, pageSize);
}
@Override
public void createContestManager(long contestId, String userJid) {
ContestModel contestModel = contestDao.findById(contestId);
ContestManagerModel contestManagerModel = new ContestManagerModel();
contestManagerModel.contestJid = contestModel.jid;
contestManagerModel.userJid = userJid;
contestManagerDao.persist(contestManagerModel, IdentityUtils.getUserJid(), IdentityUtils.getIpAddress());
}
private ContestManager createContestManagerFromModel(ContestManagerModel contestManagerModel) {
return new ContestManager(contestManagerModel.id, contestManagerModel.contestJid, contestManagerModel.userJid);
}
}