From 913244c2b5bd04a7af86aae68d83212492db6aa3 Mon Sep 17 00:00:00 2001 From: samnyan <205-neumphis@users.noreply.dev.s-ul.eu> Date: Sat, 21 Mar 2020 23:07:54 +0900 Subject: [PATCH] [api] Add more ongeki feature --- README.md | 5 + pom.xml | 2 +- .../ongeki/ApiOngekiPlayerDataController.java | 145 +++++++++++++++++- .../dao/userdata/UserActivityRepository.java | 2 + .../dao/userdata/UserCardRepository.java | 2 + .../sega/ongeki/model/userdata/UserCard.java | 3 +- 6 files changed, 150 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index b72f36fe..ae3ae702 100644 --- a/README.md +++ b/README.md @@ -54,6 +54,11 @@ And DIVA screenshot will be save in data folder. ### Changelog: + +v0.0.11a: + +[api] Add more ongeki feature + v0.0.11: **[This will do database update]** [ongeki] Add support to ongeki plus diff --git a/pom.xml b/pom.xml index 5045e7fb..7d266439 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ icu.samnya aqua - 0.0.11-RELEASE + 0.0.11a-RELEASE Aqua Server A multipurpose game server diff --git a/src/main/java/icu/samnyan/aqua/api/controller/sega/game/ongeki/ApiOngekiPlayerDataController.java b/src/main/java/icu/samnyan/aqua/api/controller/sega/game/ongeki/ApiOngekiPlayerDataController.java index 2f110194..53e14ba9 100644 --- a/src/main/java/icu/samnyan/aqua/api/controller/sega/game/ongeki/ApiOngekiPlayerDataController.java +++ b/src/main/java/icu/samnyan/aqua/api/controller/sega/game/ongeki/ApiOngekiPlayerDataController.java @@ -1,6 +1,7 @@ package icu.samnyan.aqua.api.controller.sega.game.ongeki; import com.fasterxml.jackson.core.type.TypeReference; +import icu.samnyan.aqua.api.model.MessageResponse; import icu.samnyan.aqua.api.model.ReducedPageResponse; import icu.samnyan.aqua.api.model.resp.sega.ongeki.ProfileResp; import icu.samnyan.aqua.api.util.ApiMapper; @@ -11,10 +12,15 @@ import icu.samnyan.aqua.sega.ongeki.model.userdata.*; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Sort; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.List; import java.util.Map; +import java.util.Optional; /** * @author samnyan (privateamusement@protonmail.com) @@ -25,6 +31,8 @@ public class ApiOngekiPlayerDataController { private final ApiMapper mapper; + private static DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.0"); + private final UserActivityRepository userActivityRepository; private final UserCardRepository userCardRepository; private final UserCharacterRepository userCharacterRepository; @@ -91,22 +99,86 @@ public class ApiOngekiPlayerDataController { public ReducedPageResponse getCard(@RequestParam Integer aimeId, @RequestParam(required = false, defaultValue = "0") int page, @RequestParam(required = false, defaultValue = "10") int size) { - Page cards = userCardRepository.findByUser_Card_ExtId(aimeId, PageRequest.of(page,size)); + Page cards = userCardRepository.findByUser_Card_ExtId(aimeId, PageRequest.of(page,size, Sort.Direction.DESC, "id")); return new ReducedPageResponse<>(cards.getContent(), cards.getPageable().getPageNumber(), cards.getTotalPages(), cards.getTotalElements()); } - @PostMapping("insert") - public UserCard insertCard(@RequestBody Map request) { + /** + * Force insert a card. This will use to create a new card or update a currently existed card star level. + * @param request Map of aimeId and cardId + * @return result UserCard or error message + */ + @PostMapping("card") + public ResponseEntity insertCard(@RequestBody Map request) { UserData profile = userDataRepository.findByCard_ExtId((Integer) request.get("aimeId")).orElseThrow(); Integer cardId = (Integer) request.get("cardId"); + Optional userCardOptional = userCardRepository.findByUserAndCardId(profile, cardId); + if(userCardOptional.isPresent()) { + UserCard card = userCardOptional.get(); + if(card.getDigitalStock() < 5) { + card.setDigitalStock(card.getDigitalStock() + 1); + return ResponseEntity.ok(userCardRepository.save(card)); + } else { + // If digital stock is larger than 5, check if this card is N card. + Optional gameCard = gameCardRepository.findById((long) card.getCardId()); + if(gameCard.isPresent()) { + if(gameCard.get().getRarity().equals("N")) { + card.setDigitalStock(card.getDigitalStock() + 1); + return ResponseEntity.ok(userCardRepository.save(card)); + } else { + return ResponseEntity.status(HttpStatus.UNPROCESSABLE_ENTITY).body(new MessageResponse("This card has reached max limit.")); + } + } else { + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) + .body(new MessageResponse("Card info not found on server, not allow to edit with api, please make edit to database directly.")); + } + } + } GameCard card = gameCardRepository.findById(cardId.longValue()).orElseThrow(); - return userCardRepository.save(new UserCard( - profile, - cardId, - card.getSkillId() + return ResponseEntity.ok( + userCardRepository.save( + new UserCard( + profile, + cardId, + card.getSkillId(), + LocalDateTime.now().format(df)) )); } + @PostMapping("card/{cardId}/kaika") + public ResponseEntity kaikaCard(@RequestParam Integer aimeId, @PathVariable Integer cardId) { + Optional userCardOptional = userCardRepository.findByUser_Card_ExtIdAndCardId(aimeId, cardId); + if(userCardOptional.isEmpty()) { + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(new MessageResponse("Card not found.")); + } else { + UserCard card = userCardOptional.get(); + if(!card.getKaikaDate().equals("0000-00-00 00:00:00.0")) { + return ResponseEntity.status(HttpStatus.UNPROCESSABLE_ENTITY).body(new MessageResponse("No, you have done this before.")); + } else { + card.setKaikaDate(LocalDateTime.now().format(df)); + card.setPrintCount(card.getPrintCount() + 1); + return ResponseEntity.ok(userCardRepository.save(card)); + } + } + } + + @PostMapping("card/{cardId}/choKaika") + public ResponseEntity choKaikaCard(@RequestParam Integer aimeId, @PathVariable Integer cardId) { + Optional userCardOptional = userCardRepository.findByUser_Card_ExtIdAndCardId(aimeId, cardId); + if(userCardOptional.isEmpty()) { + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(new MessageResponse("Card not found.")); + } else { + UserCard card = userCardOptional.get(); + if(!card.getChoKaikaDate().equals("0000-00-00 00:00:00.0")) { + return ResponseEntity.status(HttpStatus.UNPROCESSABLE_ENTITY).body(new MessageResponse("No, you have done this before.")); + } else { + card.setChoKaikaDate(LocalDateTime.now().format(df)); + card.setPrintCount(card.getPrintCount() + 1); + return ResponseEntity.ok(userCardRepository.save(card)); + } + } + } + @GetMapping("character") public ReducedPageResponse getCharacter(@RequestParam Integer aimeId, @RequestParam(required = false, defaultValue = "0") int page, @@ -115,6 +187,40 @@ public class ApiOngekiPlayerDataController { return new ReducedPageResponse<>(characters.getContent(), characters.getPageable().getPageNumber(), characters.getTotalPages(), characters.getTotalElements()); } + @GetMapping("activity") + public List getActivities(@RequestParam Integer aimeId) { + return userActivityRepository.findByUser_Card_ExtId(aimeId); + } + + @PostMapping("activity") + public ResponseEntity updateActivities(@RequestBody Map request) { + UserData profile = userDataRepository.findByCard_ExtId((Integer) request.get("aimeId")).orElseThrow(); + Integer activityId = (Integer) request.get("id"); + Integer kind = (Integer) request.get("kind"); + Integer sortNumber = (Integer) request.get("sortNumber"); + Integer param1 = (Integer) request.get("param1"); + Integer param2 = (Integer) request.get("param2"); + Integer param3 = (Integer) request.get("param3"); + Integer param4 = (Integer) request.get("param4"); + + Optional userActivityOptional = userActivityRepository.findByUserAndKindAndActivityId(profile, kind, activityId); + + UserActivity userActivity; + if(userActivityOptional.isPresent()) { + userActivity = userActivityOptional.get(); + } else { + userActivity = new UserActivity(profile); + userActivity.setActivityId(activityId); + userActivity.setKind(kind); + userActivity.setSortNumber(sortNumber); + } + userActivity.setParam1(param1); + userActivity.setParam2(param2); + userActivity.setParam3(param3); + userActivity.setParam4(param4); + return ResponseEntity.ok(userActivityRepository.save(userActivity)); + } + @GetMapping("item") public ReducedPageResponse getItem(@RequestParam Integer aimeId, @RequestParam(required = false, defaultValue = "0") int page, @@ -123,6 +229,31 @@ public class ApiOngekiPlayerDataController { return new ReducedPageResponse<>(items.getContent(), items.getPageable().getPageNumber(), items.getTotalPages(), items.getTotalElements()); } + @PostMapping("item") + public ResponseEntity updateItem(@RequestBody Map request) { + UserData profile = userDataRepository.findByCard_ExtId((Integer) request.get("aimeId")).orElseThrow(); + Integer itemKind = (Integer) request.get("itemKind"); + Integer itemId = (Integer) request.get("itemId"); + int stock = 1; + if(request.containsKey("stock")) { + stock = (Integer) request.get("stock"); + } + + Optional userItemOptional = userItemRepository.findByUserAndItemKindAndItemId(profile, itemKind, itemId); + + UserItem userItem; + if(userItemOptional.isPresent()) { + userItem = userItemOptional.get(); + } else { + userItem = new UserItem(profile); + userItem.setItemId(itemId); + userItem.setItemKind(itemKind); + } + userItem.setStock(stock); + userItem.setValid(true); + return ResponseEntity.ok(userItemRepository.save(userItem)); + } + @GetMapping("recent") public ReducedPageResponse getRecent(@RequestParam Integer aimeId, @RequestParam(required = false, defaultValue = "0") int page, diff --git a/src/main/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/UserActivityRepository.java b/src/main/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/UserActivityRepository.java index 9867f136..30abd1b3 100644 --- a/src/main/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/UserActivityRepository.java +++ b/src/main/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/UserActivityRepository.java @@ -16,4 +16,6 @@ public interface UserActivityRepository extends JpaRepository findByUserAndKindAndActivityId(UserData userData, int kind, int activityId); List findByUser_Card_ExtIdAndKindOrderBySortNumberDesc(int userId, int kind); + + List findByUser_Card_ExtId(int userId); } diff --git a/src/main/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/UserCardRepository.java b/src/main/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/UserCardRepository.java index 850e0248..6601f6dc 100644 --- a/src/main/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/UserCardRepository.java +++ b/src/main/java/icu/samnyan/aqua/sega/ongeki/dao/userdata/UserCardRepository.java @@ -17,4 +17,6 @@ public interface UserCardRepository extends JpaRepository { Optional findByUserAndCardId(UserData userData, int cardId); Page findByUser_Card_ExtId(int userId, Pageable page); + + Optional findByUser_Card_ExtIdAndCardId(int aimeId, int cardId); } diff --git a/src/main/java/icu/samnyan/aqua/sega/ongeki/model/userdata/UserCard.java b/src/main/java/icu/samnyan/aqua/sega/ongeki/model/userdata/UserCard.java index fbc177c0..2f8d2d8c 100644 --- a/src/main/java/icu/samnyan/aqua/sega/ongeki/model/userdata/UserCard.java +++ b/src/main/java/icu/samnyan/aqua/sega/ongeki/model/userdata/UserCard.java @@ -65,9 +65,10 @@ public class UserCard implements Serializable { this.user = userData; } - public UserCard(UserData userData, int cardId, int skillId) { + public UserCard(UserData userData, int cardId, int skillId, String created) { this.user = userData; this.cardId = cardId; this.skillId = skillId; + this.created = created; } }