[cardmaker] Add experimental maimai2 support

This commit is contained in:
Dom Eori
2022-12-08 21:34:18 +09:00
parent 7bfd51c1bd
commit 30b9ab73da
19 changed files with 804 additions and 8 deletions

View File

@@ -47,6 +47,11 @@ public class Maimai2ServletController {
private final UploadUserPlaylogHandler uploadUserPlaylogHandler; private final UploadUserPlaylogHandler uploadUserPlaylogHandler;
private final GetGameNgMusicIdHandler getGameNgMusicIdHandler; private final GetGameNgMusicIdHandler getGameNgMusicIdHandler;
private final GetUserFriendSeasonRankingHandler getUserFriendSeasonRankingHandler; private final GetUserFriendSeasonRankingHandler getUserFriendSeasonRankingHandler;
private final CMGetUserPreviewHandler cmGetUserPreviewHandler;
private final CMGetSellingCardHandler cmGetSellingCardHandler;
private final GetUserCardPrintErrorHandler getUserCardPrintErrorHandler;
private final CMGetUserCharacterHandler cmGetUserCharacterHandler;
private final UpsertUserPrintHandler upsertUserPrintHandler;
public Maimai2ServletController(GetGameSettingHandler getGameSettingHandler, GetGameEventHandler getGameEventHandler, GetGameRankingHandler getGameRankingHandler, GetGameTournamentInfoHandler getGameTournamentInfoHandler, public Maimai2ServletController(GetGameSettingHandler getGameSettingHandler, GetGameEventHandler getGameEventHandler, GetGameRankingHandler getGameRankingHandler, GetGameTournamentInfoHandler getGameTournamentInfoHandler,
GetTransferFriendHandler getTransferFriendHandler, GetUserActivityHandler getUserActivityHandler, UserLoginHandler userLoginHandler, UserLogoutHandler userLogoutHandler, GetTransferFriendHandler getTransferFriendHandler, GetUserActivityHandler getUserActivityHandler, UserLoginHandler userLoginHandler, UserLogoutHandler userLogoutHandler,
@@ -55,7 +60,9 @@ public class Maimai2ServletController {
GetUserLoginBonusHandler getUserLoginBonusHandler, GetUserMapHandler getUserMapHandler, GetUserFavoriteHandler getUserFavoriteHandler, GetUserLoginBonusHandler getUserLoginBonusHandler, GetUserMapHandler getUserMapHandler, GetUserFavoriteHandler getUserFavoriteHandler,
GetUserCardHandler getUserCardHandler, GetUserMusicHandler getUserMusicHandler, GetUserRatingHandler getUserRatingHandler, GetUserRegionHandler getUserRegionHandler, GetUserCardHandler getUserCardHandler, GetUserMusicHandler getUserMusicHandler, GetUserRatingHandler getUserRatingHandler, GetUserRegionHandler getUserRegionHandler,
GetGameChargeHandler getGameChargeHandler, GetUserChargeHandler getUserChargeHandler, GetUserCourseHandler getUserCourseHandler, UploadUserPhotoHandler uploadUserPhotoHandler, GetGameChargeHandler getGameChargeHandler, GetUserChargeHandler getUserChargeHandler, GetUserCourseHandler getUserCourseHandler, UploadUserPhotoHandler uploadUserPhotoHandler,
UploadUserPlaylogHandler uploadUserPlaylogHandler, GetGameNgMusicIdHandler getGameNgMusicIdHandler, GetUserFriendSeasonRankingHandler getUserFriendSeasonRankingHandler) { UploadUserPlaylogHandler uploadUserPlaylogHandler, GetGameNgMusicIdHandler getGameNgMusicIdHandler, GetUserFriendSeasonRankingHandler getUserFriendSeasonRankingHandler,
CMGetUserPreviewHandler cmGetUserPreviewHandler, CMGetSellingCardHandler cmGetSellingCardHandler, GetUserCardPrintErrorHandler getUserCardPrintErrorHandler, CMGetUserCharacterHandler cmGetUserCharacterHandler,
UpsertUserPrintHandler upsertUserPrintHandler) {
this.getGameSettingHandler = getGameSettingHandler; this.getGameSettingHandler = getGameSettingHandler;
this.getGameEventHandler = getGameEventHandler; this.getGameEventHandler = getGameEventHandler;
this.getGameRankingHandler = getGameRankingHandler; this.getGameRankingHandler = getGameRankingHandler;
@@ -86,6 +93,11 @@ public class Maimai2ServletController {
this.uploadUserPlaylogHandler = uploadUserPlaylogHandler; this.uploadUserPlaylogHandler = uploadUserPlaylogHandler;
this.getGameNgMusicIdHandler = getGameNgMusicIdHandler; this.getGameNgMusicIdHandler = getGameNgMusicIdHandler;
this.getUserFriendSeasonRankingHandler = getUserFriendSeasonRankingHandler; this.getUserFriendSeasonRankingHandler = getUserFriendSeasonRankingHandler;
this.cmGetUserPreviewHandler = cmGetUserPreviewHandler;
this.cmGetSellingCardHandler = cmGetSellingCardHandler;
this.getUserCardPrintErrorHandler = getUserCardPrintErrorHandler;
this.cmGetUserCharacterHandler = cmGetUserCharacterHandler;
this.upsertUserPrintHandler = upsertUserPrintHandler;
} }
// Mandatory for boot // Mandatory for boot
@@ -120,7 +132,6 @@ public class Maimai2ServletController {
return getUserActivityHandler.handle(request); return getUserActivityHandler.handle(request);
} }
// maybe releated DX Pass? return empty
@PostMapping("GetUserCardApi") @PostMapping("GetUserCardApi")
public String getUserCardHandler(@ModelAttribute Map<String, Object> request) throws JsonProcessingException { public String getUserCardHandler(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return getUserCardHandler.handle(request); return getUserCardHandler.handle(request);
@@ -294,4 +305,65 @@ public class Maimai2ServletController {
return "{\"returnCode\":\"1\"}"; return "{\"returnCode\":\"1\"}";
} }
// CardMaker APIs
@PostMapping("CMGetSellingCardApi")
String cmGetSellingCard(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return cmGetSellingCardHandler.handle(request);
}
@PostMapping("CMGetUserCardApi")
String cmGetUserCard(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return getUserCardHandler.handle(request);
}
@PostMapping("CMGetUserCardPrintErrorApi")
String cmGetUserCardPrintError(@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 getUserDataHandler.handle(request);
}
@PostMapping("CMGetUserItemApi")
String cmGetUserItem(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return getUserItemHandler.handle(request);
}
@PostMapping("CMGetUserPreviewApi")
String cmGetUserPreview(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return cmGetUserPreviewHandler.handle(request);
}
@PostMapping("CMLoginApi")
String cmLoginApi(@ModelAttribute Map<String, Object> request) {
return "{\"returnCode\":\"1\"}";
}
@PostMapping("CMLogoutApi")
String cmLogoutApi(@ModelAttribute Map<String, Object> request) {
return "{\"returnCode\":\"1\"}";
}
@PostMapping("CMUpsertBuyCardApi")
String cmUpsertBuyCard(@ModelAttribute Map<String, Object> request) {
return "{\"returnCode\":\"1\"}";
}
@PostMapping("CMUpsertUserPrintApi")
String cmUpsertUserPrint(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return upsertUserPrintHandler.handle(request);
}
@PostMapping("CMUpsertUserPrintlogApi")
String cmUpsertUserPrintlog(@ModelAttribute Map<String, Object> request) {
return "{\"returnCode\":\"1\", \"orderId\":\"0\", \"serialId\":\"FAKECARDIMAG12345678\"}";
}
} }

View File

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

View File

@@ -0,0 +1,22 @@
package icu.samnyan.aqua.sega.maimai2.dao.userdata;
import icu.samnyan.aqua.sega.maimai2.model.userdata.UserDetail;
import icu.samnyan.aqua.sega.maimai2.model.userdata.UserCard;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.Optional;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Repository("Maimai2UserCardRepository")
public interface UserCardRepository extends JpaRepository<UserCard, Long> {
Optional<UserCard> findByUserAndCardId(UserDetail user, int cardId);
Page<UserCard> findByUser_Card_ExtId(long userId, Pageable page);
}

View File

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

View File

@@ -0,0 +1,47 @@
package icu.samnyan.aqua.sega.maimai2.handler.impl;
import com.fasterxml.jackson.core.JsonProcessingException;
import icu.samnyan.aqua.sega.maimai2.dao.gamedata.GameSellingCardRepository;
import icu.samnyan.aqua.sega.maimai2.handler.BaseHandler;
import icu.samnyan.aqua.sega.maimai2.model.gamedata.GameSellingCard;
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("Maimai2CMGetSellingCardHandler")
public class CMGetSellingCardHandler implements BaseHandler {
private static final Logger logger = LoggerFactory.getLogger(CMGetSellingCardHandler.class);
private final GameSellingCardRepository gameSellingCardRepository;
private final BasicMapper mapper;
@Autowired
public CMGetSellingCardHandler(GameSellingCardRepository gameSellingCardRepository, BasicMapper mapper) {
this.gameSellingCardRepository = gameSellingCardRepository;
this.mapper = mapper;
}
@Override
public String handle(Map<String, Object> request) throws JsonProcessingException {
List<GameSellingCard> sellingCardList = gameSellingCardRepository.findAll();
Map<String, Object> resultMap = new LinkedHashMap<>();
resultMap.put("length", sellingCardList.size());
resultMap.put("sellingCardList", sellingCardList);
String json = mapper.write(resultMap);
logger.info("Response: " + json);
return json;
}
}

View File

@@ -0,0 +1,48 @@
package icu.samnyan.aqua.sega.maimai2.handler.impl;
import com.fasterxml.jackson.core.JsonProcessingException;
import icu.samnyan.aqua.sega.maimai2.dao.userdata.UserCharacterRepository;
import icu.samnyan.aqua.sega.maimai2.handler.BaseHandler;
import icu.samnyan.aqua.sega.maimai2.model.userdata.UserCharacter;
import icu.samnyan.aqua.sega.util.jackson.BasicMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Component("Maimai2CMGetUserCharacterHandler")
public class CMGetUserCharacterHandler implements BaseHandler {
private static final Logger logger = LoggerFactory.getLogger(CMGetUserCharacterHandler.class);
private final BasicMapper mapper;
private final UserCharacterRepository userCharacterRepository;
public CMGetUserCharacterHandler(BasicMapper mapper, UserCharacterRepository userCharacterRepository) {
this.mapper = mapper;
this.userCharacterRepository = userCharacterRepository;
}
@Override
public String handle(Map<String, Object> request) throws JsonProcessingException {
long userId = ((Number) request.get("userId")).longValue();
List<UserCharacter> userCharacterList = userCharacterRepository.findByUser_Card_ExtId(userId);
Map<String, Object> resultMap = new LinkedHashMap<>();
resultMap.put("returnCode", 1);
resultMap.put("length", userCharacterList.size());
resultMap.put("userCharacterList", userCharacterList);
String json = mapper.write(resultMap);
logger.info("Response: " + json);
return json;
}
}

View File

@@ -0,0 +1,60 @@
package icu.samnyan.aqua.sega.maimai2.handler.impl;
import com.fasterxml.jackson.core.JsonProcessingException;
import icu.samnyan.aqua.sega.maimai2.handler.BaseHandler;
import icu.samnyan.aqua.sega.maimai2.model.userdata.UserDetail;
import icu.samnyan.aqua.sega.maimai2.dao.userdata.UserDataRepository;
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("Maimai2CMGetUserPreviewHandler")
public class CMGetUserPreviewHandler implements BaseHandler {
private static final Logger logger = LoggerFactory.getLogger(CMGetUserPreviewHandler.class);
private final BasicMapper mapper;
private final UserDataRepository userDataRepository;
@Autowired
public CMGetUserPreviewHandler(BasicMapper mapper, UserDataRepository userDataRepository) {
this.mapper = mapper;
this.userDataRepository = userDataRepository;
}
@Override
public String handle(Map<String, Object> request) throws JsonProcessingException {
Long userId = ((Number) request.get("userId")).longValue();
String segaIdAuthKey = String.valueOf(request.get("segaIdAuthKey"));
Optional<UserDetail> userDataOptional = userDataRepository.findByCard_ExtId(userId);
if (userDataOptional.isPresent()) {
Map<String, Object> resultMap = new LinkedHashMap<>();
UserDetail user = userDataOptional.get();
resultMap.put("userName", user.getUserName());
resultMap.put("rating", user.getPlayerRating());
resultMap.put("lastDataVersion", "1.20.00"); //Hardcode due to outdated release
resultMap.put("isLogin", false);
resultMap.put("isExistSellingCard", false);
String json = mapper.write(resultMap);
logger.info("Response: " + json);
return json;
}
return null;
}
}

View File

@@ -1,15 +1,18 @@
package icu.samnyan.aqua.sega.maimai2.handler.impl; package icu.samnyan.aqua.sega.maimai2.handler.impl;
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.JsonProcessingException;
import icu.samnyan.aqua.sega.maimai2.dao.userdata.UserCardRepository;
import icu.samnyan.aqua.sega.maimai2.handler.BaseHandler; import icu.samnyan.aqua.sega.maimai2.handler.BaseHandler;
import icu.samnyan.aqua.sega.maimai2.model.userdata.UserCard;
import icu.samnyan.aqua.sega.util.jackson.BasicMapper; import icu.samnyan.aqua.sega.util.jackson.BasicMapper;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
/** /**
@@ -22,20 +25,29 @@ public class GetUserCardHandler implements BaseHandler {
private final BasicMapper mapper; private final BasicMapper mapper;
public GetUserCardHandler(BasicMapper mapper) { private final UserCardRepository userCardRepository;
public GetUserCardHandler(UserCardRepository userCardRepository, BasicMapper mapper) {
this.mapper = mapper; this.mapper = mapper;
this.userCardRepository = userCardRepository;
} }
@Override @Override
public String handle(Map<String, Object> request) throws JsonProcessingException { public String handle(Map<String, Object> request) throws JsonProcessingException {
long userId = ((Number) request.get("userId")).longValue(); long userId = ((Number) request.get("userId")).longValue();
int nextIndex = ((Number) request.get("nextIndex")).intValue();
int maxCount = ((Number) request.get("maxCount")).intValue();
List<Object> userCardList = new ArrayList<>(); int pageNum = nextIndex / maxCount;
Page<UserCard> dbPage = userCardRepository.findByUser_Card_ExtId(userId, PageRequest.of(pageNum, maxCount));
int currentIndex = maxCount * pageNum + dbPage.getNumberOfElements();
Map<String, Object> resultMap = new LinkedHashMap<>(); Map<String, Object> resultMap = new LinkedHashMap<>();
resultMap.put("userId", userId); resultMap.put("userId", userId);
resultMap.put("nextIndex", 0); resultMap.put("nextIndex", dbPage.getNumberOfElements() < maxCount ? 0 : currentIndex);
resultMap.put("userCardList", userCardList); resultMap.put("userCardList", dbPage.getContent());
String json = mapper.write(resultMap); String json = mapper.write(resultMap);
logger.info("Response: " + json); logger.info("Response: " + json);

View File

@@ -0,0 +1,42 @@
package icu.samnyan.aqua.sega.maimai2.handler.impl;
import com.fasterxml.jackson.core.JsonProcessingException;
import icu.samnyan.aqua.sega.maimai2.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("Maimai2GetUserCardPrintErrorHandler")
public class GetUserCardPrintErrorHandler implements BaseHandler {
private static final Logger logger = LoggerFactory.getLogger(GetUserCardPrintErrorHandler.class);
private final BasicMapper mapper;
@Autowired
public GetUserCardPrintErrorHandler(BasicMapper mapper) {
this.mapper = mapper;
}
@Override
public String handle(Map<String, Object> request) throws JsonProcessingException {
Long userId = ((Number) request.get("userId")).longValue();
Map<String, Object> resultMap = new LinkedHashMap<>();
resultMap.put("length", 0);
resultMap.put("userPrintDetailList", List.of());
String json = mapper.write(resultMap);
logger.info("Response: " + json);
return json;
}
}

View File

@@ -0,0 +1,90 @@
package icu.samnyan.aqua.sega.maimai2.handler.impl;
import com.fasterxml.jackson.core.JsonProcessingException;
import icu.samnyan.aqua.sega.maimai2.dao.userdata.UserCardRepository;
import icu.samnyan.aqua.sega.maimai2.dao.userdata.UserDataRepository;
import icu.samnyan.aqua.sega.maimai2.dao.userdata.UserPrintDetailRepository;
import icu.samnyan.aqua.sega.maimai2.handler.BaseHandler;
import icu.samnyan.aqua.sega.maimai2.model.request.UpsertUserPrint;
import icu.samnyan.aqua.sega.maimai2.model.userdata.UserCard;
import icu.samnyan.aqua.sega.maimai2.model.userdata.UserDetail;
import icu.samnyan.aqua.sega.maimai2.model.userdata.UserPrintDetail;
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("Maimai2UpsertUserPrintHandler")
public class UpsertUserPrintHandler implements BaseHandler {
private static final Logger logger = LoggerFactory.getLogger(UpsertUserPrintHandler.class);
private final BasicMapper mapper;
private final UserCardRepository userCardRepository;
private final UserPrintDetailRepository userPrintDetailRepository;
private final UserDataRepository userDataRepository;
@Autowired
public UpsertUserPrintHandler(BasicMapper mapper, UserPrintDetailRepository userPrintDetailRepository, UserCardRepository userCardRepository, UserDataRepository userDataRepository) {
this.mapper = mapper;
this.userPrintDetailRepository = userPrintDetailRepository;
this.userCardRepository = userCardRepository;
this.userDataRepository = userDataRepository;
}
@Override
public String handle(Map<String, Object> request) throws JsonProcessingException {
long userId = ((Number) request.get("userId")).longValue();
UserDetail userData;
Optional<UserDetail> userOptional = userDataRepository.findByCard_ExtId(userId);
if (userOptional.isPresent()) {
userData = userOptional.get();
} else {
logger.error("User not found. userId: {}", userId);
return null;
}
UpsertUserPrint upsertUserPrint = mapper.convert(request, UpsertUserPrint.class);
UserPrintDetail userPrintDetail = upsertUserPrint.getUserPrintDetail();
UserCard newUserCard = userPrintDetail.getUserCard();
newUserCard.setUser(userData);
userPrintDetail.setUser(userData);
newUserCard.setStartDate("2019-01-01 00:00:00.000000");
newUserCard.setEndDate("2029-01-01 00:00:00.000000");
userPrintDetail.setSerialId("FAKECARDIMAG12345678");
Optional<UserCard> userCardOptional = userCardRepository.findByUserAndCardId(newUserCard.getUser(), newUserCard.getCardId());
if (userCardOptional.isPresent()) {
UserCard userCard = userCardOptional.get();
newUserCard.setId(userCard.getId());
}
userCardRepository.save(newUserCard);
userPrintDetailRepository.save(userPrintDetail);
Map<String, Object> resultMap = new LinkedHashMap<>();
resultMap.put("returnCode", 1);
resultMap.put("orderId", 0);
resultMap.put("serialId", "FAKECARDIMAG12345678");
resultMap.put("startDate", "2019-01-01 00:00:00.000000");
resultMap.put("endDate", "2029-01-01 00:00:00.000000");
String json = mapper.write(resultMap);
logger.info("Response: " + json);
return json;
}
}

View File

@@ -0,0 +1,38 @@
package icu.samnyan.aqua.sega.maimai2.model.gamedata;
import com.fasterxml.jackson.annotation.JsonIgnore;
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 = "Maimai2GameSellingCard")
@Table(name = "maimai2_game_selling_card")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class GameSellingCard implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@JsonIgnore
private int id;
private int cardId;
private LocalDateTime startDate;
private LocalDateTime endDate;
private LocalDateTime noticeStartDate;
private LocalDateTime noticeEndDate;
}

View File

@@ -0,0 +1,22 @@
package icu.samnyan.aqua.sega.maimai2.model.request;
import icu.samnyan.aqua.sega.maimai2.model.userdata.UserPrintDetail;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Map;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UpsertUserPrint implements Serializable {
private long userId;
private long orderId;
private Map<String, Object> userPrintReserve;
private UserPrintDetail userPrintDetail;
}

View File

@@ -0,0 +1,44 @@
package icu.samnyan.aqua.sega.maimai2.model.userdata;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.time.LocalDateTime;
import javax.persistence.*;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Entity(name = "Maimai2UserCard")
@Table(name = "maimai2_user_card")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserCard implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@JsonIgnore
private long id;
@JsonIgnore
@ManyToOne
@JoinColumn(name = "user_id")
private UserDetail user;
public int cardId;
public int cardTypeId;
public int charaId;
public int mapId;
public String startDate;
public String endDate;
public UserCard(UserDetail user) {
this.user = user;
}
}

View File

@@ -7,6 +7,7 @@ import lombok.NoArgsConstructor;
import javax.persistence.*; import javax.persistence.*;
import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import java.io.Serializable; import java.io.Serializable;
@@ -31,7 +32,22 @@ public class UserCharacter implements Serializable {
private UserDetail user; private UserDetail user;
private int characterId; private int characterId;
@JsonInclude
@Transient
private int point = 0;
@JsonInclude
@Transient
private int count = 0;
private int level; private int level;
@JsonInclude
@Transient
private int nextAwake = 0;
@JsonInclude
@Transient
private int nextAwakePercent = 0;
@JsonInclude
@Transient
private boolean favorite = false;
private int awakening; private int awakening;
private int useCount; private int useCount;

View File

@@ -6,6 +6,7 @@ import java.util.List;
import javax.persistence.*; import javax.persistence.*;
import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize;
@@ -39,8 +40,17 @@ public class UserDetail implements Serializable {
private Card card; private Card card;
private String userName; private String userName;
@JsonInclude
@Transient
private String friendCode = "";
private int isNetMember; private int isNetMember;
@JsonInclude
@Transient
private int nameplateId = 0;
private int iconId; private int iconId;
@JsonInclude
@Transient
private int trophyId = 0;
private int plateId; private int plateId;
private int titleId; private int titleId;
private int partnerId; private int partnerId;
@@ -102,6 +112,24 @@ public class UserDetail implements Serializable {
private long totalExpertDeluxscore; private long totalExpertDeluxscore;
private long totalMasterDeluxscore; private long totalMasterDeluxscore;
private long totalReMasterDeluxscore; private long totalReMasterDeluxscore;
@JsonInclude
@Transient
private long totalHiscore = 0;
@JsonInclude
@Transient
private long totalBasicHighscore = 0;
@JsonInclude
@Transient
private long totalAdvancedHighscore = 0;
@JsonInclude
@Transient
private long totalExpertHighscore = 0;
@JsonInclude
@Transient
private long totalMasterHighscore = 0;
@JsonInclude
@Transient
private long totalReMasterHighscore = 0;
private int totalSync; private int totalSync;
private int totalBasicSync; private int totalBasicSync;
private int totalAdvancedSync; private int totalAdvancedSync;
@@ -118,4 +146,10 @@ public class UserDetail implements Serializable {
private long playerNewRating; private long playerNewRating;
private int banState; private int banState;
private long dateTime; private long dateTime;
@JsonInclude
@Transient
private int cmLastEmoneyBrand = 2;
@JsonInclude
@Transient
private int cmLastEmoneyCredit = 69;
} }

View File

@@ -0,0 +1,61 @@
package icu.samnyan.aqua.sega.maimai2.model.userdata;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.time.LocalDateTime;
import javax.persistence.*;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Entity(name = "Maimai2UserPrintDetail")
@Table(name = "maimai2_user_print_detail")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserPrintDetail implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@JsonIgnore
private long id;
@JsonIgnore
@ManyToOne
@JoinColumn(name = "user_id")
private UserDetail user;
private long orderId;
private int printNumber;
private String printDate;
private String serialId;
private int placeId;
private String clientId;
private String printerSerialId;
@ManyToOne
@JoinColumn(name = "user_card_id")
private UserCard userCard;
private int cardRomVersion;
private boolean isHolograph;
private boolean printOption1;
private boolean printOption2;
private boolean printOption3;
private boolean printOption4;
private boolean printOption5;
private boolean printOption6;
private boolean printOption7;
private boolean printOption8;
private boolean printOption9;
private boolean printOption10;
private String created;
public UserPrintDetail(UserDetail user) {
this.user = user;
}
}

View File

@@ -0,0 +1,53 @@
-- maimai2 card maker support
CREATE TABLE maimai2_game_selling_card (
id BIGINT auto_increment PRIMARY KEY,
card_id INTEGER,
start_date DATETIME,
end_date DATETIME,
notice_start_date DATETIME,
notice_end_date DATETIME
);
CREATE TABLE maimai2_user_card (
id BIGINT auto_increment PRIMARY KEY,
card_id INTEGER,
card_type_id INTEGER,
chara_id INTEGER,
map_id INTEGER,
start_date VARCHAR(255),
end_date VARCHAR(255),
user_id BIGINT,
constraint FKEraxz5HoWgfKLz8w63
foreign key (user_id) references maimai2_user_detail (id)
);
CREATE TABLE maimai2_user_print_detail (
id BIGINT auto_increment PRIMARY KEY,
order_id BIGINT,
print_number INTEGER,
print_date VARCHAR(255),
serial_id VARCHAR(255),
place_id INTEGER,
client_id VARCHAR(255),
printer_serial_id VARCHAR(255),
user_card_id BIGINT,
card_rom_version INTEGER,
is_holograph BOOLEAN,
print_option1 BOOLEAN,
print_option2 BOOLEAN,
print_option3 BOOLEAN,
print_option4 BOOLEAN,
print_option5 BOOLEAN,
print_option6 BOOLEAN,
print_option7 BOOLEAN,
print_option8 BOOLEAN,
print_option9 BOOLEAN,
print_option10 BOOLEAN,
created VARCHAR(255),
user_id BIGINT,
constraint FKDjNkXby95DMyQ9RKem
foreign key (user_card_id) references maimai2_user_card (id),
constraint FKEnhDgski3cuxz8Z5jd
foreign key (user_id) references maimai2_user_detail (id)
);

View File

@@ -0,0 +1,53 @@
-- maimai2 card maker support
CREATE TABLE maimai2_game_selling_card (
id BIGINT auto_increment PRIMARY KEY,
card_id INTEGER,
start_date DATETIME,
end_date DATETIME,
notice_start_date DATETIME,
notice_end_date DATETIME
);
CREATE TABLE maimai2_user_card (
id BIGINT auto_increment PRIMARY KEY,
card_id INTEGER,
card_type_id INTEGER,
chara_id INTEGER,
map_id INTEGER,
start_date VARCHAR(255),
end_date VARCHAR(255),
user_id BIGINT,
constraint FKEraxz5HoWgfKLz8w63
foreign key (user_id) references maimai2_user_detail (id)
);
CREATE TABLE maimai2_user_print_detail (
id BIGINT auto_increment PRIMARY KEY,
order_id BIGINT,
print_number INTEGER,
print_date VARCHAR(255),
serial_id VARCHAR(255),
place_id INTEGER,
client_id VARCHAR(255),
printer_serial_id VARCHAR(255),
user_card_id BIGINT,
card_rom_version INTEGER,
is_holograph BOOLEAN,
print_option1 BOOLEAN,
print_option2 BOOLEAN,
print_option3 BOOLEAN,
print_option4 BOOLEAN,
print_option5 BOOLEAN,
print_option6 BOOLEAN,
print_option7 BOOLEAN,
print_option8 BOOLEAN,
print_option9 BOOLEAN,
print_option10 BOOLEAN,
created VARCHAR(255),
user_id BIGINT,
constraint FKDjNkXby95DMyQ9RKem
foreign key (user_card_id) references maimai2_user_card (id),
constraint FKEnhDgski3cuxz8Z5jd
foreign key (user_id) references maimai2_user_detail (id)
);

View File

@@ -0,0 +1,56 @@
-- maimai2 card maker support
CREATE TABLE maimai2_game_selling_card (
id INTEGER,
card_id INTEGER,
start_date DATETIME,
end_date DATETIME,
notice_start_date DATETIME,
notice_end_date DATETIME,
PRIMARY KEY (
id
)
);
CREATE TABLE maimai2_user_card (
id INTEGER,
card_id INTEGER,
card_type_id INTEGER,
chara_id INTEGER,
map_id INTEGER,
start_date VARCHAR,
end_date VARCHAR,
user_id BIGINT REFERENCES maimai2_user_detail (id),
PRIMARY KEY (
id
)
);
CREATE TABLE maimai2_user_print_detail (
id INTEGER,
order_id BIGINT,
print_number INTEGER,
print_date VARCHAR,
serial_id VARCHAR,
place_id INTEGER,
client_id VARCHAR,
printer_serial_id VARCHAR,
user_card_id INTEGER REFERENCES maimai2_user_card (id),
card_rom_version INTEGER,
is_holograph BOOLEAN,
print_option1 BOOLEAN,
print_option2 BOOLEAN,
print_option3 BOOLEAN,
print_option4 BOOLEAN,
print_option5 BOOLEAN,
print_option6 BOOLEAN,
print_option7 BOOLEAN,
print_option8 BOOLEAN,
print_option9 BOOLEAN,
print_option10 BOOLEAN,
created VARCHAR,
user_id BIGINT REFERENCES maimai2_user_detail (id),
PRIMARY KEY (
id
)
);