package org.iatoki.judgels.uriel.services.impls; import org.apache.commons.lang3.RandomStringUtils; import org.iatoki.judgels.play.IdentityUtils; import org.iatoki.judgels.uriel.models.daos.ContestContestantDao; import org.iatoki.judgels.uriel.models.daos.ContestContestantPasswordDao; import org.iatoki.judgels.uriel.models.entities.ContestContestantModel; import org.iatoki.judgels.uriel.models.entities.ContestContestantPasswordModel; import org.iatoki.judgels.uriel.services.ContestContestantPasswordService; import javax.inject.Inject; import javax.inject.Named; import javax.inject.Singleton; import java.util.Collection; import java.util.List; import java.util.Map; @Singleton @Named("contestContestantPasswordService") public final class ContestContestantPasswordServiceImpl implements ContestContestantPasswordService { private final ContestContestantDao contestContestantDao; private final ContestContestantPasswordDao contestContestantPasswordDao; @Inject public ContestContestantPasswordServiceImpl(ContestContestantDao contestContestantDao, ContestContestantPasswordDao contestContestantPasswordDao) { this.contestContestantDao = contestContestantDao; this.contestContestantPasswordDao = contestContestantPasswordDao; } @Override public void generateContestantPasswordForAllContestants(String contestJid) { List<ContestContestantModel> contestantModels = contestContestantDao.findAllByContestJid(contestJid); for (ContestContestantModel contestantModel : contestantModels) { generateNewPassword(contestJid, contestantModel); } } @Override public void generateContestantPassword(String contestJid, String contestantJid) { ContestContestantModel contestantModel = contestContestantDao.findByContestJidAndContestantJid(contestJid, contestantJid); generateNewPassword(contestJid, contestantModel); } @Override public String getContestantPassword(String contestJid, String contestantJid) { if (contestContestantPasswordDao.existsByContestJidAndContestantJid(contestJid, contestantJid)) { return contestContestantPasswordDao.findByContestJidAndContestantJid(contestJid, contestantJid).password; } else { return null; } } @Override public Map<String, String> getContestantPasswordsMap(String contestJid, Collection<String> contestantJids) { return contestContestantPasswordDao.getContestantPasswordsByContestJidAndContestantJids(contestJid, contestantJids); } private void generateNewPassword(String contestJid, ContestContestantModel contestantModel) { String newPassword = RandomStringUtils.random(6, "ABCDEFGHIJKLMNOPQRSTUVWXYZ"); if (contestContestantPasswordDao.existsByContestJidAndContestantJid(contestJid, contestantModel.userJid)) { ContestContestantPasswordModel existingModel = contestContestantPasswordDao.findByContestJidAndContestantJid(contestJid, contestantModel.userJid); existingModel.password = newPassword; contestContestantPasswordDao.edit(existingModel, IdentityUtils.getUserJid(), IdentityUtils.getIpAddress()); } else { ContestContestantPasswordModel newModel = new ContestContestantPasswordModel(); newModel.contestJid = contestJid; newModel.contestantJid = contestantModel.userJid; newModel.password = newPassword; contestContestantPasswordDao.persist(newModel, IdentityUtils.getUserJid(), IdentityUtils.getIpAddress()); } } }