105 lines
5.3 KiB
C#
105 lines
5.3 KiB
C#
using Microsoft.EntityFrameworkCore;
|
|
|
|
namespace Socialize.Api.Modules.Feedback.Data;
|
|
|
|
public static class FeedbackModelConfiguration
|
|
{
|
|
public static ModelBuilder ConfigureFeedbackModule(this ModelBuilder modelBuilder)
|
|
{
|
|
modelBuilder.Entity<FeedbackReport>(feedback =>
|
|
{
|
|
feedback.ToTable("FeedbackReports");
|
|
feedback.HasKey(x => x.Id);
|
|
feedback.Property(x => x.Type).HasConversion<string>().HasMaxLength(32).IsRequired();
|
|
feedback.Property(x => x.Status).HasConversion<string>().HasMaxLength(32).IsRequired();
|
|
feedback.Property(x => x.Description).HasMaxLength(8000).IsRequired();
|
|
feedback.Property(x => x.ReporterDisplayName).HasMaxLength(256).IsRequired();
|
|
feedback.Property(x => x.ReporterEmail).HasMaxLength(256).IsRequired();
|
|
feedback.Property(x => x.SubmittedPath).HasMaxLength(2048).IsRequired();
|
|
feedback.Property(x => x.BrowserUserAgent).HasMaxLength(1024);
|
|
feedback.Property(x => x.AppVersion).HasMaxLength(128);
|
|
feedback.Property(x => x.WorkspaceName).HasMaxLength(256);
|
|
feedback.Property(x => x.ClientName).HasMaxLength(256);
|
|
feedback.Property(x => x.CampaignName).HasMaxLength(256);
|
|
feedback.Property(x => x.ContentItemTitle).HasMaxLength(256);
|
|
feedback.Property(x => x.CancellationReason).HasMaxLength(2000);
|
|
feedback.Property(x => x.CreatedAt).ValueGeneratedOnAdd().HasDefaultValueSql("CURRENT_TIMESTAMP");
|
|
feedback.HasIndex(x => x.ReporterUserId);
|
|
feedback.HasIndex(x => x.Status);
|
|
feedback.HasIndex(x => x.Type);
|
|
feedback.HasIndex(x => x.WorkspaceId);
|
|
feedback.HasIndex(x => x.LastActivityAt);
|
|
});
|
|
|
|
modelBuilder.Entity<FeedbackTag>(tag =>
|
|
{
|
|
tag.ToTable("FeedbackTags");
|
|
tag.HasKey(x => x.Id);
|
|
tag.Property(x => x.Name).HasMaxLength(64).IsRequired();
|
|
tag.Property(x => x.NormalizedName).HasMaxLength(64).IsRequired();
|
|
tag.HasIndex(x => x.NormalizedName);
|
|
tag.HasIndex(x => new { x.FeedbackReportId, x.NormalizedName }).IsUnique();
|
|
tag.HasOne(x => x.FeedbackReport)
|
|
.WithMany(x => x.Tags)
|
|
.HasForeignKey(x => x.FeedbackReportId)
|
|
.OnDelete(DeleteBehavior.Cascade);
|
|
});
|
|
|
|
modelBuilder.Entity<FeedbackScreenshot>(screenshot =>
|
|
{
|
|
screenshot.ToTable("FeedbackScreenshots");
|
|
screenshot.HasKey(x => x.Id);
|
|
screenshot.Property(x => x.FileName).HasMaxLength(256).IsRequired();
|
|
screenshot.Property(x => x.ContentType).HasMaxLength(128).IsRequired();
|
|
screenshot.Property(x => x.BlobContainerName).HasMaxLength(128).IsRequired();
|
|
screenshot.Property(x => x.BlobName).HasMaxLength(512).IsRequired();
|
|
screenshot.Property(x => x.CreatedAt).ValueGeneratedOnAdd().HasDefaultValueSql("CURRENT_TIMESTAMP");
|
|
screenshot.HasIndex(x => x.FeedbackReportId).IsUnique();
|
|
screenshot.HasOne(x => x.FeedbackReport)
|
|
.WithOne(x => x.Screenshot)
|
|
.HasForeignKey<FeedbackScreenshot>(x => x.FeedbackReportId)
|
|
.OnDelete(DeleteBehavior.Cascade);
|
|
});
|
|
|
|
modelBuilder.Entity<FeedbackComment>(comment =>
|
|
{
|
|
comment.ToTable("FeedbackComments");
|
|
comment.HasKey(x => x.Id);
|
|
comment.Property(x => x.AuthorDisplayName).HasMaxLength(256).IsRequired();
|
|
comment.Property(x => x.AuthorEmail).HasMaxLength(256).IsRequired();
|
|
comment.Property(x => x.AuthorRole).HasMaxLength(32).IsRequired();
|
|
comment.Property(x => x.Body).HasMaxLength(8000).IsRequired();
|
|
comment.Property(x => x.CreatedAt).ValueGeneratedOnAdd().HasDefaultValueSql("CURRENT_TIMESTAMP");
|
|
comment.HasIndex(x => x.FeedbackReportId);
|
|
comment.HasIndex(x => x.AuthorUserId);
|
|
comment.HasIndex(x => x.CreatedAt);
|
|
comment.HasOne(x => x.FeedbackReport)
|
|
.WithMany(x => x.Comments)
|
|
.HasForeignKey(x => x.FeedbackReportId)
|
|
.OnDelete(DeleteBehavior.Cascade);
|
|
});
|
|
|
|
modelBuilder.Entity<FeedbackActivityEntry>(activity =>
|
|
{
|
|
activity.ToTable("FeedbackActivityEntries");
|
|
activity.HasKey(x => x.Id);
|
|
activity.Property(x => x.ActorDisplayName).HasMaxLength(256).IsRequired();
|
|
activity.Property(x => x.ActorEmail).HasMaxLength(256).IsRequired();
|
|
activity.Property(x => x.ActivityType).HasMaxLength(64).IsRequired();
|
|
activity.Property(x => x.FromValue).HasMaxLength(512);
|
|
activity.Property(x => x.ToValue).HasMaxLength(512);
|
|
activity.Property(x => x.Note).HasMaxLength(2000);
|
|
activity.Property(x => x.CreatedAt).ValueGeneratedOnAdd().HasDefaultValueSql("CURRENT_TIMESTAMP");
|
|
activity.HasIndex(x => x.FeedbackReportId);
|
|
activity.HasIndex(x => x.ActorUserId);
|
|
activity.HasIndex(x => x.CreatedAt);
|
|
activity.HasOne(x => x.FeedbackReport)
|
|
.WithMany(x => x.ActivityEntries)
|
|
.HasForeignKey(x => x.FeedbackReportId)
|
|
.OnDelete(DeleteBehavior.Cascade);
|
|
});
|
|
|
|
return modelBuilder;
|
|
}
|
|
}
|