[api] Add Chusan API

This commit is contained in:
Dom Eori
2022-03-19 21:48:12 +09:00
parent d15454c2cb
commit 27ff23c662
50 changed files with 28834 additions and 0 deletions

View File

@@ -0,0 +1,17 @@
package icu.samnyan.aqua.sega.chusan.dao.gamedata;
import icu.samnyan.aqua.sega.chusan.model.gamedata.AvatarAcc;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.Optional;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Repository("ChusanGameAvatarAccRepository")
public interface GameAvatarAccRepository extends JpaRepository<AvatarAcc, Long> {
Optional<AvatarAcc> findById(int trophyId);
}

View File

@@ -0,0 +1,12 @@
package icu.samnyan.aqua.sega.chusan.dao.gamedata;
import icu.samnyan.aqua.sega.chusan.model.gamedata.Character;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Repository("ChusanGameCharacterRepository")
public interface GameCharacterRepository extends JpaRepository<Character, Long> {
}

View File

@@ -0,0 +1,17 @@
package icu.samnyan.aqua.sega.chusan.dao.gamedata;
import icu.samnyan.aqua.sega.chusan.model.gamedata.Frame;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.Optional;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Repository("ChusanGameFrameRepository")
public interface GameFrameRepository extends JpaRepository<Frame, Long> {
Optional<Frame> findById(int trophyId);
}

View File

@@ -0,0 +1,17 @@
package icu.samnyan.aqua.sega.chusan.dao.gamedata;
import icu.samnyan.aqua.sega.chusan.model.gamedata.MapIcon;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.Optional;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Repository("ChusanGameMapIconRepository")
public interface GameMapIconRepository extends JpaRepository<MapIcon, Long> {
Optional<MapIcon> findById(int mapIconId);
}

View File

@@ -0,0 +1,16 @@
package icu.samnyan.aqua.sega.chusan.dao.gamedata;
import icu.samnyan.aqua.sega.chusan.model.gamedata.Music;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.Optional;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Repository("ChusanGameMusicRepository")
public interface GameMusicRepository extends JpaRepository<Music, Long> {
Optional<Music> findByMusicId(int musicId);
}

View File

@@ -0,0 +1,17 @@
package icu.samnyan.aqua.sega.chusan.dao.gamedata;
import icu.samnyan.aqua.sega.chusan.model.gamedata.NamePlate;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.Optional;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Repository("ChusanGameNamePlateRepository")
public interface GameNamePlateRepository extends JpaRepository<NamePlate, Long> {
Optional<NamePlate> findById(int trophyId);
}

View File

@@ -0,0 +1,17 @@
package icu.samnyan.aqua.sega.chusan.dao.gamedata;
import icu.samnyan.aqua.sega.chusan.model.gamedata.SystemVoice;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.Optional;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Repository("ChusanGameSystemVoiceRepository")
public interface GameSystemVoiceRepository extends JpaRepository<SystemVoice, Long> {
Optional<SystemVoice> findById(int trophyId);
}

View File

@@ -0,0 +1,17 @@
package icu.samnyan.aqua.sega.chusan.dao.gamedata;
import icu.samnyan.aqua.sega.chusan.model.gamedata.Trophy;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.Optional;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Repository("ChusanGameTrophyRepository")
public interface GameTrophyRepository extends JpaRepository<Trophy, Long> {
Optional<Trophy> findById(int trophyId);
}

View File

@@ -22,5 +22,7 @@ public interface UserItemRepository extends JpaRepository<UserItem, Long> {
List<UserItem> findAllByUser_Card_ExtId(Long extId);
List<UserItem> findAllByUser_Card_ExtIdAndItemKind(Long extId, int itemKind);
Page<UserItem> findByUser_Card_ExtId(Long extId, Pageable pageable);
}

View File

@@ -0,0 +1,28 @@
package icu.samnyan.aqua.sega.chusan.model.gamedata;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.*;
import java.io.Serializable;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Entity(name = "AvatarAcc")
@Table(name = "chusan_avatar")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class AvatarAcc implements Serializable {
private static final long serialVersionUID = 1L;
@Id
private long id;
private String name;
private int category;
}

View File

@@ -0,0 +1,37 @@
package icu.samnyan.aqua.sega.chusan.model.gamedata;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import java.io.Serializable;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Entity(name = "ChusanCharacter")
@Table(name = "chusan_game_character")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Character implements Serializable {
private static final long serialVersionUID = 1L;
@Id
private long id;
private String name;
private String releaseTag;
private String worksName;
private String illustratorName;
private String addImages;
}

View File

@@ -0,0 +1,26 @@
package icu.samnyan.aqua.sega.chusan.model.gamedata;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.*;
import java.io.Serializable;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Entity(name = "ChusanFrame")
@Table(name = "chusan_frame")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Frame implements Serializable {
private static final long serialVersionUID = 1L;
@Id
private long id;
private String name;
}

View File

