mirror of
https://github.com/SoPat712/allstarr.git
synced 2026-10-06 13:55:39 -04:00
fix(storage): retain playlist import migrations
This commit is contained in:
5 files changed
+115
-1
No files matched your search
@@ -160,7 +160,13 @@ public sealed partial class AllstarrDbContext
|
||||
|
||||
modelBuilder.Entity<PlaylistLinkRecord>(entity =>
|
||||
{
|
||||
entity.ToTable("playlist_links", table => table.HasCheckConstraint("CK_playlist_links_source_hash", "length(\"SourcePlaylistIdHash\") = 64"));
|
||||
entity.ToTable("playlist_links", table =>
|
||||
{
|
||||
table.HasCheckConstraint("CK_playlist_links_source_hash", "length(\"SourcePlaylistIdHash\") = 64");
|
||||
table.HasCheckConstraint("CK_playlist_links_import_mode", "\"ImportMode\" IN ('Linked', 'OneTime')");
|
||||
table.HasCheckConstraint("CK_playlist_links_track_retention", "\"TrackRetention\" IN ('OnDemand', 'KeepAll')");
|
||||
table.HasCheckConstraint("CK_playlist_links_one_time_schedule", "\"ImportMode\" <> 'OneTime' OR \"ScheduleId\" IS NULL");
|
||||
});
|
||||
entity.HasKey(item => item.Id);
|
||||
entity.HasAlternateKey(item => new { item.TenantId, item.Id });
|
||||
entity.Property(item => item.Id).ValueGeneratedNever();
|
||||
@@ -176,6 +182,10 @@ public sealed partial class AllstarrDbContext
|
||||
entity.Property(item => item.ProjectionMode).HasConversion<string>().HasMaxLength(32)
|
||||
.HasDefaultValue(PlaylistProjectionMode.Resolved);
|
||||
entity.Property(item => item.MaterializationMode).HasConversion<string>().HasMaxLength(32);
|
||||
entity.Property(item => item.ImportMode).HasConversion<string>().HasMaxLength(32)
|
||||
.HasDefaultValue(PlaylistImportMode.Linked);
|
||||
entity.Property(item => item.TrackRetention).HasConversion<string>().HasMaxLength(32)
|
||||
.HasDefaultValue(PlaylistTrackRetention.OnDemand);
|
||||
Required(entity.Property(item => item.RuleVersion), 100);
|
||||
Required(entity.Property(item => item.PolicyVersion), 100);
|
||||
entity.Property(item => item.Revision).IsConcurrencyToken();
|
||||
|
||||
@@ -5,6 +5,8 @@ public enum ManualOverrideDecision { Pin, Reject }
|
||||
public enum PlaylistLinkMode { Virtual, Materialized, Hybrid }
|
||||
public enum PlaylistProjectionMode { Resolved, Source, Target }
|
||||
public enum PlaylistMaterializationMode { Reconcile, Recreate }
|
||||
public enum PlaylistImportMode { Linked, OneTime }
|
||||
public enum PlaylistTrackRetention { OnDemand, KeepAll }
|
||||
public enum PlaylistSyncState { Pending, Running, Succeeded, PartiallySucceeded, Conflicted, Failed, Cancelled }
|
||||
public enum PlaylistEntryOutcome { Matched, Reused, Added, Reordered, Skipped, Rejected, Unsupported, Failed }
|
||||
public enum ScheduleOverlapPolicy { Skip, Queue }
|
||||
@@ -147,6 +149,8 @@ public sealed class PlaylistLinkRecord
|
||||
public PlaylistLinkMode Mode { get; set; }
|
||||
public PlaylistProjectionMode ProjectionMode { get; set; } = PlaylistProjectionMode.Resolved;
|
||||
public PlaylistMaterializationMode MaterializationMode { get; set; }
|
||||
public PlaylistImportMode ImportMode { get; set; } = PlaylistImportMode.Linked;
|
||||
public PlaylistTrackRetention TrackRetention { get; set; } = PlaylistTrackRetention.OnDemand;
|
||||
public bool MirrorStaleEntries { get; set; }
|
||||
public bool PreserveManualEntries { get; set; } = true;
|
||||
public bool SyncName { get; set; } = true;
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace allstarr.Core.Storage.Migrations;
|
||||
|
||||
[DbContext(typeof(AllstarrDbContext))]
|
||||
[Migration("20260825010000_AddPlaylistImportPolicies")]
|
||||
public sealed class AddPlaylistImportPolicies : Migration
|
||||
{
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.AddColumn<string>(
|
||||
name: "ImportMode",
|
||||
table: "playlist_links",
|
||||
type: "character varying(32)",
|
||||
maxLength: 32,
|
||||
nullable: false,
|
||||
defaultValue: "Linked");
|
||||
|
||||
migrationBuilder.AddColumn<string>(
|
||||
name: "TrackRetention",
|
||||
table: "playlist_links",
|
||||
type: "character varying(32)",
|
||||
maxLength: 32,
|
||||
nullable: false,
|
||||
defaultValue: "OnDemand");
|
||||
}
|
||||
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropColumn(name: "ImportMode", table: "playlist_links");
|
||||
migrationBuilder.DropColumn(name: "TrackRetention", table: "playlist_links");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace allstarr.Core.Storage.Migrations;
|
||||
|
||||
[DbContext(typeof(AllstarrDbContext))]
|
||||
[Migration("20260825020000_EnforcePlaylistImportPolicies")]
|
||||
public sealed class EnforcePlaylistImportPolicies : Migration
|
||||
{
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.AddCheckConstraint(
|
||||
name: "CK_playlist_links_import_mode",
|
||||
table: "playlist_links",
|
||||
sql: "\"ImportMode\" IN ('Linked', 'OneTime')");
|
||||
|
||||
migrationBuilder.AddCheckConstraint(
|
||||
name: "CK_playlist_links_track_retention",
|
||||
table: "playlist_links",
|
||||
sql: "\"TrackRetention\" IN ('OnDemand', 'KeepAll')");
|
||||
|
||||
migrationBuilder.AddCheckConstraint(
|
||||
name: "CK_playlist_links_one_time_schedule",
|
||||
table: "playlist_links",
|
||||
sql: "\"ImportMode\" <> 'OneTime' OR \"ScheduleId\" IS NULL");
|
||||
}
|
||||
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropCheckConstraint(
|
||||
name: "CK_playlist_links_import_mode",
|
||||
table: "playlist_links");
|
||||
|
||||
migrationBuilder.DropCheckConstraint(
|
||||
name: "CK_playlist_links_track_retention",
|
||||
table: "playlist_links");
|
||||
|
||||
migrationBuilder.DropCheckConstraint(
|
||||
name: "CK_playlist_links_one_time_schedule",
|
||||
table: "playlist_links");
|
||||
}
|
||||
}
|
||||
@@ -3303,6 +3303,13 @@ namespace allstarr.Core.Storage.Migrations
|
||||
.HasColumnType("boolean")
|
||||
.HasDefaultValue(true);
|
||||
|
||||
b.Property<string>("ImportMode")
|
||||
.IsRequired()
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasMaxLength(32)
|
||||
.HasColumnType("character varying(32)")
|
||||
.HasDefaultValue("Linked");
|
||||
|
||||
b.Property<string>("LibraryScopeId")
|
||||
.IsRequired()
|
||||
.HasMaxLength(300)
|
||||
@@ -3395,6 +3402,13 @@ namespace allstarr.Core.Storage.Migrations
|
||||
.HasMaxLength(32)
|
||||
.HasColumnType("character varying(32)");
|
||||
|
||||
b.Property<string>("TrackRetention")
|
||||
.IsRequired()
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasMaxLength(32)
|
||||
.HasColumnType("character varying(32)")
|
||||
.HasDefaultValue("OnDemand");
|
||||
|
||||
b.Property<Guid>("TenantId")
|
||||
.HasColumnType("uuid");
|
||||
|
||||
@@ -3413,7 +3427,13 @@ namespace allstarr.Core.Storage.Migrations
|
||||
|
||||
b.ToTable("playlist_links", null, t =>
|
||||
{
|
||||
t.HasCheckConstraint("CK_playlist_links_import_mode", "\"ImportMode\" IN ('Linked', 'OneTime')");
|
||||
|
||||
t.HasCheckConstraint("CK_playlist_links_one_time_schedule", "\"ImportMode\" <> 'OneTime' OR \"ScheduleId\" IS NULL");
|
||||
|
||||
t.HasCheckConstraint("CK_playlist_links_source_hash", "length(\"SourcePlaylistIdHash\") = 64");
|
||||
|
||||
t.HasCheckConstraint("CK_playlist_links_track_retention", "\"TrackRetention\" IN ('OnDemand', 'KeepAll')");
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
Reference in new issue
Block a user