mirror of
https://github.com/Suwayomi/Suwayomi-Server.git
synced 2026-06-30 09:24:34 -05:00
Add mutation to bind existing track record (#2045)
Makes it possible to copy a bound track record to another manga. This is necessary during a migration to prevent spamming the actual tracker and causing 429 errors closes #2033
This commit is contained in:
@@ -148,6 +148,36 @@ class TrackMutation {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
data class BindTrackRecordInput(
|
||||||
|
val clientMutationId: String? = null,
|
||||||
|
val mangaId: Int,
|
||||||
|
val trackRecordId: Int,
|
||||||
|
)
|
||||||
|
|
||||||
|
data class BindTrackRecordPayload(
|
||||||
|
val clientMutationId: String?,
|
||||||
|
val trackRecord: TrackRecordType,
|
||||||
|
)
|
||||||
|
|
||||||
|
@RequireAuth
|
||||||
|
fun bindTrackRecord(input: BindTrackRecordInput): CompletableFuture<BindTrackRecordPayload?> {
|
||||||
|
val (clientMutationId, mangaId, trackRecordId) = input
|
||||||
|
|
||||||
|
return future {
|
||||||
|
val boundTrackRecordId = Track.bindTrackRecord(mangaId, trackRecordId)
|
||||||
|
|
||||||
|
val trackRecord =
|
||||||
|
transaction {
|
||||||
|
TrackRecordTable.selectAll().where { TrackRecordTable.id eq boundTrackRecordId }.first()
|
||||||
|
}
|
||||||
|
|
||||||
|
BindTrackRecordPayload(
|
||||||
|
clientMutationId,
|
||||||
|
TrackRecordType(trackRecord),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
data class FetchTrackInput(
|
data class FetchTrackInput(
|
||||||
val clientMutationId: String? = null,
|
val clientMutationId: String? = null,
|
||||||
val recordId: Int,
|
val recordId: Int,
|
||||||
|
|||||||
@@ -222,6 +222,48 @@ object Track {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun bindTrackRecord(
|
||||||
|
mangaId: Int,
|
||||||
|
trackRecordId: Int,
|
||||||
|
): Int {
|
||||||
|
val (trackRecord, existingTrackRecord) =
|
||||||
|
transaction {
|
||||||
|
val trackRecord =
|
||||||
|
TrackRecordTable
|
||||||
|
.selectAll()
|
||||||
|
.where {
|
||||||
|
(TrackRecordTable.id eq trackRecordId)
|
||||||
|
}.first()
|
||||||
|
.toTrackRecordDataClass()
|
||||||
|
|
||||||
|
val existingTrackRecord =
|
||||||
|
TrackRecordTable
|
||||||
|
.selectAll()
|
||||||
|
.where {
|
||||||
|
(TrackRecordTable.mangaId eq mangaId) and (TrackRecordTable.trackerId eq trackRecord.trackerId)
|
||||||
|
}.firstOrNull()
|
||||||
|
?.toTrackRecordDataClass()
|
||||||
|
|
||||||
|
trackRecord to existingTrackRecord
|
||||||
|
}
|
||||||
|
|
||||||
|
val isAlreadyBoundToManga = trackRecord.mangaId == mangaId
|
||||||
|
if (isAlreadyBoundToManga) {
|
||||||
|
return trackRecordId
|
||||||
|
}
|
||||||
|
|
||||||
|
val hasRecordForTracker = existingTrackRecord != null
|
||||||
|
if (hasRecordForTracker) {
|
||||||
|
val updatedTrack = trackRecord.copy(id = existingTrackRecord.id, mangaId = mangaId).toTrack()
|
||||||
|
|
||||||
|
return updateTrackRecord(updatedTrack)
|
||||||
|
}
|
||||||
|
|
||||||
|
val newTrack = trackRecord.copy(mangaId = mangaId).toTrack()
|
||||||
|
|
||||||
|
return insertTrackRecord(newTrack)
|
||||||
|
}
|
||||||
|
|
||||||
suspend fun refresh(recordId: Int) {
|
suspend fun refresh(recordId: Int) {
|
||||||
val recordDb =
|
val recordDb =
|
||||||
transaction {
|
transaction {
|
||||||
@@ -423,9 +465,9 @@ object Track {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun updateTrackRecord(track: Track) = updateTrackRecords(listOf(track))
|
fun updateTrackRecord(track: Track): Int = updateTrackRecords(listOf(track)).first()
|
||||||
|
|
||||||
fun updateTrackRecords(tracks: List<Track>) =
|
fun updateTrackRecords(tracks: List<Track>): List<Int> =
|
||||||
transaction {
|
transaction {
|
||||||
if (tracks.isNotEmpty()) {
|
if (tracks.isNotEmpty()) {
|
||||||
BatchUpdateStatement(TrackRecordTable)
|
BatchUpdateStatement(TrackRecordTable)
|
||||||
@@ -447,6 +489,8 @@ object Track {
|
|||||||
}.toExecutable()
|
}.toExecutable()
|
||||||
.execute(this@transaction)
|
.execute(this@transaction)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tracks.map { it.id!! }
|
||||||
}
|
}
|
||||||
|
|
||||||
fun insertTrackRecord(track: Track): Int = insertTrackRecords(listOf(track)).first()
|
fun insertTrackRecord(track: Track): Int = insertTrackRecords(listOf(track)).first()
|
||||||
|
|||||||
Reference in New Issue
Block a user