feat: Complete overhaul of FourSat documentation structure and content
- Added FINAL-STATUS.md detailing project completion and key metrics - Created QUICK-REFERENCE.md for quick access to essential documents - Updated README.md with project overview and quick start guide - Established STRUCTURE.md outlining the final documentation structure - Organized and archived old files, ensuring a clean and efficient directory - Enhanced documentation quality with comprehensive metrics and checklists
This commit is contained in:
@@ -0,0 +1,385 @@
|
||||
# Entity Naming Convention Refactoring Plan
|
||||
|
||||
**تاریخ شروع**: 2024-12-03
|
||||
**تاریخ اتمام**: 2024-12-03
|
||||
**مدت زمان واقعی**: 3 ساعت
|
||||
**اولویت**: 🔴 فوری
|
||||
**وضعیت**: ✅ تکمیل شده
|
||||
|
||||
---
|
||||
|
||||
## 🎯 هدف
|
||||
|
||||
تبدیل 5 Entity از **Plural** به **Singular** مطابق با EF Core Convention:
|
||||
|
||||
```csharp
|
||||
// Before: ❌
|
||||
public class Products { }
|
||||
DbSet<Products> Products { get; }
|
||||
|
||||
// After: ✅
|
||||
public class Product { }
|
||||
DbSet<Product> Products { get; }
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📋 Entity های هدف
|
||||
|
||||
| # | Entity | تغییر به | استفاده | فایلها | زمان | وضعیت |
|
||||
|---|--------|----------|----------|---------|------|--------|
|
||||
| 1 | UserCarts | UserCart | 192 | 40+ | 30m | ✅ Done |
|
||||
| 2 | ProductImages | ProductImage | 181 | 35+ | 30m | ✅ Done |
|
||||
| 3 | ProductGalleries | ProductGallery | 162 | 30+ | 30m | ✅ Done |
|
||||
| 4 | Products | Product | 283 | 50+ | 45m | ✅ Done |
|
||||
| 5 | Transactions | Transaction | 257 | 45+ | 45m | ✅ Done |
|
||||
|
||||
**نتیجه نهایی**:
|
||||
- ✅ تمام 5 Entity به Singular تبدیل شدند
|
||||
- ✅ Build: 0 errors
|
||||
- ✅ 1075+ استفاده بهروز شدند
|
||||
|
||||
---
|
||||
|
||||
## 🔧 مراحل اجرا (برای هر Entity)
|
||||
|
||||
### Phase 1: تغییر نام Entity File و Class
|
||||
|
||||
**1.1. تغییر نام فایل Entity:**
|
||||
```bash
|
||||
mv Products.cs Product.cs
|
||||
```
|
||||
|
||||
**1.2. تغییر نام کلاس در فایل:**
|
||||
```csharp
|
||||
// Before:
|
||||
public class Products : BaseAuditableEntity
|
||||
|
||||
// After:
|
||||
public class Product : BaseAuditableEntity
|
||||
```
|
||||
|
||||
**1.3. چک کردن وضعیت:**
|
||||
- ✅ فایل تغییر نام یافت
|
||||
- ✅ Class name صحیح است
|
||||
|
||||
---
|
||||
|
||||
### Phase 2: Configuration Files
|
||||
|
||||
**2.1. تغییر نام فایل Configuration:**
|
||||
```bash
|
||||
mv ProductsConfiguration.cs ProductConfiguration.cs
|
||||
```
|
||||
|
||||
**2.2. تغییر Class و EntityTypeConfiguration:**
|
||||
```csharp
|
||||
// Before:
|
||||
public class ProductsConfiguration : IEntityTypeConfiguration<Products>
|
||||
|
||||
// After:
|
||||
public class ProductConfiguration : IEntityTypeConfiguration<Product>
|
||||
```
|
||||
|
||||
**2.3. آپدیت builder type:**
|
||||
```csharp
|
||||
public void Configure(EntityTypeBuilder<Product> builder)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Phase 3: DbContext Files
|
||||
|
||||
**3.1. آپدیت IApplicationDbContext:**
|
||||
```csharp
|
||||
// Before:
|
||||
DbSet<Products> Products { get; }
|
||||
|
||||
// After:
|
||||
DbSet<Product> Products { get; }
|
||||
```
|
||||
|
||||
**3.2. آپدیت ApplicationDbContext:**
|
||||
```csharp
|
||||
// Before:
|
||||
public DbSet<Products> Products => Set<Products>();
|
||||
|
||||
// After:
|
||||
public DbSet<Product> Products => Set<Product>();
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Phase 4: Navigation Properties
|
||||
|
||||
**4.1. پیدا کردن تمام Navigation Properties:**
|
||||
```bash
|
||||
grep -r "ICollection<Products>" CMSMicroservice.Domain/Entities/
|
||||
```
|
||||
|
||||
**4.2. تغییر به Singular:**
|
||||
```csharp
|
||||
// Before:
|
||||
public virtual ICollection<Products> Products { get; set; }
|
||||
|
||||
// After:
|
||||
public virtual ICollection<Product> Products { get; set; }
|
||||
```
|
||||
|
||||
**4.3. آپدیت Foreign Key references:**
|
||||
```csharp
|
||||
// WithMany relations
|
||||
builder.HasOne(x => x.Category)
|
||||
.WithMany(x => x.Products) // همین Plural باقی بماند
|
||||
.HasForeignKey(x => x.CategoryId);
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Phase 5: CQRS - تغییر نام Folders
|
||||
|
||||
**5.1. تغییر نام CQ Folder:**
|
||||
```bash
|
||||
# معمولاً نیازی نیست - ProductsCQ همان باقی میماند
|
||||
# چون به feature اشاره میکند نه Entity
|
||||
```
|
||||
|
||||
**5.2. تغییر نام Commands/Queries folders (اختیاری):**
|
||||
```bash
|
||||
# معمولاً نامها جمع هستند و تغییر نمیکنند
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Phase 6: CQRS - آپدیت Class References
|
||||
|
||||
**6.1. Batch update در Commands:**
|
||||
```bash
|
||||
find . -type f -name "*.cs" -exec sed -i 's/\bProducts\b/Product/g' {} \;
|
||||
```
|
||||
|
||||
**توجه**: این command همه جا تغییر میدهد! باید دقیق باشیم.
|
||||
|
||||
**6.2. Manual review برای موارد خاص:**
|
||||
- DbSet property names باید Plural بمانند
|
||||
- Folder names معمولاً Plural هستند
|
||||
- Navigation Properties باید Plural باشند
|
||||
|
||||
---
|
||||
|
||||
### Phase 7: Events
|
||||
|
||||
**7.1. آپدیت Event namespaces:**
|
||||
```bash
|
||||
find . -path "*/ProductsEvents/*" -name "*.cs" -exec sed -i 's/\bProducts\b/Product/g' {} \;
|
||||
```
|
||||
|
||||
**7.2. Review Event class names:**
|
||||
```csharp
|
||||
// Before:
|
||||
public class ProductsCreatedEvent
|
||||
|
||||
// After:
|
||||
public class ProductCreatedEvent
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Phase 8: Proto Files
|
||||
|
||||
**8.1. آپدیت proto references (احتمالاً نیاز نیست):**
|
||||
```protobuf
|
||||
// Proto files معمولاً lowercase و plural هستند
|
||||
// تغییر نمیدهیم مگر اینکه inconsistency باشد
|
||||
```
|
||||
|
||||
**8.2. آپدیت Service references:**
|
||||
```csharp
|
||||
// فقط در صورت لزوم
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Phase 9: Validators & Profiles
|
||||
|
||||
**9.1. آپدیت Validator references:**
|
||||
```bash
|
||||
find . -path "*/Validator/*" -name "*Products*.cs" -exec sed -i 's/\bProducts\b/Product/g' {} \;
|
||||
```
|
||||
|
||||
**9.2. آپدیت AutoMapper Profiles:**
|
||||
```csharp
|
||||
CreateMap<Product, ProductDto>();
|
||||
CreateMap<CreateProductCommand, Product>();
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Phase 10: Build & Test
|
||||
|
||||
**10.1. Clean:**
|
||||
```bash
|
||||
find . -type d \( -name "obj" -o -name "bin" \) -exec rm -rf {} +
|
||||
```
|
||||
|
||||
**10.2. Restore:**
|
||||
```bash
|
||||
dotnet restore
|
||||
```
|
||||
|
||||
**10.3. Build:**
|
||||
```bash
|
||||
dotnet build
|
||||
```
|
||||
|
||||
**10.4. Check for errors:**
|
||||
- ✅ 0 Errors
|
||||
- ⚠️ Warnings قابل قبول
|
||||
|
||||
**10.5. Manual review:**
|
||||
- چک کردن چند فایل به صورت sample
|
||||
- اطمینان از صحت Navigation Properties
|
||||
- تست CRUD operations
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ نکات مهم
|
||||
|
||||
### 🔴 جاهایی که باید Plural بمانند:
|
||||
|
||||
1. **DbSet Property Names:**
|
||||
```csharp
|
||||
DbSet<Product> Products { get; } // ✅ Products
|
||||
```
|
||||
|
||||
2. **Navigation Properties:**
|
||||
```csharp
|
||||
public virtual ICollection<Product> Products { get; set; } // ✅ Products
|
||||
```
|
||||
|
||||
3. **Table Names (در Configuration):**
|
||||
```csharp
|
||||
builder.ToTable("Products"); // ✅ معمولاً Plural
|
||||
```
|
||||
|
||||
4. **CQ Folder Names:**
|
||||
```
|
||||
ProductsCQ/ // ✅ معمولاً Plural (به feature اشاره میکند)
|
||||
```
|
||||
|
||||
5. **Proto Files:**
|
||||
```
|
||||
products.proto // ✅ معمولاً Plural
|
||||
```
|
||||
|
||||
### 🟢 جاهایی که باید Singular شوند:
|
||||
|
||||
1. **Entity Class Name:**
|
||||
```csharp
|
||||
public class Product { } // ✅ Singular
|
||||
```
|
||||
|
||||
2. **Configuration Class:**
|
||||
```csharp
|
||||
public class ProductConfiguration // ✅ Singular
|
||||
```
|
||||
|
||||
3. **Generic Type Parameters:**
|
||||
```csharp
|
||||
IEntityTypeConfiguration<Product> // ✅ Singular
|
||||
EntityTypeBuilder<Product> // ✅ Singular
|
||||
```
|
||||
|
||||
4. **DbSet Generic Type:**
|
||||
```csharp
|
||||
DbSet<Product> // ✅ Singular
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎯 ترتیب پیشنهادی اجرا
|
||||
|
||||
### دور 1: UserCarts → UserCart
|
||||
**دلیل**: کمترین complexity، بهترین برای test کردن process
|
||||
|
||||
**مراحل**:
|
||||
1. Entity + Configuration
|
||||
2. DbContext
|
||||
3. Navigation Properties (کم)
|
||||
4. CQRS Handlers
|
||||
5. Build & Test
|
||||
|
||||
**زمان**: 45 دقیقه
|
||||
|
||||
---
|
||||
|
||||
### دور 2: ProductImages → ProductImage
|
||||
**دلیل**: مشابه UserCart، پیچیدگی کم
|
||||
|
||||
**زمان**: 45 دقیقه
|
||||
|
||||
---
|
||||
|
||||
### دور 3: ProductGalleries → ProductGallery
|
||||
**دلیل**: تازه ProductGalleries درست کردیم، فعلاً fresh است
|
||||
|
||||
**زمان**: 45 دقیقه
|
||||
|
||||
---
|
||||
|
||||
### دور 4: Products → Product
|
||||
**دلیل**: پر استفادهترین، باید در آخر باشد
|
||||
|
||||
**زمان**: 1 ساعت
|
||||
|
||||
---
|
||||
|
||||
### دور 5: Transactions → Transaction
|
||||
**دلیل**: پر استفاده، باید در آخر باشد
|
||||
|
||||
**زمان**: 1 ساعت
|
||||
|
||||
---
|
||||
|
||||
## 📊 Progress Tracking
|
||||
|
||||
| Entity | Start | End | Duration | Status | Notes |
|
||||
|--------|-------|-----|----------|--------|-------|
|
||||
| UserCarts | - | - | - | ⏸️ | - |
|
||||
| ProductImages | - | - | - | ⏸️ | - |
|
||||
| ProductGalleries | - | - | - | ⏸️ | - |
|
||||
| Products | - | - | - | ⏸️ | - |
|
||||
| Transactions | - | - | - | ⏸️ | - |
|
||||
|
||||
---
|
||||
|
||||
## ✅ Checklist برای هر Entity
|
||||
|
||||
### Pre-Refactoring:
|
||||
- [ ] Backup گرفته شد
|
||||
- [ ] Build موفق است (baseline)
|
||||
- [ ] Git commit انجام شد
|
||||
|
||||
### During Refactoring:
|
||||
- [ ] Entity file renamed
|
||||
- [ ] Entity class renamed
|
||||
- [ ] Configuration file renamed
|
||||
- [ ] Configuration class updated
|
||||
- [ ] IApplicationDbContext updated
|
||||
- [ ] ApplicationDbContext updated
|
||||
- [ ] Navigation Properties updated
|
||||
- [ ] CQRS Handlers updated (batch)
|
||||
- [ ] Events updated
|
||||
- [ ] Validators updated
|
||||
- [ ] Profiles updated
|
||||
|
||||
### Post-Refactoring:
|
||||
- [ ] Build successful (0 errors)
|
||||
- [ ] Manual review انجام شد
|
||||
- [ ] Git commit با message مناسب
|
||||
- [ ] Documentation updated
|
||||
|
||||
---
|
||||
|
||||
**آخرین بهروزرسانی**: 2024-12-03
|
||||
**وضعیت کلی**: 🔄 آماده برای شروع
|
||||
Reference in New Issue
Block a user