# فاز ۱ — موجودیت‌های بکند CMS ✅ تکمیل شد > **تاریخ تکمیل:** ۱۴۰۴/۰۴/۲۱ (2026-02-11) > **وضعیت:** ✅ تکمیل — بیلد موفق + Migration ساخته شد --- ## خلاصه کارهای انجام شده ### 1.1 موجودیت‌های دامین (8 فایل) | فایل | مسیر | توضیح | |------|------|-------| | `BlogPostStatus.cs` | `Domain/Enums/` | enum: Draft=0, Published=1, Scheduled=2, Archived=3 | | `BlogPost.cs` | `Domain/Entities/Blog/` | پست بلاگ — عنوان، اسلاگ، خلاصه، محتوای HTML، تصویر، وضعیت، شمارنده بازدید | | `BlogCategory.cs` | `Domain/Entities/Blog/` | دسته‌بندی بلاگ — عنوان، اسلاگ، آیکون، ترتیب | | `BlogPostCategory.cs` | `Domain/Entities/Blog/` | جدول واسط پست-دسته‌بندی (Many-to-Many) | | `BlogPostTag.cs` | `Domain/Entities/Blog/` | جدول واسط پست-تگ (از Tag موجود استفاده شد) | | `BlogPostImage.cs` | `Domain/Entities/Blog/` | گالری تصاویر پست — مسیر، عنوان جایگزین، ترتیب | | `SitePage.cs` | `Domain/Entities/Content/` | صفحات سایت (درباره ما، تماس با ما) — با کلید یکتا | | `SitePageSection.cs` | `Domain/Entities/Content/` | بخش‌های هر صفحه — محتوای HTML، آیکون، تصویر، داده اضافی JSON | ### 1.2 تنظیمات Entity Framework (7 فایل) | فایل | مسیر | ایندکس‌ها | |------|------|----------| | `BlogPostConfiguration.cs` | `Configurations/Blog/` | Slug (unique), Status, PublishedAt, IsFeatured, AuthorUserId, Status+PublishedAt | | `BlogCategoryConfiguration.cs` | `Configurations/Blog/` | Slug (unique), IsActive | | `BlogPostCategoryConfiguration.cs` | `Configurations/Blog/` | FK: BlogPostId + BlogCategoryId | | `BlogPostTagConfiguration.cs` | `Configurations/Blog/` | FK: BlogPostId + TagId | | `BlogPostImageConfiguration.cs` | `Configurations/Blog/` | FK: BlogPostId | | `SitePageConfiguration.cs` | `Configurations/Content/` | PageKey (unique) | | `SitePageSectionConfiguration.cs` | `Configurations/Content/` | SitePageId + SectionKey (compound) | ### 1.3 DbContext (2 فایل ویرایش شده) - `IApplicationDbContext.cs` — افزودن 7 DbSet - `ApplicationDbContext.cs` — افزودن 7 DbSet property ### 1.4 تعاریف Proto (4 فایل + csproj) | فایل | RPCها | csharp_namespace | |------|-------|-----------------| | `blogpost.proto` | 11 RPC (CRUD + Publish/Archive/ViewCount + BySlug + Published/Featured) | `BlogPost` | | `blogcategory.proto` | 6 RPC (CRUD + GetAll + GetActive) | `BlogCategory` | | `blogpostimage.proto` | 4 RPC (Add/Delete/Get/Reorder) | `BlogPostImage` | | `sitepage.proto` | 8 RPC (Get/GetByKey/Update/GetAll + Section CRUD + Reorder) | `SitePage` | ### 1.5 لایه CQRS Application (≈50 فایل) #### BlogPost Commands (6 گروه، 14 فایل) - `CreateBlogPost` — Command + Handler + Validator (با اعتبارسنجی اسلاگ regex) - `UpdateBlogPost` — Command + Handler + Validator (الگوی delete-recreate برای دسته‌بندی/تگ) - `DeleteBlogPost` — Command + Handler (soft-delete) - `PublishBlogPost` — Command + Result + Handler (تنظیم Status و PublishedAt) - `ArchiveBlogPost` — Command + Result + Handler - `IncrementViewCount` — Command + Handler #### BlogPost Queries (5 گروه، 10 فایل) - `GetBlogPost` — Query + DTO + Handler (با Include chain) - `GetBlogPostBySlug` — Query + Handler (بازاستفاده از BlogPostDto) - `GetAllBlogPosts` — Query + ResponseDto + Handler (فیلتر + مرتب‌سازی + صفحه‌بندی) - `GetPublishedBlogPosts` — Query + Handler (مشتری‌محور، فقط Published) - `GetFeaturedBlogPosts` — Query + Handler (برای لندینگ پیج) #### BlogCategory CQRS (11 فایل) - Commands: Create + Update + Delete (با Validator) - Queries: GetBlogCategory + GetAllBlogCategories + GetActiveBlogCategories #### BlogPostImage CQRS (8 فایل) - Commands: Add + Delete + Reorder (با ImageSortItem) - Queries: GetBlogPostImages #### SitePage CQRS (14 فایل) - Commands: UpdateSitePage + CreateSection + UpdateSection + DeleteSection + ReorderSections - Queries: GetSitePage + GetSitePageByKey + GetAllSitePages ### 1.6 سرویس‌های gRPC WebApi (4 فایل) | سرویس | الگو | توضیح | |-------|------|-------| | `BlogPostService.cs` | ترکیبی (دستی + dispatcher) | مپینگ دستی برای لیست‌ها و RepeatedField | | `BlogCategoryService.cs` | ترکیبی | dispatcher برای CRUD ساده، دستی برای لیست‌ها | | `BlogPostImageService.cs` | ترکیبی | dispatcher + مپینگ دستی Reorder | | `SitePageService.cs` | ترکیبی | dispatcher + مپینگ دستی Sections | ### 1.7 Mapping Profiles (2 فایل) - `BlogPostProfile.cs` — مپینگ PublishBlogPostResult و ArchiveBlogPostResult - `BlogCategoryProfile.cs` — مپینگ long → CreateBlogCategoryResponse ### 1.8 EF Migration - `20260210232742_AddBlogAndContentEntities.cs` — ایجاد 7 جدول جدید - **Build:** ✅ موفق (0 Error, warnings مربوط به کد قدیمی) --- ## آمار فاز ۱ | متریک | تعداد | |-------|-------| | فایل‌های جدید | ~65 | | فایل‌های ویرایش شده | ~4 | | موجودیت‌های دامین | 7 (+1 enum) | | تنظیمات EF | 7 | | تعاریف Proto | 4 | | RPCهای gRPC | 29 | | Commands CQRS | 16 | | Queries CQRS | 12 | | سرویس‌های WebApi | 4 | | جداول دیتابیس جدید | 7 | --- ## فاز بعدی **فاز ۲ — پنل مدیریت بلاگ (BackOffice)** — صفحات Blazor WASM برای مدیریت پست‌ها، دسته‌بندی‌ها، تصاویر و صفحات سایت.