diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserCharacter.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserCharacter.java index 50231229..d4e5a5e6 100644 --- a/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserCharacter.java +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserCharacter.java @@ -14,7 +14,7 @@ import java.io.Serializable; * @author samnyan (privateamusement@protonmail.com) */ @Entity(name = "ChuniUserCharacter") -@Table(name = "chuni_user_character") +@Table(name = "chuni_user_character", uniqueConstraints = {@UniqueConstraint(columnNames = {"user_id", "character_id"})}) @Data @NoArgsConstructor @AllArgsConstructor @@ -33,6 +33,7 @@ public class UserCharacter implements Serializable { @JoinColumn(name = "user_id") private UserData user; + @Column(name = "character_id") private int characterId; private int playCount; diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserCharge.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserCharge.java index 413dbfac..d4dcc653 100644 --- a/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserCharge.java +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserCharge.java @@ -14,7 +14,7 @@ import java.time.LocalDateTime; * @author samnyan (privateamusement@protonmail.com) */ @Entity(name = "ChuniUserCharge") -@Table(name = "chuni_user_charge") +@Table(name = "chuni_user_charge", uniqueConstraints = {@UniqueConstraint(columnNames = {"user_id", "charge_id"})}) @Data @NoArgsConstructor @AllArgsConstructor @@ -33,6 +33,7 @@ public class UserCharge implements Serializable { @JoinColumn(name = "user_id") private UserData user; + @Column(name = "charge_id") private int chargeId; private int stock; diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserCourse.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserCourse.java index 846b8828..2f08acce 100644 --- a/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserCourse.java +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserCourse.java @@ -13,7 +13,7 @@ import java.time.LocalDateTime; * @author samnyan (privateamusement@protonmail.com) */ @Entity(name = "ChuniUserCourse") -@Table(name = "chuni_user_course") +@Table(name = "chuni_user_course", uniqueConstraints = {@UniqueConstraint(columnNames = {"user_id", "course_id"})}) @Data @NoArgsConstructor @AllArgsConstructor @@ -29,6 +29,7 @@ public class UserCourse { @JoinColumn(name = "user_id") private UserData user; + @Column(name = "course_id") private int courseId; private int classId; diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserDuel.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserDuel.java index df035c27..f9fa48df 100644 --- a/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserDuel.java +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserDuel.java @@ -13,7 +13,7 @@ import java.time.LocalDateTime; * @author samnyan (privateamusement@protonmail.com) */ @Entity(name = "ChuniUserDuel") -@Table(name = "chuni_user_duel") +@Table(name = "chuni_user_duel", uniqueConstraints = {@UniqueConstraint(columnNames = {"user_id", "duel_id"})}) @Data @NoArgsConstructor @AllArgsConstructor @@ -29,6 +29,7 @@ public class UserDuel { @JoinColumn(name = "user_id") private UserData user; + @Column(name = "duel_id") private int duelId; private int progress; diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserItem.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserItem.java index 5eabd7bc..73a18b97 100644 --- a/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserItem.java +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserItem.java @@ -14,7 +14,7 @@ import java.io.Serializable; * @author samnyan (privateamusement@protonmail.com) */ @Entity(name = "ChuniUserItem") -@Table(name = "chuni_user_item") +@Table(name = "chuni_user_item", uniqueConstraints = {@UniqueConstraint(columnNames = {"user_id", "item_id", "item_kind"})}) @Data @NoArgsConstructor @AllArgsConstructor @@ -34,8 +34,10 @@ public class UserItem implements Serializable { private UserData user; // Kind ,Type + @Column(name = "item_kind") private int itemKind; + @Column(name = "item_id") private int itemId; private int stock; diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserMap.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserMap.java index e4f86a48..14af28b2 100644 --- a/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserMap.java +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserMap.java @@ -14,7 +14,7 @@ import java.io.Serializable; * @author samnyan (privateamusement@protonmail.com) */ @Entity(name = "ChuniUserMap") -@Table(name = "chuni_user_map") +@Table(name = "chuni_user_map", uniqueConstraints = {@UniqueConstraint(columnNames = {"user_id", "map_id"})}) @Data @NoArgsConstructor @AllArgsConstructor @@ -43,6 +43,7 @@ public class UserMap implements Serializable { @JoinColumn(name = "user_id") private UserData user; + @Column(name = "map_id") private int mapId; private int position; diff --git a/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserMusicDetail.java b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserMusicDetail.java index 587d593f..27a1c6e4 100644 --- a/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserMusicDetail.java +++ b/src/main/java/icu/samnyan/aqua/sega/chunithm/model/userdata/UserMusicDetail.java @@ -14,7 +14,7 @@ import java.io.Serializable; * @author samnyan (privateamusement@protonmail.com) */ @Entity(name = "ChuniUserMusicDetail") -@Table(name = "chuni_user_music_detail") +@Table(name = "chuni_user_music_detail", uniqueConstraints = {@UniqueConstraint(columnNames = {"user_id", "music_id", "level"})}) @Data @NoArgsConstructor @AllArgsConstructor @@ -50,6 +50,7 @@ public class UserMusicDetail implements Serializable { @JoinColumn(name = "user_id") private UserData user; + @Column(name = "music_id") private int musicId; private int level; diff --git a/src/main/resources/db/migration/mysql/V3__fix_chuni_music_detail_constraint.sql b/src/main/resources/db/migration/mysql/V3__fix_chuni_music_detail_constraint.sql new file mode 100644 index 00000000..8398b02e --- /dev/null +++ b/src/main/resources/db/migration/mysql/V3__fix_chuni_music_detail_constraint.sql @@ -0,0 +1,21 @@ + +ALTER TABLE `chuni_user_character` + ADD UNIQUE KEY `UK_chuni_user_character` (`user_id`, `character_id`); + +ALTER TABLE `chuni_user_charge` + ADD UNIQUE KEY `UK_chuni_user_charge` (`user_id`, `charge_id`); + +ALTER TABLE `chuni_user_course` + ADD UNIQUE KEY `UK_chuni_user_course` (`user_id`, `course_id`); + +ALTER TABLE `chuni_user_duel` + ADD UNIQUE KEY `UK_chuni_user_duel` (`user_id`, `duel_id`); + +ALTER TABLE `chuni_user_item` + ADD UNIQUE KEY `UK_chuni_user_item` (`user_id`, `item_id`, `item_kind`); + +ALTER TABLE `chuni_user_map` + ADD UNIQUE KEY `UK_chuni_user_map` (`user_id`, `map_id`); + +ALTER TABLE `chuni_user_music_detail` + ADD UNIQUE KEY `UK_chuni_user_music_detail` (`user_id`, `music_id`, `level`); diff --git a/src/main/resources/db/migration/sqlite/V3__fix_chuni_music_detail_constraint.sql b/src/main/resources/db/migration/sqlite/V3__fix_chuni_music_detail_constraint.sql new file mode 100644 index 00000000..a6a23fb1 --- /dev/null +++ b/src/main/resources/db/migration/sqlite/V3__fix_chuni_music_detail_constraint.sql @@ -0,0 +1,72 @@ + +CREATE TABLE chuni_user_music_detail_new ( + 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 ( + level, + music_id, + user_id + ) +); + +INSERT INTO chuni_user_music_detail_new ( + id, + full_chain, + is_all_justice, + is_full_combo, + is_lock, + is_success, + level, + max_chain, + max_combo_count, + miss_count, + music_id, + play_count, + res_accept_count, + res_request_count, + res_success_count, + score_max, + score_rank, + user_id +) +SELECT id, + full_chain, + is_all_justice, + is_full_combo, + is_lock, + is_success, + level, + max_chain, + max_combo_count, + miss_count, + music_id, + play_count, + res_accept_count, + res_request_count, + res_success_count, + score_max, + score_rank, + user_id +FROM chuni_user_music_detail; + +ALTER TABLE chuni_user_music_detail RENAME TO bak_chuni_user_music_detail; +ALTER TABLE chuni_user_music_detail_new RENAME TO chuni_user_music_detail;