using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Identity.EntityFrameworkCore; using Microsoft.EntityFrameworkCore; using PlaylistShared.Api.Entities; namespace PlaylistShared.Api.Data; public class ApplicationDbContext : IdentityDbContext, Guid> { public ApplicationDbContext(DbContextOptions options) : base(options) { } public DbSet SharedPlaylists => Set(); public DbSet TrackAdditionLogs => Set(); protected override void OnModelCreating(ModelBuilder builder) { base.OnModelCreating(builder); builder.Entity(entity => { entity.HasKey(e => e.Id); entity.HasIndex(e => e.ShareToken).IsUnique(); entity.HasOne(e => e.Creator) .WithMany(u => u.OwnedPlaylists) .HasForeignKey(e => e.CreatorUserId) .OnDelete(DeleteBehavior.Restrict); entity.Property(e => e.YandexPlaylistKind).IsRequired().HasMaxLength(50); entity.Property(e => e.YandexPlaylistOwnerUid).IsRequired().HasMaxLength(50); entity.Property(e => e.Title).IsRequired().HasMaxLength(255); }); builder.Entity(entity => { entity.HasKey(e => e.Id); entity.HasIndex(e => new { e.SharedPlaylistId, e.TrackId }); entity.HasOne(e => e.SharedPlaylist) .WithMany(sp => sp.TrackAdditionLogs) .HasForeignKey(e => e.SharedPlaylistId) .OnDelete(DeleteBehavior.Cascade); entity.HasOne(e => e.AddedByUser) .WithMany() .HasForeignKey(e => e.AddedByUserId) .OnDelete(DeleteBehavior.Restrict); }); } }