using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; using SameBeat.Domain.Encje; namespace SameBeat.Infrastructure.BazaDanych.Konfiguracje; public class UczestnikOczekujacyKonfiguracja : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder budowniczy) { budowniczy.ToTable("UczestnicyOczekujacy"); budowniczy.HasKey(u => u.Id); budowniczy.Property(u => u.WydarzenieId).IsRequired(); budowniczy.Property(u => u.Nick) .IsRequired() .HasMaxLength(UczestnikOczekujacy.MaksymalnaDlugoscNicku); budowniczy.Property(u => u.LiveKitIdentity) .IsRequired() .HasMaxLength(128); budowniczy.Property(u => u.DolaczylUtc).IsRequired(); budowniczy.Property(u => u.Status) .IsRequired() .HasConversion() .HasMaxLength(16); // Hash (nie jawny sekret!) -- dlugosc jak przy HasloHash Uzytkownika, ten sam algorytm (PasswordHasher). budowniczy.Property(u => u.SekretSesjiHash) .HasMaxLength(1024); // Brak FK-relacji nawigacyjnej do Wydarzenie (jak w SesjaWydarzenia) -- uproszczenie celowe, // encja trzyma tylko klucz obcy. Indeks przyspiesza glowne zapytanie: lista poczekalni per wydarzenie. budowniczy.HasIndex(u => u.WydarzenieId); } }