mirror of
https://github.com/Suwayomi/Suwayomi-Server.git
synced 2026-07-04 03:14:40 -05:00
@@ -84,7 +84,7 @@ class TrackRecordsForTrackerIdDataLoader : KotlinDataLoader<Int, TrackRecordNode
|
||||
transaction {
|
||||
addLogger(Slf4jSqlDebugLogger)
|
||||
val trackRecordsBySyncId =
|
||||
TrackRecordTable.select { TrackRecordTable.syncId inList ids }
|
||||
TrackRecordTable.select { TrackRecordTable.trackerId inList ids }
|
||||
.map { TrackRecordType(it) }
|
||||
.groupBy { it.mangaId }
|
||||
ids.map { (trackRecordsBySyncId[it] ?: emptyList()).toNodeList() }
|
||||
|
||||
@@ -4,12 +4,11 @@ import org.jetbrains.exposed.sql.and
|
||||
import org.jetbrains.exposed.sql.select
|
||||
import org.jetbrains.exposed.sql.transactions.transaction
|
||||
import suwayomi.tachidesk.graphql.types.TrackRecordType
|
||||
import suwayomi.tachidesk.graphql.types.TrackSearchType
|
||||
import suwayomi.tachidesk.graphql.types.TrackerType
|
||||
import suwayomi.tachidesk.manga.impl.track.Track
|
||||
import suwayomi.tachidesk.manga.impl.track.tracker.TrackerManager
|
||||
import suwayomi.tachidesk.manga.model.dataclass.TrackSearchDataClass
|
||||
import suwayomi.tachidesk.manga.model.table.TrackRecordTable
|
||||
import suwayomi.tachidesk.manga.model.table.TrackSearchTable
|
||||
import suwayomi.tachidesk.server.JavalinSetup.future
|
||||
import java.util.concurrent.CompletableFuture
|
||||
|
||||
@@ -104,7 +103,7 @@ class TrackMutation {
|
||||
data class BindTrackInput(
|
||||
val clientMutationId: String? = null,
|
||||
val mangaId: Int,
|
||||
val track: TrackSearchType,
|
||||
val trackSearchId: Int,
|
||||
)
|
||||
|
||||
data class BindTrackPayload(
|
||||
@@ -113,28 +112,20 @@ class TrackMutation {
|
||||
)
|
||||
|
||||
fun bindTrack(input: BindTrackInput): CompletableFuture<BindTrackPayload> {
|
||||
val (clientMutationId, mangaId, track) = input
|
||||
val (clientMutationId, mangaId, trackSearchId) = input
|
||||
|
||||
return future {
|
||||
Track.bind(
|
||||
mangaId,
|
||||
TrackSearchDataClass(
|
||||
syncId = track.syncId,
|
||||
mediaId = track.mediaId,
|
||||
title = track.title,
|
||||
totalChapters = track.totalChapters,
|
||||
trackingUrl = track.trackingUrl,
|
||||
coverUrl = track.coverUrl,
|
||||
summary = track.summary,
|
||||
publishingStatus = track.publishingStatus,
|
||||
publishingType = track.publishingType,
|
||||
startDate = track.startDate,
|
||||
),
|
||||
trackSearchId,
|
||||
)
|
||||
val trackRecord =
|
||||
transaction {
|
||||
val trackerId =
|
||||
TrackSearchTable.select { TrackSearchTable.id eq trackSearchId }
|
||||
.first()[TrackSearchTable.trackerId]
|
||||
TrackRecordTable.select {
|
||||
TrackRecordTable.mangaId eq mangaId and (TrackRecordTable.syncId eq track.syncId)
|
||||
TrackRecordTable.mangaId eq mangaId and (TrackRecordTable.trackerId eq trackerId)
|
||||
}.first()
|
||||
}
|
||||
BindTrackPayload(
|
||||
|
||||
@@ -36,6 +36,7 @@ import suwayomi.tachidesk.graphql.types.TrackerNodeList
|
||||
import suwayomi.tachidesk.graphql.types.TrackerType
|
||||
import suwayomi.tachidesk.manga.impl.track.tracker.TrackerManager
|
||||
import suwayomi.tachidesk.manga.model.table.TrackRecordTable
|
||||
import suwayomi.tachidesk.manga.model.table.insertAll
|
||||
import suwayomi.tachidesk.server.JavalinSetup.future
|
||||
import java.util.concurrent.CompletableFuture
|
||||
|
||||
@@ -229,7 +230,7 @@ class TrackQuery {
|
||||
enum class TrackRecordOrderBy(override val column: Column<out Comparable<*>>) : OrderBy<TrackRecordType> {
|
||||
ID(TrackRecordTable.id),
|
||||
MANGA_ID(TrackRecordTable.mangaId),
|
||||
SYNC_ID(TrackRecordTable.syncId),
|
||||
TRACKER_ID(TrackRecordTable.trackerId),
|
||||
REMOTE_ID(TrackRecordTable.remoteId),
|
||||
TITLE(TrackRecordTable.title),
|
||||
LAST_CHAPTER_READ(TrackRecordTable.lastChapterRead),
|
||||
@@ -243,7 +244,7 @@ class TrackQuery {
|
||||
return when (this) {
|
||||
ID -> TrackRecordTable.id greater cursor.value.toInt()
|
||||
MANGA_ID -> greaterNotUnique(TrackRecordTable.mangaId, TrackRecordTable.id, cursor)
|
||||
SYNC_ID -> greaterNotUnique(TrackRecordTable.syncId, TrackRecordTable.id, cursor, String::toInt)
|
||||
TRACKER_ID -> greaterNotUnique(TrackRecordTable.trackerId, TrackRecordTable.id, cursor, String::toInt)
|
||||
REMOTE_ID -> greaterNotUnique(TrackRecordTable.remoteId, TrackRecordTable.id, cursor, String::toLong)
|
||||
TITLE -> greaterNotUnique(TrackRecordTable.title, TrackRecordTable.id, cursor, String::toString)
|
||||
LAST_CHAPTER_READ -> greaterNotUnique(TrackRecordTable.lastChapterRead, TrackRecordTable.id, cursor, String::toDouble)
|
||||
@@ -258,7 +259,7 @@ class TrackQuery {
|
||||
return when (this) {
|
||||
ID -> TrackRecordTable.id less cursor.value.toInt()
|
||||
MANGA_ID -> lessNotUnique(TrackRecordTable.mangaId, TrackRecordTable.id, cursor)
|
||||
SYNC_ID -> lessNotUnique(TrackRecordTable.syncId, TrackRecordTable.id, cursor, String::toInt)
|
||||
TRACKER_ID -> lessNotUnique(TrackRecordTable.trackerId, TrackRecordTable.id, cursor, String::toInt)
|
||||
REMOTE_ID -> lessNotUnique(TrackRecordTable.remoteId, TrackRecordTable.id, cursor, String::toLong)
|
||||
TITLE -> lessNotUnique(TrackRecordTable.title, TrackRecordTable.id, cursor, String::toString)
|
||||
LAST_CHAPTER_READ -> lessNotUnique(TrackRecordTable.lastChapterRead, TrackRecordTable.id, cursor, String::toDouble)
|
||||
@@ -274,7 +275,7 @@ class TrackQuery {
|
||||
when (this) {
|
||||
ID -> type.id.toString()
|
||||
MANGA_ID -> type.id.toString() + "-" + type.mangaId
|
||||
SYNC_ID -> type.id.toString() + "-" + type.syncId
|
||||
TRACKER_ID -> type.id.toString() + "-" + type.trackerId
|
||||
REMOTE_ID -> type.id.toString() + "-" + type.remoteId
|
||||
TITLE -> type.id.toString() + "-" + type.title
|
||||
LAST_CHAPTER_READ -> type.id.toString() + "-" + type.lastChapterRead
|
||||
@@ -290,7 +291,7 @@ class TrackQuery {
|
||||
data class TrackRecordCondition(
|
||||
val id: Int? = null,
|
||||
val mangaId: Int? = null,
|
||||
val syncId: Int? = null,
|
||||
val trackerId: Int? = null,
|
||||
val remoteId: Long? = null,
|
||||
val libraryId: Long? = null,
|
||||
val title: String? = null,
|
||||
@@ -306,7 +307,7 @@ class TrackQuery {
|
||||
val opAnd = OpAnd()
|
||||
opAnd.eq(id, TrackRecordTable.id)
|
||||
opAnd.eq(mangaId, TrackRecordTable.mangaId)
|
||||
opAnd.eq(syncId, TrackRecordTable.syncId)
|
||||
opAnd.eq(trackerId, TrackRecordTable.trackerId)
|
||||
opAnd.eq(remoteId, TrackRecordTable.remoteId)
|
||||
opAnd.eq(libraryId, TrackRecordTable.libraryId)
|
||||
opAnd.eq(title, TrackRecordTable.title)
|
||||
@@ -325,7 +326,7 @@ class TrackQuery {
|
||||
data class TrackRecordFilter(
|
||||
val id: IntFilter? = null,
|
||||
val mangaId: IntFilter? = null,
|
||||
val syncId: IntFilter? = null,
|
||||
val trackerId: IntFilter? = null,
|
||||
val remoteId: LongFilter? = null,
|
||||
val libraryId: LongFilter? = null,
|
||||
val title: StringFilter? = null,
|
||||
@@ -344,7 +345,7 @@ class TrackQuery {
|
||||
return listOfNotNull(
|
||||
andFilterWithCompareEntity(TrackRecordTable.id, id),
|
||||
andFilterWithCompareEntity(TrackRecordTable.mangaId, mangaId),
|
||||
andFilterWithCompare(TrackRecordTable.syncId, syncId),
|
||||
andFilterWithCompare(TrackRecordTable.trackerId, trackerId),
|
||||
andFilterWithCompare(TrackRecordTable.remoteId, remoteId),
|
||||
andFilterWithCompare(TrackRecordTable.libraryId, libraryId),
|
||||
andFilterWithCompareString(TrackRecordTable.title, title),
|
||||
@@ -462,7 +463,7 @@ class TrackQuery {
|
||||
"Tracker needs to be logged-in to search"
|
||||
}
|
||||
SearchTrackerPayload(
|
||||
tracker.search(input.query).map {
|
||||
tracker.search(input.query).insertAll().map {
|
||||
TrackSearchType(it)
|
||||
},
|
||||
)
|
||||
|
||||
@@ -9,8 +9,8 @@ import suwayomi.tachidesk.graphql.server.primitives.Node
|
||||
import suwayomi.tachidesk.graphql.server.primitives.NodeList
|
||||
import suwayomi.tachidesk.graphql.server.primitives.PageInfo
|
||||
import suwayomi.tachidesk.manga.impl.track.tracker.Tracker
|
||||
import suwayomi.tachidesk.manga.impl.track.tracker.model.TrackSearch
|
||||
import suwayomi.tachidesk.manga.model.table.TrackRecordTable
|
||||
import suwayomi.tachidesk.manga.model.table.TrackSearchTable
|
||||
import java.util.concurrent.CompletableFuture
|
||||
|
||||
class TrackerType(
|
||||
@@ -45,7 +45,7 @@ class TrackerType(
|
||||
class TrackRecordType(
|
||||
val id: Int,
|
||||
val mangaId: Int,
|
||||
val syncId: Int,
|
||||
val trackerId: Int,
|
||||
val remoteId: Long,
|
||||
val libraryId: Long?,
|
||||
val title: String,
|
||||
@@ -60,7 +60,7 @@ class TrackRecordType(
|
||||
constructor(row: ResultRow) : this(
|
||||
row[TrackRecordTable.id].value,
|
||||
row[TrackRecordTable.mangaId].value,
|
||||
row[TrackRecordTable.syncId],
|
||||
row[TrackRecordTable.trackerId],
|
||||
row[TrackRecordTable.remoteId],
|
||||
row[TrackRecordTable.libraryId],
|
||||
row[TrackRecordTable.title],
|
||||
@@ -82,13 +82,14 @@ class TrackRecordType(
|
||||
}
|
||||
|
||||
fun tracker(dataFetchingEnvironment: DataFetchingEnvironment): CompletableFuture<TrackerType> {
|
||||
return dataFetchingEnvironment.getValueFromDataLoader<Int, TrackerType>("TrackerDataLoader", syncId)
|
||||
return dataFetchingEnvironment.getValueFromDataLoader<Int, TrackerType>("TrackerDataLoader", trackerId)
|
||||
}
|
||||
}
|
||||
|
||||
class TrackSearchType(
|
||||
val syncId: Int,
|
||||
val mediaId: Long,
|
||||
val id: Int,
|
||||
val trackerId: Int,
|
||||
val remoteId: Long,
|
||||
val title: String,
|
||||
val totalChapters: Int,
|
||||
val trackingUrl: String,
|
||||
@@ -98,21 +99,22 @@ class TrackSearchType(
|
||||
val publishingType: String,
|
||||
val startDate: String,
|
||||
) {
|
||||
constructor(trackSearch: TrackSearch) : this(
|
||||
trackSearch.sync_id,
|
||||
trackSearch.media_id,
|
||||
trackSearch.title,
|
||||
trackSearch.total_chapters,
|
||||
trackSearch.tracking_url,
|
||||
trackSearch.cover_url,
|
||||
trackSearch.summary,
|
||||
trackSearch.publishing_status,
|
||||
trackSearch.publishing_type,
|
||||
trackSearch.start_date,
|
||||
constructor(row: ResultRow) : this(
|
||||
row[TrackSearchTable.id].value,
|
||||
row[TrackSearchTable.trackerId],
|
||||
row[TrackSearchTable.remoteId],
|
||||
row[TrackSearchTable.title],
|
||||
row[TrackSearchTable.totalChapters],
|
||||
row[TrackSearchTable.trackingUrl],
|
||||
row[TrackSearchTable.coverUrl],
|
||||
row[TrackSearchTable.summary],
|
||||
row[TrackSearchTable.publishingStatus],
|
||||
row[TrackSearchTable.publishingType],
|
||||
row[TrackSearchTable.startDate],
|
||||
)
|
||||
|
||||
fun tracker(dataFetchingEnvironment: DataFetchingEnvironment): CompletableFuture<TrackerType> {
|
||||
return dataFetchingEnvironment.getValueFromDataLoader<Int, TrackerType>("TrackerDataLoader", syncId)
|
||||
return dataFetchingEnvironment.getValueFromDataLoader<Int, TrackerType>("TrackerDataLoader", trackerId)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user