[ongeki,api] support ongeki rival

This commit is contained in:
Mikira Sora
2022-12-17 11:50:36 +00:00
committed by Dom Eori
parent 9a80592e38
commit da793e9881
21 changed files with 461 additions and 21 deletions

View File

@@ -2,6 +2,7 @@ package icu.samnyan.aqua.api.controller.sega.game.ongeki;
import com.fasterxml.jackson.core.type.TypeReference;
import icu.samnyan.aqua.api.model.MessageResponse;
import icu.samnyan.aqua.api.model.ObjectMessageResponse;
import icu.samnyan.aqua.api.model.ReducedPageResponse;
import icu.samnyan.aqua.api.model.resp.sega.ongeki.ProfileResp;
import icu.samnyan.aqua.api.model.resp.sega.ongeki.external.ExternalUserData;
@@ -13,7 +14,9 @@ import icu.samnyan.aqua.sega.general.service.CardService;
import icu.samnyan.aqua.sega.ongeki.dao.gamedata.GameCardRepository;
import icu.samnyan.aqua.sega.ongeki.dao.userdata.*;
import icu.samnyan.aqua.sega.ongeki.model.gamedata.GameCard;
import icu.samnyan.aqua.sega.ongeki.model.response.data.UserRivalData;
import icu.samnyan.aqua.sega.ongeki.model.userdata.*;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
@@ -61,6 +64,7 @@ public class ApiOngekiPlayerDataController {
private final UserEventMusicRepository userEventMusicRepository;
private final UserTechEventRepository userTechEventRepository;
private final UserKopRepository userKopRepository;
private final UserRivalDataRepository userRivalDataRepository;
private final UserMemoryChapterRepository userMemoryChapterRepository;
@@ -72,7 +76,7 @@ public class ApiOngekiPlayerDataController {
private final GameCardRepository gameCardRepository;
public ApiOngekiPlayerDataController(ApiMapper mapper, CardService cardService, UserActivityRepository userActivityRepository, UserCardRepository userCardRepository, UserChapterRepository userChapterRepository, UserCharacterRepository userCharacterRepository, UserDataRepository userDataRepository, UserDeckRepository userDeckRepository, UserEventPointRepository userEventPointRepository, UserItemRepository userItemRepository, UserLoginBonusRepository userLoginBonusRepository, UserMissionPointRepository userMissionPointRepository, UserMusicDetailRepository userMusicDetailRepository, UserMusicItemRepository userMusicItemRepository, UserOptionRepository userOptionRepository, UserPlaylogRepository userPlaylogRepository, UserStoryRepository userStoryRepository, UserTrainingRoomRepository userTrainingRoomRepository, UserGeneralDataRepository userGeneralDataRepository, GameCardRepository gameCardRepository, UserTradeItemRepository userTradeItemRepository, UserEventMusicRepository userEventMusicRepository, UserTechEventRepository userTechEventRepository, UserKopRepository userKopRepository, UserMemoryChapterRepository userMemoryChapterRepository, UserScenarioRepository userScenarioRepository, UserBossRepository userBossRepository, UserTechCountRepository userTechCountRepository) {
public ApiOngekiPlayerDataController(ApiMapper mapper, CardService cardService, UserRivalDataRepository userRivalDataRepository, UserActivityRepository userActivityRepository, UserCardRepository userCardRepository, UserChapterRepository userChapterRepository, UserCharacterRepository userCharacterRepository, UserDataRepository userDataRepository, UserDeckRepository userDeckRepository, UserEventPointRepository userEventPointRepository, UserItemRepository userItemRepository, UserLoginBonusRepository userLoginBonusRepository, UserMissionPointRepository userMissionPointRepository, UserMusicDetailRepository userMusicDetailRepository, UserMusicItemRepository userMusicItemRepository, UserOptionRepository userOptionRepository, UserPlaylogRepository userPlaylogRepository, UserStoryRepository userStoryRepository, UserTrainingRoomRepository userTrainingRoomRepository, UserGeneralDataRepository userGeneralDataRepository, GameCardRepository gameCardRepository, UserTradeItemRepository userTradeItemRepository, UserEventMusicRepository userEventMusicRepository, UserTechEventRepository userTechEventRepository, UserKopRepository userKopRepository, UserMemoryChapterRepository userMemoryChapterRepository, UserScenarioRepository userScenarioRepository, UserBossRepository userBossRepository, UserTechCountRepository userTechCountRepository) {
this.mapper = mapper;
this.cardService = cardService;
this.userActivityRepository = userActivityRepository;
@@ -101,6 +105,7 @@ public class ApiOngekiPlayerDataController {
this.userScenarioRepository = userScenarioRepository;
this.userBossRepository = userBossRepository;
this.userTechCountRepository = userTechCountRepository;
this.userRivalDataRepository = userRivalDataRepository;
}
@GetMapping("profile")
@@ -334,6 +339,51 @@ public class ApiOngekiPlayerDataController {
return userPlaylogRepository.findByUser_Card_ExtIdAndMusicIdAndLevel(aimeId, id, level);
}
@GetMapping("rival")
public List<UserRivalData> getRival(@RequestParam long aimeId) {
var rivalUserIds = userRivalDataRepository.findByUser_Card_ExtId(aimeId)
.stream()
.map(x -> x.getRivalUserId())
.collect(Collectors.toList());
var rivalDataList = userDataRepository.findByCard_ExtIdIn(rivalUserIds)
.stream()
.map(x -> new UserRivalData(x.getCard().getExtId().longValue(), x.getUserName()))
.collect(Collectors.toList());
return rivalDataList;
}
@DeleteMapping("rival")
public MessageResponse deleteRival(@RequestParam long aimeId, @RequestParam long rivalAimeId) {
userRivalDataRepository.removeByUser_Card_ExtIdAndRivalUserId(aimeId, rivalAimeId);
return new MessageResponse();
}
@PostMapping("rival")
public ObjectMessageResponse<UserRivalData> addRival(@RequestParam long aimeId, @RequestParam long rivalAimeId, @Value("${game.ongeki.rival.rivals-max-count:10}") long addMaxCount) {
//check limit
if (addMaxCount >= 0 && userRivalDataRepository.findByUser_Card_ExtId(aimeId).size() >= addMaxCount) {
return new ObjectMessageResponse<>(String.format("Size of rival list is limited in %d", addMaxCount));
}
var userOpt = userDataRepository.findByCard_ExtId(aimeId);
if (userOpt.isEmpty())
return new ObjectMessageResponse<>("Current user isn't ongeki player.");
var user = userOpt.get();
var rivalUserOpt = userDataRepository.findByCard_ExtId(rivalAimeId);
if (rivalUserOpt.isEmpty())
return new ObjectMessageResponse<>("Rival user isn't ongeki player.");
var rivalUser = rivalUserOpt.get();
var rival = new UserRival();
rival.setUser(user);
rival.setRivalUserId(rivalUser.getCard().getExtId());
userRivalDataRepository.save(rival);
return new ObjectMessageResponse<>(new UserRivalData(rivalUser.getCard().getExtId(), rivalUser.getUserName()));
}
@GetMapping("options")
public UserOption getOptions(@RequestParam long aimeId) {
return userOptionRepository.findByUser_Card_ExtId(aimeId).orElseThrow();
@@ -376,6 +426,7 @@ public class ApiOngekiPlayerDataController {
data.setUserScenarioList(userScenarioRepository.findByUser_Card_ExtId(aimeId));
data.setUserBossList(userBossRepository.findByUser_Card_ExtId(aimeId));
data.setUserTechCountList(userTechCountRepository.findByUser_Card_ExtId(aimeId));
data.setUserRivalList(userRivalDataRepository.findByUser_Card_ExtId(aimeId));
} catch (NoSuchElementException e) {
return ResponseEntity.status(HttpStatus.NOT_FOUND)
.body(new MessageResponse("User not found"));
@@ -454,6 +505,8 @@ public class ApiOngekiPlayerDataController {
userBossRepository.flush();
userTechCountRepository.deleteByUser(existUserData.get());
userTechCountRepository.flush();
userRivalDataRepository.deleteByUser(existUserData.get());
userRivalDataRepository.flush();
userDataRepository.deleteByCard(card);
userDataRepository.flush();
@@ -539,6 +592,9 @@ public class ApiOngekiPlayerDataController {
userTechCountRepository.saveAll(Optional.ofNullable(data.getUserTechCountList()).orElse(Collections.emptyList()).stream()
.peek(x -> x.setUser(userData)).collect(Collectors.toList()));
userRivalDataRepository.saveAll(Optional.ofNullable(data.getUserRivalList()).orElse(Collections.emptyList()).stream()
.peek(x -> x.setUser(userData)).collect(Collectors.toList()));
return ResponseEntity.ok(new MessageResponse("Import successfully, aimeId: " + card.getExtId()));
}

View File

@@ -0,0 +1,29 @@
package icu.samnyan.aqua.api.model;
import icu.samnyan.aqua.api.model.MessageResponse;
public class ObjectMessageResponse<T> extends MessageResponse {
private T data;
public ObjectMessageResponse(String message) {
super(message);
}
public ObjectMessageResponse(T data) {
super();
setData(data);
}
public ObjectMessageResponse(T data, String message) {
super(message);
setData(data);
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
}

View File

@@ -6,6 +6,7 @@ import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
import java.util.Map;
/**
* @author samnyan (privateamusement@protonmail.com)
@@ -40,4 +41,5 @@ public class OngekiDataExport {
private List<UserScenario> userScenarioList;
private List<UserBoss> userBossList;
private List<UserTechCount> userTechCountList;
private List<UserRival> userRivalList;
}

View File

@@ -6,6 +6,7 @@ import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
import java.util.Map;
/**
* @author samnyan (privateamusement@protonmail.com)
@@ -40,4 +41,5 @@ public class OngekiDataImport {
private List<UserScenario> userScenarioList;
private List<UserBoss> userBossList;
private List<UserTechCount> userTechCountList;
private List<UserRival> userRivalList;
}