From 15b61ed56ffc37340cae123edc9eecd59d69354c Mon Sep 17 00:00:00 2001 From: DebaucheryLibrarian Date: Wed, 10 Jun 2026 01:43:35 +0200 Subject: [PATCH] Merging actor avatars. Fixed faulty actor ID search in merge dialog. --- components/actors/merge.vue | 2 +- src/actors.js | 14 +++++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/components/actors/merge.vue b/components/actors/merge.vue index 1e5e55f..fa60c54 100644 --- a/components/actors/merge.vue +++ b/components/actors/merge.vue @@ -97,7 +97,7 @@ const submitted = ref(false); async function searchActors() { const res = await get('/actors', { - q: `${actorQuery.value}*`, // return partial matches + q: actorQuery.value.charAt(0) === '#' ? actorQuery.value : `${actorQuery.value}*`, // return partial matches limit: 10, global: true, }); diff --git a/src/actors.js b/src/actors.js index 37b3376..2e93447 100644 --- a/src/actors.js +++ b/src/actors.js @@ -260,14 +260,17 @@ export async function fetchActorsById(actorIds, options = {}, reqUser) { knex('actors_avatars') .select( 'media.*', - 'actors_avatars.actor_id', + // 'actors_avatars.actor_id', + 'actors_profiles.actor_id', knex.raw('json_agg(actors_avatars.profile_id) as profile_ids'), knex.raw('row_to_json(sfw_media) as sfw_media'), ) - .whereIn('actor_id', actorIds) + .whereIn('actors_profiles.actor_id', actorIds) .leftJoin('media', 'media.id', 'actors_avatars.media_id') .leftJoin('media as sfw_media', 'sfw_media.id', 'media.sfw_media_id') - .groupBy('media.id', 'sfw_media.id', 'actors_avatars.actor_id') + .leftJoin('actors_profiles', 'actors_profiles.id', 'actors_avatars.profile_id') + // .groupBy('media.id', 'sfw_media.id', 'actors_avatars.actor_id') + .groupBy('media.id', 'sfw_media.id', 'actors_profiles.actor_id') .orderBy(knex.raw('max(actors_avatars.created_at)'), 'desc'), knex('actors_socials') .whereIn('actor_id', actorIds), @@ -603,6 +606,11 @@ export async function mergeActors(targetActorId, sourceActorId, reqUser) { .where('actor_id', sourceActorId) .returning('id'); + // some avatars are not matched to a profile, need to investigate why this happens and the avatar table needs a dedicated actor field + await trx('actors_avatars') + .update('actor_id', targetActorId) + .where('actor_id', sourceActorId); + mergedScenes = await trx('releases_actors') .update({ actor_id: targetActorId,