From 0bf54e666b25609ff834c005a02b1a13da3b6493 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=82=A5=E5=AE=85=E8=99=BE=E5=93=A5?= <42127557+FeiZhaixiage@users.noreply.github.com> Date: Fri, 8 Dec 2023 02:18:35 +0800 Subject: [PATCH] [API] Let web music list read from database Add a feature to retrieve user photos. --- .../ApiMaimai2PlayerDataController.java | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/src/main/java/icu/samnyan/aqua/api/controller/sega/game/maimai2/ApiMaimai2PlayerDataController.java b/src/main/java/icu/samnyan/aqua/api/controller/sega/game/maimai2/ApiMaimai2PlayerDataController.java index dab6abab..3db3a10e 100644 --- a/src/main/java/icu/samnyan/aqua/api/controller/sega/game/maimai2/ApiMaimai2PlayerDataController.java +++ b/src/main/java/icu/samnyan/aqua/api/controller/sega/game/maimai2/ApiMaimai2PlayerDataController.java @@ -1,9 +1,12 @@ package icu.samnyan.aqua.api.controller.sega.game.maimai2; import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; + import icu.samnyan.aqua.api.model.MessageResponse; import icu.samnyan.aqua.api.model.ReducedPageResponse; import icu.samnyan.aqua.api.model.resp.sega.maimai2.ProfileResp; +import icu.samnyan.aqua.api.model.resp.sega.maimai2.PhotoResp; import icu.samnyan.aqua.api.model.resp.sega.maimai2.external.ExternalUserData; import icu.samnyan.aqua.api.model.resp.sega.maimai2.external.Maimai2DataExport; import icu.samnyan.aqua.api.model.resp.sega.maimai2.external.Maimai2DataImport; @@ -21,9 +24,12 @@ import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import java.io.IOException; +import java.nio.file.*; import java.time.format.DateTimeFormatter; import java.util.*; import java.util.stream.Collectors; +import java.util.stream.Stream; /** * @author samnyan (privateamusement@protonmail.com) @@ -89,6 +95,37 @@ public class ApiMaimai2PlayerDataController { return divMaxLength; } + @GetMapping("userPhoto") + public PhotoResp getUserPhoto(@RequestParam long aimeId, + @RequestParam(required = false, defaultValue = "0") int imageIndex) { + List matchedFiles = new ArrayList<>(); + PhotoResp Photo = new PhotoResp(); + try (Stream paths = Files.walk(Paths.get("data"))) { + matchedFiles = paths + .filter(Files::isRegularFile) + .filter(path -> path.getFileName().toString().endsWith(".jpg")) + .filter(path -> { + String fileName = path.getFileName().toString(); + String[] parts = fileName.split("-"); + return parts.length > 0 && parts[0].equals(String.valueOf(aimeId)); + }) + .map(Path::getFileName) + .map(Path::toString) + .sorted(Comparator.reverseOrder()) + .collect(Collectors.toList()); + Photo.setTotalImage(matchedFiles.size()); + Photo.setImageIndex(imageIndex); + if(matchedFiles.size() > imageIndex){ + byte[] targetImageContent = Files.readAllBytes(Paths.get("data/" + matchedFiles.get(imageIndex))); + String divData = Base64.getEncoder().encodeToString(targetImageContent); + Photo.setDivData(divData); + } + } + catch (IOException e) { + } + return Photo; + } + @GetMapping("profile") public ProfileResp getProfile(@RequestParam long aimeId) { return mapper.convert(userDataRepository.findByCard_ExtId(aimeId).orElseThrow(), new TypeReference<>() {