diff --git a/src/main/java/icu/samnyan/aqua/sega/chusan/dao/userdata/UserCMissionProgressRepository.java b/src/main/java/icu/samnyan/aqua/sega/chusan/dao/userdata/UserCMissionProgressRepository.java new file mode 100644 index 00000000..edfcdcfe --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chusan/dao/userdata/UserCMissionProgressRepository.java @@ -0,0 +1,15 @@ +package icu.samnyan.aqua.sega.chusan.dao.userdata; + +import icu.samnyan.aqua.sega.chusan.model.userdata.UserCMissionProgress; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Optional; + +@Repository("ChusanUserCMissionProgressRepository") +public interface UserCMissionProgressRepository extends JpaRepository { + List findByUser_Card_ExtIdAndMissionId(Long extId, int missionId); + + Optional findByUser_Card_ExtIdAndMissionIdAndOrder(Long extId, int missionId, int order); +} \ No newline at end of file diff --git a/src/main/java/icu/samnyan/aqua/sega/chusan/dao/userdata/UserCMissionRepository.java b/src/main/java/icu/samnyan/aqua/sega/chusan/dao/userdata/UserCMissionRepository.java new file mode 100644 index 00000000..43cf446f --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chusan/dao/userdata/UserCMissionRepository.java @@ -0,0 +1,12 @@ +package icu.samnyan.aqua.sega.chusan.dao.userdata; + +import icu.samnyan.aqua.sega.chusan.model.userdata.UserCMission; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +@Repository("ChusanUserCMissionRepository") +public interface UserCMissionRepository extends JpaRepository { + Optional findByUser_Card_ExtIdAndMissionId(Long extId, int missionId); +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chusan/handler/GetGameMapAreaConditionHandler.java b/src/main/java/icu/samnyan/aqua/sega/chusan/handler/GetGameMapAreaConditionHandler.java new file mode 100644 index 00000000..fa882563 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chusan/handler/GetGameMapAreaConditionHandler.java @@ -0,0 +1,36 @@ +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.StringMapper; +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; + +@Component("ChusanGetGameMapAreaConditionHandler") +public class GetGameMapAreaConditionHandler implements BaseHandler { + private static final Logger logger = LoggerFactory.getLogger(GetGameMapAreaConditionHandler.class); + + private final StringMapper mapper; + + @Autowired + public GetGameMapAreaConditionHandler(StringMapper mapper) { + this.mapper = mapper; + } + + @Override + public String handle(Map request) throws JsonProcessingException { + logger.info("MapAreaCondition Dummy Handler"); + + Map resultMap = new LinkedHashMap<>(); + resultMap.put("mapAreaConditionList", new LinkedHashMap<>()); + + String json = mapper.write(resultMap); + logger.info("Response: " + json); + return json; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chusan/handler/GetUserCMissionHandler.java b/src/main/java/icu/samnyan/aqua/sega/chusan/handler/GetUserCMissionHandler.java new file mode 100644 index 00000000..b4d991ec --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chusan/handler/GetUserCMissionHandler.java @@ -0,0 +1,63 @@ +package icu.samnyan.aqua.sega.chusan.handler.impl; + +import com.fasterxml.jackson.core.JsonProcessingException; +import icu.samnyan.aqua.sega.chusan.dao.userdata.UserCMissionProgressRepository; +import icu.samnyan.aqua.sega.chusan.dao.userdata.UserCMissionRepository; +import icu.samnyan.aqua.sega.chusan.handler.BaseHandler; +import icu.samnyan.aqua.sega.chusan.model.response.data.UserCMissionProgressResp; +import icu.samnyan.aqua.sega.chusan.model.response.data.UserCMissionResp; +import icu.samnyan.aqua.sega.chusan.model.userdata.UserCMission; +import icu.samnyan.aqua.sega.util.jackson.StringMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; +import java.util.Optional; + +@Component("ChusanGetUserCMissionHandler") +public class GetUserCMissionHandler implements BaseHandler { + private static final Logger logger = LoggerFactory.getLogger(GetUserCMissionHandler.class); + + private final StringMapper mapper; + + private final UserCMissionProgressRepository userCMissionProgressRepository; + private final UserCMissionRepository userCMissionRepository; + + @Autowired + public GetUserCMissionHandler(StringMapper mapper, UserCMissionProgressRepository userCMissionProgressRepository, UserCMissionRepository userCMissionRepository) { + this.mapper = mapper; + this.userCMissionProgressRepository = userCMissionProgressRepository; + this.userCMissionRepository = userCMissionRepository; + } + + @Override + public String handle(Map request) throws JsonProcessingException { + long userId = Long.parseLong((String) request.get("userId")); + int missionId = Integer.parseInt((String) request.get("missionId")); + + UserCMissionResp userCMissionResp = new UserCMissionResp(); + userCMissionResp.setUserId(userId); + userCMissionResp.setMissionId(missionId); + + Optional userCMissionOptional = userCMissionRepository.findByUser_Card_ExtIdAndMissionId(userId, missionId); + if (userCMissionOptional.isPresent()) { + userCMissionResp.setPoint(userCMissionOptional.get().getPoint()); + List userCMissionProgressRespList = userCMissionProgressRepository.findByUser_Card_ExtIdAndMissionId(userId, missionId).stream() + .map(userCMissionProgress -> { + UserCMissionProgressResp userCMissionProgressResp = new UserCMissionProgressResp(); + userCMissionProgressResp.setOrder(userCMissionProgress.getOrder()); + userCMissionProgressResp.setProgress(userCMissionProgress.getProgress()); + userCMissionProgressResp.setStage(userCMissionProgress.getStage()); + return userCMissionProgressResp; + }).toList(); + userCMissionResp.setUserCMissionProgressList(userCMissionProgressRespList); + } + + String json = mapper.write(userCMissionResp); + logger.info("Response: " + json); + return json; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chusan/handler/GetUserNetBattleRankingInfoHandler.java b/src/main/java/icu/samnyan/aqua/sega/chusan/handler/GetUserNetBattleRankingInfoHandler.java new file mode 100644 index 00000000..d2943d81 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chusan/handler/GetUserNetBattleRankingInfoHandler.java @@ -0,0 +1,38 @@ +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.StringMapper; +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; + +@Component("ChusanGetUserNetBattleRankingInfoHandler") +public class GetUserNetBattleRankingInfoHandler implements BaseHandler { + private static final Logger logger = LoggerFactory.getLogger(GetUserNetBattleRankingInfoHandler.class); + + private final StringMapper mapper; + + @Autowired + public GetUserNetBattleRankingInfoHandler(StringMapper mapper) { + this.mapper = mapper; + } + + @Override + public String handle(Map request) throws JsonProcessingException { + logger.info("UserNetBattleRankingInfo Dummy Handler"); + + Map resultMap = new LinkedHashMap<>(); + resultMap.put("userId", request.get("userId")); + resultMap.put("length", 0); + resultMap.put("userNetBattleRankingInfoList", new LinkedHashMap<>()); + + String json = mapper.write(resultMap); + logger.info("Response: " + json); + return json; + } +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chusan/handler/UpsertUserAllHandler.java b/src/main/java/icu/samnyan/aqua/sega/chusan/handler/UpsertUserAllHandler.java index 5de686bc..bd31b27f 100644 --- a/src/main/java/icu/samnyan/aqua/sega/chusan/handler/UpsertUserAllHandler.java +++ b/src/main/java/icu/samnyan/aqua/sega/chusan/handler/UpsertUserAllHandler.java @@ -2,6 +2,8 @@ package icu.samnyan.aqua.sega.chusan.handler; import com.fasterxml.jackson.core.JsonProcessingException; import icu.samnyan.aqua.sega.general.BaseHandler; +import icu.samnyan.aqua.sega.chusan.dao.userdata.UserCMissionProgressRepository; +import icu.samnyan.aqua.sega.chusan.dao.userdata.UserCMissionRepository; import icu.samnyan.aqua.sega.chusan.model.request.UpsertUserAll; import icu.samnyan.aqua.sega.chusan.model.response.CodeResp; import icu.samnyan.aqua.sega.chusan.model.userdata.*; @@ -46,6 +48,8 @@ public class UpsertUserAllHandler implements BaseHandler { private final UserDuelService userDuelService; private final UserGeneralDataService userGeneralDataService; private final UserLoginBonusService userLoginBonusService; + private final UserCMissionRepository userCMissionRepository; + private final UserCMissionProgressRepository userCMissionProgressRepository; @Autowired public UpsertUserAllHandler(StringMapper mapper, @@ -62,7 +66,8 @@ public class UpsertUserAllHandler implements BaseHandler { UserCourseService userCourseService, UserDuelService userDuelService, UserGeneralDataService userGeneralDataService, - UserLoginBonusService userLoginBonusService) { + UserLoginBonusService userLoginBonusService, + UserCMissionRepository userCMissionRepository, UserCMissionProgressRepository userCMissionProgressRepository) { this.mapper = mapper; this.cardService = cardService; this.userDataService = userDataService; @@ -78,6 +83,8 @@ public class UpsertUserAllHandler implements BaseHandler { this.userDuelService = userDuelService; this.userGeneralDataService = userGeneralDataService; this.userLoginBonusService = userLoginBonusService; + this.userCMissionRepository = userCMissionRepository; + this.userCMissionProgressRepository = userCMissionProgressRepository; } @@ -336,6 +343,45 @@ public class UpsertUserAllHandler implements BaseHandler { userLoginBonusService.saveAll(newUserLoginBonusMap.values()); } + // userCMissionList + if (upsertUserAll.getUserCMissionList() != null){ + List> userCMissionList = upsertUserAll.getUserCMissionList(); + userCMissionList.forEach(userCMission -> { + int missionId = Integer.parseInt((String) userCMission.get("missionId")); + int point = Integer.parseInt((String) userCMission.get("point")); + List> userCMissionProgressList = (List>) userCMission.get("userCMissionProgressList"); + userCMissionRepository.findByUser_Card_ExtIdAndMissionId(Long.parseLong(userId), missionId).ifPresentOrElse(userCMission1 -> { + userCMission1.setPoint(point); + userCMissionRepository.save(userCMission1); + }, () -> { + UserCMission userCMission1 = new UserCMission(); + userCMission1.setMissionId(missionId); + userCMission1.setPoint(point); + userCMission1.setUser(userData); + userCMissionRepository.save(userCMission1); + }); + + userCMissionProgressList.forEach(userCMissionProgress -> { + int order = Integer.parseInt((String) userCMissionProgress.get("order")); + int progress = Integer.parseInt((String) userCMissionProgress.get("progress")); + int stage = Integer.parseInt((String) userCMissionProgress.get("stage")); + userCMissionProgressRepository.findByUser_Card_ExtIdAndMissionIdAndOrder(Long.parseLong(userId), missionId, order).ifPresentOrElse(userCMissionProgress1 -> { + userCMissionProgress1.setProgress(progress); + userCMissionProgress1.setStage(stage); + userCMissionProgressRepository.save(userCMissionProgress1); + }, () -> { + UserCMissionProgress userCMissionProgress1 = new UserCMissionProgress(); + userCMissionProgress1.setMissionId(missionId); + userCMissionProgress1.setOrder(order); + userCMissionProgress1.setProgress(progress); + userCMissionProgress1.setStage(stage); + userCMissionProgress1.setUser(userData); + userCMissionProgressRepository.save(userCMissionProgress1); + }); + }); + }); + } + String json = mapper.write(new CodeResp(1)); logger.info("Response: " + json); return json; diff --git a/src/main/java/icu/samnyan/aqua/sega/chusan/model/request/UpsertUserAll.java b/src/main/java/icu/samnyan/aqua/sega/chusan/model/request/UpsertUserAll.java index d8e21a94..7c0a27d2 100644 --- a/src/main/java/icu/samnyan/aqua/sega/chusan/model/request/UpsertUserAll.java +++ b/src/main/java/icu/samnyan/aqua/sega/chusan/model/request/UpsertUserAll.java @@ -83,6 +83,9 @@ public class UpsertUserAll implements Serializable { @Nullable private List> userNetBattleData; + @Nullable + private List> userCMissionList; + @Nullable @JsonProperty("isNewCharacterList") private String isNewCharacterList; @@ -107,4 +110,8 @@ public class UpsertUserAll implements Serializable { @JsonProperty("isNewMapAreaList") private String isNewMapAreaList; + @Nullable + @JsonProperty("isNewCMissionList") + private String isNewCMissionList; + } diff --git a/src/main/java/icu/samnyan/aqua/sega/chusan/model/response/data/UserCMissionProgressResp.java b/src/main/java/icu/samnyan/aqua/sega/chusan/model/response/data/UserCMissionProgressResp.java new file mode 100644 index 00000000..0c3f206f --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chusan/model/response/data/UserCMissionProgressResp.java @@ -0,0 +1,16 @@ +package icu.samnyan.aqua.sega.chusan.model.response.data; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class UserCMissionProgressResp implements Serializable { + private int order; + private int stage; + private int progress; +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chusan/model/response/data/UserCMissionResp.java b/src/main/java/icu/samnyan/aqua/sega/chusan/model/response/data/UserCMissionResp.java new file mode 100644 index 00000000..885bd100 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chusan/model/response/data/UserCMissionResp.java @@ -0,0 +1,19 @@ +package icu.samnyan.aqua.sega.chusan.model.response.data; + + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class UserCMissionResp implements Serializable { + private long userId; + private int missionId; + private int point; + private List userCMissionProgressList; +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chusan/model/userdata/UserCMission.java b/src/main/java/icu/samnyan/aqua/sega/chusan/model/userdata/UserCMission.java new file mode 100644 index 00000000..b72e21b4 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chusan/model/userdata/UserCMission.java @@ -0,0 +1,30 @@ +package icu.samnyan.aqua.sega.chusan.model.userdata; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import javax.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Entity(name = "ChusanUserCMission") +@Table(name = "chusan_user_cmission") +@Data +@AllArgsConstructor +@NoArgsConstructor +public class UserCMission { + @Id + @JsonIgnore + @GeneratedValue(strategy = GenerationType.IDENTITY) + private long id; + + @JsonIgnore + @ManyToOne + @JoinColumn(name = "user_id") + private UserData user; + + @Column(name = "mission_id") + private int missionId; + + @Column(name = "point") + private int point; +} diff --git a/src/main/java/icu/samnyan/aqua/sega/chusan/model/userdata/UserCMissionProgress.java b/src/main/java/icu/samnyan/aqua/sega/chusan/model/userdata/UserCMissionProgress.java new file mode 100644 index 00000000..a107169e --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/chusan/model/userdata/UserCMissionProgress.java @@ -0,0 +1,35 @@ +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.*; + +@Entity(name = "ChusanUserCMissionProgress") +@Table(name = "chusan_user_cmission_progress", uniqueConstraints = {@UniqueConstraint(columnNames = {"user_id", "mission_id", "order"})}) +@Data +@AllArgsConstructor +@NoArgsConstructor +public class UserCMissionProgress { + @Id + @JsonIgnore + @GeneratedValue(strategy = GenerationType.IDENTITY) + private long id; + + @JsonIgnore + @ManyToOne + @JoinColumn(name = "user_id") + private UserData user; + + @Column(name = "mission_id") + private int missionId; + + @Column(name = "`order`") + private int order; + + private int stage; + + private int progress; +} diff --git a/src/main/resources/db/migration/mariadb/V262__add_chusan_luminous_support.sql b/src/main/resources/db/migration/mariadb/V262__add_chusan_luminous_support.sql new file mode 100644 index 00000000..0c6c3cfb --- /dev/null +++ b/src/main/resources/db/migration/mariadb/V262__add_chusan_luminous_support.sql @@ -0,0 +1,28 @@ +CREATE TABLE chusan_user_cmission +( + id BIGINT AUTO_INCREMENT NOT NULL, + user_id BIGINT NULL, + mission_id INT NULL, + point INT NULL, + CONSTRAINT pk_chusan_user_cmission PRIMARY KEY (id) +); + +ALTER TABLE chusan_user_cmission + ADD CONSTRAINT FK_CHUSAN_USER_CMISSION_ON_USER FOREIGN KEY (user_id) REFERENCES chusan_user_data (id); + +CREATE TABLE chusan_user_cmission_progress +( + id BIGINT AUTO_INCREMENT NOT NULL, + user_id BIGINT NULL, + mission_id INT NULL, + `order` INT NOT NULL, + stage INT NULL, + progress INT NULL, + CONSTRAINT pk_chusan_user_cmission_progress PRIMARY KEY (id) +); + +ALTER TABLE chusan_user_cmission_progress + ADD CONSTRAINT uc_6ab791e9e8fee2b3fab35d3d2 UNIQUE (user_id, mission_id, `order`); + +ALTER TABLE chusan_user_cmission_progress + ADD CONSTRAINT FK_CHUSAN_USER_CMISSION_PROGRESS_ON_USER FOREIGN KEY (user_id) REFERENCES chusan_user_data (id); \ No newline at end of file diff --git a/src/main/resources/db/migration/mysql/V262__add_chusan_luminous_support.sql b/src/main/resources/db/migration/mysql/V262__add_chusan_luminous_support.sql new file mode 100644 index 00000000..0c6c3cfb --- /dev/null +++ b/src/main/resources/db/migration/mysql/V262__add_chusan_luminous_support.sql @@ -0,0 +1,28 @@ +CREATE TABLE chusan_user_cmission +( + id BIGINT AUTO_INCREMENT NOT NULL, + user_id BIGINT NULL, + mission_id INT NULL, + point INT NULL, + CONSTRAINT pk_chusan_user_cmission PRIMARY KEY (id) +); + +ALTER TABLE chusan_user_cmission + ADD CONSTRAINT FK_CHUSAN_USER_CMISSION_ON_USER FOREIGN KEY (user_id) REFERENCES chusan_user_data (id); + +CREATE TABLE chusan_user_cmission_progress +( + id BIGINT AUTO_INCREMENT NOT NULL, + user_id BIGINT NULL, + mission_id INT NULL, + `order` INT NOT NULL, + stage INT NULL, + progress INT NULL, + CONSTRAINT pk_chusan_user_cmission_progress PRIMARY KEY (id) +); + +ALTER TABLE chusan_user_cmission_progress + ADD CONSTRAINT uc_6ab791e9e8fee2b3fab35d3d2 UNIQUE (user_id, mission_id, `order`); + +ALTER TABLE chusan_user_cmission_progress + ADD CONSTRAINT FK_CHUSAN_USER_CMISSION_PROGRESS_ON_USER FOREIGN KEY (user_id) REFERENCES chusan_user_data (id); \ No newline at end of file diff --git a/src/main/resources/db/migration/sqlite/V262__add_chusan_luminous_support.sql b/src/main/resources/db/migration/sqlite/V262__add_chusan_luminous_support.sql new file mode 100644 index 00000000..bd310b53 --- /dev/null +++ b/src/main/resources/db/migration/sqlite/V262__add_chusan_luminous_support.sql @@ -0,0 +1,20 @@ +CREATE TABLE chusan_user_cmission +( + id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, + user_id INTEGER, + mission_id INTEGER, + point INTEGER, + FOREIGN KEY(user_id) REFERENCES chusan_user_data(id) +); + +CREATE TABLE chusan_user_cmission_progress +( + id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, + user_id INTEGER, + mission_id INTEGER, + `order` INTEGER NOT NULL, + stage INTEGER, + progress INTEGER, + UNIQUE(user_id, mission_id, `order`), + FOREIGN KEY(user_id) REFERENCES chusan_user_data(id) +); \ No newline at end of file