diff --git a/src/actors.js b/src/actors.js index c16ed4f..824daf3 100644 --- a/src/actors.js +++ b/src/actors.js @@ -70,7 +70,13 @@ export function curateActor(actor, context = {}) { id: actor.id, slug: actor.slug, name: actor.name, - aliases: actor.aliases || [], // used for profile pages + aliases: actor.aliases?.map((alias) => ({ + id: alias.id, + slug: alias.slug, + name: alias.name, + entityId: alias.entity_id, + entity: alias.entity, + })) || [], // used for profile pages alias: actor.alias ? { id: actor.alias.id, @@ -246,11 +252,13 @@ export async function fetchActorsById(actorIds, options = {}, reqUser) { knex.raw('COALESCE(residence_countries.alias, residence_countries.name) as residence_country_name'), knex.raw('row_to_json(entities) as entity'), knex.raw('row_to_json(sfw_media) as sfw_avatar'), - knex.raw('json_agg(aliases) filter (where aliases.id is not null) as aliases'), + // knex.raw('json_agg(aliases) filter (where aliases.id is not null) as aliases'), + knex.raw('json_agg(row_to_json(aliases)::jsonb || jsonb_build_object(\'entity\', row_to_json(alias_entities))) filter (where aliases.id is not null) as aliases'), knex.raw('row_to_json(media_biometrics) as biometrics'), ) .leftJoin('actors_meta', 'actors_meta.actor_id', 'actors.id') .leftJoin('actors as aliases', 'aliases.alias_for', 'actors.id') + .leftJoin('entities as alias_entities', 'alias_entities.id', 'aliases.entity_id') .leftJoin('countries as birth_countries', 'birth_countries.alpha2', 'actors.birth_country_alpha2') .leftJoin('countries as residence_countries', 'residence_countries.alpha2', 'actors.residence_country_alpha2') .leftJoin('media as avatars', 'avatars.id', 'actors.avatar_media_id') diff --git a/src/web/actors.js b/src/web/actors.js index 09e89b4..158dfd6 100644 --- a/src/web/actors.js +++ b/src/web/actors.js @@ -108,8 +108,11 @@ export const actorsSchema = ` hasTattoos: Boolean tattoos: String piercings: String + entity: Entity + aliases: [Actor!]! scenes: Int likes: Int + stashes: [Stash!]! } `; @@ -154,7 +157,7 @@ export async function fetchActorsGraphql(query, req) { page: query.page, order: getOrder(query), aggregateCountries: false, - }); + }, req.user); return { nodes: actors.map((actor) => curateGraphqlActor(actor)),