using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; using SPMS.Domain.Entities; namespace SPMS.Infrastructure.Persistence.Configurations; public class ServiceConfiguration : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder builder) { builder.ToTable("Service"); builder.HasKey(e => e.Id); builder.Property(e => e.Id).ValueGeneratedOnAdd(); builder.Property(e => e.ServiceCode).HasMaxLength(8).IsRequired(); builder.HasIndex(e => e.ServiceCode).IsUnique(); builder.Property(e => e.ServiceName).HasMaxLength(100).IsRequired(); builder.Property(e => e.Description).HasMaxLength(500); builder.Property(e => e.ApiKey).HasMaxLength(64).IsRequired(); builder.Property(e => e.ApiKeyCreatedAt).IsRequired(); builder.Property(e => e.ApnsBundleId).HasMaxLength(100); builder.Property(e => e.ApnsKeyId).HasMaxLength(10); builder.Property(e => e.ApnsTeamId).HasMaxLength(10); builder.Property(e => e.ApnsPrivateKey).HasColumnType("text"); builder.Property(e => e.FcmCredentials).HasColumnType("text"); builder.Property(e => e.WebhookUrl).HasMaxLength(500); builder.Property(e => e.Tags).HasColumnType("json"); builder.Property(e => e.SubTier).HasColumnType("tinyint").IsRequired(); builder.Property(e => e.SubStartedAt); builder.Property(e => e.Status).HasColumnType("tinyint").IsRequired(); builder.Property(e => e.CreatedAt).IsRequired(); builder.Property(e => e.CreatedBy).IsRequired(); builder.Property(e => e.UpdatedAt); builder.Property(e => e.IsDeleted).HasColumnType("tinyint(1)").IsRequired().HasDefaultValue(false); builder.Property(e => e.DeletedAt); builder.HasOne(e => e.CreatedByAdmin) .WithMany() .HasForeignKey(e => e.CreatedBy) .OnDelete(DeleteBehavior.Restrict); builder.HasQueryFilter(e => !e.IsDeleted); } }