[api] Add rest of the player data to api

pull/1/head
samnyan 2020-03-30 23:24:53 +09:00
parent a9ffd0da75
commit 91c0c3de2f
8 changed files with 129 additions and 22 deletions

View File

@ -0,0 +1,29 @@
package icu.samnyan.aqua.api.controller.sega.game.chuni.amazon;
import icu.samnyan.aqua.sega.chunithm.model.gamedata.Music;
import icu.samnyan.aqua.sega.chunithm.service.GameMusicService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@RestController
@RequestMapping("api/game/chuni/amazon/data")
public class ApiAmazonGameDataController {
private final GameMusicService gameMusicService;
public ApiAmazonGameDataController(GameMusicService gameMusicService) {
this.gameMusicService = gameMusicService;
}
@GetMapping("music")
public List<Music> getMusic() {
return gameMusicService.getAll();
}
}

View File

@ -31,13 +31,14 @@ import java.util.*;
import java.util.stream.Collectors;
/**
* For all aimeId parameter, should use String
* @author samnyan (privateamusement@protonmail.com)
*/
@RestController
@RequestMapping("api/game/chuni/amazon")
public class ApiAmazonController {
public class ApiAmazonPlayerDataController {
private static final Logger logger = LoggerFactory.getLogger(ApiAmazonController.class);
private static final Logger logger = LoggerFactory.getLogger(ApiAmazonPlayerDataController.class);
private final ApiMapper mapper;
@ -61,7 +62,7 @@ public class ApiAmazonController {
private final GameMusicService gameMusicService;
@Autowired
public ApiAmazonController(ApiMapper mapper, CardService cardService, UserActivityService userActivityService, UserCharacterService userCharacterService, UserChargeService userChargeService, UserDataService userDataService, UserDataExService userDataExService, UserGameOptionExService userGameOptionExService, UserMapService userMapService, UserPlaylogService userPlaylogService, UserMusicDetailService userMusicDetailService, UserCourseService userCourseService, UserDuelService userDuelService, UserGameOptionService userGameOptionService, UserItemService userItemService, UserGeneralDataService userGeneralDataService, GameMusicService gameMusicService) {
public ApiAmazonPlayerDataController(ApiMapper mapper, CardService cardService, UserActivityService userActivityService, UserCharacterService userCharacterService, UserChargeService userChargeService, UserDataService userDataService, UserDataExService userDataExService, UserGameOptionExService userGameOptionExService, UserMapService userMapService, UserPlaylogService userPlaylogService, UserMusicDetailService userMusicDetailService, UserCourseService userCourseService, UserDuelService userDuelService, UserGameOptionService userGameOptionService, UserItemService userItemService, UserGeneralDataService userGeneralDataService, GameMusicService gameMusicService) {
this.mapper = mapper;
this.cardService = cardService;
this.userActivityService = userActivityService;
@ -82,6 +83,7 @@ public class ApiAmazonController {
}
// Keep it here for legacy
@GetMapping("music")
public List<Music> getMusicList() {
return gameMusicService.getAll();
@ -205,6 +207,78 @@ public class ApiAmazonController {
return userPlaylogService.getByUserIdAndMusicIdAndLevel(aimeId, id, level);
}
@GetMapping("character")
public ReducedPageResponse<UserCharacter> getCharacter(@RequestParam String aimeId,
@RequestParam(required = false, defaultValue = "0") int page,
@RequestParam(required = false, defaultValue = "10") int size) {
Page<UserCharacter> characters = userCharacterService.getByUserId(aimeId, page, size);
return new ReducedPageResponse<>(characters.getContent(), characters.getPageable().getPageNumber(), characters.getTotalPages(), characters.getTotalElements());
}
@PostMapping("character")
public ResponseEntity<Object> updateCharacter(@RequestBody Map<String, Object> request) {
UserData profile = userDataService.getUserByExtId((String) request.get("aimeId")).orElseThrow();
Integer characterId = (Integer) request.get("characterId");
Optional<UserCharacter> characterOptional = userCharacterService.getByUserAndCharacterId(profile, characterId);
UserCharacter character;
if(characterOptional.isPresent()) {
character = characterOptional.get();
} else {
character = new UserCharacter(profile);
character.setCharacterId(characterId);
}
if(request.containsKey("level")) {
character.setLevel((Integer) request.get("level"));
}
return ResponseEntity.ok(userCharacterService.save(character));
}
@GetMapping("course")
public List<UserCourse> getCourse(@RequestParam String aimeId) {
return userCourseService.getByUserId(aimeId);
}
@GetMapping("duel")
public List<UserDuel> getDuel(@RequestParam String aimeId) {
return userDuelService.getByUserId(aimeId);
}
@GetMapping("item")
public ReducedPageResponse<UserItem> getItem(@RequestParam String aimeId,
@RequestParam(required = false, defaultValue = "0") int page,
@RequestParam(required = false, defaultValue = "10") int size) {
Page<UserItem> items = userItemService.getByUserId(aimeId, page, size);
return new ReducedPageResponse<>(items.getContent(), items.getPageable().getPageNumber(), items.getTotalPages(), items.getTotalElements());
}
@PostMapping("item")
public ResponseEntity<Object> updateItem(@RequestBody Map<String, Object> request) {
UserData profile = userDataService.getUserByExtId((String) request.get("aimeId")).orElseThrow();
Integer itemId = (Integer) request.get("itemId");
Integer itemKind = (Integer) request.get("itemKind");
Optional<UserItem> itemOptional = userItemService.getByUserAndItemIdAndKind(profile, itemId,itemKind);
UserItem item;
if(itemOptional.isPresent()) {
item = itemOptional.get();
} else {
item = new UserItem(profile);
item.setItemId(itemId);
item.setItemKind(itemKind);
}
if(request.containsKey("stock")) {
item.setStock((Integer) request.get("stock"));
}
return ResponseEntity.ok(userItemService.save(item));
}
@GetMapping("general")
public ResponseEntity<Object> getGeneralData(@RequestParam String aimeId, @RequestParam String key) {
Optional<UserGeneralData> userGeneralDataOptional = userGeneralDataService.getByUserIdAndKey(aimeId,key);
return userGeneralDataOptional.<ResponseEntity<Object>>map(ResponseEntity::ok)
.orElseGet(() -> ResponseEntity.status(HttpStatus.NOT_FOUND).body(new MessageResponse("User or value not found.")));
}
@GetMapping("export")
public ResponseEntity<Object> exportAllUserData(@RequestParam String aimeId) {
ChuniDataExport data = new ChuniDataExport();
@ -313,13 +387,6 @@ public class ApiAmazonController {
return ResponseEntity.ok(new MessageResponse("Import successfully, aimeId: " + card.getExtId()));
}
@GetMapping("general")
public ResponseEntity<Object> getGeneralData(@RequestParam String aimeId, @RequestParam String key) {
Optional<UserGeneralData> userGeneralDataOptional = userGeneralDataService.getByUserIdAndKey(aimeId,key);
return userGeneralDataOptional.<ResponseEntity<Object>>map(ResponseEntity::ok)
.orElseGet(() -> ResponseEntity.status(HttpStatus.NOT_FOUND).body(new MessageResponse("User or value not found.")));
}
private int calculateRating(int levelBase, int score) {
if (score >= 1007500) return levelBase + 200;
if (score >= 1005000) return levelBase + 150 + (score - 1005000) * 10 / 500;

View File

@ -16,9 +16,12 @@ import java.util.Optional;
@Repository
public interface UserCharacterRepository extends JpaRepository<UserCharacter, Long> {
Optional<UserCharacter> findTopByUserAndCharacterIdOrderByIdDesc(UserData user, int characterId);
Page<UserCharacter> findByUser_Card_ExtId(int extId, Pageable pageable);
List<UserCharacter> findByUser_Card_ExtId(int extId);
Optional<UserCharacter> findTopByUserAndCharacterIdOrderByIdDesc(UserData user, int characterId);
Optional<UserCharacter> findByUser_Card_ExtIdAndCharacterId(int extId, int characterId);
}

View File

@ -3,6 +3,7 @@ package icu.samnyan.aqua.sega.chunithm.dao.userdata;
import icu.samnyan.aqua.sega.chunithm.model.userdata.UserData;
import icu.samnyan.aqua.sega.chunithm.model.userdata.UserItem;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@ -21,4 +22,6 @@ public interface UserItemRepository extends JpaRepository<UserItem, Long> {
Page<UserItem> findAllByUser_Card_ExtIdAndItemKind(int extId, int itemKind, Pageable pageable);
List<UserItem> findAllByUser_Card_ExtId(int extId);
Page<UserItem> findByUser_Card_ExtId(int extId, Pageable pageable);
}

View File

@ -36,23 +36,23 @@ public class UserCharacter implements Serializable {
@Column(name = "character_id")
private int characterId;
private int playCount;
private int playCount = 0;
private int level;
private int level = 1;
private int skillId;
private int skillId = 0;
private int friendshipExp;
private int friendshipExp = 0;
@JsonProperty("isValid")
private boolean isValid;
private boolean isValid = true;
@JsonProperty("isNewMark")
private boolean isNewMark;
private boolean isNewMark = true;
private int param1;
private int param1 = 0;
private int param2;
private int param2 = 0;
public UserCharacter(UserData userData) {
user = userData;

View File

@ -40,10 +40,10 @@ public class UserItem implements Serializable {
@Column(name = "item_id")
private int itemId;
private int stock;
private int stock = 1;
@JsonProperty("isValid")
private boolean isValid;
private boolean isValid = true;
public UserItem(UserData userData) {
user = userData;

View File

@ -45,4 +45,5 @@ public class UserCharacterService {
public Optional<UserCharacter> getByUserAndCharacterId(UserData user, int characterId) {
return userCharacterRepository.findTopByUserAndCharacterIdOrderByIdDesc(user, characterId);
}
}

View File

@ -44,4 +44,8 @@ public class UserItemService {
Pageable page = PageRequest.of(pageNumber, maxCount);
return userItemRepository.findAllByUser_Card_ExtIdAndItemKind(Integer.parseInt(userId), kind, page);
}
public Page<UserItem> getByUserId(String userId, int page, int size) {
return userItemRepository.findByUser_Card_ExtId(Integer.parseInt(userId), PageRequest.of(page, size));
}
}