[F] Fix deleting data on import

This commit is contained in:
Azalea 2024-03-21 01:07:25 -04:00
parent 91c605ee4b
commit cc8c125934
4 changed files with 13 additions and 9 deletions

View File

@ -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<T : IGenericUserData>(name: String, userDataClass: KClass<T>) {
val musicMapping = resJson<Map<String, GenericMusicMeta>>("/meta/$name/music.json")
?.mapKeys { it.key.toInt() } ?: emptyMap()
val logger = LoggerFactory.getLogger(javaClass)
val itemMapping = resJson<Map<String, Map<String, GenericItemMeta>>>("/meta/$name/items.json") ?: emptyMap()

View File

@ -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

View File

@ -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<Mai2UserCourse> {
interface Mai2UserDataRepo : GenericUserDataRepo<Mai2UserDetail> {
fun findByCardExtId(userId: Long): Optional<Mai2UserDetail>
@Modifying
@Transactional
fun deleteByCard(card: Card)
fun deleteByCard(card: Card): Void
}
interface Mai2UserExtendRepo : UserLinked<Mai2UserExtend>

View File

@ -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()
}