Reduce requested manga data in queries

This commit is contained in:
schroda
2024-07-08 18:02:50 +02:00
parent 4b30e9bc48
commit 3d21266f92
47 changed files with 759 additions and 471 deletions

View File

@@ -7,9 +7,6 @@
*/
import gql from 'graphql-tag';
import { SOURCE_BASE_FIELDS } from '@/lib/graphql/fragments/SourceFragments.ts';
import { TRACKER_BIND_FIELDS } from '@/lib/graphql/fragments/TrackFragments.ts';
import { TRACK_RECORD_BIND_FIELDS } from '@/lib/graphql/fragments/TrackRecordFragments.ts';
export const PAGE_INFO = gql`
fragment PAGE_INFO on PageInfo {
@@ -27,147 +24,6 @@ export const GLOBAL_METADATA = gql`
}
`;
export const FULL_CATEGORY_FIELDS = gql`
fragment FULL_CATEGORY_FIELDS on CategoryType {
default
id
includeInUpdate
includeInDownload
name
order
meta {
key
value
}
mangas {
totalCount
}
}
`;
export const FULL_TRACK_RECORD_FIELDS = gql`
${TRACK_RECORD_BIND_FIELDS}
${TRACKER_BIND_FIELDS}
fragment FULL_TRACK_RECORD_FIELDS on TrackRecordType {
...TRACK_RECORD_BIND_FIELDS
tracker {
...TRACKER_BIND_FIELDS
}
}
`;
export const BASE_MANGA_FIELDS = gql`
${SOURCE_BASE_FIELDS}
${FULL_TRACK_RECORD_FIELDS}
fragment BASE_MANGA_FIELDS on MangaType {
artist
author
chaptersLastFetchedAt
description
genre
id
inLibrary
inLibraryAt
initialized
lastFetchedAt
meta {
key
value
}
realUrl
source {
...SOURCE_BASE_FIELDS
}
status
thumbnailUrl
thumbnailUrlLastFetched
title
url
trackRecords {
totalCount
nodes {
...FULL_TRACK_RECORD_FIELDS
}
}
}
`;
export const PARTIAL_MANGA_FIELDS = gql`
${BASE_MANGA_FIELDS}
${FULL_CATEGORY_FIELDS}
fragment PARTIAL_MANGA_FIELDS on MangaType {
...BASE_MANGA_FIELDS
unreadCount
downloadCount
bookmarkCount
categories {
nodes {
...FULL_CATEGORY_FIELDS
}
totalCount
}
chapters {
totalCount
}
}
`;
export const FULL_CHAPTER_FIELDS = gql`
fragment FULL_CHAPTER_FIELDS on ChapterType {
chapterNumber
fetchedAt
id
isBookmarked
isDownloaded
isRead
lastPageRead
lastReadAt
mangaId
manga {
id
title
inLibrary
thumbnailUrl
lastFetchedAt
}
meta {
key
value
}
name
pageCount
realUrl
scanlator
sourceOrder
uploadDate
url
}
`;
export const FULL_MANGA_FIELDS = gql`
${PARTIAL_MANGA_FIELDS}
${FULL_CHAPTER_FIELDS}
fragment FULL_MANGA_FIELDS on MangaType {
...PARTIAL_MANGA_FIELDS
lastReadChapter {
...FULL_CHAPTER_FIELDS
}
latestReadChapter {
...FULL_CHAPTER_FIELDS
}
latestFetchedChapter {
...FULL_CHAPTER_FIELDS
}
latestUploadedChapter {
...FULL_CHAPTER_FIELDS
}
firstUnreadChapter {
...FULL_CHAPTER_FIELDS
}
}
`;
export const ABOUT_WEBUI = gql`
fragment ABOUT_WEBUI on AboutWebUI {
channel

View File

@@ -7,19 +7,7 @@
*/
import gql from 'graphql-tag';
const MANGA_BASE_FIELDS = gql`
fragment MANGA_BASE_FIELDS on MangaType {
id
title
thumbnailUrl
thumbnailUrlLastFetched
inLibrary
initialized
}
`;
import { MANGA_BASE_FIELDS } from '@/lib/graphql/fragments/MangaFragments.ts';
export const CHAPTER_BASE_FIELDS = gql`
fragment CHAPTER_BASE_FIELDS on ChapterType {

View File

@@ -0,0 +1,144 @@
/*
* Copyright (C) Contributors to the Suwayomi project
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
import gql from 'graphql-tag';
export const MANGA_BASE_FIELDS = gql`
fragment MANGA_BASE_FIELDS on MangaType {
id
title
thumbnailUrl
thumbnailUrlLastFetched
inLibrary
initialized
sourceId
}
`;
export const MANGA_CHAPTER_STAT_FIELDS = gql`
fragment MANGA_CHAPTER_STAT_FIELDS on MangaType {
id
unreadCount
downloadCount
bookmarkCount
chapters {
totalCount
}
}
`;
export const MANGA_READER_FIELDS = gql`
${MANGA_BASE_FIELDS}
fragment MANGA_READER_FIELDS on MangaType {
...MANGA_BASE_FIELDS
meta {
key
value
}
chapters {
totalCount
}
trackRecords {
totalCount
}
}
`;
export const MANGA_LIBRARY_FIELDS = gql`
${MANGA_BASE_FIELDS}
${MANGA_CHAPTER_STAT_FIELDS}
fragment MANGA_LIBRARY_FIELDS on MangaType {
...MANGA_BASE_FIELDS
...MANGA_CHAPTER_STAT_FIELDS
genre
lastFetchedAt
inLibraryAt
trackRecords {
totalCount
nodes {
id
trackerId
}
}
firstUnreadChapter {
id
sourceOrder
}
lastReadChapter {
id
sourceOrder
lastReadAt
}
latestReadChapter {
id
sourceOrder
lastReadAt
}
latestFetchedChapter {
id
fetchedAt
}
latestUploadedChapter {
id
uploadDate
}
}
`;
export const MANGA_SCREEN_FIELDS = gql`
${MANGA_LIBRARY_FIELDS}
fragment MANGA_SCREEN_FIELDS on MangaType {
...MANGA_LIBRARY_FIELDS
artist
author
description
status
realUrl
sourceId
source {
id
displayName
}
trackRecords {
totalCount
nodes {
id
trackerId
}
}
}
`;
export const MANGA_LIBRARY_DUPLICATE_SCREEN_FIELDS = gql`
${MANGA_BASE_FIELDS}
${MANGA_CHAPTER_STAT_FIELDS}
fragment MANGA_LIBRARY_DUPLICATE_SCREEN_FIELDS on MangaType {
...MANGA_BASE_FIELDS
...MANGA_CHAPTER_STAT_FIELDS
description
}
`;

View File

@@ -7,7 +7,7 @@
*/
import gql from 'graphql-tag';
import { FULL_MANGA_FIELDS } from '@/lib/graphql/Fragments.ts';
import { MANGA_CHAPTER_STAT_FIELDS } from '@/lib/graphql/fragments/MangaFragments.ts';
const UPDATER_MANGA_FIELDS = gql`
fragment UPDATER_MANGA_FIELDS on MangaType {
@@ -19,7 +19,7 @@ const UPDATER_MANGA_FIELDS = gql`
export const UPDATER_SUBSCRIPTION_FIELDS = gql`
${UPDATER_MANGA_FIELDS}
${FULL_MANGA_FIELDS}
${MANGA_CHAPTER_STAT_FIELDS}
fragment UPDATER_SUBSCRIPTION_FIELDS on UpdateStatus {
isRunning
@@ -28,7 +28,7 @@ export const UPDATER_SUBSCRIPTION_FIELDS = gql`
mangas {
totalCount
nodes {
...FULL_MANGA_FIELDS
...MANGA_CHAPTER_STAT_FIELDS
}
}
}

View File

@@ -1,7 +1,7 @@
import {FieldPolicy, FieldReadFunction, Reference, TypePolicies, TypePolicy} from '@apollo/client/cache';
import {
GetChaptersMangaQuery, GetDownloadStatusQueryVariables, GetGlobalMetadataQueryVariables,
GetMangaQueryVariables, GetSourceBrowseQueryVariables, GetUpdateStatusQueryVariables, GetWebuiUpdateStatusQueryVariables,
GetMangaScreenQueryVariables, GetSourceBrowseQueryVariables, GetUpdateStatusQueryVariables, GetWebuiUpdateStatusQueryVariables,
} from "@/lib/graphql/generated/graphql.ts";
import {FieldFunctionOptions} from "@apollo/client/cache/inmemory/policies";
export type AboutServerPayloadKeySpecifier = ('buildTime' | 'buildType' | 'discord' | 'github' | 'name' | 'revision' | 'version' | AboutServerPayloadKeySpecifier)[];
@@ -583,7 +583,7 @@ export type QueryFieldPolicy = {
extensions?: FieldPolicy<any> | FieldReadFunction<any>,
getWebUIUpdateStatus?: FieldPolicy<Reference, Reference, Reference, FieldFunctionOptions<GetWebuiUpdateStatusQueryVariables>> | FieldReadFunction<Reference, Reference, FieldFunctionOptions<GetWebuiUpdateStatusQueryVariables>>,
lastUpdateTimestamp?: FieldPolicy<any> | FieldReadFunction<any>,
manga?: FieldPolicy<Reference, Reference, Reference, FieldFunctionOptions<GetMangaQueryVariables>> | FieldReadFunction<Reference, Reference, FieldFunctionOptions<GetMangaQueryVariables>>,
manga?: FieldPolicy<Reference, Reference, Reference, FieldFunctionOptions<GetMangaScreenQueryVariables>> | FieldReadFunction<Reference, Reference, FieldFunctionOptions<GetMangaScreenQueryVariables>>,
mangas?: FieldPolicy<any> | FieldReadFunction<any>,
meta?: FieldPolicy<Reference, Reference, Reference, FieldFunctionOptions<GetGlobalMetadataQueryVariables>> | FieldReadFunction<Reference, Reference, FieldFunctionOptions<GetGlobalMetadataQueryVariables>>,
metas?: FieldPolicy<any> | FieldReadFunction<any>,

File diff suppressed because one or more lines are too long

View File

@@ -7,7 +7,7 @@
*/
import gql from 'graphql-tag';
import { FULL_MANGA_FIELDS } from '@/lib/graphql/Fragments';
import { MANGA_SCREEN_FIELDS } from '@/lib/graphql/fragments/MangaFragments.ts';
export const DELETE_MANGA_METADATA = gql`
mutation DELETE_MANGA_METADATA($input: DeleteMangaMetaInput!) {
@@ -37,12 +37,13 @@ export const DELETE_MANGA_METADATA = gql`
// makes the server fetch and return the manga
export const GET_MANGA_FETCH = gql`
${FULL_MANGA_FIELDS}
${MANGA_SCREEN_FIELDS}
mutation GET_MANGA_FETCH($input: FetchMangaInput!) {
fetchManga(input: $input) {
clientMutationId
manga {
...FULL_MANGA_FIELDS
...MANGA_SCREEN_FIELDS
}
}
}

View File

@@ -7,17 +7,18 @@
*/
import gql from 'graphql-tag';
import { BASE_MANGA_FIELDS } from '@/lib/graphql/Fragments';
import { SOURCE_SETTING_FIELDS } from '@/lib/graphql/fragments/SourceFragments.ts';
import { MANGA_BASE_FIELDS } from '@/lib/graphql/fragments/MangaFragments.ts';
export const GET_SOURCE_MANGAS_FETCH = gql`
${BASE_MANGA_FIELDS}
${MANGA_BASE_FIELDS}
mutation GET_SOURCE_MANGAS_FETCH($input: FetchSourceMangaInput!) {
fetchSourceManga(input: $input) {
clientMutationId
hasNextPage
mangas {
...BASE_MANGA_FIELDS
...MANGA_BASE_FIELDS
}
}
}

View File

@@ -55,15 +55,13 @@ export const TRACKER_BIND = gql`
bindTrack(input: { mangaId: $mangaId, remoteId: $remoteId, trackerId: $trackerId }) {
trackRecord {
...TRACK_RECORD_BIND_FIELDS
tracker {
id
}
manga {
id
trackRecords {
totalCount
nodes {
id
trackerId
}
}
}
@@ -83,6 +81,7 @@ export const TRACKER_UNBIND = gql`
totalCount
nodes {
id
trackerId
}
}
}
@@ -104,6 +103,7 @@ export const TRACKER_UPDATE_BIND = gql`
totalCount
nodes {
id
trackerId
}
}
}

View File

@@ -7,12 +7,13 @@
*/
import gql from 'graphql-tag';
import { FULL_MANGA_FIELDS, PAGE_INFO } from '@/lib/graphql/Fragments';
import { PAGE_INFO } from '@/lib/graphql/Fragments';
import {
CATEGORY_BASE_FIELDS,
CATEGORY_LIBRARY_FIELDS,
CATEGORY_SETTING_FIELDS,
} from '@/lib/graphql/fragments/CategoryFragments.ts';
import { MANGA_LIBRARY_FIELDS } from '@/lib/graphql/fragments/MangaFragments.ts';
export const GET_CATEGORIES_BASE = gql`
${CATEGORY_BASE_FIELDS}
@@ -126,14 +127,15 @@ export const GET_CATEGORIES_SETTINGS = gql`
`;
export const GET_CATEGORY_MANGAS = gql`
${FULL_MANGA_FIELDS}
${MANGA_LIBRARY_FIELDS}
${PAGE_INFO}
query GET_CATEGORY_MANGAS($id: Int!) {
category(id: $id) {
id
mangas {
nodes {
...FULL_MANGA_FIELDS
...MANGA_LIBRARY_FIELDS
}
pageInfo {
...PAGE_INFO

View File

@@ -7,15 +7,68 @@
*/
import gql from 'graphql-tag';
import { FULL_CHAPTER_FIELDS, FULL_MANGA_FIELDS, PAGE_INFO } from '@/lib/graphql/Fragments';
import { PAGE_INFO } from '@/lib/graphql/Fragments';
import {
MANGA_BASE_FIELDS,
MANGA_LIBRARY_DUPLICATE_SCREEN_FIELDS,
MANGA_LIBRARY_FIELDS,
MANGA_READER_FIELDS,
MANGA_SCREEN_FIELDS,
} from '@/lib/graphql/fragments/MangaFragments.ts';
import { TRACK_RECORD_BIND_FIELDS } from '@/lib/graphql/fragments/TrackRecordFragments.ts';
// returns the current manga from the database
export const GET_MANGA = gql`
${FULL_MANGA_FIELDS}
${FULL_CHAPTER_FIELDS}
query GET_MANGA($id: Int!) {
export const GET_MANGA_SCREEN = gql`
${MANGA_SCREEN_FIELDS}
query GET_MANGA_SCREEN($id: Int!) {
manga(id: $id) {
...FULL_MANGA_FIELDS
...MANGA_SCREEN_FIELDS
}
}
`;
// returns the current manga from the database
export const GET_MANGA_READER = gql`
${MANGA_READER_FIELDS}
query GET_MANGA_READER($id: Int!) {
manga(id: $id) {
...MANGA_READER_FIELDS
}
}
`;
// returns the current manga from the database
export const GET_MANGA_TRACK_RECORDS = gql`
${TRACK_RECORD_BIND_FIELDS}
query GET_MANGA_TRACK_RECORDS($id: Int!) {
manga(id: $id) {
id
trackRecords {
totalCount
nodes {
...TRACK_RECORD_BIND_FIELDS
}
}
}
}
`;
// returns the current manga from the database
export const GET_MANGA_CATEGORIES = gql`
query GET_MANGA_CATEGORIES($id: Int!) {
manga(id: $id) {
id
categories {
totalCount
nodes {
id
}
}
}
}
`;
@@ -62,11 +115,11 @@ export const GET_MANGA_TO_MIGRATE = gql`
`;
// returns the current manga from the database
export const GET_MANGAS = gql`
${FULL_MANGA_FIELDS}
${FULL_CHAPTER_FIELDS}
export const GET_MANGAS_BASE = gql`
${MANGA_BASE_FIELDS}
${PAGE_INFO}
query GET_MANGAS(
query GET_MANGAS_BASE(
$after: Cursor
$before: Cursor
$condition: MangaConditionInput
@@ -89,7 +142,83 @@ export const GET_MANGAS = gql`
orderByType: $orderByType
) {
nodes {
...FULL_MANGA_FIELDS
...MANGA_BASE_FIELDS
}
pageInfo {
...PAGE_INFO
}
totalCount
}
}
`;
// returns the current manga from the database
export const GET_MANGAS_LIBRARY = gql`
${MANGA_LIBRARY_FIELDS}
${PAGE_INFO}
query GET_MANGAS_LIBRARY(
$after: Cursor
$before: Cursor
$condition: MangaConditionInput
$filter: MangaFilterInput
$first: Int
$last: Int
$offset: Int
$orderBy: MangaOrderBy
$orderByType: SortOrder
) {
mangas(
after: $after
before: $before
condition: $condition
filter: $filter
first: $first
last: $last
offset: $offset
orderBy: $orderBy
orderByType: $orderByType
) {
nodes {
...MANGA_LIBRARY_FIELDS
}
pageInfo {
...PAGE_INFO
}
totalCount
}
}
`;
// returns the current manga from the database
export const GET_MANGAS_DUPLICATES = gql`
${MANGA_LIBRARY_DUPLICATE_SCREEN_FIELDS}
${PAGE_INFO}
query GET_MANGAS_DUPLICATES(
$after: Cursor
$before: Cursor
$condition: MangaConditionInput
$filter: MangaFilterInput
$first: Int
$last: Int
$offset: Int
$orderBy: MangaOrderBy
$orderByType: SortOrder
) {
mangas(
after: $after
before: $before
condition: $condition
filter: $filter
first: $first
last: $last
offset: $offset
orderBy: $orderBy
orderByType: $orderByType
) {
nodes {
...MANGA_LIBRARY_DUPLICATE_SCREEN_FIELDS
}
pageInfo {
...PAGE_INFO
@@ -106,9 +235,7 @@ export const GET_MIGRATABLE_SOURCE_MANGAS = gql`
id
title
thumbnailUrl
source {
id
}
sourceId
categories {
nodes {
id