Integrated Manticore sync, assuming responsibility from traxxx core/legacy.
This commit is contained in:
@@ -22,6 +22,8 @@ import slugify from '../utils/slugify.js';
|
||||
import { curateRevision } from './revisions.js';
|
||||
import { interpolateProfiles, platformsByHostname } from '../common/actors.mjs'; // eslint-disable-line import/namespace
|
||||
import { resolvePlace } from '../common/geo.mjs'; // eslint-disable-line import/namespace
|
||||
import { syncScenes, syncActors } from './sync.js';
|
||||
import verifyAbility from '../utils/verify-ability.js';
|
||||
|
||||
const logger = initLogger();
|
||||
const mj = new MerkleJson();
|
||||
@@ -373,6 +375,10 @@ async function queryManticoreSql(filters, options, _reqUser) {
|
||||
}
|
||||
}
|
||||
|
||||
if (filters.isGlobal) {
|
||||
builder.where('entity_id', 0);
|
||||
}
|
||||
|
||||
// attribute filters
|
||||
['country'].forEach((attribute) => {
|
||||
if (filters[attribute]) {
|
||||
@@ -540,9 +546,84 @@ export async function createActor(newActor, context, reqUser) {
|
||||
const curatedActorEntry = curateActorEntry(newActor, context);
|
||||
const [actorEntry] = await knex('actors').insert(curatedActorEntry).returning('*');
|
||||
|
||||
await syncActors([actorEntry.id]);
|
||||
|
||||
return curateActor(actorEntry);
|
||||
}
|
||||
|
||||
export async function mergeActors(targetActorId, sourceActorId, reqUser) {
|
||||
if (!verifyAbility(reqUser, 'actor', 'merge')) {
|
||||
throw new HttpError('You are not permitted to merge actors', 403);
|
||||
}
|
||||
|
||||
const [targetActor, sourceActor] = await Promise.all([
|
||||
knex('actors')
|
||||
.where('id', targetActorId)
|
||||
.first(),
|
||||
knex('actors')
|
||||
.where('id', sourceActorId)
|
||||
.first(),
|
||||
]);
|
||||
|
||||
if (!targetActor) {
|
||||
throw new HttpError('Target actor not found', 404);
|
||||
}
|
||||
|
||||
if (!sourceActor) {
|
||||
throw new HttpError('Source actor not found', 404);
|
||||
}
|
||||
|
||||
if (targetActor.entity_id) {
|
||||
throw new HttpError('Target actor is not global', 400);
|
||||
}
|
||||
|
||||
if (targetActor.alias_for) {
|
||||
throw new HttpError('Target actor is aliased', 400);
|
||||
}
|
||||
|
||||
const trx = await knex.transaction();
|
||||
|
||||
await trx('actors')
|
||||
.update('alias_for', targetActorId)
|
||||
.where('id', sourceActorId);
|
||||
|
||||
const mergedProfiles = await trx('actors_profiles')
|
||||
.update('actor_id', targetActorId)
|
||||
.where('actor_id', sourceActorId)
|
||||
.returning('id');
|
||||
|
||||
const mergedScenes = await trx('releases_actors')
|
||||
.update({
|
||||
actor_id: targetActorId,
|
||||
alias_id: sourceActorId,
|
||||
})
|
||||
.where('actor_id', sourceActorId)
|
||||
.returning('release_id');
|
||||
|
||||
try {
|
||||
await trx.commit();
|
||||
} catch (error) {
|
||||
await trx.rollback();
|
||||
|
||||
throw error;
|
||||
}
|
||||
|
||||
await interpolateProfiles([targetActorId, sourceActorId], {
|
||||
knex,
|
||||
logger,
|
||||
moment,
|
||||
slugify,
|
||||
omit,
|
||||
}, { refreshView: false });
|
||||
|
||||
await syncScenes(mergedScenes.map((scene) => scene.release_id));
|
||||
|
||||
return {
|
||||
scenes: mergedScenes.length,
|
||||
profiles: mergedProfiles.length,
|
||||
};
|
||||
}
|
||||
|
||||
export async function fetchActorRevisions(revisionId, filters = {}, reqUser) {
|
||||
const limit = filters.limit || 50;
|
||||
const page = filters.page || 1;
|
||||
@@ -747,6 +828,8 @@ async function applyActorRevision(revisionIds, reqUser) {
|
||||
slugify,
|
||||
omit,
|
||||
}, { refreshView: false });
|
||||
|
||||
await syncActors(actorIds);
|
||||
}
|
||||
|
||||
export async function reviewActorRevision(revisionId, isApproved, { feedback }, reqUser) {
|
||||
|
||||
Reference in New Issue
Block a user