Add flyway database migration tool. Read diva news from database

pull/1/head
samnyan 2020-01-17 01:03:14 +09:00
parent a9a9ae4bbc
commit 3d99839fef
15 changed files with 7229 additions and 9 deletions

5
.gitignore vendored
View File

@ -29,3 +29,8 @@ build/
### VS Code ###
.vscode/
### Dev env ###
application.properties
aqua.jar
data/

View File

@ -20,7 +20,7 @@ or use the `start.bat` if you are using windows.
User data will be save in data/db.sqlite.
If you switch to MySQL, it will auto create the table and import some initial data.
Auto creation won't work with Sqlite, so if you want to recreate the database please use the file come with the release
Please go to the database migration tool's website to check if the Database version is being supported https://flywaydb.org/documentation/database/mariadb
### Configuration:
Configuration is save in `application.properties`
@ -39,6 +39,11 @@ Live Version: http://aqua.samnyan.icu/
And DIVA screenshot will be save in data folder.
### Changelog:
v0.0.3: Add database migration tool. If you are running on a old version, I encourage you to delete the old database and generate a new one.
### Credit:
* **samnyan**
* **Akasaka Ryuunosuke** : providing all the DIVA protocol information

View File

@ -74,6 +74,11 @@
<version>0.1.0</version>
</dependency>
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
<version>6.1.4</version>
</dependency>
<dependency>
<groupId>org.mariadb.jdbc</groupId>
<artifactId>mariadb-java-client</artifactId>

View File

