package com.elminster.psn.restful.service; import java.util.ArrayList; import java.util.List; import javax.transaction.Transactional; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.elminster.common.util.CollectionUtil; import com.elminster.psn.restful.dao.IGameDao; import com.elminster.psn.restful.dao.IPlatformDao; import com.elminster.psn.restful.dao.ITrophyDao; import com.elminster.psn.restful.domain.Game; import com.elminster.psn.restful.domain.Trophy; import com.elminster.retrieve.psn.data.game.Platform; import com.elminster.retrieve.psn.data.game.TrophyType; import com.elminster.retrieve.psn.data.user.PSNUserGame; import com.elminster.retrieve.psn.exception.ServiceException; import com.elminster.retrieve.psn.service.IPSNApi; import com.elminster.retrieve.psn.service.PSNApiImpl; @Service @Transactional public class UserGameServiceImpl implements IUserGameService { /** the PSN API. */ private static final IPSNApi API = new PSNApiImpl(); private final ITrophyDao trohpyDao; private final IGameDao gameDao; private final IPlatformDao platformDao; @Autowired public UserGameServiceImpl(IGameDao gameDao, ITrophyDao trophyDao, IPlatformDao platformDao) { this.gameDao = gameDao; this.trohpyDao = trophyDao; this.platformDao = platformDao; } @Override public List<PSNUserGame> getUserGameList(String username) throws ServiceException { // call api List<PSNUserGame> list = API.getPSNUserGameList(username); if (CollectionUtil.isNotEmpty(list)) { for (PSNUserGame ug : list) { String gameId = ug.getGameId(); Game game = gameDao.findByGameId(gameId); if (null == game) { game = new Game(); } game.setGameId(gameId); game.setImageUrl(ug.getImageUrl()); List<Platform> platforms = ug.getPlatform(); if (CollectionUtil.isNotEmpty(platforms)) { List<com.elminster.psn.restful.domain.Platform> pl = new ArrayList<>(); for (Platform platform : platforms) { String platformName = platform.getName(); com.elminster.psn.restful.domain.Platform p = platformDao.findByPlatform(platformName); if (p == null) { p = new com.elminster.psn.restful.domain.Platform(); p.setPlatform(platformName); } pl.add(p); } game.setPlatform(pl); } game.setTitle(ug.getTitle()); // update trophies updateTrophies(game); gameDao.save(game); } } return list; } private Game updateTrophies(final Game game) { // get trophies List<Trophy> trophies = trohpyDao.findByGameId(game.getId()); if (CollectionUtil.isNotEmpty(trophies)) { int bronze = 0; int silver = 0; int gold = 0; int platinum = 0; for (Trophy trophy : trophies) { if (TrophyType.BRONZE.getType() == trophy.getType()) { bronze++; } else if (TrophyType.SILVER.getType() == trophy.getType()) { silver++; } else if (TrophyType.GOLD.getType() == trophy.getType()) { gold++; } else if (TrophyType.PLATINUM.getType() == trophy.getType()) { platinum++; } } game.setBronzeCount(bronze); game.setGlodCount(gold); game.setSilverCount(silver); game.setPlatinumCount(platinum); game.setTotalCount(bronze + gold + silver + platinum); } return game; } }