diff --git a/Kyoo.Postgresql/Migrations/20210623174932_Triggers.cs b/Kyoo.Postgresql/Migrations/20210623174932_Triggers.cs index ffd88fc3..4ab90659 100644 --- a/Kyoo.Postgresql/Migrations/20210623174932_Triggers.cs +++ b/Kyoo.Postgresql/Migrations/20210623174932_Triggers.cs @@ -26,6 +26,30 @@ namespace Kyoo.Postgresql.Migrations migrationBuilder.Sql(@" CREATE TRIGGER season_slug_trigger BEFORE INSERT OR UPDATE OF season_number, show_id ON seasons FOR EACH ROW EXECUTE PROCEDURE season_slug_update();"); + + + // language=PostgreSQL + migrationBuilder.Sql(@" + CREATE FUNCTION episode_slug_update() + RETURNS TRIGGER + LANGUAGE PLPGSQL + AS $$ + BEGIN + NEW.slug := CONCAT( + (SELECT slug FROM shows WHERE id = NEW.show_id), + '-s', + NEW.season_number, + 'e', + NEW.episode_number + ); + RETURN NEW; + END + $$;"); + + // language=PostgreSQL + migrationBuilder.Sql(@" + CREATE TRIGGER episode_slug_trigger BEFORE INSERT OR UPDATE OF episode_number, season_number, show_id ON episodes + FOR EACH ROW EXECUTE PROCEDURE episode_slug_update();"); // language=PostgreSQL @@ -36,6 +60,7 @@ namespace Kyoo.Postgresql.Migrations AS $$ BEGIN UPDATE seasons SET slug = CONCAT(NEW.slug, '-s', season_number) WHERE show_id = NEW.id; + UPDATE episodes SET slug = CONCAT(NEW.slug, '-s', season_number, 'e', episode_number) WHERE show_id = NEW.id; RETURN NEW; END $$;"); @@ -48,14 +73,18 @@ namespace Kyoo.Postgresql.Migrations protected override void Down(MigrationBuilder migrationBuilder) { - // language=PostgreSQL - migrationBuilder.Sql(@"DROP FUNCTION season_slug_update;"); // language=PostgreSQL migrationBuilder.Sql("DROP TRIGGER show_slug_trigger ON shows;"); // language=PostgreSQL migrationBuilder.Sql(@"DROP FUNCTION show_slug_update;"); // language=PostgreSQL migrationBuilder.Sql(@"DROP TRIGGER season_slug_trigger ON seasons;"); + // language=PostgreSQL + migrationBuilder.Sql(@"DROP FUNCTION season_slug_update;"); + // language=PostgreSQL + migrationBuilder.Sql("DROP TRIGGER episode_slug_trigger ON episodes;"); + // language=PostgreSQL + migrationBuilder.Sql(@"DROP FUNCTION episode_slug_update;"); } } } \ No newline at end of file