using Microsoft.EntityFrameworkCore; namespace Socialize.Api.Modules.ContentItems.Data; public static class ContentItemModelConfiguration { public static ModelBuilder ConfigureContentItemsModule(this ModelBuilder modelBuilder) { modelBuilder.Entity(contentItem => { contentItem.ToTable("ContentItems"); contentItem.HasKey(x => x.Id); contentItem.Property(x => x.Title).HasMaxLength(256).IsRequired(); contentItem.Property(x => x.PublicationMessage).HasMaxLength(4000).IsRequired(); contentItem.Property(x => x.PublicationTargets).HasMaxLength(512).IsRequired(); contentItem.Property(x => x.Hashtags).HasMaxLength(1024); contentItem.Property(x => x.Status).HasMaxLength(64).IsRequired(); contentItem.Property(x => x.CurrentRevisionLabel).HasMaxLength(32).IsRequired(); contentItem.Property(x => x.CreatedAt) .ValueGeneratedOnAdd() .HasDefaultValueSql("CURRENT_TIMESTAMP"); contentItem.HasIndex(x => x.WorkspaceId); contentItem.HasIndex(x => x.ClientId); contentItem.HasIndex(x => x.CampaignId); }); modelBuilder.Entity(revision => { revision.ToTable("ContentItemRevisions"); revision.HasKey(x => x.Id); revision.Property(x => x.RevisionLabel).HasMaxLength(32).IsRequired(); revision.Property(x => x.Title).HasMaxLength(256).IsRequired(); revision.Property(x => x.PublicationMessage).HasMaxLength(4000).IsRequired(); revision.Property(x => x.PublicationTargets).HasMaxLength(512).IsRequired(); revision.Property(x => x.Hashtags).HasMaxLength(1024); revision.Property(x => x.ChangeSummary).HasMaxLength(1024); revision.Property(x => x.CreatedAt) .ValueGeneratedOnAdd() .HasDefaultValueSql("CURRENT_TIMESTAMP"); revision.HasIndex(x => x.ContentItemId); revision.HasIndex(x => new { x.ContentItemId, x.RevisionNumber }).IsUnique(); }); modelBuilder.Entity(entry => { entry.ToTable("ContentItemActivityEntries"); entry.HasKey(x => x.Id); entry.Property(x => x.EventType).HasMaxLength(128).IsRequired(); entry.Property(x => x.EntityType).HasMaxLength(128).IsRequired(); entry.Property(x => x.Summary).HasMaxLength(1024).IsRequired(); entry.Property(x => x.ActorEmail).HasMaxLength(256); entry.Property(x => x.MetadataJson).HasColumnType("jsonb"); entry.Property(x => x.CreatedAt) .ValueGeneratedOnAdd() .HasDefaultValueSql("CURRENT_TIMESTAMP"); entry.HasIndex(x => x.WorkspaceId); entry.HasIndex(x => x.ContentItemId); entry.HasIndex(x => new { x.ContentItemId, x.CreatedAt }); }); return modelBuilder; } }