🪢 Added resolvers for LoCG
This commit is contained in:
357
models/graphql/typedef.ts
Normal file
357
models/graphql/typedef.ts
Normal file
@@ -0,0 +1,357 @@
|
||||
import { gql } from "graphql-tag";
|
||||
|
||||
/**
|
||||
* GraphQL Type Definitions for ThreeTwo Metadata Service
|
||||
* Covers ComicVine and Metron API endpoints
|
||||
*/
|
||||
export const typeDefs = gql`
|
||||
# ============================================
|
||||
# ComicVine Types
|
||||
# ============================================
|
||||
|
||||
# Image URLs for various sizes
|
||||
type ImageUrls {
|
||||
icon_url: String
|
||||
medium_url: String
|
||||
screen_url: String
|
||||
screen_large_url: String
|
||||
small_url: String
|
||||
super_url: String
|
||||
thumb_url: String
|
||||
tiny_url: String
|
||||
original_url: String
|
||||
image_tags: String
|
||||
}
|
||||
|
||||
# Publisher information
|
||||
type Publisher {
|
||||
id: Int
|
||||
name: String
|
||||
api_detail_url: String
|
||||
}
|
||||
|
||||
# Volume information
|
||||
type Volume {
|
||||
id: Int!
|
||||
name: String!
|
||||
api_detail_url: String
|
||||
site_detail_url: String
|
||||
start_year: String
|
||||
publisher: Publisher
|
||||
count_of_issues: Int
|
||||
image: ImageUrls
|
||||
description: String
|
||||
deck: String
|
||||
}
|
||||
|
||||
# Issue information
|
||||
type Issue {
|
||||
id: Int!
|
||||
name: String
|
||||
issue_number: String
|
||||
api_detail_url: String
|
||||
site_detail_url: String
|
||||
cover_date: String
|
||||
store_date: String
|
||||
volume: Volume
|
||||
image: ImageUrls
|
||||
description: String
|
||||
person_credits: [PersonCredit!]
|
||||
character_credits: [CharacterCredit!]
|
||||
team_credits: [TeamCredit!]
|
||||
location_credits: [LocationCredit!]
|
||||
story_arc_credits: [StoryArcCredit!]
|
||||
}
|
||||
|
||||
# Person credit (writer, artist, etc.)
|
||||
type PersonCredit {
|
||||
id: Int
|
||||
name: String
|
||||
api_detail_url: String
|
||||
site_detail_url: String
|
||||
role: String
|
||||
}
|
||||
|
||||
# Character credit
|
||||
type CharacterCredit {
|
||||
id: Int
|
||||
name: String
|
||||
api_detail_url: String
|
||||
site_detail_url: String
|
||||
}
|
||||
|
||||
# Team credit
|
||||
type TeamCredit {
|
||||
id: Int
|
||||
name: String
|
||||
api_detail_url: String
|
||||
site_detail_url: String
|
||||
}
|
||||
|
||||
# Location credit
|
||||
type LocationCredit {
|
||||
id: Int
|
||||
name: String
|
||||
api_detail_url: String
|
||||
site_detail_url: String
|
||||
}
|
||||
|
||||
# Story arc credit
|
||||
type StoryArcCredit {
|
||||
id: Int
|
||||
name: String
|
||||
api_detail_url: String
|
||||
site_detail_url: String
|
||||
deck: String
|
||||
description: String
|
||||
image: ImageUrls
|
||||
}
|
||||
|
||||
# ComicVine search result
|
||||
type ComicVineSearchResult {
|
||||
error: String!
|
||||
limit: Int!
|
||||
offset: Int!
|
||||
number_of_page_results: Int!
|
||||
number_of_total_results: Int!
|
||||
status_code: Int!
|
||||
results: [SearchResultItem!]!
|
||||
}
|
||||
|
||||
# Generic search result item (can be volume, issue, etc.)
|
||||
type SearchResultItem {
|
||||
id: Int
|
||||
name: String
|
||||
api_detail_url: String
|
||||
site_detail_url: String
|
||||
image: ImageUrls
|
||||
description: String
|
||||
deck: String
|
||||
# Volume-specific fields
|
||||
start_year: String
|
||||
publisher: Publisher
|
||||
count_of_issues: Int
|
||||
# Issue-specific fields
|
||||
issue_number: String
|
||||
volume: Volume
|
||||
cover_date: String
|
||||
}
|
||||
|
||||
# Volume-based search result with scoring
|
||||
type VolumeSearchResult {
|
||||
volume: Volume!
|
||||
score: Float
|
||||
matchedIssues: [Issue!]
|
||||
}
|
||||
|
||||
# Volume-based search response
|
||||
type VolumeBasedSearchResponse {
|
||||
results: [VolumeSearchResult!]!
|
||||
totalResults: Int!
|
||||
}
|
||||
|
||||
# Weekly pull list item (from League of Comic Geeks)
|
||||
type PullListItem {
|
||||
name: String
|
||||
publisher: String
|
||||
url: String
|
||||
cover: String
|
||||
description: String
|
||||
price: String
|
||||
rating: Float
|
||||
pulls: Int
|
||||
potw: Int
|
||||
publicationDate: String
|
||||
}
|
||||
|
||||
# Paginated pull list response
|
||||
type PullListResponse {
|
||||
result: [PullListItem!]!
|
||||
meta: PaginationMeta!
|
||||
}
|
||||
|
||||
# Pagination metadata
|
||||
type PaginationMeta {
|
||||
currentPage: Int!
|
||||
totalPages: Int!
|
||||
pageSize: Int!
|
||||
totalCount: Int!
|
||||
hasNextPage: Boolean!
|
||||
hasPreviousPage: Boolean!
|
||||
}
|
||||
|
||||
# Story arc with enriched data
|
||||
type StoryArc {
|
||||
id: Int!
|
||||
name: String!
|
||||
deck: String
|
||||
description: String
|
||||
image: ImageUrls
|
||||
issues: [Issue!]
|
||||
}
|
||||
|
||||
# Generic ComicVine resource response
|
||||
type ComicVineResourceResponse {
|
||||
error: String!
|
||||
limit: Int!
|
||||
offset: Int!
|
||||
number_of_page_results: Int!
|
||||
number_of_total_results: Int!
|
||||
status_code: Int!
|
||||
results: [SearchResultItem!]!
|
||||
}
|
||||
|
||||
# Volume detail response
|
||||
type VolumeDetailResponse {
|
||||
error: String!
|
||||
status_code: Int!
|
||||
results: Volume!
|
||||
}
|
||||
|
||||
# Issues for series response
|
||||
type IssuesForSeriesResponse {
|
||||
error: String!
|
||||
limit: Int!
|
||||
offset: Int!
|
||||
number_of_page_results: Int!
|
||||
number_of_total_results: Int!
|
||||
status_code: Int!
|
||||
results: [Issue!]!
|
||||
}
|
||||
|
||||
# ============================================
|
||||
# Metron Types
|
||||
# ============================================
|
||||
|
||||
# Generic Metron resource (flexible JSON response)
|
||||
scalar JSON
|
||||
|
||||
type MetronResponse {
|
||||
data: JSON
|
||||
status: Int!
|
||||
}
|
||||
|
||||
# ============================================
|
||||
# Input Types
|
||||
# ============================================
|
||||
|
||||
# Search parameters
|
||||
input SearchInput {
|
||||
query: String!
|
||||
resources: String!
|
||||
format: String
|
||||
sort: String
|
||||
field_list: String
|
||||
limit: Int
|
||||
offset: Int
|
||||
}
|
||||
|
||||
# Volume-based search configuration
|
||||
input VolumeSearchInput {
|
||||
query: String!
|
||||
resources: String!
|
||||
format: String
|
||||
limit: Int
|
||||
offset: Int
|
||||
fieldList: String
|
||||
scorerConfiguration: ScorerConfigurationInput
|
||||
rawFileDetails: JSON
|
||||
}
|
||||
|
||||
# Scorer configuration for matching
|
||||
input ScorerConfigurationInput {
|
||||
searchParams: SearchParamsInput
|
||||
}
|
||||
|
||||
# Search parameters for scoring
|
||||
input SearchParamsInput {
|
||||
name: String
|
||||
number: String
|
||||
year: String
|
||||
volume: String
|
||||
}
|
||||
|
||||
# Get volumes input
|
||||
input GetVolumesInput {
|
||||
volumeURI: String!
|
||||
fieldList: String
|
||||
}
|
||||
|
||||
# Get resource input
|
||||
input GetResourceInput {
|
||||
resources: String!
|
||||
filter: String
|
||||
fieldList: String
|
||||
}
|
||||
|
||||
# Weekly pull list input
|
||||
input WeeklyPullListInput {
|
||||
startDate: String!
|
||||
currentPage: Int!
|
||||
pageSize: Int!
|
||||
}
|
||||
|
||||
# Metron fetch resource input
|
||||
input MetronFetchInput {
|
||||
resource: String!
|
||||
method: String!
|
||||
query: String
|
||||
}
|
||||
|
||||
# ============================================
|
||||
# Queries
|
||||
# ============================================
|
||||
|
||||
type Query {
|
||||
"""
|
||||
Search ComicVine for volumes, issues, characters, etc.
|
||||
"""
|
||||
searchComicVine(input: SearchInput!): ComicVineSearchResult!
|
||||
|
||||
"""
|
||||
Advanced volume-based search with scoring and filtering
|
||||
"""
|
||||
volumeBasedSearch(input: VolumeSearchInput!): VolumeBasedSearchResponse!
|
||||
|
||||
"""
|
||||
Get volume details by URI
|
||||
"""
|
||||
getVolume(input: GetVolumesInput!): VolumeDetailResponse!
|
||||
|
||||
"""
|
||||
Get all issues for a series by comic object ID
|
||||
"""
|
||||
getIssuesForSeries(comicObjectId: ID!): IssuesForSeriesResponse!
|
||||
|
||||
"""
|
||||
Get generic ComicVine resource (issues, volumes, etc.)
|
||||
"""
|
||||
getComicVineResource(input: GetResourceInput!): ComicVineResourceResponse!
|
||||
|
||||
"""
|
||||
Get story arcs for a volume
|
||||
"""
|
||||
getStoryArcs(volumeId: Int!): [StoryArc!]!
|
||||
|
||||
"""
|
||||
Get weekly pull list from League of Comic Geeks
|
||||
"""
|
||||
getWeeklyPullList(input: WeeklyPullListInput!): PullListResponse!
|
||||
|
||||
"""
|
||||
Fetch resource from Metron API
|
||||
"""
|
||||
fetchMetronResource(input: MetronFetchInput!): MetronResponse!
|
||||
}
|
||||
|
||||
# ============================================
|
||||
# Mutations
|
||||
# ============================================
|
||||
|
||||
type Mutation {
|
||||
"""
|
||||
Placeholder for future mutations
|
||||
"""
|
||||
_empty: String
|
||||
}
|
||||
`;
|
||||
Reference in New Issue
Block a user