UserConfiguration.cs 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. using Jellyfin.Data.Entities;
  2. using Microsoft.EntityFrameworkCore;
  3. using Microsoft.EntityFrameworkCore.Metadata.Builders;
  4. namespace Jellyfin.Server.Implementations.ModelConfiguration
  5. {
  6. /// <summary>
  7. /// FluentAPI configuration for the User entity.
  8. /// </summary>
  9. public class UserConfiguration : IEntityTypeConfiguration<User>
  10. {
  11. /// <inheritdoc/>
  12. public void Configure(EntityTypeBuilder<User> builder)
  13. {
  14. // Collations
  15. builder
  16. .Property(user => user.Username)
  17. .UseCollation("NOCASE");
  18. // Delete behavior
  19. builder
  20. .HasOne(u => u.ProfileImage)
  21. .WithOne()
  22. .OnDelete(DeleteBehavior.Cascade);
  23. builder
  24. .HasMany(u => u.Permissions)
  25. .WithOne()
  26. .HasForeignKey(p => p.UserId)
  27. .OnDelete(DeleteBehavior.Cascade);
  28. builder
  29. .HasMany(u => u.Preferences)
  30. .WithOne()
  31. .HasForeignKey(p => p.UserId)
  32. .OnDelete(DeleteBehavior.Cascade);
  33. builder
  34. .HasMany(u => u.AccessSchedules)
  35. .WithOne()
  36. .OnDelete(DeleteBehavior.Cascade);
  37. builder
  38. .HasMany(u => u.DisplayPreferences)
  39. .WithOne()
  40. .OnDelete(DeleteBehavior.Cascade);
  41. builder
  42. .HasMany(u => u.ItemDisplayPreferences)
  43. .WithOne()
  44. .OnDelete(DeleteBehavior.Cascade);
  45. // Indexes
  46. builder
  47. .HasIndex(entity => entity.Username)
  48. .IsUnique();
  49. }
  50. }
  51. }