[M] Static endpoints

matching
Azalea 2024-12-20 08:42:43 -05:00
parent 698422a41e
commit 10c1b9bc29
9 changed files with 1230 additions and 253 deletions

View File

@ -3,14 +3,22 @@ package icu.samnyan.aqua.sega.chusan
import ext.*
import icu.samnyan.aqua.net.utils.simpleDescribe
import icu.samnyan.aqua.sega.chusan.handler.*
import icu.samnyan.aqua.sega.chusan.model.Chu3Repos
import icu.samnyan.aqua.sega.general.BaseHandler
import icu.samnyan.aqua.sega.maimai2.handler.UserReqHandler
import icu.samnyan.aqua.sega.util.jackson.StringMapper
import icu.samnyan.aqua.sega.wacca.empty
import icu.samnyan.aqua.spring.Metrics
import org.slf4j.LoggerFactory
import org.springframework.web.bind.annotation.RestController
import kotlin.collections.set
import kotlin.reflect.full.declaredMemberProperties
fun interface Chu3UserHandler : BaseHandler {
override fun handle(request: Map<String, Any>) = handleThis(request, parsing { request["userId"]?.long })
fun handleThis(request: Map<String, Any>, extId: Long?): Any
}
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@ -19,10 +27,7 @@ import kotlin.reflect.full.declaredMemberProperties
@API(value = ["/g/chu3/{version}/ChuniServlet", "/g/chu3/{version}"])
class ChusanServletController(
val gameLogin: GameLoginHandler,
val getGameCharge: GetGameChargeHandler,
val getGameEvent: GetGameEventHandler,
val getGameSetting: GetGameSettingHandler,
val getUserActivity: GetUserActivityHandler,
val getUserCharacter: GetUserCharacterHandler,
val getUserCharge: GetUserChargeHandler,
val getUserCourse: GetUserCourseHandler,
@ -39,8 +44,6 @@ class ChusanServletController(
val getUserTeam: GetUserTeamHandler,
val upsertUserAll: UpsertUserAllHandler,
val upsertUserChargelog: UpsertUserChargelogHandler,
val getGameGacha: GetGameGachaHandler,
val getGameGachaCardById: GetGameGachaCardByIdHandler,
val getUserCardPrintError: GetUserCardPrintErrorHandler,
val cmGetUserPreview: CMGetUserPreviewHandler,
val cmGetUserData: CMGetUserDataHandler,
@ -57,9 +60,14 @@ class ChusanServletController(
val getUserCMission: GetUserCMissionHandler,
val getGameMapAreaCondition: GetGameMapAreaConditionHandler,
val mapper: StringMapper
val mapper: StringMapper,
val repos: Chu3Repos,
) {
fun static(o: Any) = mapper.write(o).let { resp -> BaseHandler { resp } }
val logger = LoggerFactory.getLogger(ChusanServletController::class.java)
val events = resJson<List<Map<Str, Int>>>("/static/chusan_game_event.json")!!.filter { it["enable"].truthy }
.map { it.filterKeys { it != "enable" } + mapOf("startDate" to "2019-01-01 00:00:00", "endDate" to "2029-01-01 00:00:00") }
val getGameRanking = BaseHandler { """{"type":"${it["type"]}","length":"0","gameRankingList":[]}""" }
val getGameIdlist = BaseHandler { """{"type":"${it["type"]}","length":"0","gameRankingList":[]}""" }
@ -82,6 +90,22 @@ class ChusanServletController(
val endMatching = BaseHandler { """{"matchingResult":{"matchingMemberInfoList":[],"matchingMemberRoleList":[],"reflectorUri":""}}""" }
val getMatchingState = BaseHandler { """{"matchingWaitState":{"restMSec":"30000","pollingInterval":"10","matchingMemberInfoList":[],"isFinish":"true"}}""" }
// Actual handlers
val getUserActivity = UserReqHandler { req, u ->
val kind = parsing { req["kind"]!!.int }
val a = repos.userActivity.findAllByUser_Card_ExtIdAndKind(u, kind).sortedBy { it.sortNumber }
mapOf("userId" to u, "length" to a.size, "kind" to kind, "userActivityList" to a)
}
val getGameEvent = static(mapOf("type" to 1, "length" to events.size, "gameEventList" to events))
val getGameCharge = static(repos.gameCharge.findAll().let { mapOf("length" to it.size, "gameChargeList" to it) })
val getGameGacha = static(repos.gameGacha.findAll()
.let { mapOf("length" to it.size, "gameGachaList" to it, "registIdList" to empty) }
)
val getGameGachaCardById = BaseHandler {
val id = parsing { it["gachaId"]!!.int }
val cards = repos.gameGachaCard.findAllByGachaId(id)
mapOf("gachaId" to id, "length" to cards.size, "isPickup" to false, "gameGachaCardList" to cards, "emissionList" to empty, "afterCalcList" to empty)
}
// Below are code related to handling the handlers
val endpointList = mutableListOf(

View File

@ -1,46 +0,0 @@
package icu.samnyan.aqua.sega.chusan.handler;
import com.fasterxml.jackson.core.JsonProcessingException;
import icu.samnyan.aqua.sega.chusan.model.Chu3GameChargeRepo;
import icu.samnyan.aqua.sega.general.BaseHandler;
import icu.samnyan.aqua.sega.chusan.model.gamedata.GameCharge;
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.List;
import java.util.Map;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Component("ChusanGetGameChargeHandler")
public class GetGameChargeHandler implements BaseHandler {
private static final Logger logger = LoggerFactory.getLogger(GetGameChargeHandler.class);
private final Chu3GameChargeRepo gameChargeRepository;
private final StringMapper mapper;
@Autowired
public GetGameChargeHandler(Chu3GameChargeRepo gameChargeRepository, StringMapper mapper) {
this.gameChargeRepository = gameChargeRepository;
this.mapper = mapper;
}
@Override
public String handle(Map<String, ?> request) throws JsonProcessingException {
List<GameCharge> gameChargeList = gameChargeRepository.findAll();
Map<String, Object> resultMap = new LinkedHashMap<>();
resultMap.put("length", gameChargeList.size());
resultMap.put("gameChargeList", gameChargeList);
String json = mapper.write(resultMap);
logger.info("Response: " + json);
return json;
}
}

View File

@ -1,50 +0,0 @@
package icu.samnyan.aqua.sega.chusan.handler;
import com.fasterxml.jackson.core.JsonProcessingException;
import icu.samnyan.aqua.sega.chusan.model.Chu3GameEventRepo;
import icu.samnyan.aqua.sega.general.BaseHandler;
import icu.samnyan.aqua.sega.chusan.model.gamedata.GameEvent;
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.List;
import java.util.Map;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Component("ChusanGetGameEventHandler")
public class GetGameEventHandler implements BaseHandler {
private static final Logger logger = LoggerFactory.getLogger(GetGameEventHandler.class);
private final Chu3GameEventRepo gameEventRepository;
private final StringMapper mapper;
@Autowired
public GetGameEventHandler(Chu3GameEventRepo gameEventRepository, StringMapper mapper) {
this.gameEventRepository = gameEventRepository;
this.mapper = mapper;
}
@Override
public String handle(Map<String, ?> request) throws JsonProcessingException {
String type = (String) request.get("type");
List<GameEvent> gameEventList = gameEventRepository.findByEnable(true);
Map<String, Object> resultMap = new LinkedHashMap<>();
resultMap.put("type", type);
resultMap.put("length", gameEventList.size());
resultMap.put("gameEventList", gameEventList);
String json = mapper.write(resultMap);
logger.info("Response: {} events", gameEventList.size());
return json;
}
}

View File

@ -1,51 +0,0 @@
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.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, ?> 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

@ -1,47 +0,0 @@
package icu.samnyan.aqua.sega.chusan.handler;
import com.fasterxml.jackson.core.JsonProcessingException;
import icu.samnyan.aqua.sega.chusan.model.Chu3GameGachaRepo;
import icu.samnyan.aqua.sega.general.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 Chu3GameGachaRepo gameGachaRepository;
private final BasicMapper mapper;
@Autowired
public GetGameGachaHandler(Chu3GameGachaRepo gameGachaRepository, BasicMapper mapper) {
this.gameGachaRepository = gameGachaRepository;
this.mapper = mapper;
}
@Override
public String handle(Map<String, ?> 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

@ -1,53 +0,0 @@
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.model.userdata.UserActivity;
import icu.samnyan.aqua.sega.chusan.service.UserActivityService;
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.List;
import java.util.Map;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Component("ChusanGetUserActivityHandler")
public class GetUserActivityHandler implements BaseHandler {
private static final Logger logger = LoggerFactory.getLogger(GetUserActivityHandler.class);
private final StringMapper mapper;
private final UserActivityService userActivityService;
@Autowired
public GetUserActivityHandler(StringMapper mapper, UserActivityService userActivityService) {
this.mapper = mapper;
this.userActivityService = userActivityService;
}
@Override
public String handle(Map<String, ?> request) throws JsonProcessingException {
String userId = (String) request.get("userId");
String kind = (String) request.get("kind");
List<UserActivity> userActivityList = userActivityService.getAllByUserIdAndKind(userId, kind);
Map<String, Object> resultMap = new LinkedHashMap<>();
resultMap.put("userId", userId);
resultMap.put("length", userActivityList.size());
resultMap.put("kind", kind);
resultMap.put("userActivityList", userActivityList);
String json = mapper.write(resultMap);
logger.info("Response: " + json);
return json;
}
}

View File

@ -44,6 +44,7 @@ interface Chu3UserActivityRepo : Chu3UserLinked<UserActivity> {
fun findTopByUserAndActivityIdAndKindOrderByIdDesc(user: Chu3UserData, activityId: Int, kind: Int): Optional<UserActivity>
fun findAllByUser_Card_ExtIdAndKindOrderBySortNumberDesc(extId: Long, kind: Int): List<UserActivity>
fun findAllByUser_Card_ExtIdAndKind(extId: Long, kind: Int): List<UserActivity>
}
interface Chu3UserCardPrintStateRepo : Chu3UserLinked<UserCardPrintState> {

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,8 @@
from pathlib import Path
import json
for f in Path(__file__).parent.glob('*.json'):
obj = json.loads(f.read_text('utf-8'))
blacklist = ['end_date', 'start_date']
obj = [{k: v for k, v in o.items() if k not in blacklist} for o in obj]
f.write_text('[\n' + ',\n'.join(json.dumps(o, ensure_ascii=False) for o in obj) + '\n]\n', 'utf-8')