-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathinterfaces.graphql
423 lines (313 loc) · 11.7 KB
/
interfaces.graphql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
scalar URL
scalar HTML
"ISO 8601 DateTime format, this is capable of adding a time offset, see https://en.wikipedia.org/wiki/ISO_8601"
scalar Datetime
"ISO 8601 Duration format ([hh]:[mm]:[ss].[sss]), capable of adding milliseconds, see https://en.wikipedia.org/wiki/ISO_8601"
scalar Duration
enum TitleVariant {
WITHOUT_NUMBER
CLEAN
}
enum AspectRatio {
SQUARE
ASPECT_16x9
}
enum PodcastVariant {
"episodic: Stand-alone episodes that should be presented last-to-first."
EPISODIC
"Serial: Episodes that should be presented first-to-last. Great for narratives, storytelling, thematic, and multiple seasons."
SERIAL
}
interface Image {
url: URL!
description: String
attribution: String
}
"The primary collection an Item is related to, e.g. a Podcast, Show or Conference"
interface Collection {
externalIds(system: Directory): [String!]
"title of the podcast that is the primary field to be used to represent the podcast in directories, lists and other uses."
title: String!
"subtitle is an extension to the title. The subtitle is meant to clarify what the podcast is about. While a title can be anything, a subtitle should be more descriptive in what the content actually wants to convey and what the most important information is, you want everybody want to know about the offering."
subtitle: String
"A summary is a much more precise and elaborate description of the podcast's content. While title and subtitle are rather concise, a summary is meant to consist of one or more sentences that form a paragraph or more."
summary: String
description: HTML
image(aspect: AspectRatio): Image
imageUrl: URL @deprecated(reason: "try to use image.url if possible")
link: URL
#items: ItemsConnection
}
interface Podcast {
type: PodcastVariant
episodes: ItemsConnection
feedUrls: [URL!]
language: String
}
"A single item of a Podcast Feed e.g. a single Episode, Teaser, Talk or Lecture"
interface Item {
guid: ID!
externalIds(system: Directory): [String!]
"Ordinal of the episode, either globally e.g. `72` or per season"
episodeNumber: Int
"e.g. `FG072 Verantwortung in der Informatik`"
title(variant: TitleVariant): String!
subtitle: String
summary: String
description: HTML
publicationDate: Datetime!
depublicationDate: Datetime
duration: Duration!
durationSeconds: Int!
link: URL
image(aspect: AspectRatio): Image
imageUrl: URL @deprecated(reason: "try to use image.url if possible")
"an guid grouping this Item to a season, series or multi part publication"
groupingId: ID
"""
Audio Assets
- media Assets played by an audio player
- format support depends on the used browser (https://en.wikipedia.org/wiki/HTML5_audio#Supported_audio_coding_formats)
- also allows HLS streams """
audios: [Asset!]!
"""
Files
- list of files available for download
- if no files are present, a player will use audio assets as downloads"""
files: [Asset!]
"Contributors are natural persons providing content to that item"
contributors: [Contributor!]
"Chapters are sections of an episode"
chapters: [Chapter!],
#"Transcripts are full text"
#transcripts: [Transcript!]
show: Collection
nextEpisode: Item
}
interface Asset {
"absolute path to media asset"
url: URL!
"file size in byte"
size: Int!
"title to be displayed in download tab e.g. `MPEG-4 AAC Audio (m4a)`"
title: String
"media asset mimeType e.g. `audio/mp4`"
mimeType: String!
}
interface Contributor {
"used as a reference e.g. in transcripts"
id: ID!
"name of the contributor e.g. Hans Meier"
name: String!
"URI identifying the person e.g. his personal domain or this main social media profile e.g. Twitter/Mastodon"
uri: URL
"avatar e.g. profile photo of the contributor"
avatar: Image
avatarUrl: URL @deprecated(reason: "try to use avatar.url if possible")
"""contributors group e.g. { id: "1", slug: "onair", title: "On Air" }"""
#group: ContributorGroup
wikidataId: String
}
# chapters of an Item, following the Podlove Simple Chapters format (https://podlove.org/simple-chapters/)
interface Chapter {
"start time following [hh]:[mm]:[ss].[sss] format"
start: Duration!
title: String!
"image that will be presented in the header section if the chapter is available"
image: Image
imageUrl: URL @deprecated(reason: "try to use image.url if possible")
"Link related to the chapter"
#TODO: should we call this link instead?
href: URL
}
"An object with a globally unique `ID`."
interface Node {
"A globally unique identifier. Can be used in various places throughout the system to identify this single value."
nodeId: ID!
}
interface Organization {
name: String!
image: Image
uri: URL
wikidataId: String
}
"The root query type interface which gives access points into the data universe."
interface AudioQuery {
"The root query type must be a `Node` to work well with Relay 1 mutations. This just resolves to `query`."
nodeId: ID!
"Fetches an object given its globally unique `ID`."
node(
"The globally unique `ID`."
nodeId: ID!
): Node
item(guid: ID!): Item
show(id: ID!): ShowType
contributor(uri: URL!): Contributor
"Reads and enables pagination through a set of `Item`."
items(
"Only read the first `n` values of the set."
first: Int
"Only read the last `n` values of the set."
last: Int
"Skip the first `n` values from our `after` cursor, an alternative to cursor based pagination. May not be used with `last`."
offset: Int
"Read all values in the set before (above) this cursor."
before: Cursor
"Read all values in the set after (below) this cursor."
after: Cursor
"The method to use when ordering `Item`."
orderBy: [ItemsOrderBy!] = [PRIMARY_KEY_ASC]
#"A filter to be used in determining which values should be returned by the collection."
#filter: ItemFilter
): ItemsConnection
"Reads and enables pagination through a set of `Collection`."
shows(
"Only read the first `n` values of the set."
first: Int
"Only read the last `n` values of the set."
last: Int
"Skip the first `n` values from our `after` cursor, an alternative to cursor based pagination. May not be used with `last`."
offset: Int
"Read all values in the set before (above) this cursor."
before: Cursor
"Read all values in the set after (below) this cursor."
after: Cursor
#"The method to use when ordering `Collection`."
#orderBy: [CollectionsOrderBy!] = [PRIMARY_KEY_ASC]
#"A filter to be used in determining which values should be returned by the collection."
#filter: CollectionFilter
): CollectionConnection
}
# A connection to a list of `Collection` values.
interface CollectionConnection {
"A list of `Item` objects."
nodes: [Collection!]!
"Information to aid in pagination."
pageInfo: PageInfo!
"The count of *all* `Collection` you could get from the connection."
totalCount: Int!
}
# A connection to a list of `Item` values.
type ItemsConnection {
"A list of `Item` objects."
nodes: [Item!]!
"Information to aid in pagination."
pageInfo: PageInfo!
"The count of *all* `Item` you could get from the connection."
totalCount: Int!
}
"A connection to a list of `Organization` values."
type OrganizationsConnection {
"A list of `Organization` objects."
nodes: [Organization!]!
"Information to aid in pagination."
pageInfo: PageInfo!
"The count of *all* `Organization` you could get from the connection."
totalCount: Int!
}
"Information about pagination in a connection."
type PageInfo {
"When paginating forwards, are there more items?"
hasNextPage: Boolean!
"When paginating backwards, are there more items?"
hasPreviousPage: Boolean!
"When paginating backwards, the cursor to continue."
startCursor: Cursor
"When paginating forwards, the cursor to continue."
endCursor: Cursor
}
"A filter to be used against String fields. All fields are combined with a logical ‘and.’"
input StringFilter {
"Is null (if `true` is specified) or is not null (if `false` is specified)."
isNull: Boolean
"Equal to the specified value."
equalTo: String
"Not equal to the specified value."
notEqualTo: String
"Not equal to the specified value, treating null like an ordinary value."
distinctFrom: String
"Equal to the specified value, treating null like an ordinary value."
notDistinctFrom: String
"Included in the specified list."
in: [String!]
"Not included in the specified list."
notIn: [String!]
"Less than the specified value."
lessThan: String
"Less than or equal to the specified value."
lessThanOrEqualTo: String
"Greater than the specified value."
greaterThan: String
"Greater than or equal to the specified value."
greaterThanOrEqualTo: String
"Contains the specified string (case-sensitive)."
includes: String
"Does not contain the specified string (case-sensitive)."
notIncludes: String
"Contains the specified string (case-insensitive)."
includesInsensitive: String
"Does not contain the specified string (case-insensitive)."
notIncludesInsensitive: String
"Starts with the specified string (case-sensitive)."
startsWith: String
"Does not start with the specified string (case-sensitive)."
notStartsWith: String
"Starts with the specified string (case-insensitive)."
startsWithInsensitive: String
"Does not start with the specified string (case-insensitive)."
notStartsWithInsensitive: String
"Ends with the specified string (case-sensitive)."
endsWith: String
"Does not end with the specified string (case-sensitive)."
notEndsWith: String
"Ends with the specified string (case-insensitive)."
endsWithInsensitive: String
"Does not end with the specified string (case-insensitive)."
notEndsWithInsensitive: String
"Matches the specified pattern (case-sensitive). An underscore (_) matches any single character; a percent sign (%) matches any sequence of zero or more characters."
like: String
"Does not match the specified pattern (case-sensitive). An underscore (_) matches any single character; a percent sign (%) matches any sequence of zero or more characters."
notLike: String
"Matches the specified pattern (case-insensitive). An underscore (_) matches any single character; a percent sign (%) matches any sequence of zero or more characters."
likeInsensitive: String
"Does not match the specified pattern (case-insensitive). An underscore (_) matches any single character; a percent sign (%) matches any sequence of zero or more characters."
notLikeInsensitive: String
"Equal to the specified value (case-insensitive)."
equalToInsensitive: String
"Not equal to the specified value (case-insensitive)."
notEqualToInsensitive: String
"Not equal to the specified value, treating null like an ordinary value (case-insensitive)."
distinctFromInsensitive: String
"Equal to the specified value, treating null like an ordinary value (case-insensitive)."
notDistinctFromInsensitive: String
"Included in the specified list (case-insensitive)."
inInsensitive: [String!]
"Not included in the specified list (case-insensitive)."
notInInsensitive: [String!]
"Less than the specified value (case-insensitive)."
lessThanInsensitive: String
"Less than or equal to the specified value (case-insensitive)."
lessThanOrEqualToInsensitive: String
"Greater than the specified value (case-insensitive)."
greaterThanInsensitive: String
"Greater than or equal to the specified value (case-insensitive)."
greaterThanOrEqualToInsensitive: String
}
input IntFilter {
isNull: Boolean
equalTo: Int
notEqualTo: Int
distinctFrom: Int
notDistinctFrom: Int
in: [Int!]
notIn: [Int!]
lessThan: Int
lessThanOrEqualTo: Int
greaterThan: Int
greaterThanOrEqualTo: Int
}
input BooleanFilter {
isNull: Boolean
equalTo: Boolean
notEqualTo: Boolean
}