@@ -0,0 +1,32 @@
package icu.samnyan.aqua.sega.chusan.model.gamedata;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
public enum Genre {
POPS_ANIME("POPS & ANIME"),
GAME("GAME"),
NICONICO("niconico"),
TOUHOU("東方Project"),
RESERVE2("Reserve2"),
ORIGINAL("Original"),
VARIETY("Variety"),
IRODORI("イロドリミドリ"),
KOTONOHA("葉Project"),
GEKICHUMA("ゲキマイ");
private String displayName;
Genre(String displayName) {
this.displayName = displayName;
}
public String displayName() {
return displayName;
}
@Override
public String toString() {
return displayName;
}
}

View File

@@ -0,0 +1,40 @@
package icu.samnyan.aqua.sega.chusan.model.gamedata;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.*;
import java.io.Serializable;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Entity(name = "ChusanMusicLevel")
@Table(name = "chusan_music_level")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Level implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@JsonIgnore
private long id;
@JsonIgnore
@ManyToOne
@JoinColumn(name = "music_id")
private Music music;
private boolean enable;
private int level;
private int levelDecimal;
private int diff;
}

View File

@@ -0,0 +1,26 @@
package icu.samnyan.aqua.sega.chusan.model.gamedata;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.*;
import java.io.Serializable;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Entity(name = "ChusanMapIcon")
@Table(name = "chusan_mapicon")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class MapIcon implements Serializable {
private static final long serialVersionUID = 1L;
@Id
private long id;
private String name;
}

View File

@@ -0,0 +1,40 @@
package icu.samnyan.aqua.sega.chusan.model.gamedata;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.*;
import java.io.Serializable;
import java.util.Map;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Entity(name = "ChusanMusic")
@Table(name = "chusan_music")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Music implements Serializable {
private static final long serialVersionUID = 1L;
@Id
private int musicId;
private String name;
private String sortName;
private String artistName;
private Genre genre;
private String releaseVersion;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "music")
@MapKey(name = "diff")
private Map<Integer, Level> levels;
}

View File

@@ -0,0 +1,26 @@
package icu.samnyan.aqua.sega.chusan.model.gamedata;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.*;
import java.io.Serializable;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Entity(name = "ChusanNamePlate")
@Table(name = "chusan_nameplate")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class NamePlate implements Serializable {
private static final long serialVersionUID = 1L;
@Id
private long id;
private String name;
}

View File

@@ -0,0 +1,26 @@
package icu.samnyan.aqua.sega.chusan.model.gamedata;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.*;
import java.io.Serializable;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Entity(name = "ChusanSystemVoice")
@Table(name = "chusan_voice")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class SystemVoice implements Serializable {
private static final long serialVersionUID = 1L;
@Id
private long id;
private String name;
}

View File

@@ -0,0 +1,26 @@
package icu.samnyan.aqua.sega.chusan.model.gamedata;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.*;
import java.io.Serializable;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Entity(name = "ChusanTrophy")
@Table(name = "chusan_trophy")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Trophy implements Serializable {
private static final long serialVersionUID = 1L;
@Id
private long id;
private String name;
}

View File

@@ -0,0 +1,53 @@
package icu.samnyan.aqua.sega.chusan.service;
import icu.samnyan.aqua.sega.chusan.dao.gamedata.GameMusicRepository;
import icu.samnyan.aqua.sega.chusan.model.gamedata.Music;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Service("ChusanGameMusicService")
public class GameMusicService {
private final GameMusicRepository gameMusicRepository;
@Autowired
public GameMusicService(GameMusicRepository gameMusicRepository) {
this.gameMusicRepository = gameMusicRepository;
}
public Music save(Music music) {
return gameMusicRepository.save(music);
}
public List<Music> saveAll(List<Music> musicList) {
return gameMusicRepository.saveAll(musicList);
}
@Cacheable("music")
public List<Music> getAll() {
return gameMusicRepository.findAll();
}
public Map<Integer, Music> getIdMap() {
Map<Integer, Music> musicMap = new LinkedHashMap<>();
getAll().forEach(music -> musicMap.put(music.getMusicId(), music));
return musicMap;
}
public Optional<Music> getById(String musicId) {
return getById(Integer.parseInt(musicId));
}
public Optional<Music> getById(int musicId) {
return gameMusicRepository.findByMusicId(musicId);
}
}

View File

@@ -44,6 +44,10 @@ public class UserItemService {
Pageable page = PageRequest.of(pageNumber, maxCount);
return userItemRepository.findAllByUser_Card_ExtIdAndItemKind(Long.parseLong(userId), kind, page);
}
public List<UserItem> getByUserAndItemKind(String userId, int kind) {
return userItemRepository.findAllByUser_Card_ExtIdAndItemKind(Long.parseLong(userId), kind);
}
public Page<UserItem> getByUserId(String userId, int page, int size) {
return userItemRepository.findByUser_Card_ExtId(Long.parseLong(userId), PageRequest.of(page, size));