From c7c9eaf74cb0edc7facea961d3d303c87f1bb516 Mon Sep 17 00:00:00 2001
From: Janne Koschinski <janne@kuschku.de>
Date: Fri, 25 Sep 2020 13:38:47 +0200
Subject: [PATCH] Clean up relationships

---
 src/metadata_loader.js | 12 ++++++------
 src/storage.js         | 30 ++++++++++++++++++++++--------
 2 files changed, 28 insertions(+), 14 deletions(-)

diff --git a/src/metadata_loader.js b/src/metadata_loader.js
index 3229e2b..9866279 100644
--- a/src/metadata_loader.js
+++ b/src/metadata_loader.js
@@ -168,12 +168,12 @@ class MetadataLoader {
         const showTitle = await Title.findByPk(ids.uuid);
         const [mapping] = await TitleEpisode.findOrBuild({
             where: {
-                parent_id: showTitle.id,
+                show_id: showTitle.id,
                 season_number: episodeIdentifier.season,
                 episode_number: episodeIdentifier.episode,
             },
             defaults: {
-                episode_id: uuidv4,
+                episode_id: uuidv4(),
             }
         })
         const [episodeTitle] = await Title.upsert({
@@ -185,10 +185,10 @@ class MetadataLoader {
             runtime: imdbResult.runtime,
         }, {returning: true});
         mapping.air_date = tmdbResult.air_date;
-        await mapping.setParent(showTitle, {save: false});
-        await mapping.save();
-        await episodeTitle.setParent(mapping, { save: false});
         await episodeTitle.save();
+        await mapping.setEpisode(episodeTitle, {save: false});
+        await mapping.setShow(showTitle, {save: false});
+        await mapping.save();
         await TitleName.destroy({
             where: {
                 title_id: episodeTitle.id,
@@ -475,7 +475,7 @@ class MetadataLoader {
 
         const isShow = titleType === "tvSeries";
         const fanartSource = isShow ?
-            `tv/${ids.tmdb}` :
+            `tv/${ids.tvdb}` :
             `movies/${ids.tmdb}`;
 
         const [
diff --git a/src/storage.js b/src/storage.js
index 16f7570..fe9b3bb 100644
--- a/src/storage.js
+++ b/src/storage.js
@@ -170,7 +170,7 @@ class Backend {
             indexes: [
                 {
                     fields: [
-                        'parent_id',
+                        'show_id',
                         {
                             attribute: 'season_number',
                             collate: 'C',
@@ -186,7 +186,7 @@ class Backend {
                 {
                     using: 'BTREE',
                     fields: [
-                        'parent_id',
+                        'show_id',
                         {
                             attribute: 'air_date',
                             order: 'ASC',
@@ -196,19 +196,33 @@ class Backend {
             ]
         });
         TitleEpisode.belongsTo(Title, {
-            as: "Parent",
+            as: "Show",
             foreignKey: {
-                name: "parent_id",
+                name: "show_id",
                 allowNull: false,
             }
-        })
+        });
+        TitleEpisode.belongsTo(Title, {
+            as: "Episode",
+            foreignKey: {
+                name: "episode_id",
+                allowNull: false,
+            }
+        });
         Title.hasMany(TitleEpisode, {
-            as: "Parent",
+            as: "Show",
             foreignKey: {
-                name: "parent_id",
+                name: "show_id",
                 allowNull: true,
             }
-        })
+        });
+        Title.hasOne(TitleEpisode, {
+            as: "Episode",
+            foreignKey: {
+                name: "episode_id",
+                allowNull: true,
+            }
+        });
         TitleGenre.init({
             id: {
                 type: sequelize.DataTypes.UUID,
-- 
GitLab