[cardmaker] Add experimental chusan gacha support

This commit is contained in:
Dom Eori
2022-07-27 22:41:22 +09:00
parent 563d91d438
commit a034ba2c88
46 changed files with 2244 additions and 3 deletions

View File

@@ -46,9 +46,43 @@ public class ChusanServletController {
private final GetUserTeamHandler getUserTeamHandler;
private final UpsertUserAllHandler upsertUserAllHandler;
private final UpsertUserChargelogHandler upsertUserChargelogHandler;
private final GetGameGachaHandler getGameGachaHandler;
private final GetGameGachaCardByIdHandler getGameGachaCardByIdHandler;
private final GetUserCardPrintErrorHandler getUserCardPrintErrorHandler;
private final CMGetUserPreviewHandler cmGetUserPreviewHandler;
private final CMGetUserDataHandler cmGetUserDataHandler;
private final CMGetUserCharacterHandler cmGetUserCharacterHandler;
private final GetUserGachaHandler getUserGachaHandler;
private final GetUserPrintedCardHandler getUserPrintedCardHandler;
private final CMGetUserItemHandler cmGetUserItemHandler;
private final RollGachaHandler rollGachaHandler;
private final CMUpsertUserGachaHandler cmUpsertUserGachaHandler;
private final CMUpsertUserPrintSubtractHandler cmUpsertUserPrintSubtractHandler;
private final CMUpsertUserPrintCancelHandler cmUpsertUserPrintCancelHandler;
@Autowired
public ChusanServletController(GameLoginHandler gameLoginHandler, GameLogoutHandler gameLogoutHandler, GetGameChargeHandler getGameChargeHandler, GetGameEventHandler getGameEventHandler, GetGameIdlistHandler getGameIdlistHandler, GetGameRankingHandler getGameRankingHandler, GetGameSettingHandler getGameSettingHandler, GetTeamCourseRuleHandler getTeamCourseRuleHandler, GetTeamCourseSettingHandler getTeamCourseSettingHandler, GetUserActivityHandler getUserActivityHandler, GetUserCharacterHandler getUserCharacterHandler, GetUserChargeHandler getUserChargeHandler, GetUserCourseHandler getUserCourseHandler, GetUserDataHandler getUserDataHandler, GetUserDuelHandler getUserDuelHandler, GetUserFavoriteItemHandler getUserFavoriteItemHandler, GetUserItemHandler getUserItemHandler, GetUserLoginBonusHandler getUserLoginBonusHandler, GetUserMapAreaHandler getUserMapAreaHandler, GetUserMusicHandler getUserMusicHandler, GetUserOptionHandler getUserOptionHandler, GetUserPreviewHandler getUserPreviewHandler, GetUserRecentRatingHandler getUserRecentRatingHandler, GetUserRegionHandler getUserRegionHandler, GetUserRivalDataHandler getUserRivalDataHandler, GetUserRivalMusicHandler getUserRivalMusicHandler, GetUserTeamHandler getUserTeamHandler, UpsertUserAllHandler upsertUserAllHandler, UpsertUserChargelogHandler upsertUserChargelogHandler, GetUserSymbolChatSettingHandler getUserSymbolChatSettingHandler, GetUserNetBattleDataHandler getUserNetBattleDataHandler) {
public ChusanServletController(GameLoginHandler gameLoginHandler, GameLogoutHandler gameLogoutHandler,
GetGameChargeHandler getGameChargeHandler, GetGameEventHandler getGameEventHandler,
GetGameIdlistHandler getGameIdlistHandler, GetGameRankingHandler getGameRankingHandler,
GetGameSettingHandler getGameSettingHandler, GetTeamCourseRuleHandler getTeamCourseRuleHandler,
GetTeamCourseSettingHandler getTeamCourseSettingHandler, GetUserActivityHandler getUserActivityHandler,
GetUserCharacterHandler getUserCharacterHandler, GetUserChargeHandler getUserChargeHandler,
GetUserCourseHandler getUserCourseHandler, GetUserDataHandler getUserDataHandler,
GetUserDuelHandler getUserDuelHandler, GetUserFavoriteItemHandler getUserFavoriteItemHandler,
GetUserItemHandler getUserItemHandler, GetUserLoginBonusHandler getUserLoginBonusHandler,
GetUserMapAreaHandler getUserMapAreaHandler, GetUserMusicHandler getUserMusicHandler,
GetUserOptionHandler getUserOptionHandler, GetUserPreviewHandler getUserPreviewHandler,
GetUserRecentRatingHandler getUserRecentRatingHandler, GetUserRegionHandler getUserRegionHandler,
GetUserRivalDataHandler getUserRivalDataHandler, GetUserRivalMusicHandler getUserRivalMusicHandler,
GetUserTeamHandler getUserTeamHandler, UpsertUserAllHandler upsertUserAllHandler,
UpsertUserChargelogHandler upsertUserChargelogHandler, GetUserSymbolChatSettingHandler getUserSymbolChatSettingHandler,
GetUserNetBattleDataHandler getUserNetBattleDataHandler, GetGameGachaHandler getGameGachaHandler,
GetGameGachaCardByIdHandler getGameGachaCardByIdHandler, GetUserCardPrintErrorHandler getUserCardPrintErrorHandler,
CMGetUserPreviewHandler cmGetUserPreviewHandler, CMGetUserDataHandler cmGetUserDataHandler,
CMGetUserCharacterHandler cmGetUserCharacterHandler, GetUserGachaHandler getUserGachaHandler,
GetUserPrintedCardHandler getUserPrintedCardHandler, CMGetUserItemHandler cmGetUserItemHandler,
RollGachaHandler rollGachaHandler, CMUpsertUserGachaHandler cmUpsertUserGachaHandler,
CMUpsertUserPrintSubtractHandler cmUpsertUserPrintSubtractHandler, CMUpsertUserPrintCancelHandler cmUpsertUserPrintCancelHandler) {
this.gameLoginHandler = gameLoginHandler;
this.gameLogoutHandler = gameLogoutHandler;
this.getGameChargeHandler = getGameChargeHandler;
@@ -80,6 +114,19 @@ public class ChusanServletController {
this.upsertUserChargelogHandler = upsertUserChargelogHandler;
this.getUserSymbolChatSettingHandler = getUserSymbolChatSettingHandler;
this.getUserNetBattleDataHandler = getUserNetBattleDataHandler;
this.getGameGachaHandler = getGameGachaHandler;
this.getGameGachaCardByIdHandler = getGameGachaCardByIdHandler;
this.getUserCardPrintErrorHandler = getUserCardPrintErrorHandler;
this.cmGetUserPreviewHandler = cmGetUserPreviewHandler;
this.cmGetUserDataHandler = cmGetUserDataHandler;
this.cmGetUserCharacterHandler = cmGetUserCharacterHandler;
this.getUserGachaHandler = getUserGachaHandler;
this.getUserPrintedCardHandler = getUserPrintedCardHandler;
this.cmGetUserItemHandler = cmGetUserItemHandler;
this.rollGachaHandler = rollGachaHandler;
this.cmUpsertUserGachaHandler = cmUpsertUserGachaHandler;
this.cmUpsertUserPrintSubtractHandler = cmUpsertUserPrintSubtractHandler;
this.cmUpsertUserPrintCancelHandler = cmUpsertUserPrintCancelHandler;
}
@PostMapping("GameLoginApi")
@@ -277,7 +324,7 @@ public class ChusanServletController {
return "{\"returnCode\":\"1\"}";
}
@PostMapping("MatchingServer/Ping")
@PostMapping({"MatchingServer/Ping", "Ping"})
String ping(@ModelAttribute Map<String, Object> request) {
return "{\"returnCode\":\"1\"}";
}
@@ -296,4 +343,91 @@ public class ChusanServletController {
*/
// Cardmaker endpoints
@PostMapping("GetGameGachaApi")
String getGameGacha(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return getGameGachaHandler.handle(request);
}
@PostMapping("GetGameGachaCardByIdApi")
String getGameGachaCardById(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return getGameGachaCardByIdHandler.handle(request);
}
@PostMapping("GetUserCardPrintErrorApi")
String getUserCardPrintError(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return getUserCardPrintErrorHandler.handle(request);
}
@PostMapping("CMGetUserCharacterApi")
String cmGetUserCharacter(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return cmGetUserCharacterHandler.handle(request);
}
@PostMapping("CMGetUserDataApi")
String cmGetUserData(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return cmGetUserDataHandler.handle(request);
}
@PostMapping("GetUserGachaApi")
String GetUserGacha(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return getUserGachaHandler.handle(request);
}
@PostMapping("CMGetUserItemApi")
String cmGetUserItem(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return cmGetUserItemHandler.handle(request);
}
@PostMapping("CMGetUserPreviewApi")
String cmGetUserPreview(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return cmGetUserPreviewHandler.handle(request);
}
@PostMapping("GetUserPrintedCardApi")
String getUserPrintedCard(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return getUserPrintedCardHandler.handle(request);
}
@PostMapping("PrinterLoginApi")
String printerLogin(@ModelAttribute Map<String, Object> request) {
return "{\"returnCode\":\"1\"}";
}
@PostMapping("PrinterLogoutApi")
String printerLogout(@ModelAttribute Map<String, Object> request) {
return "{\"returnCode\":\"1\"}";
}
@PostMapping("RollGachaApi")
String rollGacha(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return rollGachaHandler.handle(request);
}
@PostMapping("CMUpsertUserGachaApi")
String cmUpsertUserGacha(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return cmUpsertUserGachaHandler.handle(request);
}
@PostMapping("CMUpsertUserPrintApi")
String cmUpsertUserPrint(@ModelAttribute Map<String, Object> request) {
return "{\"returnCode\":\"1\", \"orderId\":\"0\", \"serialId\":\"FAKECARDIMAG12345678\", \"apiName\":\"CMUpsertUserPrintApi\"}";
}
@PostMapping("CMUpsertUserPrintCancelApi")
String cmUpsertUserPrintCancel(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return cmUpsertUserPrintCancelHandler.handle(request);
}
@PostMapping("CMUpsertUserPrintlogApi")
String cmUpsertUserPrintlog(@ModelAttribute Map<String, Object> request) {
return "{\"returnCode\":\"1\", \"orderId\":\"0\", \"serialId\":\"FAKECARDIMAG12345678\", \"apiName\":\"CMUpsertUserPrintlogApi\"}";
}
@PostMapping("CMUpsertUserPrintSubtractApi")
String cmUpsertUserPrintSubtract(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return cmUpsertUserPrintSubtractHandler.handle(request);
}
}

View File

@@ -0,0 +1,18 @@
package icu.samnyan.aqua.sega.chusan.dao.gamedata;
import icu.samnyan.aqua.sega.chusan.model.gamedata.GameGachaCard;
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Repository("ChusanGameGachaCardRepository")
public interface GameGachaCardRepository extends JpaRepository<GameGachaCard, Long> {
List<GameGachaCard> findAllByGachaId(int gacha_id);
}

View File

@@ -0,0 +1,13 @@
package icu.samnyan.aqua.sega.chusan.dao.gamedata;
import icu.samnyan.aqua.sega.chusan.model.gamedata.GameGacha;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Repository("ChusanGameGachaRepository")
public interface GameGachaRepository extends JpaRepository<GameGacha, Long> {
}

View File

@@ -0,0 +1,21 @@
package icu.samnyan.aqua.sega.chusan.dao.userdata;
import icu.samnyan.aqua.sega.chusan.model.userdata.UserCardPrintState;
import icu.samnyan.aqua.sega.chusan.model.userdata.UserData;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Repository("ChusanUserCardPrintStateRepository")
public interface UserCardPrintStateRepository extends JpaRepository<UserCardPrintState, Long> {
List<UserCardPrintState> findByUser_Card_ExtId(Long extId);
List<UserCardPrintState> findByUser_Card_ExtIdAndHasCompleted(Long extId, boolean hasCompleted);
List<UserCardPrintState> findByUserAndGachaIdAndHasCompleted(UserData userData, int gachaId, boolean hasCompleted);
}

View File

@@ -0,0 +1,20 @@
package icu.samnyan.aqua.sega.chusan.dao.userdata;
import icu.samnyan.aqua.sega.chusan.model.userdata.UserData;
import icu.samnyan.aqua.sega.chusan.model.userdata.UserGacha;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Optional;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Repository("ChusanUserGachaRepository")
public interface UserGachaRepository extends JpaRepository<UserGacha, Long> {
List<UserGacha> findByUser_Card_ExtId(Long extId);
Optional<UserGacha> findByUserAndGachaId(UserData extId, int gachaId);
}

View File

@@ -0,0 +1,68 @@
package icu.samnyan.aqua.sega.chusan.handler.impl;
import com.fasterxml.jackson.core.JsonProcessingException;
import icu.samnyan.aqua.sega.chusan.handler.BaseHandler;
import icu.samnyan.aqua.sega.chusan.model.userdata.UserCharacter;
import icu.samnyan.aqua.sega.chusan.service.UserCharacterService;
import icu.samnyan.aqua.sega.util.jackson.BasicMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/**
* Handle getUserCharacter request
* @author samnyan (privateamusement@protonmail.com)
*/
@Component("ChusanCMGetUserCharacterHandler")
public class CMGetUserCharacterHandler implements BaseHandler {
private static final Logger logger = LoggerFactory.getLogger(CMGetUserCharacterHandler.class);
private final BasicMapper mapper;
private final UserCharacterService userCharacterService;
@Autowired
public CMGetUserCharacterHandler(BasicMapper mapper, UserCharacterService userCharacterService) {
this.mapper = mapper;
this.userCharacterService = userCharacterService;
}
@Override
public String handle(Map<String, Object> request) throws JsonProcessingException {
String userId = String.valueOf(request.get("userId"));
int nextIndex = ((Number) request.get("nextIndex")).intValue();
int maxCount = ((Number) request.get("maxCount")).intValue();
int pageNum = nextIndex / maxCount;
Page<UserCharacter> dbPage = userCharacterService.getByUserId(userId, pageNum, maxCount);
long currentIndex = maxCount * pageNum + dbPage.getNumberOfElements();
Map<String, Object> resultMap = new LinkedHashMap<>();
resultMap.put("userId", userId);
resultMap.put("length", dbPage.getNumberOfElements());
resultMap.put("nextIndex", dbPage.getNumberOfElements() < maxCount ? -1 : currentIndex);
List<Integer> userCharacterIdList = new ArrayList<>();
dbPage.getContent().forEach(userCharacter -> {
userCharacterIdList.add(userCharacter.getCharacterId());
});
resultMap.put("userCharacterList", userCharacterIdList);
String json = mapper.write(resultMap);
logger.info("Response: " + json);
return json;
}
}

View File

@@ -0,0 +1,59 @@
package icu.samnyan.aqua.sega.chusan.handler.impl;
import com.fasterxml.jackson.core.JsonProcessingException;
import icu.samnyan.aqua.sega.chusan.handler.BaseHandler;
import icu.samnyan.aqua.sega.chusan.model.response.data.UserEmoney;
import icu.samnyan.aqua.sega.chusan.model.userdata.UserData;
import icu.samnyan.aqua.sega.chusan.service.UserDataService;
import icu.samnyan.aqua.sega.util.jackson.BasicMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Optional;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Component("ChusanCMGetUserDataHandler")
public class CMGetUserDataHandler implements BaseHandler {
private static final Logger logger = LoggerFactory.getLogger(CMGetUserDataHandler.class);
private final BasicMapper mapper;
private final UserDataService userDataService;
@Autowired
public CMGetUserDataHandler(BasicMapper mapper, UserDataService userDataService) {
this.mapper = mapper;
this.userDataService = userDataService;
}
@Override
public String handle(Map<String, Object> request) throws JsonProcessingException {
String userId = String.valueOf(request.get("userId"));
Optional<UserData> userDataOptional = userDataService.getUserByExtId(userId);
if (userDataOptional.isPresent()) {
Map<String, Object> resultMap = new LinkedHashMap<>();
resultMap.put("userId", userId);
UserData user = userDataOptional.get();
UserEmoney userEmoney = new UserEmoney();
user.setUserEmoney(userEmoney);
resultMap.put("userData", user);
resultMap.put("userEmoney", userEmoney);
String json = mapper.write(resultMap);
logger.info("Response: " + json);
return json;
}
return null;
}
}

View File

@@ -0,0 +1,66 @@
package icu.samnyan.aqua.sega.chusan.handler.impl;
import com.fasterxml.jackson.core.JsonProcessingException;
import icu.samnyan.aqua.sega.chusan.handler.BaseHandler;
import icu.samnyan.aqua.sega.chusan.model.userdata.UserItem;
import icu.samnyan.aqua.sega.chusan.service.UserItemService;
import icu.samnyan.aqua.sega.util.jackson.BasicMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.domain.Page;
import org.springframework.stereotype.Component;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/**
* Handler for getting user item.
* This get call before profile create.
*
* @author samnyan (privateamusement@protonmail.com)
*/
@Component("ChusanCMGetUserItemHandler")
public class CMGetUserItemHandler implements BaseHandler {
private static final Logger logger = LoggerFactory.getLogger(CMGetUserItemHandler.class);
private final BasicMapper mapper;
private final UserItemService userItemService;
public CMGetUserItemHandler(BasicMapper mapper, UserItemService userItemService) {
this.mapper = mapper;
this.userItemService = userItemService;
}
@Override
public String handle(Map<String, Object> request) throws JsonProcessingException {
String userId = String.valueOf(request.get("userId"));
Long nextIndexVal = ((Number) request.get("nextIndex")).longValue();
int maxCount = ((Number) request.get("maxCount")).intValue();
Long mul = 10000000000L;
int kind = (int) (nextIndexVal / mul);
int nextIndex = (int) (nextIndexVal % mul);
int pageNum = nextIndex / maxCount;
Page<UserItem> userItemPage = userItemService.getByUserAndItemKind(userId, kind, pageNum, maxCount);
List<UserItem> userItemList = userItemPage.getContent();
long currentIndex = kind * mul + maxCount * pageNum + userItemPage.getNumberOfElements();
Map<String, Object> resultMap = new LinkedHashMap<>();
resultMap.put("userId", userId);
resultMap.put("length", userItemPage.getNumberOfElements());
resultMap.put("nextIndex", userItemPage.getNumberOfElements() < maxCount ? -1 : currentIndex);
resultMap.put("itemKind", kind);
resultMap.put("userItemList", userItemList);
String json = mapper.write(resultMap);
logger.info("Response: " + json);
return json;
}
}

View File

@@ -0,0 +1,60 @@
package icu.samnyan.aqua.sega.chusan.handler.impl;
import com.fasterxml.jackson.core.JsonProcessingException;
import icu.samnyan.aqua.sega.chusan.handler.BaseHandler;
import icu.samnyan.aqua.sega.chusan.model.userdata.UserData;
import icu.samnyan.aqua.sega.chusan.service.UserDataService;
import icu.samnyan.aqua.sega.util.jackson.BasicMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Optional;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Component("ChusanCMGetUserPreviewHandler")
public class CMGetUserPreviewHandler implements BaseHandler {
private static final Logger logger = LoggerFactory.getLogger(CMGetUserPreviewHandler.class);
private final BasicMapper mapper;
private final UserDataService userDataService;
@Autowired
public CMGetUserPreviewHandler(BasicMapper mapper, UserDataService userDataService) {
this.mapper = mapper;
this.userDataService = userDataService;
}
@Override
public String handle(Map<String, Object> request) throws JsonProcessingException {
String userId = String.valueOf(request.get("userId"));
String segaIdAuthKey = String.valueOf(request.get("segaIdAuthKey"));
Optional<UserData> userDataOptional = userDataService.getUserByExtId(userId);
if (userDataOptional.isPresent()) {
Map<String, Object> resultMap = new LinkedHashMap<>();
UserData user = userDataOptional.get();
resultMap.put("userName", user.getUserName());
resultMap.put("level", user.getLevel());
resultMap.put("medal", user.getMedal());
resultMap.put("lastDataVersion", "2.00.00"); //Hardcode due to outdated
resultMap.put("isLogin", false);
String json = mapper.write(resultMap);
logger.info("Response: " + json);
return json;
}
return null;
}
}

View File

@@ -0,0 +1,117 @@
package icu.samnyan.aqua.sega.chusan.handler.impl;
import com.fasterxml.jackson.core.JsonProcessingException;
import icu.samnyan.aqua.sega.chusan.dao.userdata.UserCardPrintStateRepository;
import icu.samnyan.aqua.sega.chusan.dao.userdata.UserGachaRepository;
import icu.samnyan.aqua.sega.chusan.handler.BaseHandler;
import icu.samnyan.aqua.sega.chusan.model.gamedata.GameGachaCard;
import icu.samnyan.aqua.sega.chusan.model.request.UpsertUserGacha;
import icu.samnyan.aqua.sega.chusan.model.userdata.UserCardPrintState;
import icu.samnyan.aqua.sega.chusan.model.userdata.UserData;
import icu.samnyan.aqua.sega.chusan.model.userdata.UserGacha;
import icu.samnyan.aqua.sega.chusan.model.userdata.UserItem;
import icu.samnyan.aqua.sega.chusan.service.UserDataService;
import icu.samnyan.aqua.sega.chusan.service.UserItemService;
import icu.samnyan.aqua.sega.util.jackson.BasicMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Component("ChusanCMUpsertUserGachaHandler")
public class CMUpsertUserGachaHandler implements BaseHandler {
private static final Logger logger = LoggerFactory.getLogger(CMUpsertUserGachaHandler.class);
private final UserCardPrintStateRepository userCardPrintStateRepository;
private final UserGachaRepository userGachaRepository;
private final UserDataService userDataService;
private final UserItemService userItemService;
private final BasicMapper mapper;
@Autowired
public CMUpsertUserGachaHandler(UserItemService userItemService, UserDataService userDataService,
UserCardPrintStateRepository userCardPrintStateRepository, BasicMapper mapper,
UserGachaRepository userGachaRepository) {
this.userCardPrintStateRepository = userCardPrintStateRepository;
this.userGachaRepository = userGachaRepository;
this.userDataService = userDataService;
this.userItemService = userItemService;
this.mapper = mapper;
}
@Override
public String handle(Map<String, Object> request) throws JsonProcessingException {
String userId = String.valueOf(request.get("userId"));
int gachaId = ((Number) request.get("gachaId")).intValue();
int placeId = ((Number) request.get("placeId")).intValue();
UpsertUserGacha upsertUserGacha = mapper.convert(request.get("cmUpsertUserGacha"), UpsertUserGacha.class);
List<UserCardPrintState> userCardPrintStateList = new ArrayList<>();
UserData userData;
Optional<UserData> userOptional = userDataService.getUserByExtId(userId);
if (userOptional.isPresent()) {
userData = userOptional.get();
} else {
logger.error("User not found. userId: {}", userId);
return null;
}
if (upsertUserGacha.getGameGachaCardList() != null) {
for (GameGachaCard gameGachaCard : upsertUserGacha.getGameGachaCardList()) {
UserCardPrintState userCardPrintState = new UserCardPrintState();
userCardPrintState.setHasCompleted(false);
userCardPrintState.setLimitDate(LocalDateTime.of(2029, 01, 01, 0, 0));
userCardPrintState.setPlaceId(placeId);
userCardPrintState.setCardId(gameGachaCard.getCardId());
userCardPrintState.setGachaId(gachaId);
userCardPrintState.setUser(userData);
userCardPrintStateRepository.save(userCardPrintState);
}
}
List<UserItem> userItemListToSave = new ArrayList<>();
List<UserItem> userItemList = upsertUserGacha.getUserItemList();
userItemList.forEach(newUserItem -> {
int itemId = newUserItem.getItemId();
int itemKind = newUserItem.getItemKind();
Optional<UserItem> userItemOptional = userItemService.getByUserAndItemIdAndKind(userData, itemId, itemKind);
UserItem userItem = userItemOptional.orElseGet(() -> new UserItem(userData));
newUserItem.setId(userItem.getId());
newUserItem.setUser(userItem.getUser());
userItemListToSave.add(newUserItem);
});
userItemService.saveAll(userItemListToSave);
if (upsertUserGacha.getUserGacha() != null) {
UserGacha newUserGacha = upsertUserGacha.getUserGacha();
newUserGacha.setUser(userData);
userGachaRepository.save(newUserGacha);
}
userCardPrintStateList = userCardPrintStateRepository.findByUserAndGachaIdAndHasCompleted(userData, gachaId, false);
Map<String, Object> resultMap = new LinkedHashMap<>();
resultMap.put("returnCode", 1);
resultMap.put("apiName", "CMUpsertUserGachaApi");
resultMap.put("userCardPrintStateList", userCardPrintStateList);
String json = mapper.write(resultMap);
logger.info("Response: " + json);
return json;
}
}

View File

@@ -0,0 +1,58 @@
package icu.samnyan.aqua.sega.chusan.handler.impl;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import icu.samnyan.aqua.sega.chusan.dao.userdata.UserCardPrintStateRepository;
import icu.samnyan.aqua.sega.chusan.handler.BaseHandler;
import icu.samnyan.aqua.sega.chusan.model.userdata.UserCardPrintState;
import icu.samnyan.aqua.sega.util.jackson.BasicMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Component("ChusanCMUpsertUserPrintCancelHandler")
public class CMUpsertUserPrintCancelHandler implements BaseHandler {
private static final Logger logger = LoggerFactory.getLogger(CMUpsertUserPrintCancelHandler.class);
private final UserCardPrintStateRepository userCardPrintStateRepository;
private final BasicMapper mapper;
@Autowired
public CMUpsertUserPrintCancelHandler(UserCardPrintStateRepository userCardPrintStateRepository, BasicMapper mapper) {
this.userCardPrintStateRepository = userCardPrintStateRepository;
this.mapper = mapper;
}
@Override
public String handle(Map<String, Object> request) throws JsonProcessingException {
String userId = String.valueOf(request.get("userId"));
List<Integer> orderIdList = mapper.convert(request.get("orderIdList"), new TypeReference<List<Integer>>() {});
for (Integer orderId : orderIdList) {
Optional<UserCardPrintState> userCardPrintStateOptional = userCardPrintStateRepository.findById(orderId.longValue());
if (userCardPrintStateOptional.isPresent()) {
UserCardPrintState newUserCardPrintState = userCardPrintStateOptional.get();
newUserCardPrintState.setHasCompleted(true);
userCardPrintStateRepository.save(newUserCardPrintState);
}
}
Map<String, Object> resultMap = new LinkedHashMap<>();
resultMap.put("returnCode", 1);
resultMap.put("apiName", "CMUpsertUserPrintCancelApi");
String json = mapper.write(resultMap);
logger.info("Response: " + json);
return json;
}
}

View File

@@ -0,0 +1,92 @@
package icu.samnyan.aqua.sega.chusan.handler.impl;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import icu.samnyan.aqua.sega.chusan.dao.userdata.UserCardPrintStateRepository;
import icu.samnyan.aqua.sega.chusan.handler.BaseHandler;
import icu.samnyan.aqua.sega.chusan.model.userdata.UserCardPrintState;
import icu.samnyan.aqua.sega.chusan.model.userdata.UserData;
import icu.samnyan.aqua.sega.chusan.model.userdata.UserItem;
import icu.samnyan.aqua.sega.chusan.service.UserDataService;
import icu.samnyan.aqua.sega.chusan.service.UserItemService;
import icu.samnyan.aqua.sega.util.jackson.BasicMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Component("ChusanCMUpsertUserPrintSubtractHandler")
public class CMUpsertUserPrintSubtractHandler implements BaseHandler {
private static final Logger logger = LoggerFactory.getLogger(CMUpsertUserPrintSubtractHandler.class);
private final UserCardPrintStateRepository userCardPrintStateRepository;
private final UserItemService userItemService;
private final UserDataService userDataService;
private final BasicMapper mapper;
@Autowired
public CMUpsertUserPrintSubtractHandler(UserItemService userItemService, UserDataService userDataService, UserCardPrintStateRepository userCardPrintStateRepository, BasicMapper mapper) {
this.userCardPrintStateRepository = userCardPrintStateRepository;
this.userItemService = userItemService;
this.userDataService = userDataService;
this.mapper = mapper;
}
@Override
public String handle(Map<String, Object> request) throws JsonProcessingException {
String userId = String.valueOf(request.get("userId"));
UserCardPrintState userCardPrintState = mapper.convert(request.get("userCardPrintState"), UserCardPrintState.class);
List<UserItem> userItemList = mapper.convert(request.get("userItemList"), new TypeReference<List<UserItem>>() {});
UserData userData;
Optional<UserData> userOptional = userDataService.getUserByExtId(userId);
if (userOptional.isPresent()) {
userData = userOptional.get();
} else {
logger.error("User not found. userId: {}", userId);
return null;
}
List<UserItem> userItemListToSave = new ArrayList<>();
userItemList.forEach(newUserItem -> {
int itemId = newUserItem.getItemId();
int itemKind = newUserItem.getItemKind();
Optional<UserItem> userItemOptional = userItemService.getByUserAndItemIdAndKind(userData, itemId, itemKind);
UserItem userItem = userItemOptional.orElseGet(() -> new UserItem(userData));
newUserItem.setId(userItem.getId());
newUserItem.setUser(userItem.getUser());
userItemListToSave.add(newUserItem);
});
userItemService.saveAll(userItemListToSave);
Optional<UserCardPrintState> userCardPrintStateOptional = userCardPrintStateRepository.findById(userCardPrintState.getId());
if (userCardPrintStateOptional.isPresent()) {
UserCardPrintState newUserCardPrintState = userCardPrintStateOptional.get();
newUserCardPrintState.setHasCompleted(true);
userCardPrintStateRepository.save(newUserCardPrintState);
}
Map<String, Object> resultMap = new LinkedHashMap<>();
resultMap.put("returnCode", 1);
resultMap.put("apiName", "CMUpsertUserPrintSubtractApi");
String json = mapper.write(resultMap);
logger.info("Response: " + json);
return json;
}
}

View File

@@ -0,0 +1,53 @@
package icu.samnyan.aqua.sega.chusan.handler.impl;
import com.fasterxml.jackson.core.JsonProcessingException;
import icu.samnyan.aqua.sega.chusan.dao.gamedata.GameGachaCardRepository;
import icu.samnyan.aqua.sega.chusan.handler.BaseHandler;
import icu.samnyan.aqua.sega.chusan.model.gamedata.GameGachaCard;
import icu.samnyan.aqua.sega.chusan.service.GameGachaCardService;
import icu.samnyan.aqua.sega.util.jackson.BasicMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Component("ChusanGetGameGachaCardByIdHandler")
public class GetGameGachaCardByIdHandler implements BaseHandler {
private static final Logger logger = LoggerFactory.getLogger(GetGameGachaCardByIdHandler.class);
private final GameGachaCardService gameGachaCardService;
private final BasicMapper mapper;
@Autowired
public GetGameGachaCardByIdHandler(GameGachaCardService gameGachaCardService, BasicMapper mapper) {
this.gameGachaCardService = gameGachaCardService;
this.mapper = mapper;
}
@Override
public String handle(Map<String, Object> request) throws JsonProcessingException {
int gachaId = ((Number) request.get("gachaId")).intValue();
List<GameGachaCard> gameGachaCardList = gameGachaCardService.getByGachaId(gachaId);
Map<String, Object> resultMap = new LinkedHashMap<>();
resultMap.put("gachaId", gachaId);
resultMap.put("length", gameGachaCardList.size());
resultMap.put("isPickup", false);
resultMap.put("gameGachaCardList", gameGachaCardList);
resultMap.put("emissionList", List.of());
resultMap.put("afterCalcList", List.of());
String json = mapper.write(resultMap);
logger.info("Response: " + json);
return json;
}
}

View File

@@ -0,0 +1,47 @@
package icu.samnyan.aqua.sega.chusan.handler.impl;
import com.fasterxml.jackson.core.JsonProcessingException;
import icu.samnyan.aqua.sega.chusan.dao.gamedata.GameGachaRepository;
import icu.samnyan.aqua.sega.chusan.handler.BaseHandler;
import icu.samnyan.aqua.sega.chusan.model.gamedata.GameGacha;
import icu.samnyan.aqua.sega.util.jackson.BasicMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Component("ChusanGetGameGachaHandler")
public class GetGameGachaHandler implements BaseHandler {
private static final Logger logger = LoggerFactory.getLogger(GetGameGachaHandler.class);
private final GameGachaRepository gameGachaRepository;
private final BasicMapper mapper;
@Autowired
public GetGameGachaHandler(GameGachaRepository gameGachaRepository, BasicMapper mapper) {
this.gameGachaRepository = gameGachaRepository;
this.mapper = mapper;
}
@Override
public String handle(Map<String, Object> request) throws JsonProcessingException {
List<GameGacha> gameGachaList = gameGachaRepository.findAll();
Map<String, Object> resultMap = new LinkedHashMap<>();
resultMap.put("length", gameGachaList.size());
resultMap.put("gameGachaList", gameGachaList);
resultMap.put("registIdList", List.of());
String json = mapper.write(resultMap);
logger.info("Response: " + json);
return json;
}
}

View File

@@ -0,0 +1,49 @@
package icu.samnyan.aqua.sega.chusan.handler.impl;
import com.fasterxml.jackson.core.JsonProcessingException;
import icu.samnyan.aqua.sega.chusan.dao.userdata.UserCardPrintStateRepository;
import icu.samnyan.aqua.sega.chusan.handler.BaseHandler;
import icu.samnyan.aqua.sega.chusan.model.userdata.UserCardPrintState;
import icu.samnyan.aqua.sega.util.jackson.BasicMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Component("ChusanGetUserCardPrintErrorHandler")
public class GetUserCardPrintErrorHandler implements BaseHandler {
private static final Logger logger = LoggerFactory.getLogger(GetUserCardPrintErrorHandler.class);
private final UserCardPrintStateRepository userCardPrintStateRepository;
private final BasicMapper mapper;
@Autowired
public GetUserCardPrintErrorHandler(UserCardPrintStateRepository userCardPrintStateRepository, BasicMapper mapper) {
this.mapper = mapper;
this.userCardPrintStateRepository = userCardPrintStateRepository;
}
@Override
public String handle(Map<String, Object> request) throws JsonProcessingException {
Long userId = ((Number) request.get("userId")).longValue();
List<UserCardPrintState> userCardPrintStateList = userCardPrintStateRepository.findByUser_Card_ExtIdAndHasCompleted(userId, false);
Map<String, Object> resultMap = new LinkedHashMap<>();
resultMap.put("userId", userId);
resultMap.put("length", userCardPrintStateList.size());
resultMap.put("userCardPrintStateList", userCardPrintStateList);
String json = mapper.write(resultMap);
logger.info("Response: " + json);
return json;
}
}

View File

@@ -0,0 +1,50 @@
package icu.samnyan.aqua.sega.chusan.handler.impl;
import com.fasterxml.jackson.core.JsonProcessingException;
import icu.samnyan.aqua.sega.chusan.handler.BaseHandler;
import icu.samnyan.aqua.sega.chusan.model.userdata.UserGacha;
import icu.samnyan.aqua.sega.chusan.service.UserGachaService;
import icu.samnyan.aqua.sega.util.jackson.BasicMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Component("ChusanGetUserGachaHandler")
public class GetUserGachaHandler implements BaseHandler {
private static final Logger logger = LoggerFactory.getLogger(GetUserGachaHandler.class);
private final BasicMapper mapper;
private final UserGachaService userGachaService;
@Autowired
public GetUserGachaHandler(BasicMapper mapper, UserGachaService userGachaService) {
this.mapper = mapper;
this.userGachaService = userGachaService;
}
@Override
public String handle(Map<String, Object> request) throws JsonProcessingException {
String userId = String.valueOf(request.get("userId"));
List<UserGacha> userGachaList = userGachaService.getByUserId(userId);
Map<String, Object> resultMap = new LinkedHashMap<>();
resultMap.put("userId", userId);
resultMap.put("length", userGachaList.size());
resultMap.put("userGachaList", userGachaList);
String json = mapper.write(resultMap);
logger.info("Response: " + json);
return json;
}
}

View File

@@ -0,0 +1,43 @@
package icu.samnyan.aqua.sega.chusan.handler.impl;
import com.fasterxml.jackson.core.JsonProcessingException;
import icu.samnyan.aqua.sega.chusan.handler.BaseHandler;
import icu.samnyan.aqua.sega.util.jackson.BasicMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Component("ChusanGetUserPrintedCardHandler")
public class GetUserPrintedCardHandler implements BaseHandler {
private static final Logger logger = LoggerFactory.getLogger(GetUserPrintedCardHandler.class);
private final BasicMapper mapper;
@Autowired
public GetUserPrintedCardHandler(BasicMapper mapper) {
this.mapper = mapper;
}
@Override
public String handle(Map<String, Object> request) throws JsonProcessingException {
String userId = String.valueOf(request.get("userId"));
Map<String, Object> resultMap = new LinkedHashMap<>();
resultMap.put("userId", userId);
resultMap.put("length", 0);
resultMap.put("nextIndex", -1);
resultMap.put("userPrintedCardList", List.of());
String json = mapper.write(resultMap);
logger.info("Response: " + json);
return json;
}
}

View File

@@ -0,0 +1,50 @@
package icu.samnyan.aqua.sega.chusan.handler.impl;
import com.fasterxml.jackson.core.JsonProcessingException;
import icu.samnyan.aqua.sega.chusan.dao.gamedata.GameGachaCardRepository;
import icu.samnyan.aqua.sega.chusan.handler.BaseHandler;
import icu.samnyan.aqua.sega.chusan.model.gamedata.GameGachaCard;
import icu.samnyan.aqua.sega.chusan.service.GameGachaCardService;
import icu.samnyan.aqua.sega.util.jackson.BasicMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Component("ChusanRollGachaHandler")
public class RollGachaHandler implements BaseHandler {
private static final Logger logger = LoggerFactory.getLogger(RollGachaHandler.class);
private final GameGachaCardService gameGachaCardService;
private final BasicMapper mapper;
@Autowired
public RollGachaHandler(GameGachaCardService gameGachaCardService, BasicMapper mapper) {
this.gameGachaCardService = gameGachaCardService;
this.mapper = mapper;
}
@Override
public String handle(Map<String, Object> request) throws JsonProcessingException {
int gachaId = ((Number) request.get("gachaId")).intValue();
int times = ((Number) request.get("times")).intValue();
List<GameGachaCard> gameGachaCardList = gameGachaCardService.getRandomCards(gachaId, times);
Map<String, Object> resultMap = new LinkedHashMap<>();
resultMap.put("length", gameGachaCardList.size());
resultMap.put("gameGachaCardList", gameGachaCardList);
String json = mapper.write(resultMap);
logger.info("Response: " + json);
return json;
}
}

View File

@@ -0,0 +1,47 @@
package icu.samnyan.aqua.sega.chusan.model.gamedata;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Entity(name = "ChusanGameGacha")
@Table(name = "chusan_game_gacha")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class GameGacha implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@JsonIgnore
private int id;
private int gachaId;
private String gachaName;
private int type;
private int kind; // 0
@JsonProperty("isCeiling")
private boolean isCeiling;
private int ceilingCnt;
private int changeRateCnt1;
private int changeRateCnt2;
private LocalDateTime startDate;
private LocalDateTime endDate;
private LocalDateTime noticeStartDate;
private LocalDateTime noticeEndDate;
}

View File

@@ -0,0 +1,39 @@
package icu.samnyan.aqua.sega.chusan.model.gamedata;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import java.io.Serializable;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Entity(name = "ChusanGameGachaCard")
@Table(name = "chusan_game_gacha_card")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class GameGachaCard implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@JsonIgnore
private int id;
private int gachaId;
private int cardId;
private int rarity;
private int weight;
@JsonProperty("isPickup")
private boolean isPickup;
}

View File

@@ -0,0 +1,49 @@
package icu.samnyan.aqua.sega.chusan.model.request;
import com.fasterxml.jackson.annotation.JsonProperty;
import icu.samnyan.aqua.sega.chusan.model.gamedata.GameGachaCard;
import icu.samnyan.aqua.sega.chusan.model.userdata.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.lang.Nullable;
import java.io.Serializable;
import java.util.List;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UpsertUserGacha implements Serializable {
@Nullable
private UserData userData;
@Nullable
private UserGacha userGacha;
@Nullable
private List<Object> userCharacterList;
@Nullable
private List<Object> userCardList;
@Nullable
private List<GameGachaCard> gameGachaCardList;
@Nullable
private List<UserItem> userItemList;
@Nullable
@JsonProperty("isNewCharacterList")
private String isNewCharacterList;
@Nullable
@JsonProperty("isNewCardList")
private String isNewCardList;
}

View File

@@ -0,0 +1,22 @@
package icu.samnyan.aqua.sega.chusan.model.response.data;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserEmoney {
private int type = 0;
private int emoneyCredit = 69;
private int emoneyBrand = 2;
private int ext1 = 0;
private int ext2 = 0;
private int ext3 = 0;
}

View File

@@ -0,0 +1,45 @@
package icu.samnyan.aqua.sega.chusan.model.userdata;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.*;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Entity(name = "ChusanUserCardPrintState")
@Table(name = "chusan_user_print_state")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserCardPrintState implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@JsonProperty("orderId")
private long id;
@JsonIgnore
@ManyToOne
@JoinColumn(name = "user_id")
private UserData user;
private boolean hasCompleted;
private LocalDateTime limitDate;
private int placeId;
private int cardId;
private int gachaId;
public UserCardPrintState(UserData user) {
this.user = user;
}
}

