dbd90ee52a
Player-service play-session tracker (floor + 3-bucket classify), SharePopover share tracker with debounce, sendBeacon interop, proxied rate-limited POST api/event/{play,share}, append-only event logs + incremental play_counter with server-side release resolution. Migration authored, not applied. No anonId, no read surface.
458 lines
18 KiB
C#
458 lines
18 KiB
C#
// <auto-generated />
|
|
using System;
|
|
using DeepDrftData.Data;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
|
using Microsoft.EntityFrameworkCore.Migrations;
|
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
|
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
|
|
|
|
#nullable disable
|
|
|
|
namespace DeepDrftData.Migrations
|
|
{
|
|
[DbContext(typeof(DeepDrftContext))]
|
|
[Migration("20260619155610_AddPlayShareTelemetry")]
|
|
partial class AddPlayShareTelemetry
|
|
{
|
|
/// <inheritdoc />
|
|
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
|
{
|
|
#pragma warning disable 612, 618
|
|
modelBuilder
|
|
.HasAnnotation("ProductVersion", "10.0.7")
|
|
.HasAnnotation("Relational:MaxIdentifierLength", 63);
|
|
|
|
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
|
|
|
|
modelBuilder.Entity("DeepDrftModels.Entities.MixMetadata", b =>
|
|
{
|
|
b.Property<long>("Id")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("bigint")
|
|
.HasColumnName("id");
|
|
|
|
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
|
|
|
|
b.Property<DateTime>("CreatedAt")
|
|
.HasColumnType("timestamp with time zone")
|
|
.HasColumnName("created_at");
|
|
|
|
b.Property<bool>("IsDeleted")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("boolean")
|
|
.HasDefaultValue(false)
|
|
.HasColumnName("is_deleted");
|
|
|
|
b.Property<long>("ReleaseId")
|
|
.HasColumnType("bigint")
|
|
.HasColumnName("release_id");
|
|
|
|
b.Property<DateTime>("UpdatedAt")
|
|
.HasColumnType("timestamp with time zone")
|
|
.HasColumnName("updated_at");
|
|
|
|
b.Property<string>("WaveformEntryKey")
|
|
.IsRequired()
|
|
.HasMaxLength(500)
|
|
.HasColumnType("character varying(500)")
|
|
.HasColumnName("waveform_entry_key");
|
|
|
|
b.HasKey("Id");
|
|
|
|
b.HasIndex("IsDeleted")
|
|
.HasDatabaseName("IX_mix_metadata_is_deleted");
|
|
|
|
b.HasIndex("ReleaseId")
|
|
.IsUnique()
|
|
.HasDatabaseName("IX_mix_metadata_release_id");
|
|
|
|
b.ToTable("mix_metadata", (string)null);
|
|
});
|
|
|
|
modelBuilder.Entity("DeepDrftModels.Entities.PlayCounter", b =>
|
|
{
|
|
b.Property<long>("Id")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("bigint")
|
|
.HasColumnName("id");
|
|
|
|
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
|
|
|
|
b.Property<long>("CompleteCount")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("bigint")
|
|
.HasDefaultValue(0L)
|
|
.HasColumnName("complete_count");
|
|
|
|
b.Property<long>("PartialCount")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("bigint")
|
|
.HasDefaultValue(0L)
|
|
.HasColumnName("partial_count");
|
|
|
|
b.Property<long>("SampledCount")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("bigint")
|
|
.HasDefaultValue(0L)
|
|
.HasColumnName("sampled_count");
|
|
|
|
b.Property<long>("TrackId")
|
|
.HasColumnType("bigint")
|
|
.HasColumnName("track_id");
|
|
|
|
b.HasKey("Id");
|
|
|
|
b.HasIndex("TrackId")
|
|
.IsUnique()
|
|
.HasDatabaseName("IX_play_counter_track_id");
|
|
|
|
b.ToTable("play_counter", (string)null);
|
|
});
|
|
|
|
modelBuilder.Entity("DeepDrftModels.Entities.PlayEvent", b =>
|
|
{
|
|
b.Property<long>("Id")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("bigint")
|
|
.HasColumnName("id");
|
|
|
|
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
|
|
|
|
b.Property<string>("AnonId")
|
|
.HasMaxLength(64)
|
|
.HasColumnType("character varying(64)")
|
|
.HasColumnName("anon_id");
|
|
|
|
b.Property<string>("Bucket")
|
|
.IsRequired()
|
|
.HasMaxLength(20)
|
|
.HasColumnType("character varying(20)")
|
|
.HasColumnName("bucket");
|
|
|
|
b.Property<DateTime>("CreatedAt")
|
|
.HasColumnType("timestamp with time zone")
|
|
.HasColumnName("created_at");
|
|
|
|
b.Property<long?>("ReleaseId")
|
|
.HasColumnType("bigint")
|
|
.HasColumnName("release_id");
|
|
|
|
b.Property<string>("TrackEntryKey")
|
|
.IsRequired()
|
|
.HasMaxLength(100)
|
|
.HasColumnType("character varying(100)")
|
|
.HasColumnName("track_entry_key");
|
|
|
|
b.HasKey("Id");
|
|
|
|
b.HasIndex("AnonId")
|
|
.HasDatabaseName("IX_play_event_anon_id");
|
|
|
|
b.HasIndex("ReleaseId")
|
|
.HasDatabaseName("IX_play_event_release_id");
|
|
|
|
b.HasIndex("TrackEntryKey")
|
|
.HasDatabaseName("IX_play_event_track_entry_key");
|
|
|
|
b.ToTable("play_event", (string)null);
|
|
});
|
|
|
|
modelBuilder.Entity("DeepDrftModels.Entities.ReleaseEntity", b =>
|
|
{
|
|
b.Property<long>("Id")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("bigint")
|
|
.HasColumnName("id");
|
|
|
|
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
|
|
|
|
b.Property<string>("Artist")
|
|
.IsRequired()
|
|
.HasMaxLength(200)
|
|
.HasColumnType("character varying(200)")
|
|
.HasColumnName("artist");
|
|
|
|
b.Property<DateTime>("CreatedAt")
|
|
.HasColumnType("timestamp with time zone")
|
|
.HasColumnName("created_at");
|
|
|
|
b.Property<long?>("CreatedByUserId")
|
|
.HasColumnType("bigint")
|
|
.HasColumnName("created_by_user_id");
|
|
|
|
b.Property<string>("Description")
|
|
.HasMaxLength(4000)
|
|
.HasColumnType("character varying(4000)")
|
|
.HasColumnName("description");
|
|
|
|
b.Property<string>("EntryKey")
|
|
.IsRequired()
|
|
.HasMaxLength(100)
|
|
.HasColumnType("character varying(100)")
|
|
.HasColumnName("entry_key");
|
|
|
|
b.Property<string>("Genre")
|
|
.HasMaxLength(100)
|
|
.HasColumnType("character varying(100)")
|
|
.HasColumnName("genre");
|
|
|
|
b.Property<string>("ImagePath")
|
|
.HasMaxLength(500)
|
|
.HasColumnType("character varying(500)")
|
|
.HasColumnName("image_path");
|
|
|
|
b.Property<bool>("IsDeleted")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("boolean")
|
|
.HasDefaultValue(false)
|
|
.HasColumnName("is_deleted");
|
|
|
|
b.Property<string>("Medium")
|
|
.IsRequired()
|
|
.ValueGeneratedOnAdd()
|
|
.HasMaxLength(20)
|
|
.HasColumnType("character varying(20)")
|
|
.HasDefaultValue("Cut")
|
|
.HasColumnName("medium");
|
|
|
|
b.Property<DateOnly?>("ReleaseDate")
|
|
.HasColumnType("date")
|
|
.HasColumnName("release_date");
|
|
|
|
b.Property<string>("ReleaseType")
|
|
.IsRequired()
|
|
.ValueGeneratedOnAdd()
|
|
.HasMaxLength(20)
|
|
.HasColumnType("character varying(20)")
|
|
.HasDefaultValue("Single")
|
|
.HasColumnName("release_type");
|
|
|
|
b.Property<string>("Title")
|
|
.IsRequired()
|
|
.HasMaxLength(200)
|
|
.HasColumnType("character varying(200)")
|
|
.HasColumnName("title");
|
|
|
|
b.Property<DateTime>("UpdatedAt")
|
|
.HasColumnType("timestamp with time zone")
|
|
.HasColumnName("updated_at");
|
|
|
|
b.HasKey("Id");
|
|
|
|
b.HasIndex("EntryKey")
|
|
.IsUnique()
|
|
.HasDatabaseName("IX_release_entry_key");
|
|
|
|
b.HasIndex("IsDeleted")
|
|
.HasDatabaseName("IX_release_is_deleted");
|
|
|
|
b.HasIndex("Title", "Artist")
|
|
.IsUnique()
|
|
.HasDatabaseName("IX_release_title_artist")
|
|
.HasFilter("\"is_deleted\" = false");
|
|
|
|
b.ToTable("release", (string)null);
|
|
});
|
|
|
|
modelBuilder.Entity("DeepDrftModels.Entities.SessionMetadata", b =>
|
|
{
|
|
b.Property<long>("Id")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("bigint")
|
|
.HasColumnName("id");
|
|
|
|
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
|
|
|
|
b.Property<DateTime>("CreatedAt")
|
|
.HasColumnType("timestamp with time zone")
|
|
.HasColumnName("created_at");
|
|
|
|
b.Property<string>("HeroImageEntryKey")
|
|
.IsRequired()
|
|
.HasMaxLength(500)
|
|
.HasColumnType("character varying(500)")
|
|
.HasColumnName("hero_image_entry_key");
|
|
|
|
b.Property<bool>("IsDeleted")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("boolean")
|
|
.HasDefaultValue(false)
|
|
.HasColumnName("is_deleted");
|
|
|
|
b.Property<long>("ReleaseId")
|
|
.HasColumnType("bigint")
|
|
.HasColumnName("release_id");
|
|
|
|
b.Property<DateTime>("UpdatedAt")
|
|
.HasColumnType("timestamp with time zone")
|
|
.HasColumnName("updated_at");
|
|
|
|
b.HasKey("Id");
|
|
|
|
b.HasIndex("IsDeleted")
|
|
.HasDatabaseName("IX_session_metadata_is_deleted");
|
|
|
|
b.HasIndex("ReleaseId")
|
|
.IsUnique()
|
|
.HasDatabaseName("IX_session_metadata_release_id");
|
|
|
|
b.ToTable("session_metadata", (string)null);
|
|
});
|
|
|
|
modelBuilder.Entity("DeepDrftModels.Entities.ShareEvent", b =>
|
|
{
|
|
b.Property<long>("Id")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("bigint")
|
|
.HasColumnName("id");
|
|
|
|
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
|
|
|
|
b.Property<string>("AnonId")
|
|
.HasMaxLength(64)
|
|
.HasColumnType("character varying(64)")
|
|
.HasColumnName("anon_id");
|
|
|
|
b.Property<string>("Channel")
|
|
.IsRequired()
|
|
.HasMaxLength(20)
|
|
.HasColumnType("character varying(20)")
|
|
.HasColumnName("channel");
|
|
|
|
b.Property<DateTime>("CreatedAt")
|
|
.HasColumnType("timestamp with time zone")
|
|
.HasColumnName("created_at");
|
|
|
|
b.Property<string>("TargetKey")
|
|
.IsRequired()
|
|
.HasMaxLength(100)
|
|
.HasColumnType("character varying(100)")
|
|
.HasColumnName("target_key");
|
|
|
|
b.Property<string>("TargetType")
|
|
.IsRequired()
|
|
.HasMaxLength(20)
|
|
.HasColumnType("character varying(20)")
|
|
.HasColumnName("target_type");
|
|
|
|
b.HasKey("Id");
|
|
|
|
b.HasIndex("AnonId")
|
|
.HasDatabaseName("IX_share_event_anon_id");
|
|
|
|
b.HasIndex("TargetKey")
|
|
.HasDatabaseName("IX_share_event_target_key");
|
|
|
|
b.ToTable("share_event", (string)null);
|
|
});
|
|
|
|
modelBuilder.Entity("DeepDrftModels.Entities.TrackEntity", b =>
|
|
{
|
|
b.Property<long>("Id")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("bigint")
|
|
.HasColumnName("id");
|
|
|
|
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<long>("Id"));
|
|
|
|
b.Property<DateTime>("CreatedAt")
|
|
.HasColumnType("timestamp with time zone")
|
|
.HasColumnName("created_at");
|
|
|
|
b.Property<double?>("DurationSeconds")
|
|
.HasColumnType("double precision")
|
|
.HasColumnName("duration_seconds");
|
|
|
|
b.Property<string>("EntryKey")
|
|
.IsRequired()
|
|
.HasMaxLength(100)
|
|
.HasColumnType("character varying(100)")
|
|
.HasColumnName("entry_key");
|
|
|
|
b.Property<bool>("IsDeleted")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("boolean")
|
|
.HasDefaultValue(false)
|
|
.HasColumnName("is_deleted");
|
|
|
|
b.Property<string>("OriginalFileName")
|
|
.HasMaxLength(500)
|
|
.HasColumnType("character varying(500)")
|
|
.HasColumnName("original_file_name");
|
|
|
|
b.Property<long?>("ReleaseId")
|
|
.HasColumnType("bigint")
|
|
.HasColumnName("release_id");
|
|
|
|
b.Property<string>("TrackName")
|
|
.IsRequired()
|
|
.HasMaxLength(200)
|
|
.HasColumnType("character varying(200)")
|
|
.HasColumnName("track_name");
|
|
|
|
b.Property<int>("TrackNumber")
|
|
.ValueGeneratedOnAdd()
|
|
.HasColumnType("integer")
|
|
.HasDefaultValue(1)
|
|
.HasColumnName("track_number");
|
|
|
|
b.Property<DateTime>("UpdatedAt")
|
|
.HasColumnType("timestamp with time zone")
|
|
.HasColumnName("updated_at");
|
|
|
|
b.HasKey("Id");
|
|
|
|
b.HasIndex("IsDeleted")
|
|
.HasDatabaseName("IX_track_is_deleted");
|
|
|
|
b.HasIndex("ReleaseId");
|
|
|
|
b.ToTable("track", (string)null);
|
|
});
|
|
|
|
modelBuilder.Entity("DeepDrftModels.Entities.MixMetadata", b =>
|
|
{
|
|
b.HasOne("DeepDrftModels.Entities.ReleaseEntity", "Release")
|
|
.WithOne("MixMetadata")
|
|
.HasForeignKey("DeepDrftModels.Entities.MixMetadata", "ReleaseId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired();
|
|
|
|
b.Navigation("Release");
|
|
});
|
|
|
|
modelBuilder.Entity("DeepDrftModels.Entities.SessionMetadata", b =>
|
|
{
|
|
b.HasOne("DeepDrftModels.Entities.ReleaseEntity", "Release")
|
|
.WithOne("SessionMetadata")
|
|
.HasForeignKey("DeepDrftModels.Entities.SessionMetadata", "ReleaseId")
|
|
.OnDelete(DeleteBehavior.Cascade)
|
|
.IsRequired();
|
|
|
|
b.Navigation("Release");
|
|
});
|
|
|
|
modelBuilder.Entity("DeepDrftModels.Entities.TrackEntity", b =>
|
|
{
|
|
b.HasOne("DeepDrftModels.Entities.ReleaseEntity", "Release")
|
|
.WithMany("Tracks")
|
|
.HasForeignKey("ReleaseId")
|
|
.OnDelete(DeleteBehavior.SetNull);
|
|
|
|
b.Navigation("Release");
|
|
});
|
|
|
|
modelBuilder.Entity("DeepDrftModels.Entities.ReleaseEntity", b =>
|
|
{
|
|
b.Navigation("MixMetadata");
|
|
|
|
b.Navigation("SessionMetadata");
|
|
|
|
b.Navigation("Tracks");
|
|
});
|
|
#pragma warning restore 612, 618
|
|
}
|
|
}
|
|
}
|