graphbrainz/src/queries/search.js

63 lines
2 KiB
JavaScript
Raw Normal View History

2016-09-01 08:39:27 +00:00
import { GraphQLObjectType, GraphQLNonNull, GraphQLString } from 'graphql'
import { forwardConnectionArgs } from 'graphql-relay'
import { resolveSearch } from '../resolvers'
2016-08-20 05:59:32 +00:00
import {
2016-09-01 04:31:48 +00:00
AreaConnection,
ArtistConnection,
EventConnection,
InstrumentConnection,
2016-09-01 04:31:48 +00:00
LabelConnection,
PlaceConnection,
RecordingConnection,
ReleaseConnection,
ReleaseGroupConnection,
SeriesConnection,
2016-09-01 04:31:48 +00:00
WorkConnection
2016-08-20 05:59:32 +00:00
} from '../types'
2016-11-26 01:38:32 +00:00
import { toWords } from '../types/helpers'
2016-09-01 08:39:27 +00:00
function createSearchField (connectionType) {
2016-11-26 01:38:32 +00:00
const typeName = toWords(connectionType.name.slice(0, -10))
2016-09-01 08:39:27 +00:00
return {
type: connectionType,
2016-11-26 01:38:32 +00:00
description: `Search for ${typeName} entities matching the given query.`,
2016-09-01 08:39:27 +00:00
args: {
query: {
type: new GraphQLNonNull(GraphQLString),
description: `The query terms, in Lucene search syntax. See [examples
and search fields](https://musicbrainz.org/doc/Development/XML_Web_Service/Version_2/Search).`
},
2016-09-01 08:39:27 +00:00
...forwardConnectionArgs
},
resolve: resolveSearch
2016-09-01 08:39:27 +00:00
}
}
2016-08-20 05:59:32 +00:00
export const SearchQuery = new GraphQLObjectType({
2016-08-20 05:59:32 +00:00
name: 'SearchQuery',
2016-11-26 01:38:32 +00:00
description: 'A search for MusicBrainz entities using Lucene query syntax.',
2016-08-20 05:59:32 +00:00
fields: {
areas: createSearchField(AreaConnection),
artists: createSearchField(ArtistConnection),
events: createSearchField(EventConnection),
instruments: createSearchField(InstrumentConnection),
labels: createSearchField(LabelConnection),
places: createSearchField(PlaceConnection),
recordings: createSearchField(RecordingConnection),
releases: createSearchField(ReleaseConnection),
releaseGroups: createSearchField(ReleaseGroupConnection),
series: createSearchField(SeriesConnection),
works: createSearchField(WorkConnection)
2016-08-20 05:59:32 +00:00
}
})
export const search = {
type: SearchQuery,
description: 'Search for MusicBrainz entities using Lucene query syntax.',
// We only have work to do once we know what entity types are being requested,
// so this can just resolve to an empty object.
resolve: () => ({})
}
export default SearchQuery