From 9a4ca3a612dd83844d9b6eb28f646e87d0aa9efa Mon Sep 17 00:00:00 2001 From: samnyan <205-neumphis@users.noreply.dev.s-ul.eu> Date: Sat, 28 Mar 2020 17:38:23 +0900 Subject: [PATCH] [api] Add chunithm profile export and import [general] Rename some method name and add more docs --- pom.xml | 2 +- .../controller/sega/ApiAimeController.java | 11 +- .../chuni/amazon/ApiAmazonController.java | 152 ++++++++++++++++-- .../amazon/external/ChuniDataExport.java | 31 ++++ .../amazon/external/ChuniDataImport.java | 31 ++++ .../amazon/external/ExternalUserData.java | 118 ++++++++++++++ .../aimedb/handler/Impl/RegisterHandler.java | 23 +-- .../dao/userdata/UserActivityRepository.java | 2 + .../dao/userdata/UserCharacterRepository.java | 3 + .../dao/userdata/UserItemRepository.java | 3 + .../dao/userdata/UserPlaylogRepository.java | 3 +- .../handler/impl/GetUserCharacterHandler.java | 3 +- .../handler/impl/GetUserCourseHandler.java | 5 +- .../handler/impl/GetUserDataExHandler.java | 2 +- .../handler/impl/GetUserDuelHandler.java | 3 +- .../handler/impl/GetUserMapHandler.java | 3 +- .../chunithm/model/userdata/UserData.java | 1 - .../chunithm/service/UserActivityService.java | 4 + .../service/UserCharacterService.java | 22 +-- .../chunithm/service/UserChargeService.java | 7 +- .../chunithm/service/UserCourseService.java | 12 +- .../chunithm/service/UserDataExService.java | 10 +- .../chunithm/service/UserDataService.java | 29 ++-- .../chunithm/service/UserDuelService.java | 3 +- .../service/UserGameOptionExService.java | 8 +- .../service/UserGameOptionService.java | 8 +- .../chunithm/service/UserItemService.java | 13 +- .../sega/chunithm/service/UserMapService.java | 24 +-- .../service/UserMusicDetailService.java | 16 +- .../chunithm/service/UserPlaylogService.java | 11 +- .../samnyan/aqua/sega/general/model/Card.java | 1 + .../sega/general/service/CardService.java | 39 +++++ 32 files changed, 484 insertions(+), 119 deletions(-) create mode 100644 src/main/java/icu/samnyan/aqua/api/model/resp/sega/chuni/amazon/external/ChuniDataExport.java create mode 100644 src/main/java/icu/samnyan/aqua/api/model/resp/sega/chuni/amazon/external/ChuniDataImport.java create mode 100644 src/main/java/icu/samnyan/aqua/api/model/resp/sega/chuni/amazon/external/ExternalUserData.java diff --git a/pom.xml b/pom.xml index 0edf9553..35094067 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ icu.samnya aqua - 0.0.12-RELEASE + 0.0.12a-RELEASE Aqua Server A multipurpose game server diff --git a/src/main/java/icu/samnyan/aqua/api/controller/sega/ApiAimeController.java b/src/main/java/icu/samnyan/aqua/api/controller/sega/ApiAimeController.java index 3ed62184..28c004e8 100644 --- a/src/main/java/icu/samnyan/aqua/api/controller/sega/ApiAimeController.java +++ b/src/main/java/icu/samnyan/aqua/api/controller/sega/ApiAimeController.java @@ -1,7 +1,7 @@ package icu.samnyan.aqua.api.controller.sega; -import icu.samnyan.aqua.sega.general.dao.CardRepository; import icu.samnyan.aqua.sega.general.model.Card; +import icu.samnyan.aqua.sega.general.service.CardService; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -11,20 +11,21 @@ import java.util.Map; import java.util.Optional; /** + * General Aime actions endpoint * @author samnyan (privateamusement@protonmail.com) */ @RestController @RequestMapping("api/sega/aime") public class ApiAimeController { - private final CardRepository cardRepository; + private final CardService cardService; - public ApiAimeController(CardRepository cardRepository) { - this.cardRepository = cardRepository; + public ApiAimeController(CardService cardService) { + this.cardService = cardService; } @PostMapping("getByAccessCode") public Optional getByAccessCode(@RequestBody Map request) { - return cardRepository.findByLuid(request.get("accessCode").replaceAll("-","").replaceAll(" ","")); + return cardService.getCardByAccessCode(request.get("accessCode").replaceAll("-", "").replaceAll(" ", "")); } } diff --git a/src/main/java/icu/samnyan/aqua/api/controller/sega/game/chuni/amazon/ApiAmazonController.java b/src/main/java/icu/samnyan/aqua/api/controller/sega/game/chuni/amazon/ApiAmazonController.java index 725928b8..fb0bb0a6 100644 --- a/src/main/java/icu/samnyan/aqua/api/controller/sega/game/chuni/amazon/ApiAmazonController.java +++ b/src/main/java/icu/samnyan/aqua/api/controller/sega/game/chuni/amazon/ApiAmazonController.java @@ -6,22 +6,28 @@ import icu.samnyan.aqua.api.model.ReducedPageResponse; import icu.samnyan.aqua.api.model.resp.sega.chuni.amazon.ProfileResp; import icu.samnyan.aqua.api.model.resp.sega.chuni.amazon.RatingItem; import icu.samnyan.aqua.api.model.resp.sega.chuni.amazon.RecentResp; +import icu.samnyan.aqua.api.model.resp.sega.chuni.amazon.external.ChuniDataExport; +import icu.samnyan.aqua.api.model.resp.sega.chuni.amazon.external.ChuniDataImport; +import icu.samnyan.aqua.api.model.resp.sega.chuni.amazon.external.ExternalUserData; import icu.samnyan.aqua.api.util.ApiMapper; import icu.samnyan.aqua.sega.chunithm.model.gamedata.Level; import icu.samnyan.aqua.sega.chunithm.model.gamedata.Music; import icu.samnyan.aqua.sega.chunithm.model.userdata.*; import icu.samnyan.aqua.sega.chunithm.service.*; +import icu.samnyan.aqua.sega.general.model.Card; +import icu.samnyan.aqua.sega.general.service.CardService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Sort; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; /** @@ -31,24 +37,45 @@ import java.util.stream.Collectors; @RequestMapping("api/game/chuni/amazon") public class ApiAmazonController { + private static final Logger logger = LoggerFactory.getLogger(ApiAmazonController.class); + private final ApiMapper mapper; - private final UserDataService userDataService; - private final UserPlaylogService userPlaylogService; - private final UserMusicDetailService userMusicDetailService; + private final CardService cardService; + + private final UserActivityService userActivityService; + private final UserCharacterService userCharacterService; + private final UserChargeService userChargeService; private final UserCourseService userCourseService; + private final UserDataService userDataService; + private final UserDataExService userDataExService; + private final UserDuelService userDuelService; private final UserGameOptionService userGameOptionService; + private final UserGameOptionExService userGameOptionExService; + private final UserItemService userItemService; + private final UserMapService userMapService; + private final UserMusicDetailService userMusicDetailService; + private final UserPlaylogService userPlaylogService; private final GameMusicService gameMusicService; @Autowired - public ApiAmazonController(ApiMapper mapper, UserDataService userDataService, UserPlaylogService userPlaylogService, UserMusicDetailService userMusicDetailService, UserCourseService userCourseService, UserGameOptionService userGameOptionService, GameMusicService gameMusicService) { + public ApiAmazonController(ApiMapper mapper, CardService cardService, UserActivityService userActivityService, UserCharacterService userCharacterService, UserChargeService userChargeService, UserDataService userDataService, UserDataExService userDataExService, UserGameOptionExService userGameOptionExService, UserMapService userMapService, UserPlaylogService userPlaylogService, UserMusicDetailService userMusicDetailService, UserCourseService userCourseService, UserDuelService userDuelService, UserGameOptionService userGameOptionService, UserItemService userItemService, GameMusicService gameMusicService) { this.mapper = mapper; + this.cardService = cardService; + this.userActivityService = userActivityService; + this.userCharacterService = userCharacterService; + this.userChargeService = userChargeService; this.userDataService = userDataService; + this.userDataExService = userDataExService; + this.userGameOptionExService = userGameOptionExService; + this.userMapService = userMapService; this.userPlaylogService = userPlaylogService; this.userMusicDetailService = userMusicDetailService; this.userCourseService = userCourseService; + this.userDuelService = userDuelService; this.userGameOptionService = userGameOptionService; + this.userItemService = userItemService; this.gameMusicService = gameMusicService; } @@ -67,7 +94,7 @@ public class ApiAmazonController { public ProfileResp getProfile(@RequestParam String aimeId) { ProfileResp resp = mapper.convert(userDataService.getUserByExtId(aimeId).orElseThrow(), new TypeReference<>() { }); - UserCourse course = userCourseService.getByUser(aimeId) + UserCourse course = userCourseService.getByUserId(aimeId) .stream() .filter(UserCourse::isClear) .max(Comparator.comparingInt(UserCourse::getClassId)) @@ -168,12 +195,115 @@ public class ApiAmazonController { @GetMapping("song/{id}") public List getSongDetail(@RequestParam String aimeId, @PathVariable int id) { - return userMusicDetailService.getByUserAndMusicId(aimeId, id); + return userMusicDetailService.getByUserIdAndMusicId(aimeId, id); } @GetMapping("song/{id}/{level}") public List getLevelPlaylog(@RequestParam String aimeId, @PathVariable int id, @PathVariable int level) { - return userPlaylogService.getByUserAndMusicIdAndLevel(aimeId, id, level); + return userPlaylogService.getByUserIdAndMusicIdAndLevel(aimeId, id, level); + } + + @GetMapping("export") + public ResponseEntity exportAllUserData(@RequestParam String aimeId) { + ChuniDataExport data = new ChuniDataExport(); + try { + data.setUserData(userDataService.getUserByExtId(aimeId).orElseThrow()); + data.setUserActivityList(userActivityService.getByUserId(aimeId)); + data.setUserCharacterList(userCharacterService.getByUserId(aimeId)); + data.setUserChargeList(userChargeService.getByUserId(aimeId)); + data.setUserCourseList(userCourseService.getByUserId(aimeId)); + data.setUserDataEx(userDataExService.getByExtId(aimeId).orElseThrow()); + data.setUserDuelList(userDuelService.getByUserId(aimeId)); + data.setUserGameOption(userGameOptionService.getByUserId(aimeId).orElseThrow()); + data.setUserGameOptionEx(userGameOptionExService.getByUserId(aimeId).orElseThrow()); + data.setUserItemList(userItemService.getByUserId(aimeId)); + data.setUserMapList(userMapService.getByUserId(aimeId)); + data.setUserMusicDetailList(userMusicDetailService.getByUserId(aimeId)); + data.setUserPlaylogList(userPlaylogService.getByUserId(aimeId)); + } catch (NoSuchElementException e) { + return ResponseEntity.status(HttpStatus.NOT_FOUND) + .body(new MessageResponse("User not found")); + } catch (Exception e) { + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) + .body(new MessageResponse("Error during data export. Reason: " + e.getMessage())); + } + // Set filename + HttpHeaders headers = new HttpHeaders(); + headers.set("content-disposition", "attachment; filename=" + aimeId + "_exported.json"); + return new ResponseEntity<>(data, headers, HttpStatus.OK); + } + + @PostMapping("import") + public ResponseEntity importAllUserData(@RequestBody ChuniDataImport data) { + ExternalUserData exUser = data.getUserData(); + + Optional cardOptional = cardService.getCardByAccessCode(exUser.getAccessCode()); + Card card; + if (cardOptional.isPresent()) { + if (userDataService.getUserByCard(cardOptional.get()).isPresent()) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .body(new MessageResponse("This card already has a chunithm profile.")); + } else { + card = cardOptional.get(); + } + } else { + card = cardService.registerByAccessCode(exUser.getAccessCode()); + } + + UserData userData = mapper.convert(exUser, new TypeReference<>() { + }); + userData.setCard(card); + userDataService.saveAndFlushUserData(userData); + + List userActivityList = data.getUserActivityList(); + userActivityList.forEach(x -> x.setUser(userData)); + userActivityService.saveAll(userActivityList); + + List userCharacterList = data.getUserCharacterList(); + userCharacterList.forEach(x -> x.setUser(userData)); + userCharacterService.saveAll(userCharacterList); + + List userChargeList = data.getUserChargeList(); + userCharacterList.forEach(x -> x.setUser(userData)); + userChargeService.saveAll(userChargeList); + + List userCourseList = data.getUserCourseList(); + userCourseList.forEach(x -> x.setUser(userData)); + userCourseService.saveAll(userCourseList); + + UserDataEx userDataEx = data.getUserDataEx(); + userDataEx.setUser(userData); + userDataExService.save(userDataEx); + + List userDuelList = data.getUserDuelList(); + userDuelList.forEach(x -> x.setUser(userData)); + userDuelService.saveAll(userDuelList); + + UserGameOption userGameOption = data.getUserGameOption(); + userGameOption.setUser(userData); + userGameOptionService.save(userGameOption); + + UserGameOptionEx userGameOptionEx = data.getUserGameOptionEx(); + userGameOptionEx.setUser(userData); + userGameOptionExService.save(userGameOptionEx); + + List userItemList = data.getUserItemList(); + userItemList.forEach(x -> x.setUser(userData)); + userItemService.saveAll(userItemList); + + List userMapList = data.getUserMapList(); + userMapList.forEach(x -> x.setUser(userData)); + userMapService.saveAll(userMapList); + + List userMusicDetailList = data.getUserMusicDetailList(); + userMusicDetailList.forEach(x -> x.setUser(userData)); + userMusicDetailService.saveAll(userMusicDetailList); + + List userPlaylogList = data.getUserPlaylogList(); + userPlaylogList.forEach(x -> x.setUser(userData)); + userPlaylogService.saveAll(userPlaylogList); + + return ResponseEntity.ok(new MessageResponse("Import successfully, aimeId: " + card.getExtId())); } private int calculateRating(int levelBase, int score) { diff --git a/src/main/java/icu/samnyan/aqua/api/model/resp/sega/chuni/amazon/external/ChuniDataExport.java b/src/main/java/icu/samnyan/aqua/api/model/resp/sega/chuni/amazon/external/ChuniDataExport.java new file mode 100644 index 00000000..9fe1301b --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/api/model/resp/sega/chuni/amazon/external/ChuniDataExport.java @@ -0,0 +1,31 @@ +package icu.samnyan.aqua.api.model.resp.sega.chuni.amazon.external; + +import icu.samnyan.aqua.sega.chunithm.model.userdata.*; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * This class is use for exporting CHUNITHM profile + * @author samnyan (privateamusement@protonmail.com) + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class ChuniDataExport { + private UserData userData; + private List userActivityList; + private List userCharacterList; + private List userChargeList; + private List userCourseList; + private UserDataEx userDataEx; + private List userDuelList; + private UserGameOption userGameOption; + private UserGameOptionEx userGameOptionEx; + private List userItemList; + private List userMapList; + private List userMusicDetailList; + private List userPlaylogList; +} diff --git a/src/main/java/icu/samnyan/aqua/api/model/resp/sega/chuni/amazon/external/ChuniDataImport.java b/src/main/java/icu/samnyan/aqua/api/model/resp/sega/chuni/amazon/external/ChuniDataImport.java new file mode 100644 index 00000000..5815bdde --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/api/model/resp/sega/chuni/amazon/external/ChuniDataImport.java @@ -0,0 +1,31 @@ +package icu.samnyan.aqua.api.model.resp.sega.chuni.amazon.external; + +import icu.samnyan.aqua.sega.chunithm.model.userdata.*; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * This class is use for importing CHUNITHM profile + * @author samnyan (privateamusement@protonmail.com) + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class ChuniDataImport { + private ExternalUserData userData; + private List userActivityList; + private List userCharacterList; + private List userChargeList; + private List userCourseList; + private UserDataEx userDataEx; + private List userDuelList; + private UserGameOption userGameOption; + private UserGameOptionEx userGameOptionEx; + private List userItemList; + private List userMapList; + private List userMusicDetailList; + private List userPlaylogList; +} diff --git a/src/main/java/icu/samnyan/aqua/api/model/resp/sega/chuni/amazon/external/ExternalUserData.java b/src/main/java/icu/samnyan/aqua/api/model/resp/sega/chuni/amazon/external/ExternalUserData.java new file mode 100644 index 00000000..a3b61c5f --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/api/model/resp/sega/chuni/amazon/external/ExternalUserData.java @@ -0,0 +1,118 @@ +package icu.samnyan.aqua.api.model.resp.sega.chuni.amazon.external; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +/** + * This class is use for exported UserData class. Using access code as identifier + * @author samnyan (privateamusement@protonmail.com) + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class ExternalUserData { + + // Access Code of the card + private String accessCode; + + private String userName; + + private LocalDateTime lastLoginDate; + + private boolean isWebJoin; + + private String webLimitDate; + + private int level; + + private int reincarnationNum; + + private String exp; + + private long point; + + private long totalPoint; + + private int playCount; + + private int multiPlayCount; + + private int multiWinCount; + + private int requestResCount; + + private int acceptResCount; + + private int successResCount; + + private int playerRating; + + private int highestRating; + + private int nameplateId; + + private int frameId; + + private int characterId; + + private int trophyId; + + private int playedTutorialBit; + + private int firstTutorialCancelNum; + + private int masterTutorialCancelNum; + + private int totalRepertoireCount; + + private int totalMapNum; + + private long totalHiScore; + + private long totalBasicHighScore; + + private long totalAdvancedHighScore; + + private long totalExpertHighScore; + + private long totalMasterHighScore; + + private LocalDateTime eventWatchedDate; + + private int friendCount; + + @JsonProperty("isMaimai") + private boolean isMaimai; + + private String firstGameId; + + private String firstRomVersion; + + private String firstDataVersion; + + private LocalDateTime firstPlayDate; + + private String lastGameId; + + private String lastRomVersion; + + private String lastDataVersion; + + private LocalDateTime lastPlayDate; + + private int lastPlaceId; + + private String lastPlaceName; + + private String lastRegionId; + + private String lastRegionName; + + private String lastAllNetId; + + private String lastClientId; +} diff --git a/src/main/java/icu/samnyan/aqua/sega/aimedb/handler/Impl/RegisterHandler.java b/src/main/java/icu/samnyan/aqua/sega/aimedb/handler/Impl/RegisterHandler.java index 71b9c660..ca5375c2 100644 --- a/src/main/java/icu/samnyan/aqua/sega/aimedb/handler/Impl/RegisterHandler.java +++ b/src/main/java/icu/samnyan/aqua/sega/aimedb/handler/Impl/RegisterHandler.java @@ -6,6 +6,7 @@ import icu.samnyan.aqua.sega.aimedb.util.AimeDbUtil; import icu.samnyan.aqua.sega.aimedb.util.LogMapper; import icu.samnyan.aqua.sega.general.dao.CardRepository; import icu.samnyan.aqua.sega.general.model.Card; +import icu.samnyan.aqua.sega.general.service.CardService; import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufUtil; import io.netty.buffer.Unpooled; @@ -15,10 +16,8 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import java.time.LocalDateTime; import java.util.HashMap; import java.util.Map; -import java.util.concurrent.ThreadLocalRandom; /** * @author samnyan (privateamusement@protonmail.com) @@ -30,12 +29,12 @@ public class RegisterHandler implements BaseHandler { private final LogMapper logMapper; - private final CardRepository cardRepository; + private final CardService cardService; @Autowired - public RegisterHandler(LogMapper logMapper, CardRepository cardRepository) { + public RegisterHandler(LogMapper logMapper, CardService cardService) { this.logMapper = logMapper; - this.cardRepository = cardRepository; + this.cardService = cardService; } @Override @@ -49,18 +48,8 @@ public class RegisterHandler implements BaseHandler { Map resultMap = new HashMap<>(); resultMap.put("type", "register"); - if(cardRepository.findByLuid((String) requestMap.get("luid")).isEmpty()) { - Card card = new Card(); - card.setLuid((String) requestMap.get("luid")); - int extId = ThreadLocalRandom.current().nextInt(99999999); - while (cardRepository.findByExtId(extId).isPresent()) { - extId = ThreadLocalRandom.current().nextInt(99999999); - } - card.setExtId(extId); - card.setRegisterTime(LocalDateTime.now()); - card.setAccessTime(LocalDateTime.now()); - - cardRepository.save(card); + if (cardService.getCardByAccessCode((String) requestMap.get("luid")).isEmpty()) { + Card card = cardService.registerByAccessCode((String) requestMap.get("luid")); resultMap.put("status", 1); resultMap.put("aimeId", card.getExtId().longValue()); diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/userdata/UserActivityRepository.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/userdata/UserActivityRepository.java index 0aa45744..c3c9c6c9 100644 --- a/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/userdata/UserActivityRepository.java +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/userdata/UserActivityRepository.java @@ -17,4 +17,6 @@ public interface UserActivityRepository extends JpaRepository findTopByUserAndActivityIdAndKindOrderByIdDesc(UserData user, int activityId, int kind); List findAllByUser_Card_ExtIdAndKindOrderBySortNumberDesc(int extId, int kind); + + List findAllByUser_Card_ExtId(int extId); } diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/userdata/UserCharacterRepository.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/userdata/UserCharacterRepository.java index 298a8118..c957e52f 100644 --- a/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/userdata/UserCharacterRepository.java +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/userdata/UserCharacterRepository.java @@ -7,6 +7,7 @@ import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; +import java.util.List; import java.util.Optional; /** @@ -18,4 +19,6 @@ public interface UserCharacterRepository extends JpaRepository findTopByUserAndCharacterIdOrderByIdDesc(UserData user, int characterId); Page findByUser_Card_ExtId(int extId, Pageable pageable); + + List findByUser_Card_ExtId(int extId); } diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/userdata/UserItemRepository.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/userdata/UserItemRepository.java index fd020fdb..211be2d2 100644 --- a/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/userdata/UserItemRepository.java +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/userdata/UserItemRepository.java @@ -7,6 +7,7 @@ import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; +import java.util.List; import java.util.Optional; /** @@ -18,4 +19,6 @@ public interface UserItemRepository extends JpaRepository { Optional findTopByUserAndItemIdAndItemKindOrderByIdDesc(UserData user, int itemId, int itemKind); Page findAllByUser_Card_ExtIdAndItemKind(int extId, int itemKind, Pageable pageable); + + List findAllByUser_Card_ExtId(int extId); } diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/userdata/UserPlaylogRepository.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/userdata/UserPlaylogRepository.java index a5ecc5d8..c8c89d42 100644 --- a/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/userdata/UserPlaylogRepository.java +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/dao/userdata/UserPlaylogRepository.java @@ -1,7 +1,6 @@ package icu.samnyan.aqua.sega.chunithm.dao.userdata; import icu.samnyan.aqua.sega.chunithm.model.userdata.UserPlaylog; -import icu.samnyan.aqua.sega.diva.model.userdata.PlayLog; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; @@ -19,4 +18,6 @@ public interface UserPlaylogRepository extends JpaRepository Page findByUser_Card_ExtId(int extId, Pageable page); List findByUser_Card_ExtIdAndMusicIdAndLevel(int extId, int musicId, int level); + + List findByUser_Card_ExtId(int extId); } diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserCharacterHandler.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserCharacterHandler.java index 77decc7b..a5de191d 100644 --- a/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserCharacterHandler.java +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserCharacterHandler.java @@ -15,6 +15,7 @@ import java.util.LinkedHashMap; import java.util.Map; /** + * Handle getUserCharacter request * @author samnyan (privateamusement@protonmail.com) */ @Component @@ -42,7 +43,7 @@ public class GetUserCharacterHandler implements BaseHandler { int pageNum = nextIndex / maxCount; - Page dbPage = userCharacterService.getByUser(userId, pageNum, maxCount); + Page dbPage = userCharacterService.getByUserId(userId, pageNum, maxCount); long currentIndex = maxCount * pageNum + dbPage.getNumberOfElements(); diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserCourseHandler.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserCourseHandler.java index fa1edd9a..8e4b4315 100644 --- a/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserCourseHandler.java +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserCourseHandler.java @@ -16,6 +16,7 @@ import java.util.List; import java.util.Map; /** + * Handle GetUserCourse request * @author samnyan (privateamusement@protonmail.com) */ @Component @@ -46,7 +47,7 @@ public class GetUserCourseHandler implements BaseHandler { int pageNum = nextIndex / maxCount; - Page dbPage = userCourseService.getByUser(userId, pageNum, maxCount); + Page dbPage = userCourseService.getByUserId(userId, pageNum, maxCount); long currentIndex = maxCount * pageNum + dbPage.getNumberOfElements(); @@ -54,7 +55,7 @@ public class GetUserCourseHandler implements BaseHandler { resultMap.put("nextIndex", dbPage.getNumberOfElements() < maxCount ? -1 : currentIndex); resultMap.put("userCourseList", dbPage.getContent()); } else { - List courseList = userCourseService.getAllByUser(userId); + List courseList = userCourseService.getByUserId(userId); resultMap.put("length", courseList.size()); resultMap.put("userCourseList", courseList); } diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserDataExHandler.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserDataExHandler.java index 59300bca..7eecbfc6 100644 --- a/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserDataExHandler.java +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserDataExHandler.java @@ -35,7 +35,7 @@ public class GetUserDataExHandler implements BaseHandler { @Override public String handle(Map request) throws JsonProcessingException { String userId = (String) request.get("userId"); - Optional userDataExOptional = userDataExService.getUserByExtId(userId); + Optional userDataExOptional = userDataExService.getByExtId(userId); if (userDataExOptional.isPresent()) { Map resultMap = new LinkedHashMap<>(); diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserDuelHandler.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserDuelHandler.java index 1f3715ee..1111a8b2 100644 --- a/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserDuelHandler.java +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserDuelHandler.java @@ -15,6 +15,7 @@ import java.util.List; import java.util.Map; /** + * Handle GetUserDuel request * @author samnyan (privateamusement@protonmail.com) */ @Component @@ -40,7 +41,7 @@ public class GetUserDuelHandler implements BaseHandler { // TODO: - List userDuelList = userDuelService.getByUser(userId); + List userDuelList = userDuelService.getByUserId(userId); Map resultMap = new LinkedHashMap<>(); resultMap.put("userId", userId); diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserMapHandler.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserMapHandler.java index 3692cde4..94ba5050 100644 --- a/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserMapHandler.java +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/handler/impl/GetUserMapHandler.java @@ -15,6 +15,7 @@ import java.util.List; import java.util.Map; /** + * Handle GetUserMap request * @author samnyan (privateamusement@protonmail.com) */ @Component @@ -36,7 +37,7 @@ public class GetUserMapHandler implements BaseHandler { public String handle(Map request) throws JsonProcessingException { String userId = (String) request.get("userId"); - List userMapList = userMapService.getByUser(userId); + List userMapList = userMapService.getByUserId(userId); Map resultMap = new LinkedHashMap<>(); resultMap.put("userId", userId); diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserData.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserData.java index 9eb52204..3e42da0b 100644 --- a/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserData.java +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserData.java @@ -88,7 +88,6 @@ public class UserData implements Serializable { private String userName; - @JsonIgnore private LocalDateTime lastLoginDate; @JsonProperty("isWebJoin") diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserActivityService.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserActivityService.java index 89ab754d..21a2bd83 100644 --- a/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserActivityService.java +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserActivityService.java @@ -37,4 +37,8 @@ public class UserActivityService { public List getAllByUserIdAndKind(String userId, String kind) { return userActivityRepository.findAllByUser_Card_ExtIdAndKindOrderBySortNumberDesc(Integer.parseInt(userId), Integer.parseInt(kind)); } + + public List getByUserId(String userId) { + return userActivityRepository.findAllByUser_Card_ExtId(Integer.parseInt(userId)); + } } diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserCharacterService.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserCharacterService.java index b7869463..3491109e 100644 --- a/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserCharacterService.java +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserCharacterService.java @@ -25,14 +25,6 @@ public class UserCharacterService { this.userCharacterRepository = userCharacterRepository; } - public Optional getByUserAndCharacterId(UserData user, String characterId) { - return getByUserAndCharacterId(user, Integer.parseInt(characterId)); - } - - public Optional getByUserAndCharacterId(UserData user, int characterId) { - return userCharacterRepository.findTopByUserAndCharacterIdOrderByIdDesc(user, characterId); - } - public UserCharacter save(UserCharacter userCharacter) { return userCharacterRepository.save(userCharacter); } @@ -41,8 +33,20 @@ public class UserCharacterService { return userCharacterRepository.saveAll(userCharacter); } - public Page getByUser(String userId, int pageNumber, int maxCount) { + public List getByUserId(String userId) { + return userCharacterRepository.findByUser_Card_ExtId(Integer.parseInt(userId)); + } + + public Page getByUserId(String userId, int pageNumber, int maxCount) { Pageable pageable = PageRequest.of(pageNumber, maxCount); return userCharacterRepository.findByUser_Card_ExtId(Integer.parseInt(userId), pageable); } + + public Optional getByUserAndCharacterId(UserData user, String characterId) { + return getByUserAndCharacterId(user, Integer.parseInt(characterId)); + } + + public Optional getByUserAndCharacterId(UserData user, int characterId) { + return userCharacterRepository.findTopByUserAndCharacterIdOrderByIdDesc(user, characterId); + } } diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserChargeService.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserChargeService.java index 3eba8d86..5194f3ed 100644 --- a/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserChargeService.java +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserChargeService.java @@ -24,6 +24,10 @@ public class UserChargeService { return userChargeRepository.save(userCharge); } + public List saveAll(List newUserChargeList) { + return userChargeRepository.saveAll(newUserChargeList); + } + public List getByUserId(String userId) { return userChargeRepository.findByUser_Card_ExtId(Integer.parseInt(userId)); } @@ -32,7 +36,4 @@ public class UserChargeService { return userChargeRepository.findByUserAndChargeId(user, Integer.parseInt(chargeId)); } - public List saveAll(List newUserChargeList) { - return userChargeRepository.saveAll(newUserChargeList); - } } diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserCourseService.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserCourseService.java index b059eed5..bbeabf1f 100644 --- a/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserCourseService.java +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserCourseService.java @@ -25,10 +25,6 @@ public class UserCourseService { this.userCourseRepository = userCourseRepository; } - public Optional getByUserAndCourseId(UserData user, String courseId) { - return userCourseRepository.findTopByUserAndCourseIdOrderByIdDesc(user, Integer.parseInt(courseId)); - } - public UserCourse save(UserCourse userCourse) { return userCourseRepository.save(userCourse); } @@ -37,16 +33,16 @@ public class UserCourseService { return userCourseRepository.saveAll(userMusicDetail); } - public List getByUser(String userId) { + public List getByUserId(String userId) { return userCourseRepository.findByUser_Card_ExtId(Integer.parseInt(userId)); } - public Page getByUser(String userId, int pageNum, int maxCount) { + public Page getByUserId(String userId, int pageNum, int maxCount) { Pageable page = PageRequest.of(pageNum, maxCount); return userCourseRepository.findByUser_Card_ExtId(Integer.parseInt(userId), page); } - public List getAllByUser(String userId) { - return userCourseRepository.findByUser_Card_ExtId(Integer.parseInt(userId)); + public Optional getByUserAndCourseId(UserData user, String courseId) { + return userCourseRepository.findTopByUserAndCourseIdOrderByIdDesc(user, Integer.parseInt(courseId)); } } diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserDataExService.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserDataExService.java index aaeeef37..86f3e322 100644 --- a/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserDataExService.java +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserDataExService.java @@ -21,15 +21,15 @@ public class UserDataExService { this.userDataExRepository = userDataExRepository; } - public Optional getByUser(UserData user) { - return userDataExRepository.findByUser(user); - } - public UserDataEx save(UserDataEx userDataEx) { return userDataExRepository.save(userDataEx); } - public Optional getUserByExtId(String userId) { + public Optional getByUser(UserData user) { + return userDataExRepository.findByUser(user); + } + + public Optional getByExtId(String userId) { return userDataExRepository.findByUser_Card_ExtId(Integer.parseInt(userId)); } } diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserDataService.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserDataService.java index c6f43da8..5c9dcaba 100644 --- a/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserDataService.java +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserDataService.java @@ -2,6 +2,7 @@ package icu.samnyan.aqua.sega.chunithm.service; import icu.samnyan.aqua.sega.chunithm.dao.userdata.UserDataRepository; import icu.samnyan.aqua.sega.chunithm.model.userdata.UserData; +import icu.samnyan.aqua.sega.general.model.Card; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -21,21 +22,6 @@ public class UserDataService { this.userDataRepository = userDataRepository; } - public Optional getUserByExtId(String aimeId) { - return userDataRepository.findByCard_ExtId(Integer.parseInt(aimeId)); - } - - public String updateLoginTime(UserData userData) { - userData.setLastLoginDate(LocalDateTime.now()); - - try { - userDataRepository.save(userData); - return "1"; - } catch (Exception e) { - return "0"; - } - } - public UserData saveUserData(UserData userData) { return userDataRepository.save(userData); } @@ -43,4 +29,17 @@ public class UserDataService { public UserData saveAndFlushUserData(UserData userData) { return userDataRepository.saveAndFlush(userData); } + + public Optional getUserByExtId(String aimeId) { + return userDataRepository.findByCard_ExtId(Integer.parseInt(aimeId)); + } + + public Optional getUserByCard(Card card) { + return userDataRepository.findByCard(card); + } + + public void updateLoginTime(UserData userData) { + userData.setLastLoginDate(LocalDateTime.now()); + userDataRepository.save(userData); + } } diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserDuelService.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserDuelService.java index c2c9aa17..e1ad4189 100644 --- a/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserDuelService.java +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserDuelService.java @@ -34,8 +34,7 @@ public class UserDuelService { return userDuelRepository.saveAll(userDuel); } - public List getByUser(String userId) { + public List getByUserId(String userId) { return userDuelRepository.findByUser_Card_ExtId(Integer.parseInt(userId)); } - } diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserGameOptionExService.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserGameOptionExService.java index 7601aef2..dd772f8b 100644 --- a/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserGameOptionExService.java +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserGameOptionExService.java @@ -21,14 +21,14 @@ public class UserGameOptionExService { this.userGameOptionExRepository = userGameOptionExRepository; } - public Optional getByUser(UserData userData) { - return userGameOptionExRepository.findByUser(userData); - } - public UserGameOptionEx save(UserGameOptionEx userGameOptionEx) { return userGameOptionExRepository.save(userGameOptionEx); } + public Optional getByUser(UserData userData) { + return userGameOptionExRepository.findByUser(userData); + } + public Optional getByUserId(String userId) { return userGameOptionExRepository.findByUser_Card_ExtId(Integer.parseInt(userId)); } diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserGameOptionService.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserGameOptionService.java index ab5dd50e..960a4b2c 100644 --- a/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserGameOptionService.java +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserGameOptionService.java @@ -21,15 +21,15 @@ public class UserGameOptionService { this.userGameOptionRepository = userGameOptionRepository; } - public Optional getByUserId(String userId) { - return userGameOptionRepository.findByUser_Card_ExtId(Integer.parseInt(userId)); + public UserGameOption save(UserGameOption userGameOption) { + return userGameOptionRepository.save(userGameOption); } public Optional getByUser(UserData user) { return userGameOptionRepository.findByUser(user); } - public UserGameOption save(UserGameOption userGameOption) { - return userGameOptionRepository.save(userGameOption); + public Optional getByUserId(String userId) { + return userGameOptionRepository.findByUser_Card_ExtId(Integer.parseInt(userId)); } } diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserItemService.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserItemService.java index ab706fd6..7ce2218f 100644 --- a/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserItemService.java +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserItemService.java @@ -24,11 +24,6 @@ public class UserItemService { this.userItemRepository = userItemRepository; } - - public Optional getByUserAndItemId(UserData user, String itemId, String itemKind) { - return userItemRepository.findTopByUserAndItemIdAndItemKindOrderByIdDesc(user, Integer.parseInt(itemId), Integer.parseInt(itemKind)); - } - public UserItem save(UserItem userItem) { return userItemRepository.save(userItem); } @@ -37,6 +32,14 @@ public class UserItemService { return userItemRepository.saveAll(userItem); } + public List getByUserId(String userId) { + return userItemRepository.findAllByUser_Card_ExtId(Integer.parseInt(userId)); + } + + public Optional getByUserAndItemId(UserData user, String itemId, String itemKind) { + return userItemRepository.findTopByUserAndItemIdAndItemKindOrderByIdDesc(user, Integer.parseInt(itemId), Integer.parseInt(itemKind)); + } + public Page getByUserAndItemKind(String userId, int kind, int pageNumber, int maxCount) { Pageable page = PageRequest.of(pageNumber, maxCount); return userItemRepository.findAllByUser_Card_ExtIdAndItemKind(Integer.parseInt(userId), kind, page); diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserMapService.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserMapService.java index 4e1e5071..48141cc0 100644 --- a/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserMapService.java +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserMapService.java @@ -22,18 +22,6 @@ public class UserMapService { this.userMapRepository = userMapRepository; } - public List getByUser(UserData user) { - return userMapRepository.findAllByUser(user); - } - - public List getByUser(String userId) { - return userMapRepository.findAllByUser_Card_ExtId(Integer.parseInt(userId)); - } - - public Optional getByUserAndMapId(UserData user, String mapId) { - return userMapRepository.findTopByUserAndMapIdOrderByIdDesc(user, Integer.parseInt(mapId)); - } - public UserMap save(UserMap userMap) { return userMapRepository.save(userMap); } @@ -41,4 +29,16 @@ public class UserMapService { public List saveAll(Iterable userMap) { return userMapRepository.saveAll(userMap); } + + public List getByUser(UserData user) { + return userMapRepository.findAllByUser(user); + } + + public List getByUserId(String userId) { + return userMapRepository.findAllByUser_Card_ExtId(Integer.parseInt(userId)); + } + + public Optional getByUserAndMapId(UserData user, String mapId) { + return userMapRepository.findTopByUserAndMapIdOrderByIdDesc(user, Integer.parseInt(mapId)); + } } diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserMusicDetailService.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserMusicDetailService.java index 3661eb11..5dd8db47 100644 --- a/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserMusicDetailService.java +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserMusicDetailService.java @@ -25,10 +25,6 @@ public class UserMusicDetailService { this.userMusicDetailRepository = userMusicDetailRepository; } - public Optional getByUserAndMusicIdAndLevel(UserData user, String musicId, String level) { - return userMusicDetailRepository.findTopByUserAndMusicIdAndLevelOrderByIdDesc(user, Integer.parseInt(musicId), Integer.parseInt(level)); - } - public UserMusicDetail save(UserMusicDetail userMusicDetail) { return userMusicDetailRepository.save(userMusicDetail); } @@ -46,7 +42,15 @@ public class UserMusicDetailService { return userMusicDetailRepository.findByUser_Card_ExtId(Integer.parseInt(userId), page); } - public List getByUserAndMusicId(String userId, int id) { - return userMusicDetailRepository.findByUser_Card_ExtIdAndMusicId(Integer.parseInt(userId), id); + public List getByUserId(String userId) { + return userMusicDetailRepository.findByUser_Card_ExtId(Integer.parseInt(userId)); + } + + public List getByUserIdAndMusicId(String userId, int musicId) { + return userMusicDetailRepository.findByUser_Card_ExtIdAndMusicId(Integer.parseInt(userId), musicId); + } + + public Optional getByUserAndMusicIdAndLevel(UserData user, String musicId, String level) { + return userMusicDetailRepository.findTopByUserAndMusicIdAndLevelOrderByIdDesc(user, Integer.parseInt(musicId), Integer.parseInt(level)); } } diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserPlaylogService.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserPlaylogService.java index 5725cc52..6867b6fb 100644 --- a/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserPlaylogService.java +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/service/UserPlaylogService.java @@ -2,7 +2,6 @@ package icu.samnyan.aqua.sega.chunithm.service; import icu.samnyan.aqua.sega.chunithm.dao.userdata.UserPlaylogRepository; import icu.samnyan.aqua.sega.chunithm.model.userdata.UserPlaylog; -import icu.samnyan.aqua.sega.diva.model.userdata.PlayLog; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; @@ -33,16 +32,20 @@ public class UserPlaylogService { return userPlaylogRepository.saveAll(userPlaylogList); } + public Page getRecentPlays(String userId, Pageable page) { + return userPlaylogRepository.findByUser_Card_ExtId(Integer.parseInt(userId), page); + } + public List getRecent30Plays(String userId) { Pageable page = PageRequest.of(0, 30, Sort.by(Sort.Direction.DESC, "userPlayDate")); return userPlaylogRepository.findByUser_Card_ExtIdAndLevelNot(Integer.parseInt(userId), 4, page); } - public Page getRecentPlays(String userId, Pageable page) { - return userPlaylogRepository.findByUser_Card_ExtId(Integer.parseInt(userId), page); + public List getByUserId(String userId) { + return userPlaylogRepository.findByUser_Card_ExtId(Integer.parseInt(userId)); } - public List getByUserAndMusicIdAndLevel(String userId, int id, int level) { + public List getByUserIdAndMusicIdAndLevel(String userId, int id, int level) { return userPlaylogRepository.findByUser_Card_ExtIdAndMusicIdAndLevel(Integer.parseInt(userId), id, level); } } diff --git a/src/main/java/icu/samnyan/aqua/sega/general/model/Card.java b/src/main/java/icu/samnyan/aqua/sega/general/model/Card.java index 2b2daa57..e8008aa5 100644 --- a/src/main/java/icu/samnyan/aqua/sega/general/model/Card.java +++ b/src/main/java/icu/samnyan/aqua/sega/general/model/Card.java @@ -34,6 +34,7 @@ public class Card implements Serializable { @Column(name = "register_time") private LocalDateTime registerTime; + @Column(name = "access_time") private LocalDateTime accessTime; diff --git a/src/main/java/icu/samnyan/aqua/sega/general/service/CardService.java b/src/main/java/icu/samnyan/aqua/sega/general/service/CardService.java index ee480a06..09c239a7 100644 --- a/src/main/java/icu/samnyan/aqua/sega/general/service/CardService.java +++ b/src/main/java/icu/samnyan/aqua/sega/general/service/CardService.java @@ -5,7 +5,9 @@ import icu.samnyan.aqua.sega.general.model.Card; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.time.LocalDateTime; import java.util.Optional; +import java.util.concurrent.ThreadLocalRandom; /** * @author samnyan (privateamusement@protonmail.com) @@ -20,11 +22,48 @@ public class CardService { this.cardRepository = cardRepository; } + /** + * Find a card by External Id + * @param extId External Id + * @return Optional of a Card + */ public Optional getCardByExtId(String extId) { return cardRepository.findByExtId(Integer.parseInt(extId)); } + /** + * Find a card by External Id + * @param extId External Id + * @return Optional of a Card + */ public Optional getCardByExtId(int extId) { return cardRepository.findByExtId(extId); } + + /** + * Find a card by it's access code + * @param accessCode String represent of a access code + * @return Optional of a Card + */ + public Optional getCardByAccessCode(String accessCode) { + return cardRepository.findByLuid(accessCode); + } + + /** + * Register a new card with access code + * @param accessCode String represent of a access code + * @return a new registered Card + */ + public Card registerByAccessCode(String accessCode) { + Card card = new Card(); + card.setLuid(accessCode); + int extId = ThreadLocalRandom.current().nextInt(99999999); + while (cardRepository.findByExtId(extId).isPresent()) { + extId = ThreadLocalRandom.current().nextInt(99999999); + } + card.setExtId(extId); + card.setRegisterTime(LocalDateTime.now()); + card.setAccessTime(LocalDateTime.now()); + return cardRepository.save(card); + } }