mirror of
https://github.com/MewoLab/AquaDX.git
synced 2026-02-09 09:57:27 +08:00
[+] Wacca database models
This commit is contained in:
@@ -83,45 +83,6 @@ operator fun Int.minus(message: String): Nothing {
|
|||||||
val emailRegex = "^(?=.{1,64}@)[\\p{L}0-9_-]+(\\.[\\p{L}0-9_-]+)*@[^-][\\p{L}0-9-]+(\\.[\\p{L}0-9-]+)*(\\.[\\p{L}]{2,})$".toRegex()
|
val emailRegex = "^(?=.{1,64}@)[\\p{L}0-9_-]+(\\.[\\p{L}0-9_-]+)*@[^-][\\p{L}0-9-]+(\\.[\\p{L}0-9-]+)*(\\.[\\p{L}]{2,})$".toRegex()
|
||||||
fun Str.isValidEmail(): Bool = emailRegex.matches(this)
|
fun Str.isValidEmail(): Bool = emailRegex.matches(this)
|
||||||
|
|
||||||
// JSON
|
|
||||||
val ACCEPTABLE_FALSE = setOf("0", "false", "no", "off", "False", "None", "null")
|
|
||||||
val ACCEPTABLE_TRUE = setOf("1", "true", "yes", "on", "True")
|
|
||||||
val JSON_FUZZY_BOOLEAN = SimpleModule().addDeserializer(Boolean::class.java, object : JsonDeserializer<Boolean>() {
|
|
||||||
override fun deserialize(parser: JsonParser, context: DeserializationContext) = when(parser.text) {
|
|
||||||
in ACCEPTABLE_FALSE -> false
|
|
||||||
in ACCEPTABLE_TRUE -> true
|
|
||||||
else -> 400 - "Invalid boolean value ${parser.text}"
|
|
||||||
}
|
|
||||||
})
|
|
||||||
val JSON_DATETIME = SimpleModule().addDeserializer(LocalDateTime::class.java, object : JsonDeserializer<LocalDateTime>() {
|
|
||||||
override fun deserialize(parser: JsonParser, context: DeserializationContext) =
|
|
||||||
parser.text.asDateTime() ?: (400 - "Invalid date time value ${parser.text}")
|
|
||||||
})
|
|
||||||
val JACKSON = ObjectMapper().apply {
|
|
||||||
setSerializationInclusion(JsonInclude.Include.NON_NULL)
|
|
||||||
setDefaultPropertyInclusion(JsonInclude.Include.NON_NULL)
|
|
||||||
findAndRegisterModules()
|
|
||||||
registerModule(JSON_FUZZY_BOOLEAN)
|
|
||||||
registerModule(JSON_DATETIME)
|
|
||||||
configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
|
|
||||||
}
|
|
||||||
inline fun <reified T> ObjectMapper.readValue(str: Str) = readValue(str, T::class.java)
|
|
||||||
// TODO: https://stackoverflow.com/q/78197784/7346633
|
|
||||||
inline fun <reified T> Str.parseJackson() = if (contains("null")) {
|
|
||||||
val map = JACKSON.readValue<MutableMap<String, Any>>(this)
|
|
||||||
JACKSON.convertValue(map.recursiveNotNull(), T::class.java)
|
|
||||||
}
|
|
||||||
else JACKSON.readValue(this, T::class.java)
|
|
||||||
fun <T> T.toJson() = JACKSON.writeValueAsString(this)
|
|
||||||
@OptIn(ExperimentalSerializationApi::class)
|
|
||||||
val JSON = Json {
|
|
||||||
ignoreUnknownKeys = true
|
|
||||||
isLenient = true
|
|
||||||
namingStrategy = JsonNamingStrategy.SnakeCase
|
|
||||||
explicitNulls = false
|
|
||||||
coerceInputValues = true
|
|
||||||
}
|
|
||||||
inline fun <reified T> Json.parse(str: Str) = decodeFromString<T>(str)
|
|
||||||
// Global Tools
|
// Global Tools
|
||||||
val HTTP = HttpClient(CIO) {
|
val HTTP = HttpClient(CIO) {
|
||||||
install(ContentNegotiation) {
|
install(ContentNegotiation) {
|
||||||
|
|||||||
53
src/main/java/ext/Json.kt
Normal file
53
src/main/java/ext/Json.kt
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
package ext
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonInclude
|
||||||
|
import com.fasterxml.jackson.core.JsonParser
|
||||||
|
import com.fasterxml.jackson.databind.*
|
||||||
|
import com.fasterxml.jackson.databind.module.SimpleModule
|
||||||
|
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
|
||||||
|
import kotlinx.serialization.ExperimentalSerializationApi
|
||||||
|
import kotlinx.serialization.json.Json
|
||||||
|
import kotlinx.serialization.json.JsonNamingStrategy
|
||||||
|
|
||||||
|
// Jackson
|
||||||
|
val ACCEPTABLE_FALSE = setOf("0", "false", "no", "off", "False", "None", "null")
|
||||||
|
val ACCEPTABLE_TRUE = setOf("1", "true", "yes", "on", "True")
|
||||||
|
val JSON_FUZZY_BOOLEAN = SimpleModule().addDeserializer(Boolean::class.java, object : JsonDeserializer<Boolean>() {
|
||||||
|
override fun deserialize(parser: JsonParser, context: DeserializationContext) = when(parser.text) {
|
||||||
|
in ACCEPTABLE_FALSE -> false
|
||||||
|
in ACCEPTABLE_TRUE -> true
|
||||||
|
else -> 400 - "Invalid boolean value ${parser.text}"
|
||||||
|
}
|
||||||
|
})
|
||||||
|
val JSON_DATETIME = SimpleModule().addDeserializer(java.time.LocalDateTime::class.java, object : JsonDeserializer<java.time.LocalDateTime>() {
|
||||||
|
override fun deserialize(parser: JsonParser, context: DeserializationContext) =
|
||||||
|
parser.text.asDateTime() ?: (400 - "Invalid date time value ${parser.text}")
|
||||||
|
})
|
||||||
|
val JACKSON = jacksonObjectMapper().apply {
|
||||||
|
setSerializationInclusion(JsonInclude.Include.NON_NULL)
|
||||||
|
setDefaultPropertyInclusion(JsonInclude.Include.NON_NULL)
|
||||||
|
findAndRegisterModules()
|
||||||
|
registerModule(JSON_FUZZY_BOOLEAN)
|
||||||
|
registerModule(JSON_DATETIME)
|
||||||
|
configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
|
||||||
|
setPropertyNamingStrategy(PropertyNamingStrategy.LOWER_CAMEL_CASE);
|
||||||
|
}
|
||||||
|
inline fun <reified T> ObjectMapper.readValue(str: Str) = readValue(str, T::class.java)
|
||||||
|
// TODO: https://stackoverflow.com/q/78197784/7346633
|
||||||
|
inline fun <reified T> Str.parseJackson() = if (contains("null")) {
|
||||||
|
val map = JACKSON.readValue<MutableMap<String, Any>>(this)
|
||||||
|
JACKSON.convertValue(map.recursiveNotNull(), T::class.java)
|
||||||
|
}
|
||||||
|
else JACKSON.readValue(this, T::class.java)
|
||||||
|
fun <T> T.toJson() = JACKSON.writeValueAsString(this)
|
||||||
|
|
||||||
|
|
||||||
|
// KotlinX Serialization
|
||||||
|
@OptIn(ExperimentalSerializationApi::class)
|
||||||
|
val JSON = Json {
|
||||||
|
ignoreUnknownKeys = true
|
||||||
|
isLenient = true
|
||||||
|
namingStrategy = JsonNamingStrategy.SnakeCase
|
||||||
|
explicitNulls = false
|
||||||
|
coerceInputValues = true
|
||||||
|
}
|
||||||
@@ -3,9 +3,11 @@ package icu.samnyan.aqua.net.games
|
|||||||
import com.fasterxml.jackson.annotation.JsonIgnore
|
import com.fasterxml.jackson.annotation.JsonIgnore
|
||||||
import com.fasterxml.jackson.annotation.JsonInclude
|
import com.fasterxml.jackson.annotation.JsonInclude
|
||||||
import com.fasterxml.jackson.annotation.JsonProperty
|
import com.fasterxml.jackson.annotation.JsonProperty
|
||||||
|
import com.fasterxml.jackson.databind.annotation.JsonSerialize
|
||||||
import ext.JACKSON
|
import ext.JACKSON
|
||||||
import ext.JavaSerializable
|
import ext.JavaSerializable
|
||||||
import icu.samnyan.aqua.sega.general.model.Card
|
import icu.samnyan.aqua.sega.general.model.Card
|
||||||
|
import icu.samnyan.aqua.sega.util.jackson.AccessCodeSerializer
|
||||||
import jakarta.persistence.*
|
import jakarta.persistence.*
|
||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.Serializable
|
||||||
import org.springframework.data.domain.Page
|
import org.springframework.data.domain.Page
|
||||||
@@ -104,7 +106,6 @@ interface IGenericGamePlaylog {
|
|||||||
val isAllPerfect: Boolean
|
val isAllPerfect: Boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
@Serializable
|
|
||||||
@MappedSuperclass
|
@MappedSuperclass
|
||||||
open class BaseEntity(
|
open class BaseEntity(
|
||||||
@Id
|
@Id
|
||||||
@@ -115,6 +116,15 @@ open class BaseEntity(
|
|||||||
override fun toString() = JACKSON.writeValueAsString(this)
|
override fun toString() = JACKSON.writeValueAsString(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@MappedSuperclass
|
||||||
|
open class UserDataEntity : BaseEntity() {
|
||||||
|
@JsonSerialize(using = AccessCodeSerializer::class)
|
||||||
|
@JsonProperty(value = "accessCode", access = JsonProperty.Access.READ_ONLY)
|
||||||
|
@OneToOne
|
||||||
|
@JoinColumn(name = "aime_card_id", unique = true)
|
||||||
|
var card: Card? = null
|
||||||
|
}
|
||||||
|
|
||||||
@NoRepositoryBean
|
@NoRepositoryBean
|
||||||
interface GenericUserDataRepo<T : IGenericUserData> : JpaRepository<T, Long> {
|
interface GenericUserDataRepo<T : IGenericUserData> : JpaRepository<T, Long> {
|
||||||
fun findByCard(card: Card): T?
|
fun findByCard(card: Card): T?
|
||||||
|
|||||||
@@ -3,8 +3,6 @@ package icu.samnyan.aqua.sega.general.model
|
|||||||
import com.fasterxml.jackson.annotation.JsonIgnore
|
import com.fasterxml.jackson.annotation.JsonIgnore
|
||||||
import icu.samnyan.aqua.net.db.AquaNetUser
|
import icu.samnyan.aqua.net.db.AquaNetUser
|
||||||
import jakarta.persistence.*
|
import jakarta.persistence.*
|
||||||
import java.io.Serial
|
|
||||||
import java.io.Serializable
|
|
||||||
import java.time.LocalDateTime
|
import java.time.LocalDateTime
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -43,12 +41,7 @@ class Card(
|
|||||||
// Whether the card is a ghost card
|
// Whether the card is a ghost card
|
||||||
@Column(name = "is_ghost")
|
@Column(name = "is_ghost")
|
||||||
var isGhost: Boolean = false,
|
var isGhost: Boolean = false,
|
||||||
): Serializable {
|
) {
|
||||||
companion object {
|
|
||||||
@Serial
|
|
||||||
private val serialVersionUID = 1L
|
|
||||||
}
|
|
||||||
|
|
||||||
@Suppress("unused") // Used by serialization
|
@Suppress("unused") // Used by serialization
|
||||||
val isLinked get() = aquaUser != null
|
val isLinked get() = aquaUser != null
|
||||||
}
|
}
|
||||||
|
|||||||
30
src/main/java/icu/samnyan/aqua/sega/wacca/model/db/Repos.kt
Normal file
30
src/main/java/icu/samnyan/aqua/sega/wacca/model/db/Repos.kt
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
package icu.samnyan.aqua.sega.wacca.model.db
|
||||||
|
|
||||||
|
import jakarta.transaction.Transactional
|
||||||
|
import org.springframework.data.jpa.repository.JpaRepository
|
||||||
|
import org.springframework.data.repository.NoRepositoryBean
|
||||||
|
|
||||||
|
interface WcUserRepo : JpaRepository<WaccaUser, Long> {
|
||||||
|
fun findByCardExtId(extId: Long): WaccaUser?
|
||||||
|
}
|
||||||
|
|
||||||
|
@NoRepositoryBean
|
||||||
|
interface IWaccaUserLinked<T> : JpaRepository<T, Long> {
|
||||||
|
fun findByUser(user: WaccaUser): List<T>
|
||||||
|
fun findByUserCardExtId(userId: Long): List<T>
|
||||||
|
@Transactional
|
||||||
|
fun deleteByUser(user: WaccaUser)
|
||||||
|
}
|
||||||
|
|
||||||
|
interface WcUserOptionRepo : IWaccaUserLinked<WcUserOption>
|
||||||
|
interface WcUserBingoRepo : IWaccaUserLinked<WcUserBingo>
|
||||||
|
interface WcUserFriendRepo : IWaccaUserLinked<WcUserFriend>
|
||||||
|
interface WcUserFavoriteSongRepo : IWaccaUserLinked<WcUserFavoriteSong>
|
||||||
|
interface WcUserGateRepo : IWaccaUserLinked<WcUserGate>
|
||||||
|
interface WcUserItemRepo : IWaccaUserLinked<WcUserItem>
|
||||||
|
interface WcUserTicketRepo : IWaccaUserLinked<WcUserTicket>
|
||||||
|
interface WcUserSongUnlockRepo : IWaccaUserLinked<WcUserSongUnlock>
|
||||||
|
interface WcUserTrophyRepo : IWaccaUserLinked<WcUserTrophy>
|
||||||
|
interface WcUserBestScoreRepo : IWaccaUserLinked<WcUserScore>
|
||||||
|
interface WcUserPlayLogRepo : IWaccaUserLinked<WcUserPlayLog>
|
||||||
|
interface WcUserStageUpRepo : IWaccaUserLinked<WcUserStageUp>
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
package icu.samnyan.aqua.sega.wacca.model.db
|
||||||
|
|
||||||
|
import icu.samnyan.aqua.net.games.BaseEntity
|
||||||
|
import icu.samnyan.aqua.sega.general.model.Card
|
||||||
|
import jakarta.persistence.Column
|
||||||
|
import jakarta.persistence.Entity
|
||||||
|
import jakarta.persistence.JoinColumn
|
||||||
|
import jakarta.persistence.OneToOne
|
||||||
|
import jakarta.persistence.Table
|
||||||
|
|
||||||
|
/**
|
||||||
|
* General user information
|
||||||
|
*/
|
||||||
|
@Entity @Table(name = "wacca_user")
|
||||||
|
class WaccaUser : BaseEntity() {
|
||||||
|
@OneToOne
|
||||||
|
@JoinColumn(name = "aime_card_id", unique = true)
|
||||||
|
var card: Card? = null
|
||||||
|
|
||||||
|
@Column(length = 8)
|
||||||
|
var username = ""
|
||||||
|
|
||||||
|
var xp = 0
|
||||||
|
var wp = 0
|
||||||
|
var wpTotal = 0
|
||||||
|
var wpSpent = 0
|
||||||
|
var danType = 0
|
||||||
|
var danLevel = 0
|
||||||
|
var title0 = 0
|
||||||
|
var title1 = 0
|
||||||
|
var title2 = 0
|
||||||
|
var rating = 0
|
||||||
|
var vipExpireTime: String? = null
|
||||||
|
var alwaysVip = false
|
||||||
|
var loginCount = 0
|
||||||
|
var loginCountConsec = 0
|
||||||
|
var loginCountDays = 0
|
||||||
|
var loginCountDaysConsec = 0
|
||||||
|
var loginCountToday = 0
|
||||||
|
var playcountSingle = 0
|
||||||
|
var playcountMultiVs = 0
|
||||||
|
var playcountMultiCoop = 0
|
||||||
|
var playcountStageup = 0
|
||||||
|
var playcountTimeFree = 0
|
||||||
|
var friendView1 = 0
|
||||||
|
var friendView2 = 0
|
||||||
|
var friendView3 = 0
|
||||||
|
@Column(length = 50)
|
||||||
|
var lastGameVer = ""
|
||||||
|
var lastSongId = 0
|
||||||
|
var lastSongDifficulty = 0
|
||||||
|
var lastFolderOrder = 0
|
||||||
|
var lastFolderId = 0
|
||||||
|
var lastSongOrder = 0
|
||||||
|
var lastLoginDate: String? = null
|
||||||
|
var gateTutorialFlags: String? = null
|
||||||
|
}
|
||||||
@@ -0,0 +1,147 @@
|
|||||||
|
package icu.samnyan.aqua.sega.wacca.model.db
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonIgnore
|
||||||
|
import icu.samnyan.aqua.net.games.BaseEntity
|
||||||
|
import jakarta.persistence.*
|
||||||
|
|
||||||
|
typealias UC = UniqueConstraint
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Base entity for all wacca user-related entities
|
||||||
|
*/
|
||||||
|
@MappedSuperclass
|
||||||
|
open class WaccaUserEntity : BaseEntity() {
|
||||||
|
@JsonIgnore
|
||||||
|
@ManyToOne
|
||||||
|
@JoinColumn(name = "user_id")
|
||||||
|
open var user: WaccaUser = WaccaUser()
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* In-game option key-value storage
|
||||||
|
*/
|
||||||
|
@Entity @Table(name = "wacca_user_option", uniqueConstraints = [UC("", ["user_id", "opt_id"])])
|
||||||
|
class WcUserOption : WaccaUserEntity() {
|
||||||
|
var optId = 0
|
||||||
|
var value = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
@Entity @Table(name = "wacca_user_bingo", uniqueConstraints = [UC("", ["user_id", "page_number"])])
|
||||||
|
class WcUserBingo : WaccaUserEntity() {
|
||||||
|
var pageNumber = 0
|
||||||
|
var pageProgress = ""
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The user here is the sender of the friend request.
|
||||||
|
*/
|
||||||
|
@Entity @Table(name = "wacca_friend", uniqueConstraints = [UC("", ["user_id", "with"])])
|
||||||
|
class WcUserFriend : WaccaUserEntity() {
|
||||||
|
@ManyToOne @JoinColumn(name = "profile_reciever")
|
||||||
|
var with: WaccaUser = WaccaUser()
|
||||||
|
var isAccepted = false
|
||||||
|
}
|
||||||
|
|
||||||
|
@Entity @Table(name = "wacca_user_favorite_song", uniqueConstraints = [UC("", ["user_id", "song_id"])])
|
||||||
|
class WcUserFavoriteSong : WaccaUserEntity() {
|
||||||
|
// TODO: Make this into a list instead?
|
||||||
|
var songId = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
@Entity @Table(name = "wacca_user_gate", uniqueConstraints = [UC("", ["user_id", "gate_id"])])
|
||||||
|
class WcUserGate : WaccaUserEntity() {
|
||||||
|
var gateId = 0
|
||||||
|
var page = 0
|
||||||
|
var progress = 0
|
||||||
|
var loops = 0
|
||||||
|
var missionFlag = 0
|
||||||
|
var totalPoints = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
@Entity @Table(name = "wacca_user_item", uniqueConstraints = [UC("", ["user_id", "item_id", "type"])])
|
||||||
|
class WcUserItem : WaccaUserEntity() {
|
||||||
|
var itemId = 0
|
||||||
|
var type = 0
|
||||||
|
var acquireDate = ""
|
||||||
|
var useCount = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
@Entity @Table(name = "wacca_user_ticket", uniqueConstraints = [UC("", ["user_id", "ticket_id"])])
|
||||||
|
class WcUserTicket : WaccaUserEntity() {
|
||||||
|
var ticketId = 0
|
||||||
|
var acquireDate = ""
|
||||||
|
var expireDate = ""
|
||||||
|
}
|
||||||
|
|
||||||
|
@Entity @Table(name = "wacca_user_song_unlock", uniqueConstraints = [UC("", ["user_id", "song_id"])])
|
||||||
|
class WcUserSongUnlock : WaccaUserEntity() {
|
||||||
|
var songId = 0
|
||||||
|
var highestDifficulty = 0
|
||||||
|
var acquireDate = ""
|
||||||
|
}
|
||||||
|
|
||||||
|
@Entity @Table(name = "wacca_user_trophy", uniqueConstraints = [UC("", ["user_id", "trophy_id", "season"])])
|
||||||
|
class WcUserTrophy : WaccaUserEntity() {
|
||||||
|
var trophyId = 0
|
||||||
|
var season = 0
|
||||||
|
var progress = 0
|
||||||
|
var badgeType = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
@Entity @Table(name = "wacca_user_score", uniqueConstraints = [UC("", ["user_id", "song_id", "chart_id"])])
|
||||||
|
class WcUserScore : WaccaUserEntity() {
|
||||||
|
var songId = 0
|
||||||
|
var chartId = 0
|
||||||
|
var score = 0
|
||||||
|
var playCt = 0
|
||||||
|
var clearCt = 0
|
||||||
|
var misslessCt = 0
|
||||||
|
var fullcomboCt = 0
|
||||||
|
var allmarvCt = 0
|
||||||
|
var gradeDCt = 0
|
||||||
|
var gradeCCt = 0
|
||||||
|
var gradeBCt = 0
|
||||||
|
var gradeACt = 0
|
||||||
|
var gradeAACt = 0
|
||||||
|
var gradeAAACt = 0
|
||||||
|
var gradeSCt = 0
|
||||||
|
var gradeSSCt = 0
|
||||||
|
var gradeSSSCt = 0
|
||||||
|
var gradeMasterCt = 0
|
||||||
|
var gradeSpCt = 0
|
||||||
|
var gradeSspCt = 0
|
||||||
|
var gradeSsspCt = 0
|
||||||
|
var bestCombo = 0
|
||||||
|
var lowestMissCt = 0
|
||||||
|
var rating = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
@Entity @Table(name = "wacca_user_playlog", uniqueConstraints = [UC("", ["user_id", "song_id", "chart_id", "date_scored"])])
|
||||||
|
class WcUserPlayLog : WaccaUserEntity() {
|
||||||
|
var songId = 0
|
||||||
|
var chartId = 0
|
||||||
|
var score = 0
|
||||||
|
var clear = 0
|
||||||
|
var grade = 0
|
||||||
|
var maxCombo = 0
|
||||||
|
var marvCt = 0
|
||||||
|
var greatCt = 0
|
||||||
|
var goodCt = 0
|
||||||
|
var missCt = 0
|
||||||
|
var fastCt = 0
|
||||||
|
var lateCt = 0
|
||||||
|
var season = 0
|
||||||
|
var dateScored = ""
|
||||||
|
}
|
||||||
|
|
||||||
|
@Entity @Table(name = "wacca_user_stageup", uniqueConstraints = [UC("", ["user_id", "stage_id"])])
|
||||||
|
class WcUserStageUp : WaccaUserEntity() {
|
||||||
|
var version = 0
|
||||||
|
var stageId = 0
|
||||||
|
var clearStatus = 0
|
||||||
|
var clearSongCt = 0
|
||||||
|
var song1Score = 0
|
||||||
|
var song2Score = 0
|
||||||
|
var song3Score = 0
|
||||||
|
var playCt = 0
|
||||||
|
}
|
||||||
211
src/main/resources/db/migration/mariadb/V1000_11__wacca_init.sql
Normal file
211
src/main/resources/db/migration/mariadb/V1000_11__wacca_init.sql
Normal file
@@ -0,0 +1,211 @@
|
|||||||
|
CREATE TABLE wacca_user
|
||||||
|
(
|
||||||
|
id BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||||
|
aime_card_id BIGINT NOT NULL,
|
||||||
|
username VARCHAR(8) NOT NULL,
|
||||||
|
xp INT NOT NULL,
|
||||||
|
wp INT NOT NULL,
|
||||||
|
wp_total INT NOT NULL,
|
||||||
|
wp_spent INT NOT NULL,
|
||||||
|
dan_type INT NOT NULL,
|
||||||
|
dan_level INT NOT NULL,
|
||||||
|
title0 INT NOT NULL,
|
||||||
|
title1 INT NOT NULL,
|
||||||
|
title2 INT NOT NULL,
|
||||||
|
rating INT NOT NULL,
|
||||||
|
vip_expire_time VARCHAR(255) NULL,
|
||||||
|
always_vip BIT(1) NOT NULL,
|
||||||
|
login_count INT NOT NULL,
|
||||||
|
login_count_consec INT NOT NULL,
|
||||||
|
login_count_days INT NOT NULL,
|
||||||
|
login_count_days_consec INT NOT NULL,
|
||||||
|
login_count_today INT NOT NULL,
|
||||||
|
playcount_single INT NOT NULL,
|
||||||
|
playcount_multi_vs INT NOT NULL,
|
||||||
|
playcount_multi_coop INT NOT NULL,
|
||||||
|
playcount_stageup INT NOT NULL,
|
||||||
|
playcount_time_free INT NOT NULL,
|
||||||
|
friend_view1 INT NOT NULL,
|
||||||
|
friend_view2 INT NOT NULL,
|
||||||
|
friend_view3 INT NOT NULL,
|
||||||
|
last_game_ver VARCHAR(50) NULL,
|
||||||
|
last_song_id INT NOT NULL,
|
||||||
|
last_song_difficulty INT NOT NULL,
|
||||||
|
last_folder_order INT NOT NULL,
|
||||||
|
last_folder_id INT NOT NULL,
|
||||||
|
last_song_order INT NOT NULL,
|
||||||
|
last_login_date VARCHAR(255) NULL,
|
||||||
|
gate_tutorial_flags VARCHAR(255) NULL,
|
||||||
|
CONSTRAINT wacca_user_detail_unique UNIQUE (aime_card_id),
|
||||||
|
CONSTRAINT wacca_user_detail_fk FOREIGN KEY (aime_card_id) REFERENCES main.sega_card (id)
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE wacca_user_bingo
|
||||||
|
(
|
||||||
|
id BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||||
|
user_id BIGINT NOT NULL,
|
||||||
|
page_number INT NOT NULL,
|
||||||
|
page_progress VARCHAR(255) NULL,
|
||||||
|
CONSTRAINT wacca_user_bingo_unique UNIQUE (user_id, page_number),
|
||||||
|
CONSTRAINT fku_wacca_user_bingo FOREIGN KEY (user_id) REFERENCES wacca_user (id) ON DELETE CASCADE ON UPDATE CASCADE
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE wacca_user_favorite_song
|
||||||
|
(
|
||||||
|
id BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||||
|
user_id BIGINT NOT NULL,
|
||||||
|
song_id INT NOT NULL,
|
||||||
|
CONSTRAINT wacca_user_favorite_song_unique UNIQUE (user_id, song_id),
|
||||||
|
CONSTRAINT fku_wacca_user_favorite_song FOREIGN KEY (user_id) REFERENCES wacca_user (id) ON DELETE CASCADE ON UPDATE CASCADE
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE wacca_friend
|
||||||
|
(
|
||||||
|
id BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||||
|
user_id BIGINT NOT NULL,
|
||||||
|
`with` BIGINT NOT NULL,
|
||||||
|
is_accepted BIT(1) NOT NULL,
|
||||||
|
CONSTRAINT wacca_friend_unique UNIQUE (user_id, `with`),
|
||||||
|
CONSTRAINT fku_wacca_friend FOREIGN KEY (user_id) REFERENCES wacca_user (id) ON DELETE CASCADE ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT fku_wacca_friend_2 FOREIGN KEY (`with`) REFERENCES wacca_user (id) ON DELETE CASCADE ON UPDATE CASCADE
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE wacca_user_gate
|
||||||
|
(
|
||||||
|
id BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||||
|
user_id BIGINT NULL,
|
||||||
|
gate_id INT NOT NULL,
|
||||||
|
page INT NOT NULL,
|
||||||
|
progress INT NOT NULL,
|
||||||
|
loops INT NOT NULL,
|
||||||
|
mission_flag INT NOT NULL,
|
||||||
|
total_points INT NOT NULL,
|
||||||
|
CONSTRAINT wacca_user_gate_unique UNIQUE (user_id, gate_id),
|
||||||
|
CONSTRAINT fku_wacca_user_gate FOREIGN KEY (user_id) REFERENCES wacca_user (id) ON DELETE CASCADE ON UPDATE CASCADE
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE wacca_user_item
|
||||||
|
(
|
||||||
|
id BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||||
|
user_id BIGINT NULL,
|
||||||
|
item_id INT NOT NULL,
|
||||||
|
type INT NOT NULL,
|
||||||
|
acquire_date VARCHAR(255) NULL,
|
||||||
|
use_count INT NOT NULL,
|
||||||
|
CONSTRAINT wacca_user_item_unique UNIQUE (user_id, item_id),
|
||||||
|
CONSTRAINT fku_wacca_user_item FOREIGN KEY (user_id) REFERENCES wacca_user (id) ON DELETE CASCADE ON UPDATE CASCADE
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE wacca_user_score
|
||||||
|
(
|
||||||
|
id BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||||
|
user_id BIGINT NULL,
|
||||||
|
song_id INT NOT NULL,
|
||||||
|
chart_id INT NOT NULL,
|
||||||
|
score INT NOT NULL,
|
||||||
|
play_ct INT NOT NULL,
|
||||||
|
clear_ct INT NOT NULL,
|
||||||
|
missless_ct INT NOT NULL,
|
||||||
|
fullcombo_ct INT NOT NULL,
|
||||||
|
allmarv_ct INT NOT NULL,
|
||||||
|
gradedct INT NOT NULL,
|
||||||
|
gradecct INT NOT NULL,
|
||||||
|
gradebct INT NOT NULL,
|
||||||
|
gradeact INT NOT NULL,
|
||||||
|
gradeaact INT NOT NULL,
|
||||||
|
gradeaaact INT NOT NULL,
|
||||||
|
gradesct INT NOT NULL,
|
||||||
|
gradessct INT NOT NULL,
|
||||||
|
gradesssct INT NOT NULL,
|
||||||
|
grade_master_ct INT NOT NULL,
|
||||||
|
grade_sp_ct INT NOT NULL,
|
||||||
|
grade_ssp_ct INT NOT NULL,
|
||||||
|
grade_sssp_ct INT NOT NULL,
|
||||||
|
best_combo INT NOT NULL,
|
||||||
|
lowest_miss_ct INT NOT NULL,
|
||||||
|
rating INT NOT NULL,
|
||||||
|
CONSTRAINT wacca_user_score_unique UNIQUE (user_id, song_id, chart_id),
|
||||||
|
CONSTRAINT fku_wacca_user_score FOREIGN KEY (user_id) REFERENCES wacca_user (id) ON DELETE CASCADE ON UPDATE CASCADE
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE wacca_user_playlog
|
||||||
|
(
|
||||||
|
id BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||||
|
user_id BIGINT NULL,
|
||||||
|
song_id INT NOT NULL,
|
||||||
|
chart_id INT NOT NULL,
|
||||||
|
score INT NOT NULL,
|
||||||
|
clear INT NOT NULL,
|
||||||
|
grade INT NOT NULL,
|
||||||
|
max_combo INT NOT NULL,
|
||||||
|
marv_ct INT NOT NULL,
|
||||||
|
great_ct INT NOT NULL,
|
||||||
|
good_ct INT NOT NULL,
|
||||||
|
miss_ct INT NOT NULL,
|
||||||
|
fast_ct INT NOT NULL,
|
||||||
|
late_ct INT NOT NULL,
|
||||||
|
season INT NOT NULL,
|
||||||
|
date_scored VARCHAR(255) NULL,
|
||||||
|
CONSTRAINT wacca_user_playlog_unique UNIQUE (user_id, song_id, chart_id),
|
||||||
|
CONSTRAINT fku_wacca_user_playlog FOREIGN KEY (user_id) REFERENCES wacca_user (id) ON DELETE CASCADE ON UPDATE CASCADE
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE wacca_user_stageup
|
||||||
|
(
|
||||||
|
id BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||||
|
user_id BIGINT NULL,
|
||||||
|
version INT NOT NULL,
|
||||||
|
stage_id INT NOT NULL,
|
||||||
|
clear_status INT NOT NULL,
|
||||||
|
clear_song_ct INT NOT NULL,
|
||||||
|
song1score INT NOT NULL,
|
||||||
|
song2score INT NOT NULL,
|
||||||
|
song3score INT NOT NULL,
|
||||||
|
play_ct INT NOT NULL,
|
||||||
|
CONSTRAINT wacca_user_stageup_unique UNIQUE (user_id, version, stage_id),
|
||||||
|
CONSTRAINT fku_wacca_user_stageup FOREIGN KEY (user_id) REFERENCES wacca_user (id) ON DELETE CASCADE ON UPDATE CASCADE
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE wacca_user_song_unlock
|
||||||
|
(
|
||||||
|
id BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||||
|
user_id BIGINT NULL,
|
||||||
|
song_id INT NOT NULL,
|
||||||
|
highest_difficulty INT NOT NULL,
|
||||||
|
acquire_date VARCHAR(255) NULL,
|
||||||
|
CONSTRAINT wacca_user_song_unlock_unique UNIQUE (user_id, song_id),
|
||||||
|
CONSTRAINT fku_wacca_user_song_unlock FOREIGN KEY (user_id) REFERENCES wacca_user (id) ON DELETE CASCADE ON UPDATE CASCADE
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE wacca_user_ticket
|
||||||
|
(
|
||||||
|
id BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||||
|
user_id BIGINT NULL,
|
||||||
|
ticket_id INT NOT NULL,
|
||||||
|
acquire_date VARCHAR(255) NULL,
|
||||||
|
expire_date VARCHAR(255) NULL,
|
||||||
|
CONSTRAINT wacca_user_ticket_unique UNIQUE (user_id, ticket_id),
|
||||||
|
CONSTRAINT fku_wacca_user_ticket FOREIGN KEY (user_id) REFERENCES wacca_user (id) ON DELETE CASCADE ON UPDATE CASCADE
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE wacca_user_trophy
|
||||||
|
(
|
||||||
|
id BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||||
|
user_id BIGINT NULL,
|
||||||
|
trophy_id INT NOT NULL,
|
||||||
|
season INT NOT NULL,
|
||||||
|
progress INT NOT NULL,
|
||||||
|
badge_type INT NOT NULL,
|
||||||
|
CONSTRAINT wacca_user_trophy_unique UNIQUE (user_id, trophy_id, season),
|
||||||
|
CONSTRAINT fku_wacca_user_trophy FOREIGN KEY (user_id) REFERENCES wacca_user (id) ON DELETE CASCADE ON UPDATE CASCADE
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE wacca_user_option
|
||||||
|
(
|
||||||
|
id BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY,
|
||||||
|
user_id BIGINT NULL,
|
||||||
|
opt_id INT NOT NULL,
|
||||||
|
value INT NOT NULL,
|
||||||
|
CONSTRAINT wacca_user_option_unique UNIQUE (user_id, opt_id),
|
||||||
|
CONSTRAINT fku_wacca_user_option FOREIGN KEY (user_id) REFERENCES wacca_user (id) ON DELETE CASCADE ON UPDATE CASCADE
|
||||||
|
);
|
||||||
Reference in New Issue
Block a user