package org.iatoki.judgels.raguel.user.item; import org.iatoki.judgels.play.IdentityUtils; import javax.inject.Inject; import javax.inject.Singleton; import java.util.List; import java.util.stream.Collectors; @Singleton public final class UserItemServiceImpl implements UserItemService { private final UserItemDao userItemDao; @Inject public UserItemServiceImpl(UserItemDao userItemDao) { this.userItemDao = userItemDao; } @Override public boolean userItemExistsByUserJidAndItemJid(String userJid, String itemJid) { return userItemDao.existsByUserJidAndItemJid(userJid, itemJid); } @Override public boolean userItemExistsByUserJidAndItemJidAndStatus(String userJid, String itemJid, UserItemStatus status) { return userItemDao.existsByUserJidItemJidAndStatus(userJid, itemJid, status.name()); } @Override public void upsertUserItem(String userJid, String itemJid, UserItemStatus status) { if (userItemDao.existsByUserJidAndItemJid(userJid, itemJid)) { UserItemModel userItemModel = userItemDao.findByUserJidAndItemJid(userJid, itemJid); userItemModel.status = status.name(); userItemDao.edit(userItemModel, IdentityUtils.getUserJid(), IdentityUtils.getIpAddress()); } else { UserItemModel userItemModel = new UserItemModel(); userItemModel.userJid = userJid; userItemModel.itemJid = itemJid; userItemModel.status = status.name(); userItemDao.persist(userItemModel, IdentityUtils.getUserJid(), IdentityUtils.getIpAddress()); } } @Override public List<UserItem> getUserItemsByUserJid(String userJid) { return userItemDao.getByUserJid(userJid).stream().map(u -> createFromModel(u)).collect(Collectors.toList()); } @Override public List<UserItem> getUserItemsByItemJid(String itemJid) { return userItemDao.getByItemJid(itemJid).stream().map(u -> createFromModel(u)).collect(Collectors.toList()); } private UserItem createFromModel(UserItemModel u) { return new UserItem(u.userJid, u.itemJid, UserItemStatus.valueOf(u.status)); } }