« get me outta code hell

checks: report orphaned artworks (groan) - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src/data
diff options
context:
space:
mode:
author(quasar) nebula <qznebula@protonmail.com>2025-04-06 17:01:36 -0300
committer(quasar) nebula <qznebula@protonmail.com>2025-04-10 16:02:40 -0300
commitadc8167190ce173c4389d6e398548fee5e384b54 (patch)
treeccd09f76fd439497667af1581930382e25162542 /src/data
parent2f6da4c157ad0a7e2fea9efd756ac40db14e7ad0 (diff)
checks: report orphaned artworks (groan)
Diffstat (limited to 'src/data')
-rw-r--r--src/data/checks.js46
1 files changed, 46 insertions, 0 deletions
diff --git a/src/data/checks.js b/src/data/checks.js
index 10261e4f..a70f7d06 100644
--- a/src/data/checks.js
+++ b/src/data/checks.js
@@ -795,3 +795,49 @@ export function reportContentTextErrors(wikiData, {
     }
   });
 }
+
+export function reportOrphanedArtworks(wikiData) {
+  const aggregate =
+    openAggregate({message: `Artwork objects are orphaned`});
+
+  const assess = ({
+    message,
+    filterThing,
+    filterContribs,
+    link,
+  }) => {
+    aggregate.nest({message: `Orphaned ${message}`}, ({push}) => {
+      const ostensibleArtworks =
+        wikiData.artworkData
+          .filter(artwork =>
+            artwork.thing instanceof filterThing &&
+            artwork.artistContribsFromThingProperty === filterContribs);
+
+      const orphanedArtworks =
+        ostensibleArtworks
+          .filter(artwork => !artwork.thing[link].includes(artwork));
+
+      for (const artwork of orphanedArtworks) {
+        push(new Error(`Orphaned: ${inspect(artwork)}`));
+      }
+    });
+  };
+
+  const {Album, Track} = thingConstructors;
+
+  assess({
+    message: `album cover artworks`,
+    filterThing: Album,
+    filterContribs: 'coverArtistContribs',
+    link: 'coverArtworks',
+  });
+
+  assess({
+    message: `track artworks`,
+    filterThing: Track,
+    filterContribs: 'coverArtistContribs',
+    link: 'trackArtworks',
+  });
+
+  aggregate.close();
+}