Add search score field to edges

This commit is contained in:
Brian Beck 2016-11-28 06:43:32 -08:00
parent 618ac1b3e1
commit 531ed4e9b8
16 changed files with 45 additions and 34 deletions

View file

@ -122,10 +122,16 @@ export function searchResolver () {
count: arrayLength
} = list
const meta = { sliceStart, arrayLength }
return {
const connection = {
totalCount: arrayLength,
...connectionFromArraySlice(arraySlice, { first, after }, meta)
}
// Move the `score` field up to the edge object and make sure it's a
// number (MusicBrainz returns a string).
connection.edges.forEach(edge => {
edge.score = parseInt(edge.node.score, 10)
})
return connection
})
}
}
@ -164,14 +170,12 @@ export function linkedResolver () {
}
}
const noop = value => value
/**
* If we weren't smart enough or weren't able to include the `inc` parameter
* for a particular field that's being requested, make another request to grab
* it (after making sure it isn't already available).
*/
export function subqueryResolver (includeValue, handler = noop) {
export function subqueryResolver (includeValue, handler = value => value) {
return (source, args, { loaders }, info) => {
const key = toDashed(info.fieldName)
if (key in source || (source._inc && source._inc.indexOf(key) !== -1)) {

View file

@ -15,7 +15,7 @@ import {
releases,
relationships,
tags,
connectionWithCount
connectionWithExtras
} from './helpers'
const Area = new GraphQLObjectType({
@ -46,5 +46,5 @@ the codes assigned by ISO to countries and subdivisions.`,
})
})
export const AreaConnection = connectionWithCount(Area)
export const AreaConnection = connectionWithExtras(Area)
export default Area

View file

@ -18,7 +18,7 @@ import {
works,
relationships,
tags,
connectionWithCount
connectionWithExtras
} from './helpers'
const Artist = new GraphQLObjectType({
@ -75,5 +75,5 @@ neither. Groups do not have genders.`
})
})
export const ArtistConnection = connectionWithCount(Artist)
export const ArtistConnection = connectionWithExtras(Artist)
export default Artist

View file

@ -12,7 +12,7 @@ import {
lifeSpan,
relationships,
tags,
connectionWithCount
connectionWithExtras
} from './helpers'
const Event = new GraphQLObjectType({
@ -50,5 +50,5 @@ for syntax and examples.`
})
})
export const EventConnection = connectionWithCount(Event)
export const EventConnection = connectionWithExtras(Event)
export default Event

View file

@ -231,9 +231,16 @@ export const totalCount = {
ignoring pagination.`
}
export function connectionWithCount (nodeType) {
export const score = {
type: GraphQLInt,
description: `The relevancy score (0100) assigned by the search engine, if
these results were found through a search.`
}
export function connectionWithExtras (nodeType) {
return connectionDefinitions({
nodeType,
connectionFields: () => ({ totalCount })
connectionFields: () => ({ totalCount }),
edgeFields: () => ({ score })
}).connectionType
}

View file

@ -10,7 +10,7 @@ import {
aliases,
relationships,
tags,
connectionWithCount
connectionWithExtras
} from './helpers'
const Instrument = new GraphQLObjectType({
@ -40,5 +40,5 @@ classification.`
})
})
export const InstrumentConnection = connectionWithCount(Instrument)
export const InstrumentConnection = connectionWithExtras(Instrument)
export default Instrument

View file

@ -20,7 +20,7 @@ import {
relationships,
tags,
fieldWithID,
connectionWithCount
connectionWithExtras
} from './helpers'
const Label = new GraphQLObjectType({
@ -65,5 +65,5 @@ imprint, production, distributor, rights society, etc.`
})
})
export const LabelConnection = connectionWithCount(Label)
export const LabelConnection = connectionWithExtras(Label)
export default Label

View file

@ -14,7 +14,7 @@ import {
fieldWithID,
relationships,
tags,
connectionWithCount
connectionWithExtras
} from './helpers'
export const Coordinates = new GraphQLObjectType({
@ -68,5 +68,5 @@ function.`
})
})
export const PlaceConnection = connectionWithCount(Place)
export const PlaceConnection = connectionWithExtras(Place)
export default Place

View file

@ -12,7 +12,7 @@ import {
releases,
relationships,
tags,
connectionWithCount
connectionWithExtras
} from './helpers'
const Recording = new GraphQLObjectType({
@ -53,5 +53,5 @@ from the lengths of the tracks using it.`
})
})
export const RecordingConnection = connectionWithCount(Recording)
export const RecordingConnection = connectionWithExtras(Recording)
export default Recording

