Skip to content

Commit

Permalink
Merge pull request #6296 from artsy/joeyAghion/relatedShows
Browse files Browse the repository at this point in the history
chore(perf): rely on shows endpoint instead of related/shows, where possible (DIA-1008)
  • Loading branch information
mzikherman authored Dec 11, 2024
2 parents 70fd964 + 0ab6189 commit f05d2dc
Show file tree
Hide file tree
Showing 7 changed files with 77 additions and 76 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ describe("Auction Context", () => {
artworkLoader: () => Promise.resolve(parentArtwork),
artistArtworksLoader: () => Promise.resolve(artistArtworks),
relatedFairsLoader: () => Promise.resolve(null),
relatedShowsLoader: () => Promise.resolve(null),
showsLoader: () => Promise.resolve(null),
partnerArtworksLoader: () => {
return Promise.resolve({
body: partnerArtworks,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ describe("Default Context", () => {
artworkLoader: () => Promise.resolve(parentArtwork),
artistArtworksLoader: () => Promise.resolve(artistArtworks),
relatedFairsLoader: () => Promise.resolve(null),
relatedShowsLoader: () => Promise.resolve(null),
showsLoader: () => Promise.resolve(null),
partnerArtworksLoader: () => {
return Promise.resolve({
body: partnerArtworks,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,13 +65,10 @@ describe("Fair Context", () => {
artistArtworksLoader: () => Promise.resolve(artistArtworks),
relatedFairsLoader: () =>
Promise.resolve([{ id: "fair1", has_full_feature: true }]),
relatedShowsLoader: () => {
return Promise.resolve({
body: [
{ id: "cool-show", name: "Cool Show", partner: { id: "partner" } },
],
headers: { "x-total-count": "10" },
})
showsLoader: () => {
return Promise.resolve([
{ id: "cool-show", name: "Cool Show", partner: { id: "partner" } },
])
},
partnerArtworksLoader: () => {
return Promise.resolve({
Expand All @@ -94,6 +91,7 @@ describe("Fair Context", () => {
expect.assertions(6)

parentArtwork.artist = null
parentArtwork.show_ids = ["abc123"]
context.artistArtworksLoader = () => Promise.resolve(null)

const data = await runAuthenticatedQuery(query, context)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,13 +65,10 @@ describe("Show Context", () => {
artworkLoader: () => Promise.resolve(parentArtwork),
artistArtworksLoader: () => Promise.resolve(artistArtworks),
relatedFairsLoader: () => Promise.resolve(null),
relatedShowsLoader: () => {
return Promise.resolve({
body: [
{ id: "cool-show", name: "Cool Show", partner: { id: "partner" } },
],
headers: { "x-total-count": "10" },
})
showsLoader: () => {
return Promise.resolve([
{ id: "cool-show", name: "Cool Show", partner: { id: "partner" } },
])
},
partnerArtworksLoader: () => {
return Promise.resolve({
Expand All @@ -91,6 +88,7 @@ describe("Show Context", () => {
})

it("Returns the correct values for metadata fields when there is just show data", async () => {
parentArtwork.show_ids = ["abc123"]
parentArtwork.partner = null
context.partnerArtworksLoader = () => Promise.resolve(null)

Expand Down Expand Up @@ -118,7 +116,7 @@ describe("Show Context", () => {
it("Returns the correct values for metadata fields when there is just partner data", async () => {
parentArtwork.artist = null
context.artistArtworksLoader = () => Promise.resolve(null)
context.relatedShowsLoader = () => Promise.resolve(null)
context.showsLoader = () => Promise.resolve(null)

const data = await runAuthenticatedQuery(query, context)
// Should have one partner grid and one related grid with 0 works
Expand Down
46 changes: 22 additions & 24 deletions src/schema/v2/artwork/artworkContextGrids/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -75,9 +75,9 @@ export const ArtworkContextGrids: GraphQLFieldConfig<any, ResolverContext> = {
resolve: async (
artwork,
args,
{ saleLoader, relatedFairsLoader, relatedShowsLoader }
{ saleLoader, relatedFairsLoader, showsLoader }
) => {
const { id, artist, partner, sale_ids } = artwork
const { id, artist, partner, sale_ids, show_ids } = artwork
const { includeRelatedArtworks } = args

// If the artwork is in an auction, return a context that includes the auction
Expand Down Expand Up @@ -108,18 +108,18 @@ export const ArtworkContextGrids: GraphQLFieldConfig<any, ResolverContext> = {
const fairs = await relatedFairsLoader({ artwork: [id], size: 1 })
const fair: any = first(fairs)
if (fair && fair.has_full_feature) {
const relatedFairShowsResponse = await relatedShowsLoader({
artwork: [id],
at_a_fair: true,
})
const relatedFairShows =
show_ids && show_ids.length > 0
? await showsLoader({
at_a_fair: true,
id: show_ids,
size: 1,
})
: []

// If the artwork is in a fair, return a context that includes that fair show
if (
relatedFairShowsResponse &&
relatedFairShowsResponse.body &&
relatedFairShowsResponse.body.length > 0
) {
const fairShow = first(relatedFairShowsResponse.body)
if (relatedFairShows && relatedFairShows.length > 0) {
const fairShow = first(relatedFairShows)
if (fairShow) {
return [
{
Expand All @@ -139,20 +139,18 @@ export const ArtworkContextGrids: GraphQLFieldConfig<any, ResolverContext> = {
}
}

const relatedShowsResponse = await relatedShowsLoader({
artwork: [id],
size: 1,
active: false,
at_a_fair: false,
})
const relatedShows =
show_ids && show_ids.length > 0
? await showsLoader({
at_a_fair: false,
id: show_ids,
size: 1,
})
: []

// If the artwork is in a show, return a context that includes that show
if (
relatedShowsResponse &&
relatedShowsResponse.body &&
relatedShowsResponse.body.length > 0
) {
const show = first(relatedShowsResponse.body)
if (relatedShows && relatedShows.length > 0) {
const show = first(relatedShows)
return [
{ gridType: "ShowArtworkGrid", show, artwork },
...(artist ? [{ gridType: "ArtistArtworkGrid", artist, artwork }] : []),
Expand Down
2 changes: 1 addition & 1 deletion src/schema/v2/artwork/context.ts
Original file line number Diff line number Diff line change
Expand Up @@ -61,9 +61,9 @@ const Context: GraphQLFieldConfig<any, ResolverContext> = {
let showPromise
if (show_ids && show_ids.length > 0) {
showPromise = showsLoader({
at_a_fair: false,
id: show_ids,
size: 1,
at_a_fair: false,
})
.then(first)
.then((show) => {
Expand Down
75 changes: 41 additions & 34 deletions src/schema/v2/artwork/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -662,22 +662,24 @@ export const ArtworkType = new GraphQLObjectType<any, ResolverContext>({
type: new GraphQLList(ArtworkHighlightType),
description: "Returns the highlighted shows and articles",
resolve: (
{ id, _id },
{ _id, show_ids },
_options,
{ relatedShowsLoader, articlesLoader }
{ showsLoader, articlesLoader }
) =>
Promise.all([
relatedShowsLoader({
artwork: [id],
size: 1,
at_a_fair: false,
}),
show_ids && show_ids.length > 0
? showsLoader({
at_a_fair: false,
id: show_ids,
size: 1,
})
: Promise.resolve([]),
articlesLoader({
artwork_id: _id,
published: true,
limit: 1,
}).then(({ results }) => results),
]).then(([{ body: shows }, articles]) => {
]).then(([shows, articles]) => {
const highlightedShows = enhance(shows, {
highlight_type: "Show",
})
Expand Down Expand Up @@ -970,10 +972,14 @@ export const ArtworkType = new GraphQLObjectType<any, ResolverContext>({
isInShow: {
type: GraphQLBoolean,
description: "Is this artwork part of a current show",
resolve: ({ id }, _options, { relatedShowsLoader }) =>
relatedShowsLoader({ active: true, size: 1, artwork: [id] }).then(
({ body: shows }) => shows.length > 0
),
resolve: ({ show_ids }, _options, { showsLoader }) =>
show_ids && show_ids.length > 0
? showsLoader({
id: show_ids,
size: 1,
status: "active",
}).then((shows) => shows.length > 0)
: false,
},
isNotForSale: {
type: GraphQLString,
Expand Down Expand Up @@ -1665,19 +1671,19 @@ export const ArtworkType = new GraphQLObjectType<any, ResolverContext>({
sort: { type: ShowSorts },
},
resolve: (
{ id },
{ show_ids },
{ active, sort, atAFair: at_a_fair },
{ relatedShowsLoader }
{ showsLoader }
) =>
relatedShowsLoader({
artwork: [id],
size: 1,
active,
sort,
at_a_fair,
})
.then(({ body }) => body)
.then(_.first),
show_ids && show_ids.length > 0
? showsLoader({
at_a_fair,
id: show_ids,
size: 1,
sort,
...(active ? { status: "active" } : {}),
}).then(_.first)
: null,
},
shows: {
type: new GraphQLList(Show.type),
Expand All @@ -1688,18 +1694,19 @@ export const ArtworkType = new GraphQLObjectType<any, ResolverContext>({
sort: { type: ShowSorts },
},
resolve: (
{ id },
{ show_ids },
{ size, active, sort, atAFair: at_a_fair },
{ relatedShowsLoader }
) => {
return relatedShowsLoader({
artwork: [id],
active,
size,
sort,
at_a_fair,
}).then(({ body }) => body)
},
{ showsLoader }
) =>
show_ids && show_ids.length > 0
? showsLoader({
at_a_fair,
id: show_ids,
size,
sort,
...(active ? { status: "active" } : {}),
})
: [],
},
signature: markdown(({ signature }) =>
signature.replace(/^signature:\s+/i, "")
Expand Down

0 comments on commit f05d2dc

Please sign in to comment.