using Microsoft.EntityFrameworkCore; namespace Socialize.Api.Modules.Workspaces.Data; public static class WorkspaceModelConfiguration { public static ModelBuilder ConfigureWorkspacesModule(this ModelBuilder modelBuilder) { modelBuilder.Entity(workspace => { workspace.ToTable("Workspaces"); workspace.HasKey(x => x.Id); workspace.Property(x => x.Name).HasMaxLength(256).IsRequired(); workspace.Property(x => x.Slug).HasMaxLength(128).IsRequired(); workspace.Property(x => x.LogoUrl).HasMaxLength(2048); workspace.Property(x => x.TimeZone).HasMaxLength(128).IsRequired(); workspace.Property(x => x.ApprovalMode).HasMaxLength(32).IsRequired().HasDefaultValue("Required"); workspace.Property(x => x.SchedulePostsAutomaticallyOnApproval).HasDefaultValue(false); workspace.Property(x => x.LockContentAfterApproval).HasDefaultValue(false); workspace.Property(x => x.SendAutomaticApprovalReminders).HasDefaultValue(false); workspace.Property(x => x.CreatedAt) .ValueGeneratedOnAdd() .HasDefaultValueSql("CURRENT_TIMESTAMP"); workspace.HasIndex(x => x.Slug).IsUnique(); workspace.HasIndex(x => x.OwnerUserId); }); modelBuilder.Entity(workspaceInvite => { workspaceInvite.ToTable("WorkspaceInvites"); workspaceInvite.HasKey(x => x.Id); workspaceInvite.Property(x => x.Email).HasMaxLength(256).IsRequired(); workspaceInvite.Property(x => x.Role).HasMaxLength(64).IsRequired(); workspaceInvite.Property(x => x.Status).HasMaxLength(64).IsRequired(); workspaceInvite.Property(x => x.CreatedAt) .ValueGeneratedOnAdd() .HasDefaultValueSql("CURRENT_TIMESTAMP"); workspaceInvite.HasIndex(x => x.WorkspaceId); workspaceInvite.HasIndex(x => new { x.WorkspaceId, x.Email, x.Status }); }); return modelBuilder; } }