View file

@ -10,7 +10,7 @@ import Entity from './entity'
import {
getHyphenated,
fieldWithID,
connectionWithCount
connectionWithExtras
} from './helpers'
const Relationship = new GraphQLObjectType({
@ -78,5 +78,5 @@ relationship type.`
})
})
export const RelationshipConnection = connectionWithCount(Relationship)
export const RelationshipConnection = connectionWithExtras(Relationship)
export default Relationship

View file

@ -16,7 +16,7 @@ import {
tags,
fieldWithID,
getHyphenated,
connectionWithCount
connectionWithExtras
} from './helpers'
const ReleaseGroup = new GraphQLObjectType({
@ -61,5 +61,5 @@ that apply to this release group.`
})
})
export const ReleaseGroupConnection = connectionWithCount(ReleaseGroup)
export const ReleaseGroupConnection = connectionWithExtras(ReleaseGroup)
export default ReleaseGroup

View file

@ -19,7 +19,7 @@ import {
tags,
fieldWithID,
getHyphenated,
connectionWithCount
connectionWithExtras
} from './helpers'
const Release = new GraphQLObjectType({
@ -83,5 +83,5 @@ It is not a mark of how good or bad the music itself is for that, use
})
})
export const ReleaseConnection = connectionWithCount(Release)
export const ReleaseConnection = connectionWithExtras(Release)
export default Release

View file

@ -9,7 +9,7 @@ import {
relationships,
tags,
fieldWithID,
connectionWithCount
connectionWithExtras
} from './helpers'
const Series = new GraphQLObjectType({
@ -32,5 +32,5 @@ contains.`
})
})
export const SeriesConnection = connectionWithCount(Series)
export const SeriesConnection = connectionWithExtras(Series)
export default Series

View file

@ -4,7 +4,7 @@ import {
GraphQLString,
GraphQLInt
} from 'graphql/type'
import { connectionWithCount } from './helpers'
import { connectionWithExtras } from './helpers'
const Tag = new GraphQLObjectType({
name: 'Tag',
@ -23,5 +23,5 @@ release, or recording.`,
})
})
export const TagConnection = connectionWithCount(Tag)
export const TagConnection = connectionWithExtras(Tag)
export default Tag

View file

@ -2,7 +2,7 @@ import { GraphQLObjectType, GraphQLNonNull } from 'graphql/type'
import Node from './node'
import Entity from './entity'
import { URLString } from './scalars'
import { id, mbid, relationships, connectionWithCount } from './helpers'
import { id, mbid, relationships, connectionWithExtras } from './helpers'
const URL = new GraphQLObjectType({
name: 'URL',
@ -21,5 +21,5 @@ acquired, an entry in another database, etc.`,
})
})
export const URLConnection = connectionWithCount(URL)
export const URLConnection = connectionWithExtras(URL)
export default URL

View file

@ -11,7 +11,7 @@ import {
relationships,
tags,
fieldWithID,
connectionWithCount
connectionWithExtras
} from './helpers'
const Work = new GraphQLObjectType({
@ -44,5 +44,5 @@ to the work by copyright collecting agencies.`
})
})
export const WorkConnection = connectionWithCount(Work)
export const WorkConnection = connectionWithExtras(Work)
export default Work