Compare commits
4 Commits
a4468f18dc
...
be61293cbe
| Author | SHA1 | Date | |
|---|---|---|---|
| be61293cbe | |||
| e493194ce1 | |||
| b61631c33c | |||
| fa65da75bc |
@@ -266,7 +266,7 @@ const expanded = ref(new Set());
|
|||||||
|
|
||||||
const mappedKeys = {
|
const mappedKeys = {
|
||||||
actors: actorsById,
|
actors: actorsById,
|
||||||
tags: tagsById,
|
// tags: tagsById,
|
||||||
movies: moviesById,
|
movies: moviesById,
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -292,6 +292,16 @@ const curatedRevisions = computed(() => revisions.value.map((revision) => {
|
|||||||
}))];
|
}))];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (key === 'tags') {
|
||||||
|
return [key, value.map((tag) => ({
|
||||||
|
id: tag.id,
|
||||||
|
name: tag.actorId
|
||||||
|
? `${actorsById.value[tag.actorId]?.name}: ${tagsById.value[tag.id]?.name}`
|
||||||
|
: tagsById.value[tag.id]?.name,
|
||||||
|
modified: revision.deltas.some((delta) => delta.key === key && !delta.value.some((deltaTag) => deltaTag.id === tag.id)),
|
||||||
|
}))];
|
||||||
|
}
|
||||||
|
|
||||||
if (key === 'socials') {
|
if (key === 'socials') {
|
||||||
// new socials don't have IDs yet, so we need to compare the values
|
// new socials don't have IDs yet, so we need to compare the values
|
||||||
return [key, value.map((item) => ({
|
return [key, value.map((item) => ({
|
||||||
@@ -323,6 +333,19 @@ const curatedRevisions = computed(() => revisions.value.map((revision) => {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (delta.key === 'tags') {
|
||||||
|
return {
|
||||||
|
...delta,
|
||||||
|
value: delta.value.map((tag) => ({
|
||||||
|
id: tag.id,
|
||||||
|
name: tag.actorId
|
||||||
|
? `${actorsById.value[tag.actorId]?.name}: ${tagsById.value[tag.id]?.name}`
|
||||||
|
: tagsById.value[tag.id]?.name,
|
||||||
|
modified: !revision.base[delta.key].some((deltaTag) => deltaTag.id === tag.id),
|
||||||
|
})),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
if (delta.key === 'socials') {
|
if (delta.key === 'socials') {
|
||||||
// new socials don't have IDs yet, so we need to compare the values
|
// new socials don't have IDs yet, so we need to compare the values
|
||||||
return {
|
return {
|
||||||
|
|||||||
4
package-lock.json
generated
4
package-lock.json
generated
@@ -1,11 +1,11 @@
|
|||||||
{
|
{
|
||||||
"name": "traxxx-web",
|
"name": "traxxx-web",
|
||||||
"version": "0.49.0",
|
"version": "0.49.1",
|
||||||
"lockfileVersion": 2,
|
"lockfileVersion": 2,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"version": "0.49.0",
|
"version": "0.49.1",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@brillout/json-serializer": "^0.5.8",
|
"@brillout/json-serializer": "^0.5.8",
|
||||||
"@dicebear/collection": "^7.0.5",
|
"@dicebear/collection": "^7.0.5",
|
||||||
|
|||||||
@@ -92,7 +92,7 @@
|
|||||||
"overrides": {
|
"overrides": {
|
||||||
"vite": "$vite"
|
"vite": "$vite"
|
||||||
},
|
},
|
||||||
"version": "0.49.0",
|
"version": "0.49.1",
|
||||||
"imports": {
|
"imports": {
|
||||||
"#/*": "./*.js"
|
"#/*": "./*.js"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -729,8 +729,14 @@ export async function fetchSceneRevisions(revisionId, filters = {}, reqUser) {
|
|||||||
.limit(limit)
|
.limit(limit)
|
||||||
.offset((page - 1) * limit);
|
.offset((page - 1) * limit);
|
||||||
|
|
||||||
const actorIds = Array.from(new Set(revisions.flatMap((revision) => [...revision.base.actors, ...(revision.deltas.find((delta) => delta.key === 'actors')?.value || [])])));
|
const actorIds = Array.from(new Set(revisions.flatMap((revision) => [
|
||||||
const tagIds = Array.from(new Set(revisions.flatMap((revision) => [...revision.base.tags, ...(revision.deltas.find((delta) => delta.key === 'tags')?.value || [])])));
|
...revision.base.actors,
|
||||||
|
...(revision.deltas.find((delta) => delta.key === 'actors')?.value || []),
|
||||||
|
...revision.base.tags.map((tag) => tag.actorId),
|
||||||
|
...revision.deltas.find((delta) => delta.key === 'tags')?.value.map((tag) => tag.actorId) || [],
|
||||||
|
].filter(Boolean))));
|
||||||
|
|
||||||
|
const tagIds = Array.from(new Set(revisions.flatMap((revision) => [...revision.base.tags, ...(revision.deltas.find((delta) => delta.key === 'tags')?.value || [])].map((tag) => tag.id))));
|
||||||
const movieIds = Array.from(new Set(revisions.flatMap((revision) => [...revision.base.movies, ...(revision.deltas.find((delta) => delta.key === 'movies')?.value || [])])));
|
const movieIds = Array.from(new Set(revisions.flatMap((revision) => [...revision.base.movies, ...(revision.deltas.find((delta) => delta.key === 'movies')?.value || [])])));
|
||||||
|
|
||||||
const [actors, tags, movies] = await Promise.all([
|
const [actors, tags, movies] = await Promise.all([
|
||||||
@@ -967,6 +973,13 @@ export async function createSceneRevision(sceneId, { edits, comment, apply }, re
|
|||||||
return [key, values.id];
|
return [key, values.id];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (key === 'tags') {
|
||||||
|
return [key, values.map((tag) => ({
|
||||||
|
id: tag.id,
|
||||||
|
actorId: tag.actorId,
|
||||||
|
}))];
|
||||||
|
}
|
||||||
|
|
||||||
if (Array.isArray(values)) {
|
if (Array.isArray(values)) {
|
||||||
return [key, values.map((value) => value?.hash || value?.id || value)];
|
return [key, values.map((value) => value?.hash || value?.id || value)];
|
||||||
}
|
}
|
||||||
@@ -983,6 +996,16 @@ export async function createSceneRevision(sceneId, { edits, comment, apply }, re
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (key === 'tags') {
|
||||||
|
return {
|
||||||
|
key,
|
||||||
|
value: value.map((tag) => ({
|
||||||
|
id: tag.id,
|
||||||
|
actorId: tag.actorId,
|
||||||
|
})),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
if (Array.isArray(value)) {
|
if (Array.isArray(value)) {
|
||||||
const valueSet = new Set(value);
|
const valueSet = new Set(value);
|
||||||
const baseSet = new Set(baseScene[key]);
|
const baseSet = new Set(baseScene[key]);
|
||||||
|
|||||||
80
src/tools/scene_tag_revision_fix.js
Normal file
80
src/tools/scene_tag_revision_fix.js
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
import { MerkleJson } from 'merkle-json';
|
||||||
|
|
||||||
|
import knex from '../knex.js';
|
||||||
|
|
||||||
|
const mj = new MerkleJson();
|
||||||
|
|
||||||
|
function curateTag(tag) {
|
||||||
|
if (Object.hasOwn(tag, 'actorId')) {
|
||||||
|
return {
|
||||||
|
id: tag.id,
|
||||||
|
actorId: tag.actorId,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof tag === 'number') {
|
||||||
|
return {
|
||||||
|
id: tag,
|
||||||
|
// can't restore actorId, don't set to null to hint at missing data
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new Error(`Unrecognized tag delta: ${JSON.stringify(tag)}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
async function init() {
|
||||||
|
const revisions = await knex('scenes_revisions');
|
||||||
|
|
||||||
|
// console.log(revisions);
|
||||||
|
|
||||||
|
const fixedRevisions = revisions.map((revision) => {
|
||||||
|
if (revision.base.tags.length === 0 && !revision.deltas.some((delta) => delta.key === 'tags')) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
const newDeltas = revision.deltas.map((delta) => {
|
||||||
|
if (delta.key !== 'tags') {
|
||||||
|
return delta;
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
...delta,
|
||||||
|
value: delta.value.map((tag) => curateTag(tag)),
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
const newBase = {
|
||||||
|
...revision.base,
|
||||||
|
tags: revision.base.tags.map((tag) => curateTag(tag)),
|
||||||
|
};
|
||||||
|
|
||||||
|
return {
|
||||||
|
...revision,
|
||||||
|
deltas: newDeltas,
|
||||||
|
base: newBase,
|
||||||
|
};
|
||||||
|
}).filter(Boolean);
|
||||||
|
|
||||||
|
const entries = fixedRevisions.map((revision) => ({
|
||||||
|
id: revision.id,
|
||||||
|
base: JSON.stringify(revision.base),
|
||||||
|
deltas: JSON.stringify(revision.deltas),
|
||||||
|
hash: mj.hash({
|
||||||
|
base: revision.base,
|
||||||
|
deltas: revision.deltas,
|
||||||
|
}),
|
||||||
|
}));
|
||||||
|
|
||||||
|
console.log(entries);
|
||||||
|
|
||||||
|
await knex('scenes_revisions')
|
||||||
|
.insert(entries)
|
||||||
|
.onConflict('id')
|
||||||
|
.merge(['base', 'deltas', 'hash']);
|
||||||
|
|
||||||
|
console.log(`Fixed ${entries.length} revisions`);
|
||||||
|
|
||||||
|
await knex.destroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
init();
|
||||||
Reference in New Issue
Block a user