[O] Optimize mai2 GetUserMusic

pull/23/head
Azalea 2024-03-25 13:56:30 -04:00
parent aa3a3d9181
commit 1e8c0ce99b
3 changed files with 48 additions and 83 deletions

View File

@ -1,65 +0,0 @@
package icu.samnyan.aqua.sega.maimai2.handler;
import com.fasterxml.jackson.core.JsonProcessingException;
import icu.samnyan.aqua.sega.maimai2.model.Mai2UserMusicDetailRepo;
import icu.samnyan.aqua.sega.general.BaseHandler;
import icu.samnyan.aqua.sega.maimai2.model.response.data.UserMusic;
import icu.samnyan.aqua.sega.maimai2.model.userdata.Mai2UserMusicDetail;
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.data.domain.PageRequest;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Component("Maimai2GetUserMusicHandler")
public class GetUserMusicHandler implements BaseHandler {
private static final Logger logger = LoggerFactory.getLogger(GetUserMusicHandler.class);
private final BasicMapper mapper;
private final Mai2UserMusicDetailRepo userMusicDetailRepository;
public GetUserMusicHandler(BasicMapper mapper, Mai2UserMusicDetailRepo userMusicDetailRepository) {
this.mapper = mapper;
this.userMusicDetailRepository = userMusicDetailRepository;
}
@Override
public String handle(Map<String, Object> request) throws JsonProcessingException {
long userId = ((Number) request.get("userId")).longValue();
int nextIndexVal = ((Number) request.get("nextIndex")).intValue();
int maxCount = ((Number) request.get("maxCount")).intValue();
int pageNum = nextIndexVal / maxCount;
Page<Mai2UserMusicDetail> dbPage = userMusicDetailRepository.findByUser_Card_ExtId(userId, PageRequest.of(pageNum, maxCount));
long currentIndex = maxCount * pageNum + dbPage.getNumberOfElements();
Map<String, Object> resultMap = new LinkedHashMap<>();
resultMap.put("userId", userId);
resultMap.put("nextIndex", dbPage.getNumberOfElements() < maxCount ? 0 : currentIndex);
UserMusic userMusic = new UserMusic();
userMusic.setUserMusicDetailList(dbPage.getContent());
List<UserMusic> userMusicList = new ArrayList<>();
userMusicList.add(userMusic);
resultMap.put("userMusicList", userMusicList);
String json = mapper.write(resultMap);
logger.info("Response: " + json);
return json;
}
}

View File

@ -0,0 +1,48 @@
package icu.samnyan.aqua.sega.maimai2.handler
import icu.samnyan.aqua.sega.general.BaseHandler
import icu.samnyan.aqua.sega.maimai2.model.Mai2Repos
import icu.samnyan.aqua.sega.util.jackson.BasicMapper
import org.slf4j.Logger
import org.slf4j.LoggerFactory
import org.springframework.stereotype.Component
@Component("Maimai2GetUserMusicHandler")
class GetUserMusicHandler(
val mapper: BasicMapper,
val repos: Mai2Repos
) : BaseHandler {
override fun handle(request: Map<String, Any>): Any {
val userId = (request["userId"] as Number).toLong()
// val nextIndexVal = (request["nextIndex"] as Number).toInt()
// val maxCount = (request["maxCount"] as Number).toInt()
//
// val pageNum = nextIndexVal / maxCount
//
// val dbPage = userMusicDetailRepository.findByUser_Card_ExtId(userId, PageRequest.of(pageNum, maxCount))
//
// val currentIndex = (maxCount * pageNum + dbPage.numberOfElements).toLong()
//
// val resultMap = mutableMapOf(
// "userId" to userId,
// "nextIndex" to if (dbPage.numberOfElements < maxCount) 0 else currentIndex,
// "userMusicList" to listOf(mapOf("userMusicDetailList" to dbPage.content))
// )
//
// val json = mapper.write(resultMap)
// logger.info("Response: $json")
val db = repos.userMusicDetail.findByUser_Card_ExtId(userId)
logger.info("Response: ${db.size} music records")
return mapOf(
"userId" to userId,
"nextIndex" to 0,
"userMusicList" to listOf(mapOf("userMusicDetailList" to db))
)
}
companion object {
val logger = LoggerFactory.getLogger(GetUserMusicHandler::class.java)
}
}

View File

@ -1,18 +0,0 @@
package icu.samnyan.aqua.sega.maimai2.model.response.data;
import java.util.List;
import icu.samnyan.aqua.sega.maimai2.model.userdata.Mai2UserMusicDetail;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserMusic {
private List<Mai2UserMusicDetail> userMusicDetailList;
}