fix: ongeki adventure map progress dedupe, store. and query by eventid+mapid

This commit is contained in:
asterisk727
2026-09-05 14:39:23 +09:00
parent ced50a0afe
commit a95a1efb0d
5 changed files with 32 additions and 4 deletions
@@ -162,7 +162,10 @@ interface OgkUserGachaRepo : OngekiUserLinked<UserGacha> {
}
// Re:Fresh
interface OgkUserEventMapRepo : OngekiUserLinked<UserEventMap>
interface OgkUserEventMapRepo : OngekiUserLinked<UserEventMap> {
fun findByUserAndEventIdAndMapId(user: UserData, eventId: Int, mapId: Int): UserEventMap?
fun findByUser_Card_ExtIdAndEventIdAndMapId(extId: Long, eventId: Int, mapId: Int): UserEventMap?
}
interface OgkUserSkinRepo : OngekiUserLinked<UserSkin>
@@ -74,7 +74,9 @@ fun OngekiController.initUpsertAll() {
// UserEventMap
userEventMap?.let {
db.eventMap.save(it.apply {
id = db.eventMap.findSingleByUser(u)?.id ?: 0 }) }
id = db.eventMap.findByUserAndEventIdAndMapId(u, it.eventId, it.mapId)?.id ?: 0
})
}
// UserPlaylogList
userPlaylogList?.let { db.playlog.saveAll(it) }
@@ -17,7 +17,14 @@ fun OngekiController.initUser() {
"GetUserData" { mapOf("userId" to uid, "userData" to db.data.findByCard_ExtId(uid)) }
"GetUserOption" { mapOf("userId" to uid, "userOption" to db.option.findSingleByUser_Card_ExtId(uid)) }
"GetUserEventMap" { mapOf("userId" to uid, "userEventMap" to db.eventMap.findSingleByUser_Card_ExtId(uid)) }
"GetUserEventMap" {
val eventId = parsing { data["eventId"]!!.int }
val mapId = parsing { data["mapId"]!!.int }
mapOf(
"userId" to uid,
"userEventMap" to db.eventMap.findByUser_Card_ExtIdAndEventIdAndMapId(uid, eventId, mapId)
)
}
"GetUserTechEvent".unpaged { db.techEvent.findByUser_Card_ExtId(uid) }
"GetUserBoss".unpaged { db.boss.findByUser_Card_ExtId(uid) }
@@ -498,7 +498,10 @@ class UserTrainingRoom : OngekiUserEntity() {
// Re:Fresh
@Entity(name = "OngekiUserEventMap")
@Table(name = "ongeki_user_event_map")
@Table(
name = "ongeki_user_event_map",
uniqueConstraints = [UniqueConstraint(columnNames = ["user_id", "event_id", "map_id"])]
)
class UserEventMap : OngekiUserEntity() {
var eventId = 0
var mapId = 0
@@ -0,0 +1,13 @@
-- dedupe before adding new constraint just in case
DELETE FROM ongeki_user_event_map
WHERE id NOT IN (
SELECT id
FROM (
SELECT MAX(id) AS id
FROM ongeki_user_event_map
GROUP BY user_id, event_id, map_id
) AS rows_to_keep
);
ALTER TABLE ongeki_user_event_map
ADD UNIQUE KEY uniq_ongeki_user_event_map (user_id, event_id, map_id);