feat: Add SitePageSettings - simplified page management system
Build and Deploy to Kubernetes / build-and-deploy (push) Successful in 8m2s
Build and Deploy to Kubernetes / build-and-deploy (push) Successful in 8m2s
- New entities: SitePageSettings + SitePageImage (4 fixed pages) - EF Migration: AddSitePageSettings (SitePageSettings + SitePageImages tables) - Proto: sitepagesettings.proto with 5 RPCs - CQRS: GetPageSettings, GetAllPageSettings, SavePageSettings, SavePageImage, DeletePageImage - gRPC Service: SitePageSettingsService (auto-registered) - Proto NuGet bumped to 0.0.180
This commit is contained in:
+54
@@ -0,0 +1,54 @@
|
||||
using CMSMicroservice.Domain.Entities.Content;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Metadata.Builders;
|
||||
|
||||
namespace CMSMicroservice.Infrastructure.Persistence.Configurations;
|
||||
|
||||
public class SitePageImageConfiguration : IEntityTypeConfiguration<SitePageImage>
|
||||
{
|
||||
public void Configure(EntityTypeBuilder<SitePageImage> builder)
|
||||
{
|
||||
builder.ToTable("SitePageImages");
|
||||
builder.HasKey(x => x.Id);
|
||||
|
||||
builder.Property(x => x.SitePageSettingsId)
|
||||
.IsRequired();
|
||||
|
||||
builder.Property(x => x.ImageGroup)
|
||||
.IsRequired()
|
||||
.HasMaxLength(50);
|
||||
|
||||
builder.Property(x => x.Title)
|
||||
.HasMaxLength(200);
|
||||
|
||||
builder.Property(x => x.Subtitle)
|
||||
.HasMaxLength(300);
|
||||
|
||||
builder.Property(x => x.ImagePath)
|
||||
.IsRequired();
|
||||
|
||||
builder.Property(x => x.IconName)
|
||||
.HasMaxLength(100);
|
||||
|
||||
builder.Property(x => x.LinkUrl)
|
||||
.HasMaxLength(500);
|
||||
|
||||
builder.Property(x => x.SortOrder)
|
||||
.IsRequired()
|
||||
.HasDefaultValue(0);
|
||||
|
||||
builder.Property(x => x.IsActive)
|
||||
.IsRequired()
|
||||
.HasDefaultValue(true);
|
||||
|
||||
// رابطه با SitePageSettings
|
||||
builder.HasOne(x => x.SitePageSettings)
|
||||
.WithMany(x => x.Images)
|
||||
.HasForeignKey(x => x.SitePageSettingsId)
|
||||
.OnDelete(DeleteBehavior.Cascade);
|
||||
|
||||
// ایندکس ترکیبی
|
||||
builder.HasIndex(x => new { x.SitePageSettingsId, x.ImageGroup })
|
||||
.HasDatabaseName("IX_SitePageImages_SettingsId_Group");
|
||||
}
|
||||
}
|
||||
+44
@@ -0,0 +1,44 @@
|
||||
using CMSMicroservice.Domain.Entities.Content;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Metadata.Builders;
|
||||
|
||||
namespace CMSMicroservice.Infrastructure.Persistence.Configurations;
|
||||
|
||||
public class SitePageSettingsConfiguration : IEntityTypeConfiguration<SitePageSettings>
|
||||
{
|
||||
public void Configure(EntityTypeBuilder<SitePageSettings> builder)
|
||||
{
|
||||
builder.ToTable("SitePageSettings");
|
||||
builder.HasKey(x => x.Id);
|
||||
|
||||
builder.Property(x => x.PageKey)
|
||||
.IsRequired()
|
||||
.HasMaxLength(50);
|
||||
|
||||
builder.Property(x => x.Title)
|
||||
.IsRequired()
|
||||
.HasMaxLength(200);
|
||||
|
||||
builder.Property(x => x.MetaDescription)
|
||||
.HasMaxLength(300);
|
||||
|
||||
builder.Property(x => x.HeroTitle)
|
||||
.HasMaxLength(200);
|
||||
|
||||
builder.Property(x => x.HeroSubtitle)
|
||||
.HasMaxLength(500);
|
||||
|
||||
builder.Property(x => x.IsActive)
|
||||
.IsRequired()
|
||||
.HasDefaultValue(true);
|
||||
|
||||
// SettingsJson — ستون JSON بدون محدودیت طول
|
||||
builder.Property(x => x.SettingsJson)
|
||||
.HasColumnType("nvarchar(max)");
|
||||
|
||||
// ایندکس یکتا روی PageKey
|
||||
builder.HasIndex(x => x.PageKey)
|
||||
.IsUnique()
|
||||
.HasDatabaseName("IX_SitePageSettings_PageKey");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user