@ -8,10 +8,13 @@ import icu.samnyan.aqua.sega.diva.dao.gamedata.*;
import icu.samnyan.aqua.sega.diva.model.common.Difficulty;
import icu.samnyan.aqua.sega.diva.model.common.Edition;
import icu.samnyan.aqua.sega.diva.model.gamedata.*;
import icu.samnyan.aqua.sega.general.dao.PropertyEntryRepository;
import icu.samnyan.aqua.sega.general.model.PropertyEntry;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
/**
* @author samnyan (privateamusement@protonmail.com)
@ -25,13 +28,15 @@ public class ApiDivaManageController {
private final DivaCustomizeRepository customizeRepository;
private final FestaRepository festaRepository;
private final ContestRepository contestRepository;
private final PropertyEntryRepository propertyEntryRepository;
public ApiDivaManageController(PvEntryRepository pvEntryRepository, DivaModuleRepository moduleRepository, DivaCustomizeRepository customizeRepository, FestaRepository festaRepository, ContestRepository contestRepository) {
public ApiDivaManageController(PvEntryRepository pvEntryRepository, DivaModuleRepository moduleRepository, DivaCustomizeRepository customizeRepository, FestaRepository festaRepository, ContestRepository contestRepository, PropertyEntryRepository propertyEntryRepository) {
this.pvEntryRepository = pvEntryRepository;
this.moduleRepository = moduleRepository;
this.customizeRepository = customizeRepository;
this.festaRepository = festaRepository;
this.contestRepository = contestRepository;
this.propertyEntryRepository = propertyEntryRepository;
}
@PostMapping("pvList")
@ -101,6 +106,28 @@ public class ApiDivaManageController {
return new OkResponse("Deleted " + id);
}
@GetMapping("news")
public Optional<PropertyEntry> getNews() {
return propertyEntryRepository.findByPropertyKey("diva_news");
}
@PutMapping("news")
public PropertyEntry updateNews(@RequestBody PropertyEntry property) {
PropertyEntry entry = propertyEntryRepository.findByPropertyKey("diva_news").orElseGet(() -> new PropertyEntry("diva_news", property.getPropertyValue()));
return propertyEntryRepository.save(entry);
}
@GetMapping("warning")
public Optional<PropertyEntry> getWarning() {
return propertyEntryRepository.findByPropertyKey("diva_warning");
}
@PutMapping("warning")
public PropertyEntry updateWarning(@RequestBody PropertyEntry property) {
PropertyEntry entry = propertyEntryRepository.findByPropertyKey("diva_warning").orElseGet(() -> new PropertyEntry("diva_warning", property.getPropertyValue()));
return propertyEntryRepository.save(entry);
}
@GetMapping("module")
public List<DivaModule> getModule() {
return moduleRepository.findAll();

View File

@ -46,6 +46,16 @@ public class RegisterHandler implements BaseHandler {
logger.info("Request: " + logMapper.write(requestMap));
if (((String) requestMap.get("luid")).equals("0c1ea200000000000000")) {
ctx.close();
return;
}
if (((String) requestMap.get("luid")).equals("0c1ea200000000000000")) {
ctx.close();
return;
}
Card card = new Card();
card.setLuid((String) requestMap.get("luid"));
card.setExtId(ThreadLocalRandom.current().nextLong(99999999));

View File

@ -4,6 +4,8 @@ import icu.samnyan.aqua.sega.diva.handler.BaseHandler;
import icu.samnyan.aqua.sega.diva.model.request.BaseRequest;
import icu.samnyan.aqua.sega.diva.model.response.operation.PingResponse;
import icu.samnyan.aqua.sega.diva.util.DivaMapper;
import icu.samnyan.aqua.sega.general.dao.PropertyEntryRepository;
import icu.samnyan.aqua.sega.general.model.PropertyEntry;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
@ -16,16 +18,24 @@ public class PingHandler extends BaseHandler {
private static final Logger logger = LoggerFactory.getLogger(PingHandler.class);
public PingHandler(DivaMapper mapper) {
private final PropertyEntryRepository propertyEntryRepository;
public PingHandler(DivaMapper mapper, PropertyEntryRepository propertyEntryRepository) {
super(mapper);
this.propertyEntryRepository = propertyEntryRepository;
}
public String handle(BaseRequest request) {
PropertyEntry news = propertyEntryRepository.findByPropertyKey("diva_news").orElseGet(() -> new PropertyEntry("diva_news", "Server Running No other news"));
PropertyEntry warning = propertyEntryRepository.findByPropertyKey("diva_warning").orElseGet(() -> new PropertyEntry("diva_warning", "Network Service Running"));
PingResponse response = new PingResponse(
request.getCmd(),
request.getReq_id(),
"ok"
"ok",
news.getPropertyValue(),
warning.getPropertyValue()
);
String resp = this.build(mapper.toMap(response));

View File

@ -11,8 +11,8 @@ import lombok.Setter;
@Getter
@Setter
public class PingResponse extends BaseResponse {
private String ping_b_msg = URIEncoder.encode("Server testing No other news");
private String ping_m_msg = URIEncoder.encode("Nothing special Server testing No other news");
private String ping_b_msg = URIEncoder.encode("Server Running No other news");
private String ping_m_msg = URIEncoder.encode("Network Service Running");
private String atnd_lut;
private String fi_lut;
private String ci_lut;
@ -53,4 +53,10 @@ public class PingResponse extends BaseResponse {
public PingResponse(String cmd, String req_id, String stat) {
super(cmd, req_id, stat);
}
public PingResponse(String cmd, String req_id, String stat, String ping_b_msg, String ping_m_msg) {
super(cmd, req_id, stat);
this.ping_b_msg = ping_b_msg;
this.ping_m_msg = ping_m_msg;
}
}

View File

@ -0,0 +1,15 @@
package icu.samnyan.aqua.sega.general.dao;
import icu.samnyan.aqua.sega.general.model.PropertyEntry;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.Optional;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Repository
public interface PropertyEntryRepository extends JpaRepository<PropertyEntry, Long> {
Optional<PropertyEntry> findByPropertyKey(String key);
}

View File

@ -0,0 +1,33 @@
package icu.samnyan.aqua.sega.general.model;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.*;
import java.io.Serializable;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Entity(name = "ServerPropertyEntry")
@Table(name = "property")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class PropertyEntry implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column(unique = true)
private String propertyKey;
private String propertyValue;
public PropertyEntry(String propertyKey, String propertyValue) {
this.propertyKey = propertyKey;
this.propertyValue = propertyValue;
}
}

View File

@ -14,12 +14,13 @@ server.port=80
spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=20MB
## Database Setting
spring.datasource.initialization-mode=always
spring.flyway.baseline-on-migrate=true
spring.flyway.locations=classpath:db/migration/{vendor},classpath:db/migration/common
########## For Sqlite ##########
spring.datasource.driver-class-name=org.sqlite.JDBC
spring.datasource.url=jdbc:sqlite:data/db.sqlite
#auto schema update will case sqlite error
spring.jpa.hibernate.ddl-auto=update
spring.jpa.hibernate.ddl-auto=none
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.SQLiteDialect
########## For Mysql ##########
#spring.datasource.driver-class-name=org.mariadb.jdbc.Driver

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,24 @@
--
-- テーブルの構造 `property`
--
CREATE TABLE `property`
(
`id` bigint(20) NOT NULL PRIMARY KEY AUTO_INCREMENT,
`property_key` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`property_value` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_unicode_ci;
--
-- Indexes for table `property`
--
ALTER TABLE `property`
ADD UNIQUE KEY `UK_ekbti34ksu6o2sfms9yumvp4o` (`property_key`);
COMMIT;
INSERT INTO `property` (id, property_key, property_value)
VALUES (1, 'diva_news', 'Server Running No other news');
INSERT INTO `property` (id, property_key, property_value)
VALUES (2, 'diva_warning', 'Network Service Running');

View File

@ -1,3 +1,889 @@
--
-- File generated with SQLiteStudio v3.2.1 on 木 1 16 23:33:40 2020
--
-- Text encoding used: UTF-8
--
-- Table: chuni_game_charge
CREATE TABLE chuni_game_charge
(
id INTEGER,
charge_id INTEGER UNIQUE,
end_date DATETIME,
order_id INTEGER NOT NULL,
price INTEGER NOT NULL,
sale_end_date DATETIME,
sale_price INTEGER NOT NULL,
sale_start_date DATETIME,
start_date DATETIME,
PRIMARY KEY (
id
)
);
-- Table: chuni_game_event
CREATE TABLE chuni_game_event
(
id INTEGER NOT NULL,
end_date DATETIME,
start_date DATETIME,
type INTEGER NOT NULL,
PRIMARY KEY (
id
)
);
-- Table: chuni_game_message
CREATE TABLE chuni_game_message
(
id INTEGER NOT NULL,
end_date DATETIME,
message VARCHAR(255),
start_date DATETIME,
type INTEGER NOT NULL,
PRIMARY KEY (
id
)
);
-- Table: chuni_music
CREATE TABLE chuni_music
(
music_id INTEGER NOT NULL,
artist_name VARCHAR(255),
copyright VARCHAR(255),
genre INTEGER,
name VARCHAR(255),
release_version VARCHAR(255),
sort_name VARCHAR(255),
PRIMARY KEY (
music_id
)
);
-- Table: chuni_music_level
CREATE TABLE chuni_music_level
(
id INTEGER,
diff INTEGER NOT NULL,
enable BOOLEAN NOT NULL,
level INTEGER NOT NULL,
level_decimal INTEGER NOT NULL,
music_id INTEGER,
PRIMARY KEY (
id
)
);
-- Table: chuni_user_activity
CREATE TABLE chuni_user_activity
(
id INTEGER,
activity_id INTEGER,
kind INTEGER NOT NULL,
param1 INTEGER NOT NULL,
param2 INTEGER NOT NULL,
param3 INTEGER NOT NULL,
param4 INTEGER NOT NULL,
sort_number INTEGER NOT NULL,
user_id BIGINT REFERENCES chuni_user_data (id) ON DELETE CASCADE,
PRIMARY KEY (
id
),
CONSTRAINT chuni_user_activity_uq UNIQUE (
activity_id,
kind,
user_id
) ON CONFLICT REPLACE
);
-- Table: chuni_user_character
CREATE TABLE chuni_user_character
(
id INTEGER,
character_id INTEGER NOT NULL,
friendship_exp INTEGER NOT NULL,
is_new_mark BOOLEAN NOT NULL,
is_valid BOOLEAN NOT NULL,
level INTEGER NOT NULL,
param1 INTEGER NOT NULL,
param2 INTEGER NOT NULL,
play_count INTEGER NOT NULL,
skill_id INTEGER NOT NULL,
user_id BIGINT REFERENCES chuni_user_data (id) ON DELETE CASCADE,
PRIMARY KEY (
id
),
CONSTRAINT chuni_user_character_uq UNIQUE (
character_id,
user_id
) ON CONFLICT REPLACE
);
-- Table: chuni_user_charge
CREATE TABLE chuni_user_charge
(
id INTEGER,
charge_id INTEGER NOT NULL,
param1 INTEGER NOT NULL,
param2 INTEGER NOT NULL,
param_date DATETIME,
purchase_date DATETIME,
stock INTEGER NOT NULL,
valid_date DATETIME,
user_id BIGINT REFERENCES chuni_user_data (id) ON DELETE CASCADE,
PRIMARY KEY (
id
),
CONSTRAINT chuni_user_charge_uq UNIQUE (
charge_id,
user_id
)
);
-- Table: chuni_user_course
CREATE TABLE chuni_user_course
(
id INTEGER,
class_id INTEGER NOT NULL,
course_id INTEGER NOT NULL,
event_id INTEGER NOT NULL,
is_all_justice BOOLEAN NOT NULL,
is_clear BOOLEAN NOT NULL,
is_full_combo BOOLEAN NOT NULL,
is_success BOOLEAN NOT NULL,
last_play_date DATETIME,
param1 INTEGER NOT NULL,
param2 INTEGER NOT NULL,
param3 INTEGER NOT NULL,
param4 INTEGER NOT NULL,
play_count INTEGER NOT NULL,
player_rating INTEGER NOT NULL,
score_max INTEGER NOT NULL,
score_rank INTEGER NOT NULL,
user_id BIGINT REFERENCES chuni_user_data (id) ON DELETE CASCADE,
PRIMARY KEY (
id
),
CONSTRAINT chuni_user_course_uq UNIQUE (
course_id,
user_id
)
);
-- Table: chuni_user_data
CREATE TABLE chuni_user_data
(
id INTEGER,
accept_res_count INTEGER NOT NULL,
character_id INTEGER NOT NULL,
event_watched_date DATETIME,
exp VARCHAR(255),
first_data_version VARCHAR(255),
first_game_id VARCHAR(255),
first_play_date DATETIME,
first_rom_version VARCHAR(255),
first_tutorial_cancel_num INTEGER NOT NULL,
frame_id INTEGER NOT NULL,
friend_count INTEGER NOT NULL,
highest_rating INTEGER NOT NULL,
is_maimai BOOLEAN NOT NULL,
is_web_join BOOLEAN NOT NULL,
last_all_net_id VARCHAR(255),
last_client_id VARCHAR(255),
last_data_version VARCHAR(255),
last_game_id VARCHAR(255),
last_login_date DATETIME,
last_place_id INTEGER NOT NULL,
last_place_name VARCHAR(255),
last_play_date DATETIME,
last_region_id VARCHAR(255),
last_region_name VARCHAR(255),
last_rom_version VARCHAR(255),
level INTEGER NOT NULL,
master_tutorial_cancel_num INTEGER NOT NULL,
multi_play_count INTEGER NOT NULL,
multi_win_count INTEGER NOT NULL,
nameplate_id INTEGER NOT NULL,
play_count INTEGER NOT NULL,
played_tutorial_bit INTEGER NOT NULL,
player_rating INTEGER NOT NULL,
point BIGINT NOT NULL,
reincarnation_num INTEGER NOT NULL,
request_res_count INTEGER NOT NULL,
success_res_count INTEGER NOT NULL,
total_advanced_high_score BIGINT NOT NULL,
total_basic_high_score BIGINT NOT NULL,
total_expert_high_score BIGINT NOT NULL,
total_hi_score BIGINT NOT NULL,
total_map_num INTEGER NOT NULL,
total_master_high_score BIGINT NOT NULL,
total_point BIGINT NOT NULL,
total_repertoire_count INTEGER NOT NULL,
trophy_id INTEGER NOT NULL,
user_name VARCHAR(255),
web_limit_date VARCHAR(255),
card_id BIGINT REFERENCES sega_card (id) ON DELETE CASCADE,
PRIMARY KEY (
id
)
);
-- Table: chuni_user_data_ex
CREATE TABLE chuni_user_data_ex
(
id INTEGER,
compatible_cm_version VARCHAR(255),
ext1 INTEGER NOT NULL,
ext10 INTEGER NOT NULL,
ext11 INTEGER NOT NULL,
ext12 INTEGER NOT NULL,
ext13 INTEGER NOT NULL,
ext14 INTEGER NOT NULL,
ext15 INTEGER NOT NULL,
ext16 INTEGER NOT NULL,
ext17 INTEGER NOT NULL,
ext18 INTEGER NOT NULL,
ext19 INTEGER NOT NULL,
ext2 INTEGER NOT NULL,
ext20 INTEGER NOT NULL,
ext3 INTEGER NOT NULL,
ext4 INTEGER NOT NULL,
ext5 INTEGER NOT NULL,
ext6 INTEGER NOT NULL,
ext7 INTEGER NOT NULL,
ext8 INTEGER NOT NULL,
ext9 INTEGER NOT NULL,
ext_long1 BIGINT NOT NULL,
ext_long2 BIGINT NOT NULL,
ext_long3 BIGINT NOT NULL,
ext_long4 BIGINT NOT NULL,
ext_long5 BIGINT NOT NULL,
ext_str1 VARCHAR(255),
ext_str2 VARCHAR(255),
ext_str3 VARCHAR(255),
ext_str4 VARCHAR(255),
ext_str5 VARCHAR(255),
map_icon_id INTEGER NOT NULL,
medal INTEGER NOT NULL,
voice_id INTEGER NOT NULL,
user_id BIGINT REFERENCES chuni_user_data (id) ON DELETE CASCADE,
PRIMARY KEY (
id
)
);
-- Table: chuni_user_duel
CREATE TABLE chuni_user_duel
(
id INTEGER,
duel_id INTEGER NOT NULL,
is_clear BOOLEAN NOT NULL,
last_play_date DATETIME,
param1 INTEGER NOT NULL,
param2 INTEGER NOT NULL,
param3 INTEGER NOT NULL,
param4 INTEGER NOT NULL,
point INTEGER NOT NULL,
progress INTEGER NOT NULL,
user_id BIGINT REFERENCES chuni_user_data (id) ON DELETE CASCADE,
PRIMARY KEY (
id
),
CONSTRAINT chuni_user_duel_uq UNIQUE (
duel_id,
user_id
)
);
-- Table: chuni_user_game_option
CREATE TABLE chuni_user_game_option
(
id INTEGER,
bg_info INTEGER NOT NULL,
field_color INTEGER NOT NULL,
guide_line INTEGER NOT NULL,
guide_sound INTEGER NOT NULL,
headphone INTEGER NOT NULL,
judge_attack INTEGER NOT NULL,
judge_justice INTEGER NOT NULL,
judge_pos INTEGER NOT NULL,
matching INTEGER NOT NULL,
option_set INTEGER NOT NULL,
player_level INTEGER NOT NULL,
privacy INTEGER NOT NULL,
rating INTEGER NOT NULL,
sound_effect INTEGER NOT NULL,
speed INTEGER NOT NULL,
success_air INTEGER NOT NULL,
success_ex_tap INTEGER NOT NULL,
success_flick INTEGER NOT NULL,
success_skill INTEGER NOT NULL,
success_slide_hold INTEGER NOT NULL,
success_tap INTEGER NOT NULL,
success_tap_timbre INTEGER NOT NULL,
user_id BIGINT REFERENCES chuni_user_data (id) ON DELETE CASCADE,
PRIMARY KEY (
id
)
);
-- Table: chuni_user_game_option_ex
CREATE TABLE chuni_user_game_option_ex
(
id INTEGER,
ext1 INTEGER NOT NULL,
ext10 INTEGER NOT NULL,
ext11 INTEGER NOT NULL,
ext12 INTEGER NOT NULL,
ext13 INTEGER NOT NULL,
ext14 INTEGER NOT NULL,
ext15 INTEGER NOT NULL,
ext16 INTEGER NOT NULL,
ext17 INTEGER NOT NULL,
ext18 INTEGER NOT NULL,
ext19 INTEGER NOT NULL,
ext2 INTEGER NOT NULL,
ext20 INTEGER NOT NULL,
ext3 INTEGER NOT NULL,
ext4 INTEGER NOT NULL,
ext5 INTEGER NOT NULL,
ext6 INTEGER NOT NULL,
ext7 INTEGER NOT NULL,
ext8 INTEGER NOT NULL,
ext9 INTEGER NOT NULL,
user_id BIGINT REFERENCES chuni_user_data (id),
PRIMARY KEY (
id
)
);
-- Table: chuni_user_item
CREATE TABLE chuni_user_item
(
id INTEGER,
is_valid BOOLEAN NOT NULL,
item_id INTEGER NOT NULL,
item_kind INTEGER NOT NULL,
stock INTEGER NOT NULL,
user_id BIGINT REFERENCES chuni_user_data (id) ON DELETE CASCADE,
PRIMARY KEY (
id
),
CONSTRAINT chuni_user_item_uq UNIQUE (
item_id,
item_kind,
user_id
)
);
-- Table: chuni_user_map
CREATE TABLE chuni_user_map
(
id INTEGER,
area_id INTEGER NOT NULL,
event_id INTEGER NOT NULL,
is_clear BOOLEAN NOT NULL,
is_valid BOOLEAN NOT NULL,
map_id INTEGER NOT NULL,
position INTEGER NOT NULL,
rate INTEGER NOT NULL,
route_number INTEGER NOT NULL,
status_count INTEGER NOT NULL,
user_id BIGINT REFERENCES chuni_user_data (id) ON DELETE CASCADE,
PRIMARY KEY (
id
),
CONSTRAINT chuni_user_map_uq UNIQUE (
map_id,
user_id
)
);
-- Table: chuni_user_music_detail
CREATE TABLE chuni_user_music_detail
(
id INTEGER,
full_chain INTEGER NOT NULL,
is_all_justice BOOLEAN NOT NULL,
is_full_combo BOOLEAN NOT NULL,
is_lock BOOLEAN NOT NULL,
is_success BOOLEAN NOT NULL,
level INTEGER NOT NULL,
max_chain INTEGER NOT NULL,
max_combo_count INTEGER NOT NULL,
miss_count INTEGER NOT NULL,
music_id INTEGER NOT NULL,
play_count INTEGER NOT NULL,
res_accept_count INTEGER NOT NULL,
res_request_count INTEGER NOT NULL,
res_success_count INTEGER NOT NULL,
score_max INTEGER NOT NULL,
score_rank INTEGER NOT NULL,
user_id BIGINT REFERENCES chuni_user_data (id) ON DELETE CASCADE,
PRIMARY KEY (
id
),
CONSTRAINT chuni_user_music_detail_uq UNIQUE (
music_id,
user_id
)
);
-- Table: chuni_user_playlog
CREATE TABLE chuni_user_playlog
(
id INTEGER,
character_id INTEGER NOT NULL,
custom_id INTEGER NOT NULL,
event_id INTEGER NOT NULL,
full_chain_kind INTEGER NOT NULL,
is_all_justice BOOLEAN NOT NULL,
is_clear BOOLEAN NOT NULL,
is_continue BOOLEAN NOT NULL,
is_free_to_play BOOLEAN NOT NULL,
is_full_combo BOOLEAN NOT NULL,
is_maimai BOOLEAN NOT NULL,
is_new_record BOOLEAN NOT NULL,
judge_attack INTEGER NOT NULL,
judge_critical INTEGER NOT NULL,
judge_guilty INTEGER NOT NULL,
judge_justice INTEGER NOT NULL,
level INTEGER NOT NULL,
max_chain INTEGER NOT NULL,
max_combo INTEGER NOT NULL,
music_id INTEGER NOT NULL,
order_id INTEGER NOT NULL,
place_id INTEGER NOT NULL,
place_name VARCHAR(255),
play_date DATETIME,
play_kind INTEGER NOT NULL,
played_custom1 INTEGER NOT NULL,
played_custom2 INTEGER NOT NULL,
played_custom3 INTEGER NOT NULL,
played_music_level1 INTEGER NOT NULL,
played_music_level2 INTEGER NOT NULL,
played_music_level3 INTEGER NOT NULL,
played_user_id1 INTEGER NOT NULL,
played_user_id2 INTEGER NOT NULL,
played_user_id3 INTEGER NOT NULL,
played_user_name1 VARCHAR(255),
played_user_name2 VARCHAR(255),
played_user_name3 VARCHAR(255),
player_rating INTEGER NOT NULL,
rank INTEGER NOT NULL,
rate_air INTEGER NOT NULL,
rate_flick INTEGER NOT NULL,
rate_hold INTEGER NOT NULL,
rate_slide INTEGER NOT NULL,
rate_tap INTEGER NOT NULL,
score INTEGER NOT NULL,
skill_effect INTEGER NOT NULL,
skill_id INTEGER NOT NULL,
skill_level INTEGER NOT NULL,
sort_number INTEGER NOT NULL,
track INTEGER NOT NULL,
user_play_date DATETIME,
user_id BIGINT REFERENCES chuni_user_data (id) ON DELETE CASCADE,
PRIMARY KEY (
id
)
);
-- Table: diva_contest
CREATE TABLE diva_contest
(
id INTEGER,
bronze_borders INTEGER NOT NULL,
description VARCHAR(255),
enable BOOLEAN NOT NULL,
end_time DATETIME,
gold_borders INTEGER NOT NULL,
league VARCHAR(255),
max_complexity INTEGER NOT NULL,
min_complexity INTEGER NOT NULL,
name VARCHAR(255),
norma_type VARCHAR(255),
sliver_borders INTEGER NOT NULL,
stage_limit VARCHAR(255),
stages INTEGER NOT NULL,
stars INTEGER NOT NULL,
start_time DATETIME,
PRIMARY KEY (
id
)
);
-- Table: diva_customize
CREATE TABLE diva_customize
(
id INTEGER NOT NULL,
end_date DATETIME,
name VARCHAR(255),
price INTEGER NOT NULL,
release_date DATETIME,
sort_order INTEGER NOT NULL,
PRIMARY KEY (
id
)
);
-- Table: diva_festa
CREATE TABLE diva_festa
(
id INTEGER,
addvp INTEGER,
attributes VARCHAR(255),
create_date DATETIME,
difficulty VARCHAR(255),
enable BOOLEAN NOT NULL,
"end" DATETIME,
kind VARCHAR(255),
name VARCHAR(255),
pv_list VARCHAR(255),
start DATETIME,
vp_multiplier INTEGER,
PRIMARY KEY (
id
)
);
-- Table: diva_game_session
CREATE TABLE diva_game_session
(
id INTEGER,
accept_id INTEGER NOT NULL,
last_pv_id INTEGER,
last_update_time DATETIME,
level_exp INTEGER,
level_number INTEGER,
old_level_exp INTEGER,
old_level_number INTEGER,
stage_index INTEGER,
start_mode VARCHAR(255),
start_time DATETIME,
vp INTEGER,
pd_id BIGINT UNIQUE
REFERENCES diva_player_profile (id) ON DELETE CASCADE,
PRIMARY KEY (
id
)
);
-- Table: diva_module
CREATE TABLE diva_module
(
id INTEGER NOT NULL,
end_date DATETIME,
name VARCHAR(255),
price INTEGER NOT NULL,
release_date DATETIME,
sort_order INTEGER NOT NULL,
PRIMARY KEY (
id
)
);
-- Table: diva_ng_words
CREATE TABLE diva_ng_words
(
id INTEGER,
word VARCHAR(255),
PRIMARY KEY (
id
)
);
-- Table: diva_play_log
CREATE TABLE diva_play_log
(
id INTEGER,
chain_slide_se INTEGER NOT NULL,
slider_touch_se INTEGER NOT NULL,
attain_point INTEGER NOT NULL,
button_se INTEGER NOT NULL,
button_se_vol INTEGER NOT NULL,
challenge_kind VARCHAR(255),
challenge_result INTEGER NOT NULL,
chance_time INTEGER NOT NULL,
clear_result VARCHAR(255),
cool_count INTEGER NOT NULL,
cool_percent INTEGER NOT NULL,
customize_items VARCHAR(255),
date_time DATETIME,
difficulty VARCHAR(255),
edition VARCHAR(255),
fine_count INTEGER NOT NULL,
fine_percent INTEGER NOT NULL,
hold_score INTEGER NOT NULL,
is_vocal_change INTEGER NOT NULL,
max_combo INTEGER NOT NULL,
modules VARCHAR(255),
pv_id INTEGER NOT NULL,
rhythm_game_options VARCHAR(255),
sad_count INTEGER NOT NULL,
sad_percent INTEGER NOT NULL,
safe_count INTEGER NOT NULL,
safe_percent INTEGER NOT NULL,
score INTEGER NOT NULL,
screen_shot_count INTEGER NOT NULL,
script_ver INTEGER NOT NULL,
skin_id INTEGER NOT NULL,
slide_score INTEGER NOT NULL,
slider_se INTEGER NOT NULL,
stage_completion INTEGER NOT NULL,
vp INTEGER NOT NULL,
wrong_count INTEGER NOT NULL,
wrong_percent INTEGER NOT NULL,
pd_id BIGINT REFERENCES diva_player_profile (id) ON DELETE CASCADE,
PRIMARY KEY (
id
)
);
-- Table: diva_player_contest
CREATE TABLE diva_player_contest
(
id INTEGER,
best_value INTEGER NOT NULL,
contest_id INTEGER,
flag INTEGER NOT NULL,
last_update_time DATETIME,
result_rank VARCHAR(255),
start_count INTEGER NOT NULL,
pd_id BIGINT REFERENCES diva_player_profile (id) ON DELETE CASCADE,
PRIMARY KEY (
id
),
CONSTRAINT diva_player_contest_uq UNIQUE (
contest_id,
pd_id
)
);
-- Table: diva_player_customize
CREATE TABLE diva_player_customize
(
id INTEGER,
customize_id INTEGER,
pd_id BIGINT REFERENCES diva_player_profile (id) ON DELETE CASCADE,
PRIMARY KEY (
id
),
CONSTRAINT diva_player_customize_uq UNIQUE (
customize_id,
pd_id
)
);
-- Table: diva_player_module
CREATE TABLE diva_player_module
(
id INTEGER,
module_id INTEGER REFERENCES diva_player_profile (id) ON DELETE CASCADE,
pd_id BIGINT,
PRIMARY KEY (
id
),
CONSTRAINT diva_player_module_uq UNIQUE (
module_id,
pd_id
)
);
-- Table: diva_player_profile
CREATE TABLE diva_player_profile
(
id INTEGER,
button_se INTEGER NOT NULL,
button_se_on BOOLEAN NOT NULL,
button_se_volume INTEGER NOT NULL,
chain_slide_se INTEGER NOT NULL,
common_customize_items VARCHAR(255),
common_module VARCHAR(255),
common_module_set_time DATETIME,
common_skin INTEGER NOT NULL,
contest_now_playing_enable BOOLEAN NOT NULL,
contest_now_playing_id INTEGER NOT NULL,
contest_now_playing_result_rank VARCHAR(255),
contest_now_playing_specifier VARCHAR(255),
contest_now_playing_value INTEGER NOT NULL,
headphone_volume INTEGER NOT NULL,
level INTEGER NOT NULL,
level_exp INTEGER NOT NULL,
level_title VARCHAR(255),
module_select_item_flag VARCHAR(255),
my_list0 VARCHAR(255),
my_list1 VARCHAR(255),
my_list2 VARCHAR(255),
next_difficulty VARCHAR(255),
next_edition VARCHAR(255),
next_pv_id INTEGER NOT NULL,
password VARCHAR(255),
password_status VARCHAR(255),
pd_id INTEGER UNIQUE
REFERENCES sega_card (ext_id) ON DELETE CASCADE,
plate_effect_id INTEGER NOT NULL,
plate_id INTEGER NOT NULL,
player_name VARCHAR(255),
prefer_common_module BOOLEAN NOT NULL,
prefer_per_pv_module BOOLEAN NOT NULL,
show_clear_border BOOLEAN NOT NULL,
show_clear_status BOOLEAN NOT NULL,
show_interim_ranking BOOLEAN NOT NULL,
show_rgo_setting BOOLEAN NOT NULL,
slide_se INTEGER NOT NULL,
slider_se_volume INTEGER NOT NULL,
slider_touch_se INTEGER NOT NULL,
sort_mode VARCHAR(255),
use_per_pv_button_se BOOLEAN NOT NULL,
use_per_pv_chain_slider_se BOOLEAN NOT NULL,
use_per_pv_skin BOOLEAN NOT NULL,
use_per_pv_slider_se BOOLEAN NOT NULL,
use_per_pv_touch_slider_se BOOLEAN NOT NULL,
vocaloid_points INTEGER NOT NULL,
PRIMARY KEY (
id
)
);
-- Table: diva_player_pv_customize
CREATE TABLE diva_player_pv_customize
(
id INTEGER,
button_se INTEGER NOT NULL,
chain_slide_se INTEGER NOT NULL,
customize VARCHAR(255),
customize_flag VARCHAR(255),
module VARCHAR(255),
pv_id INTEGER,
skin INTEGER NOT NULL,
slide_se INTEGER NOT NULL,
slider_touch_se INTEGER NOT NULL,
pd_id BIGINT REFERENCES diva_player_profile (id) ON DELETE CASCADE,
PRIMARY KEY (
id
),
CONSTRAINT diva_player_pv_customize_uq UNIQUE (
pv_id,
pd_id
)
);
-- Table: diva_player_pv_record
CREATE TABLE diva_player_pv_record
(
id INTEGER,
challenge_kind VARCHAR(255),
difficulty VARCHAR(255),
edition VARCHAR(255),
max_attain INTEGER NOT NULL,
max_score INTEGER NOT NULL,
pv_id INTEGER,
result VARCHAR(255),
rgo_played VARCHAR(255),
rgo_purchased VARCHAR(255),
pd_id BIGINT REFERENCES diva_player_profile (id) ON DELETE CASCADE,
PRIMARY KEY (
id
),
CONSTRAINT diva_player_pv_record_uq UNIQUE (
difficulty,
edition,
pv_id,
pd_id
)
);
-- Table: diva_player_screen_shot
CREATE TABLE diva_player_screen_shot
(
id INTEGER,
customize_list VARCHAR(255),
file_name VARCHAR(255),
module_list VARCHAR(255),
pv_id INTEGER NOT NULL,
pd_id BIGINT REFERENCES diva_player_profile (id) ON DELETE CASCADE,
PRIMARY KEY (
id
)
);
-- Table: diva_pv_entry
CREATE TABLE diva_pv_entry
(
id INTEGER,
demo_end DATETIME,
demo_start DATETIME,
difficulty VARCHAR(255),
edition VARCHAR(255),
playable_end DATETIME,
playable_start DATETIME,
pv_id INTEGER NOT NULL,
version INTEGER NOT NULL,
PRIMARY KEY (
id
),
CONSTRAINT diva_pv_entry_uq UNIQUE (
difficulty,
edition,
pv_id
)
);
-- Table: hibernate_sequence
CREATE TABLE hibernate_sequence
(
next_val BIGINT
);
-- Table: sega_card
CREATE TABLE sega_card
(
id INTEGER,
access_time DATETIME,
ext_id BIGINT UNIQUE,
luid VARCHAR(255) UNIQUE,
register_time DATETIME,
PRIMARY KEY (
id
)
);
INSERT INTO chuni_game_charge (id, charge_id, end_date, order_id, price, sale_end_date, sale_price, sale_start_date,
start_date)
VALUES (1, 2310, '2029-01-01 00:00:00.000000', 0, 1, '2029-01-01 00:00:00.000000', 1, '2019-01-01 00:00:00.000000',
@ -8798,4 +9684,4 @@ VALUES (275, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREM
'2029-01-31 15:00:00.000000', '2019-09-07 15:00:00.000000', 912, 1);
INSERT INTO diva_pv_entry (id, demo_end, demo_start, difficulty, edition, playable_end, playable_start, pv_id, version)
VALUES (276, '2029-01-31 15:00:00.000000', '2000-01-31 15:00:00.000000', 'EXTREME', 'ORIGINAL',
'2029-01-31 15:00:00.000000', '2019-09-07 15:00:00.000000', 913, 1);
'2029-01-31 15:00:00.000000', '2019-09-07 15:00:00.000000', 913, 1);

View File

@ -0,0 +1,10 @@
-- Table: property
CREATE TABLE property
(
id BIGINT NOT NULL,
property_key VARCHAR(255) UNIQUE,
property_value VARCHAR(255),
PRIMARY KEY (
id
)
);

42
start.bat 100644
View File

@ -0,0 +1,42 @@
@echo off
cd /d %~dp0
@rem set JAVA_HOME=C:\Program Files\RedHat\java-11-openjdk-11.0.4-1
if not "%JAVA_HOME%" == "" goto OkJHome
echo.
echo Error: JAVA_HOME not found in your environment. >&2
echo Please set the JAVA_HOME variable in your environment to match the >&2
echo location of your Java installation. >&2
echo.
goto error
:OkJHome
if exist "%JAVA_HOME%\bin\java.exe" goto init
echo.
echo Error: jave.exe not found. in JAVA_HOME>&2
echo.
goto error
:init
SET JAVA_EXE="%JAVA_HOME%\bin\java.exe"
for /f tokens^=2-5^ delims^=.-_^" %%j in ('%JAVA_EXE% -fullversion 2^>^&1') do set "JAVA_VER=%%j%%k"
if not %JAVA_VER% LSS 110 goto run
echo.
echo Error: Java version is lower than 11, please update your Java version. >&2
echo.
goto error
:run
%JAVA_EXE% -jar aqua.jar
if ERRORLEVEL 1 goto error
goto end
:error
set ERROR_CODE=1
:end
@endlocal & set ERROR_CODE=%ERROR_CODE%
pause