From 5bcf13ab09dca78c8bafa151b1ba7e2003e21b56 Mon Sep 17 00:00:00 2001 From: "(quasar) nebula" Date: Fri, 3 May 2024 16:59:30 -0300 Subject: search: 'generic' index for like comparisons --- src/util/search-spec.js | 55 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) (limited to 'src/util/search-spec.js') diff --git a/src/util/search-spec.js b/src/util/search-spec.js index b26869a2..decfec7a 100644 --- a/src/util/search-spec.js +++ b/src/util/search-spec.js @@ -1,6 +1,61 @@ // Index structures shared by client and server, and relevant interfaces. export const searchSpec = { + generic: { + query: ({ + albumData, + artistData, + flashData, + trackData, + }) => [ + albumData, + + artistData + .filter(artist => !artist.isAlias), + + flashData, + + trackData + // Exclude rereleases - there's no reasonable way to differentiate + // them from the main release as part of this query. + .filter(track => !track.originalReleaseTrack), + ].flat(), + + process: (thing) => ({ + primaryName: + thing.name, + + additionalNames: + (Object.hasOwn(thing, 'additionalNames') + ? thing.additionalNames.map(entry => entry.name) + : Object.hasOwn(thing, 'aliasNames') + ? thing.aliasNames + : []), + + contributors: + ([ + 'artistContribs', + 'bannerArtistContribs', + 'contributorContribs', + 'coverArtistContribs', + 'wallpaperArtistContribs', + ]).filter(key => Object.hasOwn(thing, key)) + .flatMap(key => thing[key]) + .map(contrib => contrib.artist) + .flatMap(artist => [artist.name, ...artist.aliasNames]), + }), + + index: [ + 'primaryName', + 'additionalNames', + 'contributors', + ], + + store: [ + 'primaryName', + ], + }, + albums: { query: ({albumData}) => albumData, -- cgit 1.3.0-6-gf8a5