diff --git a/src/main/java/icu/samnyan/aqua/net/games/GameApiController.kt b/src/main/java/icu/samnyan/aqua/net/games/GameApiController.kt index 2b1160a4..cb91b34f 100644 --- a/src/main/java/icu/samnyan/aqua/net/games/GameApiController.kt +++ b/src/main/java/icu/samnyan/aqua/net/games/GameApiController.kt @@ -4,12 +4,14 @@ import ext.* import icu.samnyan.aqua.net.db.AquaUserServices import icu.samnyan.aqua.net.utils.SUCCESS import icu.samnyan.aqua.sega.general.model.Card +import org.slf4j.LoggerFactory import kotlin.jvm.optionals.getOrNull import kotlin.reflect.KClass abstract class GameApiController(name: String, userDataClass: KClass) { val musicMapping = resJson>("/meta/$name/music.json") ?.mapKeys { it.key.toInt() } ?: emptyMap() + val logger = LoggerFactory.getLogger(javaClass) val itemMapping = resJson>>("/meta/$name/items.json") ?: emptyMap() diff --git a/src/main/java/icu/samnyan/aqua/net/games/mai2/Maimai2.kt b/src/main/java/icu/samnyan/aqua/net/games/mai2/Maimai2.kt index 6122966e..741d22f1 100644 --- a/src/main/java/icu/samnyan/aqua/net/games/mai2/Maimai2.kt +++ b/src/main/java/icu/samnyan/aqua/net/games/mai2/Maimai2.kt @@ -102,18 +102,18 @@ class Maimai2( export.userData.card = u.ghostCard // Check existing data - val gu = repos.userData.findByCard(u.ghostCard)?.also { gu -> + repos.userData.findByCard(u.ghostCard)?.also { gu -> // Store a backup of the old data val fl = "mai2-backup-${u.auId}-${LocalDateTime.now().urlSafeStr()}.json" (Path(netProps.importBackupPath) / fl).writeText(export(u).toJson()) + + // Delete the old data (After migration v1000.7, all user-linked entities have ON DELETE CASCADE) + logger.info("Mai2 Import: Deleting old data for user ${u.auId}") + repos.userData.delete(gu) + repos.userData.flush() } trans.execute { - gu?.let { - // Delete the old data (After migration v1000.7, all user-linked entities have ON DELETE CASCADE) - repos.userData.deleteByCard(u.ghostCard) - } - // Insert new data val nu = repos.userData.save(export.userData) // Set user fields diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/model/Repos.kt b/src/main/java/icu/samnyan/aqua/sega/maimai2/model/Repos.kt index 8259a804..66b55356 100644 --- a/src/main/java/icu/samnyan/aqua/sega/maimai2/model/Repos.kt +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/model/Repos.kt @@ -9,6 +9,7 @@ import icu.samnyan.aqua.sega.maimai2.model.userdata.* import org.springframework.data.domain.Page import org.springframework.data.domain.Pageable import org.springframework.data.jpa.repository.JpaRepository +import org.springframework.data.jpa.repository.Modifying import org.springframework.data.repository.NoRepositoryBean import org.springframework.stereotype.Component import org.springframework.transaction.annotation.Transactional @@ -50,8 +51,9 @@ interface Mai2UserCourseRepo : UserLinked { interface Mai2UserDataRepo : GenericUserDataRepo { fun findByCardExtId(userId: Long): Optional + @Modifying @Transactional - fun deleteByCard(card: Card) + fun deleteByCard(card: Card): Void } interface Mai2UserExtendRepo : UserLinked diff --git a/src/main/java/icu/samnyan/aqua/sega/maimai2/model/userdata/UserEntities.kt b/src/main/java/icu/samnyan/aqua/sega/maimai2/model/userdata/UserEntities.kt index bcdd0854..91fee082 100644 --- a/src/main/java/icu/samnyan/aqua/sega/maimai2/model/userdata/UserEntities.kt +++ b/src/main/java/icu/samnyan/aqua/sega/maimai2/model/userdata/UserEntities.kt @@ -17,9 +17,9 @@ import lombok.NoArgsConstructor @MappedSuperclass open class Mai2UserEntity : BaseEntity() { @JsonIgnore - @ManyToOne(cascade = [CascadeType.ALL]) + @ManyToOne @JoinColumn(name = "user_id") - open var user: Mai2UserDetail? = null + open var user: Mai2UserDetail = Mai2UserDetail() }