[O] Unify item interface

pull/29/head
Azalea 2024-03-28 05:24:05 -04:00
parent 8a1d2383b8
commit 571591f021
4 changed files with 73 additions and 34 deletions

View File

@ -46,7 +46,7 @@ enum class WaccaItemType(val type: Int) {
TOUCH_EFFECT(17);
operator fun invoke() = type
operator fun invoke(u: WaccaUser, id: Int) = WcUserItem(u, id, this)
operator fun invoke(u: WaccaUser, id: Int) = WcUserItem(id, this()).apply { user = u }
}
enum class WaccaOptionType(val id: Int, val default: Int) {

View File

@ -23,9 +23,6 @@ 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>
@ -39,9 +36,6 @@ class WaccaRepos(
val favoriteSong: WcUserFavoriteSongRepo,
val gate: WcUserGateRepo,
val item: WcUserItemRepo,
val ticket: WcUserTicketRepo,
val songUnlock: WcUserSongUnlockRepo,
val trophy: WcUserTrophyRepo,
val bestScore: WcUserBestScoreRepo,
val playLog: WcUserPlayLogRepo,
val stageUp: WcUserStageUpRepo

View File

@ -1,8 +1,10 @@
package icu.samnyan.aqua.sega.wacca.model.db
import com.fasterxml.jackson.annotation.JsonIgnore
import ext.ls
import icu.samnyan.aqua.net.games.BaseEntity
import icu.samnyan.aqua.sega.wacca.WaccaItemType
import icu.samnyan.aqua.sega.wacca.WaccaItemType.*
import jakarta.persistence.*
typealias UC = UniqueConstraint
@ -38,7 +40,7 @@ class WcUserBingo : WaccaUserEntity() {
*/
@Entity @Table(name = "wacca_friend", uniqueConstraints = [UC("", ["user_id", "with"])])
class WcUserFriend : WaccaUserEntity() {
@ManyToOne @JoinColumn(name = "profile_reciever")
@ManyToOne @JoinColumn(name = "with")
var with: WaccaUser = WaccaUser()
var isAccepted = false
}
@ -55,40 +57,37 @@ class WcUserGate : WaccaUserEntity() {
var page = 0
var progress = 0
var loops = 0
@Temporal(TemporalType.TIMESTAMP)
var lastUsed = 0
var missionFlag = 0
var totalPoints = 0
fun ls() = ls(gateId, page, progress, loops, lastUsed, missionFlag)
}
@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
class WcUserItem(
var type: Int = 0,
constructor(u: WaccaUser, id: Int, typ: WaccaItemType) : this() { user = u; itemId = id; type = typ() }
}
// Item prop represents different things based on the item type
var itemId: Int = 0,
var p1: Long = 0L,
var p2: Long = 0L,
var p3: Long = 0L
) : WaccaUserEntity() {
fun ls() = when (type) {
MUSIC_UNLOCK() -> ls(itemId, p1, p2, p3) // songId, diff, acquireDate, unlockDate
ICON() -> ls(itemId, type, p1, p2) // id, type, uses, acquiredDate
TROPHY() -> ls(itemId, p1, p2, p3) // id, season, progress, badgeType
SKILL() -> ls(itemId, p1, p2, p3) // skillType, level, flag, badge
TICKET() -> ls(id, itemId, p1) // userTicketId, ticketId, expire
NAVIGATOR() -> ls(itemId, type, p1, p2, p3) // id, type, acquiredDate, uses, usesToday
@Entity @Table(name = "wacca_user_ticket", uniqueConstraints = [UC("", ["user_id", "ticket_id"])])
class WcUserTicket : WaccaUserEntity() {
var ticketId = 0
var acquireDate = ""
var expireDate = ""
}
// Generic: title, note colors, note sounds, plates, touch effects
else -> ls(itemId, type, p1)
}
@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
infix fun isType(t: WaccaItemType) = type == t()
}
@Entity @Table(name = "wacca_user_score", uniqueConstraints = [UC("", ["user_id", "song_id", "chart_id"])])

View File

@ -0,0 +1,46 @@
ALTER TABLE wacca_user_song_unlock
DROP FOREIGN KEY fku_wacca_user_song_unlock;
ALTER TABLE wacca_user_ticket
DROP FOREIGN KEY fku_wacca_user_ticket;
ALTER TABLE wacca_user_trophy
DROP FOREIGN KEY fku_wacca_user_trophy;
DROP TABLE maimai2_game_ticket;
DROP TABLE wacca_user_song_unlock;
DROP TABLE wacca_user_ticket;
DROP TABLE wacca_user_trophy;
ALTER TABLE wacca_user_gate
ADD last_used datetime NOT NULL;
ALTER TABLE wacca_user_item
ADD p1 BIGINT NOT NULL;
ALTER TABLE wacca_user_item
ADD p2 BIGINT NOT NULL;
ALTER TABLE wacca_user_item
ADD p3 BIGINT NOT NULL;
ALTER TABLE wacca_user_item
DROP COLUMN acquire_date;
ALTER TABLE wacca_user_item
DROP COLUMN use_count;
ALTER TABLE wacca_user
DROP COLUMN last_login_date;
ALTER TABLE wacca_user
DROP COLUMN vip_expire_time;
ALTER TABLE wacca_user
ADD last_login_date time NOT NULL;
ALTER TABLE wacca_user
ADD vip_expire_time time NOT NULL;