« get me outta code hell

data, yaml: store data step info on Thing constructors - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src/data/things/artist.js
diff options
context:
space:
mode:
author(quasar) nebula <qznebula@protonmail.com>2024-01-29 08:10:30 -0400
committer(quasar) nebula <qznebula@protonmail.com>2024-01-30 07:59:40 -0400
commiteb8b316bb9af7d34720de1fa8f8dbd4b81513b32 (patch)
tree22d435e702b89344304928b7a860a5326357f192 /src/data/things/artist.js
parentb30585187480a270826767eaf97e1acc66126072 (diff)
data, yaml: store data step info on Thing constructors
Diffstat (limited to 'src/data/things/artist.js')
-rw-r--r--src/data/things/artist.js31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/data/things/artist.js b/src/data/things/artist.js
index ab08f52..8f32afd 100644
--- a/src/data/things/artist.js
+++ b/src/data/things/artist.js
@@ -1,3 +1,5 @@
+export const ARTIST_DATA_FILE = 'artists.yaml';
+
 import {input} from '#composite';
 import find from '#find';
 import {unique} from '#sugar';
@@ -257,4 +259,33 @@ export class Artist extends Thing {
       'Review Points': {ignore: true},
     },
   };
+
+  static [Thing.getYamlLoadingSpec] = ({
+    documentModes: {allInOne},
+    thingConstructors: {Artist},
+  }) => ({
+    title: `Process artists file`,
+    file: ARTIST_DATA_FILE,
+
+    documentMode: allInOne,
+    documentThing: Artist,
+
+    save(results) {
+      const artistData = results;
+
+      const artistAliasData = results.flatMap((artist) => {
+        const origRef = Thing.getReference(artist);
+        return artist.aliasNames?.map((name) => {
+          const alias = new Artist();
+          alias.name = name;
+          alias.isAlias = true;
+          alias.aliasedArtist = origRef;
+          alias.artistData = artistData;
+          return alias;
+        }) ?? [];
+      });
+
+      return {artistData, artistAliasData};
+    },
+  });
 }