diff --git a/src/main/java/icu/samnyan/aqua/api/controller/sega/game/chuni/v2/ApiChuniV2PlayerDataController.java b/src/main/java/icu/samnyan/aqua/api/controller/sega/game/chuni/v2/ApiChuniV2PlayerDataController.java index 372a26b8..5853e681 100644 --- a/src/main/java/icu/samnyan/aqua/api/controller/sega/game/chuni/v2/ApiChuniV2PlayerDataController.java +++ b/src/main/java/icu/samnyan/aqua/api/controller/sega/game/chuni/v2/ApiChuniV2PlayerDataController.java @@ -10,6 +10,7 @@ import icu.samnyan.aqua.api.model.resp.sega.chuni.v2.external.ChuniDataExport; import icu.samnyan.aqua.api.model.resp.sega.chuni.v2.external.ChuniDataImport; import icu.samnyan.aqua.api.model.resp.sega.chuni.v2.external.ExternalUserData; import icu.samnyan.aqua.api.util.ApiMapper; +import icu.samnyan.aqua.sega.chunithm.handler.impl.GetUserFavoriteMusicHandler; import icu.samnyan.aqua.sega.chusan.model.gamedata.Level; import icu.samnyan.aqua.sega.chusan.model.gamedata.Music; import icu.samnyan.aqua.sega.chusan.model.userdata.*; @@ -308,6 +309,43 @@ public class ApiChuniV2PlayerDataController { return userPlaylogService.getByUserIdAndMusicIdAndLevel(aimeId, id, level); } + @GetMapping("song/{id}/isfavorite") + public boolean getSongFavorite(@RequestParam String aimeId, @PathVariable String id) { + Optional favOptional; + favOptional = userGeneralDataService.getByUserIdAndKey(aimeId, "favorite_music"); + if(favOptional.isPresent()) { + String val = favOptional.get().getPropertyValue(); + if(StringUtils.isNotBlank(val) && val.contains(",")) { + String[] records = val.split(","); + for (String record : records) { + if (record.equals(id)) return true; + } + } + } + return false; + } + + @PutMapping("song/{id}/favorite") + public void updateSongFavorite(@RequestParam String aimeId, @PathVariable String id) { + UserData profile = userDataService.getUserByExtId(aimeId).orElseThrow(); + UserGeneralData userGeneralData = userGeneralDataService.getByUserAndKey(profile, "favorite_music") + .orElseGet(() -> new UserGeneralData(profile, "favorite_music")); + List favoriteSongs = new LinkedList(Arrays.asList(userGeneralData.getPropertyValue().split(","))); + + if(!favoriteSongs.remove(id)) + { + favoriteSongs.add(id); + } + + StringBuilder sb = new StringBuilder(); + favoriteSongs.forEach(favSong -> { + if(!favSong.isEmpty()) sb.append(favSong).append(","); + }); + + userGeneralData.setPropertyValue(sb.toString()); + userGeneralDataService.save(userGeneralData); + } + @GetMapping("character") public ReducedPageResponse getCharacter(@RequestParam String aimeId, @RequestParam(required = false, defaultValue = "0") int page,