View File

@@ -1,9 +1,12 @@
package icu.samnyan.aqua.sega.chusan.model.userdata;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import icu.samnyan.aqua.sega.chusan.model.response.data.UserEmoney;
import icu.samnyan.aqua.sega.general.model.Card;
import icu.samnyan.aqua.sega.util.jackson.AccessCodeSerializer;
import lombok.AllArgsConstructor;
@@ -13,6 +16,7 @@ import lombok.NoArgsConstructor;
import javax.persistence.*;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.List;
/**
* @author samnyan (privateamusement@protonmail.com)
@@ -328,11 +332,17 @@ public class UserData implements Serializable {
private long extLong2;
private String rankUpChallengeResults;
@JsonInclude
@Transient
private List<Object> rankUpChallengeResults;
@JsonProperty("isNetBattleHost")
private boolean isNetBattleHost;
private int netBattleEndState;
@JsonInclude(JsonInclude.Include.NON_NULL)
@Transient
private UserEmoney userEmoney;
}

View File

@@ -0,0 +1,52 @@
package icu.samnyan.aqua.sega.chusan.model.userdata;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.*;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Entity(name = "ChusanUserGacha")
@Table(name = "chusan_user_gacha", uniqueConstraints = {@UniqueConstraint(columnNames = {"user_id", "gacha_id"})})
@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserGacha implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@JsonIgnore
private long id;
@JsonIgnore
@ManyToOne
@JoinColumn(name = "user_id")
private UserData user;
@Column(name = "gacha_id")
private int gachaId;
private int totalGachaCnt;
private int ceilingGachaCnt;
private int dailyGachaCnt;
private int fiveGachaCnt;
private int elevenGachaCnt;
private LocalDateTime dailyGachaDate;
public UserGacha(UserData user) {
this.user = user;
}
}

View File

@@ -0,0 +1,46 @@
package icu.samnyan.aqua.sega.chusan.service;
import icu.samnyan.aqua.sega.chusan.dao.gamedata.GameGachaCardRepository;
import icu.samnyan.aqua.sega.chusan.model.gamedata.GameGachaCard;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Service("ChusanGameGachaCardService")
public class GameGachaCardService {
private final GameGachaCardRepository gameGachaCardRepository;
@Autowired
public GameGachaCardService(GameGachaCardRepository gameGachaCardRepository) {
this.gameGachaCardRepository = gameGachaCardRepository;
}
@Cacheable("gachaCard")
public List<GameGachaCard> getAll() {
return gameGachaCardRepository.findAll();
}
public List<GameGachaCard> getByGachaId(int gachaId) {
return gameGachaCardRepository.findAllByGachaId(gachaId);
}
public List<GameGachaCard> getRandomCards(int gachaId, int times) {
List<GameGachaCard> gachaCards = gameGachaCardRepository.findAllByGachaId(gachaId);
List<GameGachaCard> randomCards = new ArrayList<>();
Random rand = new Random();
for (int i = 0; i < Math.min(times, gachaCards.size()); i++) {
randomCards.add(gachaCards.remove(rand.nextInt(gachaCards.size())));
}
return randomCards;
}
}

View File

@@ -0,0 +1,40 @@
package icu.samnyan.aqua.sega.chusan.service;
import icu.samnyan.aqua.sega.chusan.dao.userdata.UserGachaRepository;
import icu.samnyan.aqua.sega.chusan.model.userdata.UserData;
import icu.samnyan.aqua.sega.chusan.model.userdata.UserGacha;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Optional;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Service("ChusanUserGachaService")
public class UserGachaService {
private final UserGachaRepository userGachaRepository;
public UserGachaService(UserGachaRepository userGachaRepository) {
this.userGachaRepository = userGachaRepository;
}
public UserGacha save(UserGacha userGacha) {
return userGachaRepository.save(userGacha);
}
public List<UserGacha> saveAll(List<UserGacha> newUserGachaList) {
return userGachaRepository.saveAll(newUserGachaList);
}
public List<UserGacha> getByUserId(String userId) {
return userGachaRepository.findByUser_Card_ExtId(Long.parseLong(userId));
}
public Optional<UserGacha> getByUserAndGachaId(UserData user, int gachaId) {
return userGachaRepository.findByUserAndGachaId(user, gachaId);
}
}