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.ContestPermission; import org.iatoki.judgels.uriel.ContestSupervisor; import org.iatoki.judgels.uriel.ContestSupervisorNotFoundException; import org.iatoki.judgels.uriel.models.daos.ContestDao; import org.iatoki.judgels.uriel.models.daos.ContestSupervisorDao; import org.iatoki.judgels.uriel.models.entities.ContestModel; import org.iatoki.judgels.uriel.models.entities.ContestSupervisorModel; import org.iatoki.judgels.uriel.models.entities.ContestSupervisorModel_; import org.iatoki.judgels.uriel.services.ContestSupervisorService; import javax.inject.Inject; import javax.inject.Named; import javax.inject.Singleton; import java.util.List; @Singleton @Named("contestSupervisorService") public final class ContestSupervisorServiceImpl implements ContestSupervisorService { private final ContestDao contestDao; private final ContestSupervisorDao contestSupervisorDao; @Inject public ContestSupervisorServiceImpl(ContestDao contestDao, ContestSupervisorDao contestSupervisorDao) { this.contestDao = contestDao; this.contestSupervisorDao = contestSupervisorDao; } @Override public ContestSupervisor findContestSupervisorByContestJidAndUserJid(String contestJid, String userJid) { ContestSupervisorModel contestSupervisorModel = contestSupervisorDao.findByContestJidAndSupervisorJid(contestJid, userJid); return createContestSupervisorFromModel(contestSupervisorModel); } @Override public Page<ContestSupervisor> pageContestSupervisorsByContestJid(String contestJid, long pageIndex, long pageSize, String orderBy, String orderDir, String filterString) { long totalPages = contestSupervisorDao.countByFilters(filterString, ImmutableMap.of(ContestSupervisorModel_.contestJid, contestJid), ImmutableMap.of()); List<ContestSupervisorModel> contestSupervisorModels = contestSupervisorDao.findSortedByFilters(orderBy, orderDir, filterString, ImmutableMap.of(ContestSupervisorModel_.contestJid, contestJid), ImmutableMap.of(), pageIndex * pageSize, pageSize); List<ContestSupervisor> contestSupervisors = Lists.transform(contestSupervisorModels, m -> createContestSupervisorFromModel(m)); return new Page<>(contestSupervisors, totalPages, pageIndex, pageSize); } @Override public ContestSupervisor findContestSupervisorByContestSupervisorId(long contestSupervisorId) throws ContestSupervisorNotFoundException { ContestSupervisorModel contestSupervisorModel = contestSupervisorDao.findById(contestSupervisorId); if (contestSupervisorModel != null) { return createContestSupervisorFromModel(contestSupervisorModel); } else { throw new ContestSupervisorNotFoundException("Contest Supervisor not found."); } } @Override public boolean isContestSupervisorInContestByUserJid(String contestJid, String contestSupervisorJid) { return contestSupervisorDao.existsByContestJidAndSupervisorJid(contestJid, contestSupervisorJid); } @Override public void createContestSupervisor(long contestId, String userJid, ContestPermission contestPermission) { ContestModel contestModel = contestDao.findById(contestId); ContestSupervisorModel contestSupervisorModel = new ContestSupervisorModel(); contestSupervisorModel.contestJid = contestModel.jid; contestSupervisorModel.userJid = userJid; contestSupervisorModel.permission = contestPermission.toJSONString(); contestSupervisorDao.persist(contestSupervisorModel, IdentityUtils.getUserJid(), IdentityUtils.getIpAddress()); } @Override public void updateContestSupervisor(long contestSupervisorId, ContestPermission contestPermission) { ContestSupervisorModel contestSupervisorModel = contestSupervisorDao.findById(contestSupervisorId); contestSupervisorModel.permission = contestPermission.toJSONString(); contestSupervisorDao.edit(contestSupervisorModel, IdentityUtils.getUserJid(), IdentityUtils.getIpAddress()); } private ContestSupervisor createContestSupervisorFromModel(ContestSupervisorModel contestSupervisorModel) { return new ContestSupervisor(contestSupervisorModel.id, contestSupervisorModel.contestJid, contestSupervisorModel.userJid, ContestPermission.fromJSONString(contestSupervisorModel.permission)); } }