chore(392): regenerate migration + OpenAPI + decisions catalog after rebase onto main
Build ErsatzTV Image / Formatting (changed .cs conform to .editorconfig) (pull_request) Successful in 27s
PR Gates / Docs update reminder (pull_request) Successful in 38s
PR Gates / CI image pin matches docker/ci (pull_request) Successful in 34s
PR Gates / decisions lifecycle (pull_request) Failing after 43s
Build ErsatzTV Image / API docs in sync (OpenAPI + endpoint index) (pull_request) Successful in 14m55s
Build ErsatzTV Image / Functional E2E (curl contracts) (pull_request) Successful in 18m23s
Build ErsatzTV Image / Build & test (.NET) (pull_request) Successful in 22m58s
Build ErsatzTV Image / EF migration integrity (SQLite + MySql) (pull_request) Successful in 23m49s
Build ErsatzTV Image / Build & push image (amd64) (pull_request) Has been skipped

The rebase onto origin/main (which merged #74's ChannelGraphicsElement
migration) left the PadToNearestMinute migration's embedded Designer.cs
model snapshot stale — it still reflected the pre-#74 model, so EF's
diff against it produced an empty Up()/Down() when naively regenerated.
Reset TvContextModelSnapshot.cs to origin/main's true post-#74 state,
then re-ran scripts/add-migration.sh so the migration's Designer.cs
correctly folds in ChannelGraphicsElement and the migration's Up() adds
only the PadToNearestMinute column. Verified has-pending-model-changes
is clean for both providers.

OpenAPI (v1.json/v1.d.ts/endpoint-index.md) and docs/decisions/README.md
regenerated identically to the auto-merged state, so nothing to commit
there — confirmed both padToNearestMinute and #74's graphics-elements
endpoints/decision key are present.

Stripped a UTF-8 BOM this dotnet-ef/dotnet-format toolchain wrote into
the regenerated migration + snapshot files (known BOM trap, ersatztv#311).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-23 08:18:15 +02:00
co-authored by Claude Opus 4.8
parent 767f96802e
commit 60fecd18b7
4 changed files with 78 additions and 2 deletions
@@ -12,7 +12,7 @@ using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
namespace ErsatzTV.Infrastructure.MySql.Migrations
{
[DbContext(typeof(TvContext))]
[Migration("20260722194743_Add_ProgramSchedule_PadToNearestMinute")]
[Migration("20260723061238_Add_ProgramSchedule_PadToNearestMinute")]
partial class Add_ProgramSchedule_PadToNearestMinute
{
/// <inheritdoc />
@@ -406,6 +406,21 @@ namespace ErsatzTV.Infrastructure.MySql.Migrations
b.ToTable("Channel", (string)null);
});
modelBuilder.Entity("ErsatzTV.Core.Domain.ChannelGraphicsElement", b =>
{
b.Property<int>("ChannelId")
.HasColumnType("int");
b.Property<int>("GraphicsElementId")
.HasColumnType("int");
b.HasKey("ChannelId", "GraphicsElementId");
b.HasIndex("GraphicsElementId");
b.ToTable("ChannelGraphicsElement");
});
modelBuilder.Entity("ErsatzTV.Core.Domain.ChannelTemplate", b =>
{
b.Property<int>("Id")
@@ -4739,6 +4754,25 @@ namespace ErsatzTV.Infrastructure.MySql.Migrations
b.Navigation("Watermark");
});
modelBuilder.Entity("ErsatzTV.Core.Domain.ChannelGraphicsElement", b =>
{
b.HasOne("ErsatzTV.Core.Domain.Channel", "Channel")
.WithMany("ChannelGraphicsElements")
.HasForeignKey("ChannelId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("ErsatzTV.Core.Domain.GraphicsElement", "GraphicsElement")
.WithMany("ChannelGraphicsElements")
.HasForeignKey("GraphicsElementId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Channel");
b.Navigation("GraphicsElement");
});
modelBuilder.Entity("ErsatzTV.Core.Domain.ChannelTemplate", b =>
{
b.HasOne("ErsatzTV.Core.Domain.FFmpegProfile", "FFmpegProfile")
@@ -6784,6 +6818,8 @@ namespace ErsatzTV.Infrastructure.MySql.Migrations
{
b.Navigation("Artwork");
b.Navigation("ChannelGraphicsElements");
b.Navigation("Playouts");
});
@@ -6830,6 +6866,8 @@ namespace ErsatzTV.Infrastructure.MySql.Migrations
{
b.Navigation("BlockItemGraphicsElements");
b.Navigation("ChannelGraphicsElements");
b.Navigation("DecoGraphicsElements");
b.Navigation("PlayoutItemGraphicsElements");
@@ -11,7 +11,7 @@ using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
namespace ErsatzTV.Infrastructure.Sqlite.Migrations
{
[DbContext(typeof(TvContext))]
[Migration("20260722194624_Add_ProgramSchedule_PadToNearestMinute")]
[Migration("20260723061139_Add_ProgramSchedule_PadToNearestMinute")]
partial class Add_ProgramSchedule_PadToNearestMinute
{
/// <inheritdoc />
@@ -393,6 +393,21 @@ namespace ErsatzTV.Infrastructure.Sqlite.Migrations
b.ToTable("Channel", (string)null);
});
modelBuilder.Entity("ErsatzTV.Core.Domain.ChannelGraphicsElement", b =>
{
b.Property<int>("ChannelId")
.HasColumnType("INTEGER");
b.Property<int>("GraphicsElementId")
.HasColumnType("INTEGER");
b.HasKey("ChannelId", "GraphicsElementId");
b.HasIndex("GraphicsElementId");
b.ToTable("ChannelGraphicsElement");
});
modelBuilder.Entity("ErsatzTV.Core.Domain.ChannelTemplate", b =>
{
b.Property<int>("Id")
@@ -4564,6 +4579,25 @@ namespace ErsatzTV.Infrastructure.Sqlite.Migrations
b.Navigation("Watermark");
});
modelBuilder.Entity("ErsatzTV.Core.Domain.ChannelGraphicsElement", b =>
{
b.HasOne("ErsatzTV.Core.Domain.Channel", "Channel")
.WithMany("ChannelGraphicsElements")
.HasForeignKey("ChannelId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("ErsatzTV.Core.Domain.GraphicsElement", "GraphicsElement")
.WithMany("ChannelGraphicsElements")
.HasForeignKey("GraphicsElementId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Channel");
b.Navigation("GraphicsElement");
});
modelBuilder.Entity("ErsatzTV.Core.Domain.ChannelTemplate", b =>
{
b.HasOne("ErsatzTV.Core.Domain.FFmpegProfile", "FFmpegProfile")
@@ -6609,6 +6643,8 @@ namespace ErsatzTV.Infrastructure.Sqlite.Migrations
{
b.Navigation("Artwork");
b.Navigation("ChannelGraphicsElements");
b.Navigation("Playouts");
});
@@ -6655,6 +6691,8 @@ namespace ErsatzTV.Infrastructure.Sqlite.Migrations
{
b.Navigation("BlockItemGraphicsElements");
b.Navigation("ChannelGraphicsElements");
b.Navigation("DecoGraphicsElements");
b.Navigation("PlayoutItemGraphicsElements");