This commit is contained in:
masoodafar-web
2026-01-03 18:27:49 +03:30
parent 0369292d7f
commit 5965b98728
156 changed files with 16082 additions and 0 deletions
+181
View File
@@ -0,0 +1,181 @@
# 📚 FourSat Project Documentation
> **آخرین بروزرسانی**: January 3, 2026
> **وضعیت**: ✅ Production Ready
> **Domain**: `*.se.kbs1.ir`
---
## ⚡ Quick Reference (نکات مهم)
### 🌐 آدرس‌های Stage
| سرویس | آدرس |
|-------|------|
| BackOffice | `https://backoffice.se.kbs1.ir` |
| BackOffice BFF | `https://backoffice-bff.se.kbs1.ir` |
| FrontOffice | `https://frontoffice.se.kbs1.ir` |
| FrontOffice BFF | `https://frontoffice-bff.se.kbs1.ir` |
| CMS | `https://cms.se.kbs1.ir` |
| Git | `git.se.kbs1.ir` |
### 📦 Git Repositories
```bash
# BackOffice
git remote -v # kub-stage → https://git.se.kbs1.ir/admin/BackOffice.git
# BackOffice.BFF
git remote -v # kub-stage → https://git.se.kbs1.ir/admin/BackOffice.BFF.git
# CMS
git remote -v # gitea → https://git.se.kbs1.ir/admin/CMS.git
```
### 🔧 Build Commands
```bash
# BackOffice (Proto DLLs required)
cd BackOffice && ./build-deps.sh
cd src && dotnet build BackOffice.sln
# BFF/CMS
cd [Project]/src && dotnet build
# Deploy
git push kub-stage main
```
---
## 🏗️ معماری پروژه
```
┌───────────────────────────────────────────────────────────────┐
│ FRONTEND (Blazor WASM) │
│ BackOffice (Admin) │ FrontOffice (User) │
└───────────────────────────────────────────────────────────────┘
gRPC-Web + JWT
┌───────────────────────────────────────────────────────────────┐
│ BFF (Backend For Frontend) │
│ BackOffice.BFF │ FrontOffice.BFF │
│ CQRS + MediatR + Proto Contracts │
└───────────────────────────────────────────────────────────────┘
gRPC
┌───────────────────────────────────────────────────────────────┐
│ CMS Microservice │
│ Clean Architecture + PostgreSQL │
│ Commission │ Network │ Club │ Inventory │
└───────────────────────────────────────────────────────────────┘
```
---
## 📂 ساختار پروژه
```
FourSat/
├── BackOffice/ # Admin Panel (Blazor WASM)
│ ├── src/BackOffice/ # UI - 96 pages, 21 modules
│ ├── libs/ # Pre-built Proto DLLs (24)
│ └── build-deps.sh # Build proto dependencies
├── BackOffice.BFF/ # Backend For Frontend
│ └── src/Protobufs/ # 24 Proto projects
├── FrontOffice/ # User Frontend (Blazor WASM)
├── FrontOffice.BFF/ # Backend For Frontend
├── CMS/ # Core Microservice
│ └── src/
│ ├── CMSMicroservice.Domain/
│ ├── CMSMicroservice.Application/
│ ├── CMSMicroservice.Infrastructure/
│ └── CMSMicroservice.WebApi/
├── DataMigration/ # One-time Migration Tool
└── totalDoc/ # Documentation
└── final-docs/ # ← این پوشه
```
---
## 🔄 مدل کاری (Workflow)
### توسعه Local:
```bash
# 1. تغییرات در کد
# 2. Build و تست
dotnet build && dotnet run
# 3. Commit
git add . && git commit -m "feat: description"
```
### Deploy به Stage:
```bash
# Push به remote → Gitea Actions → Docker → K8s
git push kub-stage main
```
### تغییر Proto:
```bash
# 1. تغییر در CMS/BackOffice.BFF
# 2. Rebuild DLLs
cd BackOffice && ./build-deps.sh
# 3. Build UI
cd src && dotnet build
```
---
## 📊 وضعیت سیستم‌ها
| سیستم | ماژول‌ها | وضعیت |
|-------|---------|--------|
| BackOffice | 21 ماژول, 96 صفحه | ✅ Ready |
| BackOffice.BFF | 24 Proto | ✅ Ready |
| CMS | Commission, Network, Club, Inventory | ✅ Ready |
| FrontOffice | User UI | ⏳ Active |
---
## 🛠️ Tech Stack
| Layer | Technology |
|-------|------------|
| Frontend | Blazor WebAssembly, MudBlazor, .NET 9.0 |
| BFF | ASP.NET Core, gRPC, MediatR, Mapster |
| Backend | Clean Architecture, EF Core, PostgreSQL |
| Communication | gRPC, gRPC-Web, Protobuf |
| CI/CD | Gitea Actions, Docker, Kubernetes |
| Auth | JWT |
---
## ⚠️ نکات مهم
1. **Proto DLLs**: قبل از build کردن BackOffice، حتماً `./build-deps.sh` اجرا شود
2. **Domain**: همه آدرس‌ها به `*.se.kbs1.ir` تغییر کرده
3. **PublicMessage.Protobuf**: تنها proto با `net8.0` (بقیه `net9.0`)
4. **Package Versions**: `Google.Protobuf: 3.28.3`, `Grpc.Core.Api: 2.71.0`
---
## 📋 فهرست مستندات
| # | فایل | موضوع |
|---|------|-------|
| 1 | [01-BACKOFFICE.md](./01-BACKOFFICE.md) | Admin Panel - ماژول‌ها و صفحات |
| 2 | [02-PROTO-GUIDE.md](./02-PROTO-GUIDE.md) | Proto & gRPC - راهنمای packaging |
| 3 | [03-DATA-MIGRATION.md](./03-DATA-MIGRATION.md) | Data Migration - 33 جدول |
| 4 | [04-CMS.md](./04-CMS.md) | CMS Microservice |
| 5 | [05-DEPLOYMENT.md](./05-DEPLOYMENT.md) | Deployment & CI/CD |
---
## 📁 آرشیو
مستندات قدیمی در `totalDoc/archive/` نگهداری می‌شوند
+360
View File
@@ -0,0 +1,360 @@
# 📚 BackOffice (Admin Panel) - Complete Documentation
> **آخرین بروزرسانی**: January 3, 2026
> **Build Status**: ✅ SUCCESS (0 Errors)
> **Framework**: Blazor WebAssembly (.NET 9.0) + MudBlazor UI
---
## 📊 وضعیت کلی سیستم
| Component | Status | Errors |
|-----------|--------|--------|
| BackOffice UI | ✅ SUCCESS | 0 |
| BackOffice.BFF | ✅ SUCCESS | 0 |
| CMS Microservice | ✅ SUCCESS | 0 |
**System Status**: 🟢 **PRODUCTION READY**
---
## 🗂️ ماژول‌های فعال (21 ماژول - 96 صفحه)
### آمار صفحات هر ماژول:
| ماژول | تعداد صفحات | وضعیت |
|-------|-------------|--------|
| DiscountShop | 9 | ✅ |
| Inventory | 9 | ✅ |
| AutoComplete | 7 | ✅ |
| Products | 7 | ✅ |
| UserOrder | 6 | ✅ |
| Commission | 6 | ✅ |
| Club | 5 | ✅ |
| Network | 4 | ✅ |
| Payment | 4 | ✅ |
| PublicMessages | 4 | ✅ |
| Role | 4 | ✅ |
| UserRole | 4 | ✅ |
| SystemManagement | 4 | ✅ |
| Category | 3 | ✅ |
| Package | 3 | ✅ |
| Settings | 3 | ✅ |
| Tag | 3 | ✅ |
| UserAddress | 3 | ✅ |
| Dashboard | 2 | ✅ |
| Login | 2 | ✅ |
| User | 2 | ✅ |
---
## 📦 Proto Projects (24 پروژه)
### Core:
-`BackOffice.BFF.Common.Protobuf`
-`BackOffice.BFF.Health.Protobuf`
-`BackOffice.BFF.Configuration.Protobuf`
### User Management:
-`BackOffice.BFF.User.Protobuf`
-`BackOffice.BFF.UserRole.Protobuf`
-`BackOffice.BFF.Role.Protobuf`
-`BackOffice.BFF.UserAddress.Protobuf`
-`BackOffice.BFF.Otp.Protobuf`
### Products & Shop:
-`BackOffice.BFF.Products.Protobuf`
-`BackOffice.BFF.Category.Protobuf`
-`BackOffice.BFF.Tag.Protobuf`
-`BackOffice.BFF.ProductTag.Protobuf`
-`BackOffice.BFF.Package.Protobuf`
-`BackOffice.BFF.Inventory.Protobuf`
### Discount Shop:
-`BackOffice.BFF.DiscountProduct.Protobuf`
-`BackOffice.BFF.DiscountCategory.Protobuf`
-`BackOffice.BFF.DiscountOrder.Protobuf`
-`BackOffice.BFF.DiscountShoppingCart.Protobuf`
### Network & Commission:
-`BackOffice.BFF.NetworkMembership.Protobuf`
-`BackOffice.BFF.ClubMembership.Protobuf`
-`BackOffice.BFF.Commission.Protobuf`
### Orders & Payments:
-`BackOffice.BFF.UserOrder.Protobuf`
-`BackOffice.BFF.ManualPayment.Protobuf`
### Messaging:
-`BackOffice.BFF.PublicMessage.Protobuf`
---
## 🔧 معماری سیستم
```
┌─────────────────────────────────────────────────────────────┐
│ BackOffice (Blazor WASM) │
│ 96 Pages / 21 Modules │
└─────────────────────────────────────────────────────────────┘
gRPC-Web + JWT
┌─────────────────────────────────────────────────────────────┐
│ BackOffice.BFF │
│ CQRS Handlers + Proto Contracts │
└─────────────────────────────────────────────────────────────┘
gRPC
┌─────────────────────────────────────────────────────────────┐
│ CMS Microservice │
│ Business Logic + PostgreSQL │
└─────────────────────────────────────────────────────────────┘
```
---
## 🚀 راهنمای Build و Deploy
### Local Development:
```bash
cd /home/masoud/Apps/project/FourSat/BackOffice/src
dotnet build BackOffice.sln
dotnet run --project BackOffice/BackOffice.csproj
```
### Production با DLL های Proto:
```bash
# 1. Build proto dependencies
cd /home/masoud/Apps/project/FourSat/BackOffice
./build-deps.sh
# 2. Build & Publish
cd src
dotnet publish BackOffice/BackOffice.csproj -c Release -o ./publish
```
### Docker:
```bash
cd /home/masoud/Apps/project/FourSat/BackOffice
docker build -t backoffice:latest .
```
---
## 📋 جزئیات ماژول‌ها
### 1. Products Module
**مسیر**: `Pages/Products/`
| صفحه | Route | توضیحات |
|------|-------|---------|
| ProductsMainPage | `/products` | لیست + فیلتر + صفحه‌بندی |
| CreateDialog | - | ایجاد محصول + آپلود تصویر |
| UpdateDialog | - | ویرایش محصول |
| GalleryDialog | - | گالری تصاویر محصول |
| BulkEdit | `/products/bulk-edit` | ویرایش گروهی قیمت/موجودی |
| ProductCategoriesDragDropPage | `/products/categories` | تخصیص دسته‌بندی |
| CategoryProductsDragDropPage | `/category/products` | مدیریت محصولات دسته |
**ویژگی‌ها**:
- ✅ ستون موجودی با رنگ‌بندی هوشمند (🔴🟡🟢)
- ✅ DragDrop دسته‌بندی محصولات
- ✅ آپلود تصویر با پیش‌نمایش
- ✅ مدیریت تگ‌های محصول
---
### 2. Inventory Module
**مسیر**: `Pages/Inventory/`
| صفحه | Route | توضیحات |
|------|-------|---------|
| InventoryMainPage | `/inventory` | لیست موجودی‌ها |
| LowStockPage | `/inventory/low-stock` | هشدار موجودی کم |
| MovementsPage | `/inventory/movements` | تاریخچه حرکات |
| WarehousesPage | `/inventory/warehouses` | مدیریت انبارها |
| AddStockDialog | - | اضافه کردن موجودی |
| AdjustStockDialog | - | تنظیم موجودی |
| RecordLossDialog | - | ثبت ضایعات |
| TransferStockDialog | - | انتقال بین انبار |
| InventorySettingsDialog | - | تنظیمات انبار |
**ویژگی‌ها**:
- ✅ انواع حرکت موجودی (ورود، خروج، تنظیم، انتقال، ضایعات)
- ✅ هشدار موجودی کم با threshold قابل تنظیم
- ✅ پشتیبانی از multi-warehouse
---
### 3. Discount Shop Module
**مسیر**: `Pages/DiscountShop/`
| صفحه | Route | توضیحات |
|------|-------|---------|
| DiscountProductsMainPage | `/discount-products` | محصولات تخفیفی |
| DiscountCategoriesMainPage | `/discount-categories` | دسته‌بندی‌ها |
| DiscountOrdersMainPage | `/discount-orders` | سفارشات |
**ویژگی‌ها**:
- ✅ CRUD محصولات تخفیفی
- ✅ گالری تصاویر
- ✅ مدیریت دسته‌بندی سلسله‌مراتبی
- ✅ مشاهده و تغییر وضعیت سفارشات
---
### 4. Commission Module
**مسیر**: `Pages/Commission/`
| صفحه | Route | توضیحات |
|------|-------|---------|
| Dashboard | `/commission` | داشبورد استخر هفتگی |
| WeeklyReports | `/commission/reports` | گزارش‌های هفتگی |
| Payouts | `/commission/payouts` | لیست پرداخت‌ها |
| Withdrawals | `/commission/withdrawals` | لیست برداشت‌ها |
| UserBalances | `/network/balances` | بالانس کاربران |
**ویژگی‌ها**:
- ✅ نمایش استخر هفتگی با جزئیات
- ✅ محاسبه ارزش هر بالانس
- ✅ تاریخچه پرداخت‌ها و برداشت‌ها
---
### 5. Network Module
**مسیر**: `Pages/Network/`
| صفحه | Route | توضیحات |
|------|-------|---------|
| NetworkMembersList | `/network/members` | لیست اعضای شبکه |
| NetworkTreeViewer | `/network/tree` | نمای درختی شبکه |
| NetworkStats | `/network/stats` | آمار شبکه |
**ویژگی‌ها**:
- ✅ نمایش درختی شبکه بازاریابی
- ✅ جستجو و فیلتر اعضا
- ✅ آمار و گزارش‌گیری
---
### 6. Club Module
**مسیر**: `Pages/Club/`
| صفحه | Route | توضیحات |
|------|-------|---------|
| ClubMembersList | `/club/members` | لیست اعضای باشگاه |
| ClubFeatures | `/club/features` | مدیریت ویژگی‌ها |
| ManualActivation | `/club/activate` | فعال‌سازی دستی |
**ویژگی‌ها**:
- ✅ مدیریت اعضای باشگاه مشتریان
- ✅ فعال/غیرفعال کردن ویژگی‌ها برای هر کاربر
- ✅ فعال‌سازی دستی با آپلود فیش پرداخت
---
### 7. User Order Module
**مسیر**: `Pages/UserOrder/`
| صفحه | Route | توضیحات |
|------|-------|---------|
| UserOrderMainPage | `/orders` | لیست سفارشات |
| UserOrderDetailsDialog | - | جزئیات سفارش |
| ChangeOrderStatusDialog | - | تغییر وضعیت |
| CancelOrderDialog | - | لغو سفارش |
| ApplyDiscountDialog | - | اعمال تخفیف |
**ویژگی‌ها**:
- ✅ مدیریت کامل سفارشات
- ✅ نمایش جزئیات با VAT
- ✅ تغییر وضعیت و لغو سفارش
---
### 8. System Management Module
**مسیر**: `Pages/SystemManagement/`
| صفحه | Route | توضیحات |
|------|-------|---------|
| Configuration | `/system/config` | تنظیمات سیستم |
| EmailConfig | `/system/email` | پیکربندی ایمیل |
| SmsConfig | `/system/sms` | پیکربندی SMS |
| Logs | `/system/logs` | لاگ‌های سیستم |
---
## 🔗 دامنه‌ها و آدرس‌ها (محیط Stage)
| سرویس | آدرس |
|-------|------|
| BackOffice UI | `https://backoffice.se.kbs1.ir` |
| BackOffice BFF | `https://backoffice-bff.se.kbs1.ir` |
| FrontOffice UI | `https://frontoffice.se.kbs1.ir` |
| FrontOffice BFF | `https://frontoffice-bff.se.kbs1.ir` |
| CMS | `https://cms.se.kbs1.ir` |
| Git Registry | `git.se.kbs1.ir` |
---
## 📝 تاریخچه تغییرات اخیر
### January 3, 2026
- ✅ مایگریشن Proto References به DLL-based Approach
- ✅ تغییر دامنه‌ها از `*.foursat.afrino.co` به `*.se.kbs1.ir`
- ✅ بروزرسانی Git Remote URLs
- ✅ ایجاد `build-deps.sh` برای CI/CD
### January 1, 2026
- ✅ فعال‌سازی ماژول DiscountShop Frontend
- ✅ فعال‌سازی ماژول Tag
- ✅ فعال‌سازی ماژول PublicMessages
### December 20, 2025
- ✅ رفع مشکل صفحه `/network/balances`
- ✅ رفع مشکل صفحه `/club/members`
- ✅ تکمیل Mapster Mappings
---
## 🛠️ Troubleshooting
### Build Errors
**مشکل**: Missing Proto DLLs
```bash
# راه‌حل: Rebuild proto dependencies
cd BackOffice
rm -rf libs/
./build-deps.sh
```
**مشکل**: Package Version Conflict
```bash
# بررسی ورژن‌ها
# Google.Protobuf: 3.28.3
# Grpc.Core.Api: 2.71.0
```
### Runtime Errors
**مشکل**: gRPC Connection Failed
```
# بررسی آدرس BFF در appsettings.json
"GwUrl": "https://backoffice-bff.se.kbs1.ir"
```
---
## 📚 مستندات مرتبط
- [Proto Packaging Guide](./02-PROTO-GUIDE.md)
- [Data Migration Guide](./03-DATA-MIGRATION.md)
- [CMS Documentation](./04-CMS.md)
- [Deployment Guide](./05-DEPLOYMENT.md)
+313
View File
@@ -0,0 +1,313 @@
# 📦 Proto & gRPC Complete Guide
> **آخرین بروزرسانی**: January 3, 2026
> **NuGet Server**: GitLab Package Registry
> **URL جدید**: `https://git.se.kbs1.ir/api/packages/FourSat/nuget/index.json`
---
## 📊 معماری Packaging
```
┌─────────────────────────────────────────────────────────────┐
│ LAYER 1: CMS Proto (Base) │
│ CMSMicroservice.Protobuf │
│ Version: 0.0.142+ → Auto-push به GitLab │
└─────────────────────────────────────────────────────────────┘
PackageReference
┌─────────────────────────────────────────────────────────────┐
│ LAYER 2: BFF Protos │
│ BackOffice.BFF.*.Protobuf (24 packages) │
│ FrontOffice.BFF.*.Protobuf (packages) │
│ → Depend on: CMS Proto v0.0.x │
└─────────────────────────────────────────────────────────────┘
PackageReference / DLL Reference
┌─────────────────────────────────────────────────────────────┐
│ LAYER 3: UI Applications │
│ BackOffice UI → libs/*.dll (24 DLLs) │
│ FrontOffice UI → FrontOffice.BFF Protos │
└─────────────────────────────────────────────────────────────┘
```
---
## ⚠️ قانون طلایی
**هر تغییر در Proto = این 3 مرحله اجباری:**
```bash
# 1️⃣ افزایش Version
<Version>X.Y.Z</Version> → <Version>X.Y.Z+1</Version>
# 2️⃣ Pack کردن
dotnet pack -c Release
# ✅ خودکار push می‌شه به GitLab
# 3️⃣ Update در لایه بالاتر
<PackageReference Include="PackageName" Version="NEW_VERSION" />
```
---
## 🔧 روش‌های Reference در BackOffice
### روش 1: DLL Reference (Production/CI-CD) ✅ پیشنهادی
**مزایا**: مستقل از ریپوی BFF، مناسب CI/CD
```bash
# Build proto DLLs
cd BackOffice
./build-deps.sh
# DLLs در libs/ قرار می‌گیرند
ls libs/*.dll | wc -l # 24 DLL
```
**BackOffice.csproj**:
```xml
<!-- CI/CD Mode: Use pre-built DLLs -->
<ItemGroup Condition="Exists('../../libs/BackOffice.BFF.Common.Protobuf.dll')">
<Reference Include="BackOffice.BFF.Common.Protobuf">
<HintPath>../../libs/BackOffice.BFF.Common.Protobuf.dll</HintPath>
</Reference>
<!-- ... all 24 proto DLLs ... -->
</ItemGroup>
<!-- Transitive Dependencies -->
<PackageReference Include="Google.Protobuf" Version="3.28.3"/>
<PackageReference Include="Grpc.Core.Api" Version="2.71.0"/>
```
---
### روش 2: ProjectReference (Development)
**مزایا**: تغییرات بلافاصله اعمال می‌شود
```xml
<!-- Development Mode: Fallback if libs/ doesn't exist -->
<ItemGroup Condition="!Exists('../../libs/BackOffice.BFF.Common.Protobuf.dll')">
<ProjectReference Include="..\..\..\BackOffice.BFF\src\Protobufs\BackOffice.BFF.Common.Protobuf\BackOffice.BFF.Common.Protobuf.csproj"/>
</ItemGroup>
```
---
### روش 3: PackageReference (قدیمی)
**مزایا**: کنترل دقیق ورژن
```xml
<ItemGroup>
<PackageReference Include="Foursat.BackOffice.BFF.Common.Protobuf" Version="1.0.0"/>
</ItemGroup>
```
**معایب**: نیاز به push به NuGet server
---
## 📝 اسکریپت build-deps.sh
**مسیر**: `/home/masoud/Apps/project/FourSat/BackOffice/build-deps.sh`
```bash
#!/bin/bash
# Build all BFF proto dependencies and copy DLLs to libs folder
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
LIBS_DIR="$SCRIPT_DIR/libs"
BFF_PROTOS_DIR="$SCRIPT_DIR/../BackOffice.BFF/src/Protobufs"
echo "🔧 Building all proto dependencies..."
mkdir -p "$LIBS_DIR"
# All 24 proto projects
PROTO_PROJECTS=(
"BackOffice.BFF.Common.Protobuf"
"BackOffice.BFF.Category.Protobuf"
# ... (complete list)
)
for PROJECT in "${PROTO_PROJECTS[@]}"; do
PROJECT_DIR="$BFF_PROTOS_DIR/$PROJECT"
dotnet build "$PROJECT_DIR" -c Release --verbosity quiet
# Check both net9.0 and net8.0
if [ -f "$PROJECT_DIR/bin/Release/net9.0/$PROJECT.dll" ]; then
cp "$PROJECT_DIR/bin/Release/net9.0/$PROJECT.dll" "$LIBS_DIR/"
elif [ -f "$PROJECT_DIR/bin/Release/net8.0/$PROJECT.dll" ]; then
cp "$PROJECT_DIR/bin/Release/net8.0/$PROJECT.dll" "$LIBS_DIR/"
fi
done
echo "✅ Build complete! Total DLLs: $(ls $LIBS_DIR/*.dll | wc -l)"
```
---
## 🚀 Workflow توسعه
### Development (Local):
```bash
# Build با Debug config
cd BackOffice/src
dotnet build -c Debug
# اگر libs/ نباشد → از ProjectReference استفاده می‌شود
# تغییرات Proto بلافاصله اعمال می‌شود
```
### Production (Deploy):
```bash
# 1. Build proto DLLs
cd BackOffice
./build-deps.sh
# 2. Build & Publish
cd src
dotnet publish BackOffice/BackOffice.csproj -c Release -o ./publish
# 3. بررسی output
ls ./publish/wwwroot/_framework/*.wasm | grep "BackOffice.BFF" | wc -l
# Result: 24 ✅
```
---
## 📦 لیست Proto Projects
### BackOffice.BFF (24 پروژه)
| پروژه | Target Framework | وضعیت |
|-------|------------------|--------|
| BackOffice.BFF.Common.Protobuf | net9.0 | ✅ |
| BackOffice.BFF.Category.Protobuf | net9.0 | ✅ |
| BackOffice.BFF.ClubMembership.Protobuf | net9.0 | ✅ |
| BackOffice.BFF.Commission.Protobuf | net9.0 | ✅ |
| BackOffice.BFF.Configuration.Protobuf | net9.0 | ✅ |
| BackOffice.BFF.DiscountCategory.Protobuf | net9.0 | ✅ |
| BackOffice.BFF.DiscountOrder.Protobuf | net9.0 | ✅ |
| BackOffice.BFF.DiscountProduct.Protobuf | net9.0 | ✅ |
| BackOffice.BFF.DiscountShoppingCart.Protobuf | net9.0 | ✅ |
| BackOffice.BFF.Health.Protobuf | net9.0 | ✅ |
| BackOffice.BFF.Inventory.Protobuf | net9.0 | ✅ |
| BackOffice.BFF.ManualPayment.Protobuf | net9.0 | ✅ |
| BackOffice.BFF.NetworkMembership.Protobuf | net9.0 | ✅ |
| BackOffice.BFF.Otp.Protobuf | net9.0 | ✅ |
| BackOffice.BFF.Package.Protobuf | net9.0 | ✅ |
| BackOffice.BFF.Products.Protobuf | net9.0 | ✅ |
| BackOffice.BFF.ProductTag.Protobuf | net9.0 | ✅ |
| BackOffice.BFF.PublicMessage.Protobuf | **net8.0** | ✅ |
| BackOffice.BFF.Role.Protobuf | net9.0 | ✅ |
| BackOffice.BFF.Tag.Protobuf | net9.0 | ✅ |
| BackOffice.BFF.User.Protobuf | net9.0 | ✅ |
| BackOffice.BFF.UserAddress.Protobuf | net9.0 | ✅ |
| BackOffice.BFF.UserOrder.Protobuf | net9.0 | ✅ |
| BackOffice.BFF.UserRole.Protobuf | net9.0 | ✅ |
⚠️ **نکته**: `PublicMessage.Protobuf` تنها پروژه با `net8.0` است
---
## 🔧 تنظیمات csproj با Auto-Push
```xml
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>
<PackageId>Foursat.BackOffice.BFF.Products.Protobuf</PackageId>
<Version>1.0.0</Version>
<Authors>FourSat</Authors>
<Company>FourSat</Company>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<PackageOutputPath>./nupkg</PackageOutputPath>
</PropertyGroup>
<!-- Auto-Push به GitLab -->
<Target Name="PushToFoursatNuget" AfterTargets="Pack"
Condition="'$(Configuration)' == 'Release'">
<PropertyGroup>
<NugetPackagePath>$(PackageOutputPath)$(PackageId).$(Version).nupkg</NugetPackagePath>
<PushCommand>dotnet nuget push **/*.nupkg --source https://git.se.kbs1.ir/api/packages/FourSat/nuget/index.json --api-key YOUR_API_KEY --skip-duplicate</PushCommand>
</PropertyGroup>
<Exec Command="$(PushCommand)" />
</Target>
</Project>
```
---
## 🛠️ Troubleshooting
### مشکل: Version Conflict
**علامت**:
```
error NU1605: Detected package downgrade: Grpc.Core.Api from 2.71.0 to 2.54.0
```
**راه‌حل**:
```xml
<PackageReference Include="Grpc.Core.Api" Version="2.71.0"/>
```
---
### مشکل: Missing Transitive Dependencies
**علامت**:
```
CS0234: The type or namespace name 'Google' does not exist
```
**راه‌حل**: اضافه کردن dependencies در csproj:
```xml
<PackageReference Include="Google.Protobuf" Version="3.28.3"/>
<PackageReference Include="Google.Api.CommonProtos" Version="2.10.0"/>
<PackageReference Include="FluentValidation" Version="11.2.2"/>
```
---
### مشکل: DLL Not Found
**علامت**:
```
warning MSB3245: Could not resolve this reference
```
**راه‌حل**:
```bash
# Rebuild all proto DLLs
cd BackOffice
rm -rf libs/
./build-deps.sh
```
---
### مشکل: net8.0 vs net9.0
**علامت**: DLL یک پروژه کپی نشده
**راه‌حل**: اسکریپت `build-deps.sh` هر دو framework را چک می‌کند
---
## 📚 مراجع
- [gRPC for .NET](https://docs.microsoft.com/en-us/aspnet/core/grpc/)
- [Protocol Buffers](https://developers.google.com/protocol-buffers)
- [NuGet CLI Reference](https://docs.microsoft.com/en-us/nuget/reference/nuget-exe-cli-reference)
+260
View File
@@ -0,0 +1,260 @@
# 🔄 Data Migration Guide
> **آخرین بروزرسانی**: January 3, 2026
> **ابزار**: FourSat.DataMigration
> **تعداد جداول**: 33
> **وضعیت**: ✅ آماده برای Production
---
## 📋 نگاه اجمالی
این ابزار یک **ابزار یکبار مصرف** برای مهاجرت داده‌های دیتابیس از ساختار قدیمی (Production) به ساختار جدید (Stage) است.
**زمان تخمینی اجرا**: 5-10 دقیقه
**تکنولوژی**: .NET 9.0 + Dapper + PostgreSQL
---
## 📁 ساختار پروژه
```
DataMigration/
├── FourSat.DataMigration/
│ ├── Program.cs # Entry point
│ ├── appsettings.json # 33 table mappings
│ ├── Models/
│ │ └── MigrationModels.cs # Settings, Mapping, QueueItem
│ ├── Services/
│ │ └── MigrationService.cs # Migration + Post-Migration logic
│ └── Scripts/
│ └── PostMigration_DataTransformation.sql
└── FourSat.GeographySeeder/ # ابزار جداگانه برای Geography data
```
---
## 🚀 راهنمای سریع (3 قدم)
### قدم 1: ویرایش تنظیمات
```bash
cd DataMigration/FourSat.DataMigration
# ویرایش appsettings.json
```
```json
{
"SourceConnectionString": "Host=OLD_SERVER;Database=OLD_DB;Username=xxx;Password=xxx",
"DestinationConnectionString": "Host=NEW_SERVER;Database=NEW_DB;Username=xxx;Password=xxx"
}
```
### قدم 2: اجرای Migration
```bash
dotnet run
```
### قدم 3: بررسی Logs
```bash
# خروجی:
[Users] Migrated 50000 rows in 12.5s
[Products] Migrated 8500 rows in 3.2s
...
✅ Migration completed! Total: 33 tables, Time: 4m 32s
```
---
## 📋 لیست جداول (33 جدول)
### جداول با تغییر نام (10 جدول)
| نام قدیمی (Source) | نام جدید (Target) | دلیل تغییر |
|-------------------|-------------------|-----------|
| `Categorys` | `Categories` | جمع صحیح Category |
| `FactorDetailss` | `FactorDetails` | s اضافی |
| `ProductGalleryss` | `ProductGalleries` | Gallery → Galleries |
| `ProductImagess` | `ProductImages` | s اضافی |
| `Productss` | `Products` | s اضافی |
| `PruductCategorys` | `ProductCategories` | Pruduct → Product |
| `PruductTags` | `ProductTags` | Pruduct → Product |
| `Transactionss` | `Transactions` | s اضافی |
| `UserAddresss` | `UserAddresses` | s اضافی |
| `UserCartss` | `UserCarts` | s اضافی |
### جداول بدون تغییر نام (23 جدول)
| گروه | جداول |
|------|--------|
| Core | `Roles`, `Tags`, `SystemConfigurations`, `ClubFeatures`, `Packages` |
| Users | `Users`, `OtpTokens`, `UserRoles`, `UserWallets`, `UserAddresses`, `UserCarts` |
| Products | `Categories`, `Products`, `ProductImages`, `ProductGalleries`, `ProductCategories`, `ProductTags` |
| Club | `ClubMemberships`, `ClubMembershipHistories`, `UserClubFeatures` |
| Network | `NetworkWeeklyBalances`, `NetworkMembershipHistories` |
| Commission | `CommissionPayoutHistories`, `UserCommissionPayouts`, `WeeklyCommissionPools` |
| Orders | `UserOrders`, `Transactions`, `Contracts`, `UserContracts` |
---
## 🔄 Post-Migration Transformation
### Binary Tree User Conversion
پس از migrate کردن جدول `Users`، باید تبدیل داده‌های شبکه انجام شود:
**مشکل**: در دیتابیس قدیمی، ستون‌های `Left` و `Right` شامل username است. در جدید باید UserId باشد.
**Script**: `PostMigration_DataTransformation.sql`
```sql
-- Convert username to user_id for binary tree
UPDATE "Users" u
SET
"LeftId" = (SELECT "Id" FROM "Users" WHERE "Username" = u."LeftUsername"),
"RightId" = (SELECT "Id" FROM "Users" WHERE "Username" = u."RightUsername")
WHERE "LeftUsername" IS NOT NULL OR "RightUsername" IS NOT NULL;
```
---
## ⚙️ تنظیمات پیشرفته
### appsettings.json
```json
{
"SourceConnectionString": "Host=...;Database=...;Username=...;Password=...",
"DestinationConnectionString": "Host=...;Database=...;Username=...;Password=...",
"BatchSize": 5000,
"MaxRetries": 3,
"RetryDelaySeconds": 5,
"TableMappings": [
{
"SourceTable": "Categorys",
"DestinationTable": "Categories",
"Priority": 1,
"ColumnMappings": {
"Id": "Id",
"Name": "Name",
"ParentId": "ParentId"
}
}
// ... 32 more tables
]
}
```
### تنظیمات کلیدی:
| تنظیم | پیش‌فرض | توضیحات |
|-------|---------|---------|
| `BatchSize` | 5000 | تعداد rows در هر batch |
| `MaxRetries` | 3 | تلاش مجدد در صورت خطا |
| `RetryDelaySeconds` | 5 | تأخیر بین retries |
| `Priority` | 1-5 | ترتیب migration (1=اول) |
---
## 🔧 ترتیب Migration
### مرحله 1: جداول پایه (بدون FK)
```
Roles → Tags → SystemConfigurations → ClubFeatures → Packages
```
### مرحله 2: جداول کاربری
```
Users → OtpTokens → UserRoles → UserWallets → UserAddresses → UserCarts
```
### مرحله 3: جداول محصولات
```
Categories → Products → ProductImages → ProductGalleries → ProductCategories → ProductTags
```
### مرحله 4: جداول عضویت
```
ClubMemberships → ClubMembershipHistories → NetworkWeeklyBalances
```
### مرحله 5: جداول تراکنش
```
UserOrders → Transactions → Contracts
```
---
## 🛠️ عیب‌یابی
### مشکل: FK Constraint Violation
**علامت**:
```
ERROR: insert or update on table "UserRoles" violates foreign key constraint
```
**راه‌حل**: بررسی Priority در appsettings.json - جدول parent باید Priority کمتر داشته باشد
---
### مشکل: Duplicate Key
**علامت**:
```
ERROR: duplicate key value violates unique constraint
```
**راه‌حل**:
```sql
-- پاک کردن destination قبل از migration
TRUNCATE TABLE "TargetTable" CASCADE;
```
---
### مشکل: Connection Timeout
**علامت**:
```
Npgsql.NpgsqlException: Timeout during reading attempt
```
**راه‌حل**: کاهش `BatchSize` به 1000
---
## ✅ چک‌لیست قبل از اجرا
- [ ] دسترسی به هر دو دیتابیس تست شده
- [ ] Backup از destination database گرفته شده
- [ ] Connection strings صحیح است
- [ ] BatchSize مناسب تنظیم شده
- [ ] Priority ها بررسی شده
- [ ] Post-Migration script آماده است
---
## 📊 آمار نهایی
| معیار | مقدار |
|-------|-------|
| تعداد جداول | 33 |
| جداول با تغییر نام | 10 |
| زمان تخمینی | 5-10 دقیقه |
| BatchSize پیش‌فرض | 5000 |
| MaxRetries | 3 |
---
## 📚 فایل‌های مرتبط
| فایل | توضیحات |
|------|---------|
| `appsettings.json` | تنظیمات و mapping ها |
| `MigrationService.cs` | لاجیک اصلی migration |
| `PostMigration_DataTransformation.sql` | Binary tree conversion |
+270
View File
@@ -0,0 +1,270 @@
# 🏢 CMS Microservice Documentation
> **آخرین بروزرسانی**: January 3, 2026
> **Framework**: .NET 9.0 + Clean Architecture + CQRS
> **Database**: PostgreSQL
> **Build Status**: ✅ SUCCESS
---
## 📊 وضعیت کلی
| سیستم | پیشرفت | وضعیت |
|-------|--------|--------|
| Commission System | 85% | ✅ Production Ready |
| Network System | 90% | ✅ Production Ready |
| Club Membership | 95% | ✅ Production Ready |
| Inventory System | 80% | ✅ Phase 2 Complete |
| Email/SMS | 100% | ✅ Complete |
---
## 🏗️ معماری
### Clean Architecture (4 لایه)
```
CMSMicroservice/
├── CMSMicroservice.Domain/ # Entities, Enums, Interfaces
├── CMSMicroservice.Application/ # CQRS Commands/Queries, MediatR
├── CMSMicroservice.Infrastructure/ # DbContext, Services, Repositories
└── CMSMicroservice.WebApi/ # Controllers, gRPC Services
```
### الگوی استاندارد
-**CQRS** با MediatR
-**IApplicationDbContext** برای دسترسی به DB (بدون Repository Pattern)
-**Mapster** برای mapping
-**FluentValidation** برای validation
---
## 💼 Commission System
### ویژگی‌های اصلی:
- ✅ Binary network tree با placement خودکار
- ✅ عضویت باشگاه (Member/Trial) با نرخ‌های کمیسیون
- ✅ محاسبه کمیسیون هفتگی (الگوریتم Lesser Leg)
- ✅ Background worker با Hangfire
- ✅ Health check endpoints
### الگوریتم محاسبه:
```
Weekly Commission = (Lesser Leg Balance × Rate) / Total Balances
```
**نرخ‌ها**:
| عضویت | نرخ |
|-------|-----|
| Member | 10% |
| Trial | 5% |
---
## 🏪 Inventory System
### Domain Layer:
| Entity | توضیحات |
|--------|---------|
| `InventoryItem` | ردیابی موجودی محصول در هر انبار |
| `StockMovement` | تاریخچه حرکات موجودی |
| `Warehouse` | مدیریت انبارها |
### StockMovementType:
| Type | Code | توضیحات |
|------|------|---------|
| `MovementTypeUnspecified` | 0 | نامشخص |
| `InitialStock` | 10 | موجودی اولیه |
| `Purchase` | 20 | خرید از تامین‌کننده |
| `Sale` | 30 | فروش به مشتری |
| `Return` | 40 | برگشت از فروش |
| `Adjustment` | 50 | تنظیم موجودی |
| `Loss` | 60 | ضایعات/خسارت |
| `Transfer` | 70 | انتقال بین انبار |
| `Reservation` | 80 | رزرو برای سفارش |
### CQRS Commands (17):
**Inventory:**
- `CreateInventoryItem`
- `UpdateInventoryItem`
- `DeleteInventoryItem`
- `UpdateInventoryQuantity`
- `ReserveInventory`
- `ReleaseReservedInventory`
- `ReduceInventory`
- `IncreaseInventory`
**Movement:**
- `CreateStockMovement`
- `BulkCreateStockMovement`
- `DeleteStockMovement`
**Warehouse:**
- `CreateWarehouse`
- `UpdateWarehouse`
- `DeleteWarehouse`
- `SetDefaultWarehouse`
- `ActivateWarehouse`
- `BulkCreateWarehouse`
### CQRS Queries (35):
**Inventory:**
- `GetInventoryItem`
- `GetInventoryByProduct`
- `GetAllInventoryItems`
- `GetLowStockItems`
- `GetOutOfStockItems`
- `CheckAvailability`
- `SearchInventory`
**Movement:**
- `GetStockMovements`
- `GetStockMovementsByInventoryItem`
- `GetMovementHistory`
- `GetDailyVolume`
- `GetTopMovingProducts`
- `SearchStockMovements`
**Warehouse:**
- `GetWarehouse`
- `GetAllWarehouses`
- `GetWarehouseStats`
- `GetWarehouseLowStock`
- `SearchWarehouses`
---
## 📧 Email & SMS Notifications
### پیکربندی:
**Email (MailKit 4.14.1)**:
```json
{
"Email": {
"Host": "smtp.example.com",
"Port": 587,
"Username": "noreply@foursat.com",
"Password": "xxx",
"SenderName": "FourSat System"
}
}
```
**SMS (Kavenegar 1.2.5)**:
```json
{
"Kavenegar": {
"ApiKey": "xxx",
"Sender": "10008663"
}
}
```
### انواع نوتیفیکیشن:
- ✅ Commission notification (هفتگی)
- ✅ Club activation notification
- ✅ Error alerts
---
## ⏰ Hangfire Job Scheduling
### داشبورد:
```
URL: https://cms.se.kbs1.ir/hangfire
```
### Job های زمان‌بندی شده:
| Job | Schedule | توضیحات |
|-----|----------|---------|
| WeeklyCommissionCalculation | یکشنبه 00:05 UTC | محاسبه کمیسیون هفتگی |
### API های Manual Trigger:
```
POST /api/commission/calculate
POST /api/commission/process-week?weekNumber=2026-W01
```
---
## 🏥 Health Checks
### Endpoints:
| Endpoint | استفاده |
|----------|---------|
| `/health` | وضعیت کلی |
| `/health/ready` | Readiness probe (K8s) |
| `/health/live` | Liveness probe (K8s) |
### Example Response:
```json
{
"status": "Healthy",
"checks": [
{ "name": "database", "status": "Healthy" },
{ "name": "redis", "status": "Healthy" }
]
}
```
---
## 🔧 Proto Sync (January 3, 2026)
### تغییرات enum در Inventory:
| آیتم | قبل | بعد |
|------|-----|-----|
| ProductType | `REGULAR`, `DISCOUNT` | `REGULAR_PRODUCT`, `DISCOUNT_PRODUCT` |
| StockMovementType | Sequential (0-9) | Grouped (10, 20, 30...) |
### تغییرات فیلد:
| قبل | بعد |
|-----|-----|
| `page_index` | `page` |
| `search_term` | `search` |
| `product_name` | `product_title` |
| `active_only` | `is_active` |
| `created_at` | `created` |
---
## 🚀 Build & Run
### Local Development:
```bash
cd CMS/src
dotnet build CMS.sln
dotnet run --project CMSMicroservice.WebApi
```
### Docker:
```bash
cd CMS
docker build -t cms:latest .
docker run -p 5000:80 cms:latest
```
### Environment Variables:
```bash
ASPNETCORE_ENVIRONMENT=Staging
ConnectionStrings__DefaultConnection=Host=...;Database=...
```
---
## 📚 مستندات مرتبط
- [BackOffice Documentation](./01-BACKOFFICE.md)
- [Proto Guide](./02-PROTO-GUIDE.md)
- [Deployment Guide](./05-DEPLOYMENT.md)
+393
View File
@@ -0,0 +1,393 @@
# 🚀 Deployment Guide
> **آخرین بروزرسانی**: January 3, 2026
> **Environment**: Kubernetes on Stage
> **Domain**: `*.se.kbs1.ir`
---
## 🌐 آدرس‌های سرویس‌ها
| سرویس | آدرس Stage |
|-------|------------|
| BackOffice UI | `https://backoffice.se.kbs1.ir` |
| BackOffice BFF | `https://backoffice-bff.se.kbs1.ir` |
| FrontOffice UI | `https://frontoffice.se.kbs1.ir` |
| FrontOffice BFF | `https://frontoffice-bff.se.kbs1.ir` |
| CMS | `https://cms.se.kbs1.ir` |
| Git Registry | `git.se.kbs1.ir` |
---
## 📦 Git Repositories
| Repo | Remote | URL |
|------|--------|-----|
| BackOffice | kub-stage | `https://git.se.kbs1.ir/admin/BackOffice.git` |
| BackOffice.BFF | kub-stage | `https://git.se.kbs1.ir/admin/BackOffice.BFF.git` |
| FrontOffice | kub-stage | `https://git.se.kbs1.ir/admin/FrontOffice.git` |
| FrontOffice.BFF | kub-stage | `https://git.se.kbs1.ir/admin/FrontOffice.BFF.git` |
| CMS | gitea | `https://git.se.kbs1.ir/admin/CMS.git` |
| Docs | foursatDocs | `https://git.se.kbs1.ir/FourSat/docs.git` |
---
## 🔄 CI/CD Workflow
### Gitea Actions
هر ریپو دارای workflow در `.gitea/workflows/` است:
```yaml
# kub-deploy.yml - Deploy to Stage
# prod-deploy.yml - Deploy to Production
```
### مراحل Deploy:
```
1. Push to branch → Trigger workflow
2. Build Docker image
3. Push to Registry (git.se.kbs1.ir)
4. Deploy to Kubernetes
```
---
## 🐳 Docker Registry
### تنظیمات:
```yaml
env:
EXTERNAL_REGISTRY: git.se.kbs1.ir
IMAGE: backoffice # or backoffice-bff, cms, etc.
# Docker daemon config
daemon.json: |
{
"insecure-registries": ["git.se.kbs1.ir", "gitea-svc:3000"]
}
```
### Image Names:
| سرویس | Image |
|-------|-------|
| BackOffice | `git.se.kbs1.ir/admin/backoffice:latest` |
| BackOffice.BFF | `git.se.kbs1.ir/admin/backoffice-bff:latest` |
| FrontOffice | `git.se.kbs1.ir/admin/frontoffice:latest` |
| FrontOffice.BFF | `git.se.kbs1.ir/admin/frontoffice-bff:latest` |
| CMS | `git.se.kbs1.ir/admin/cms:latest` |
---
## 📋 BackOffice Deployment
### Prerequisites:
```bash
# 1. Build proto DLLs
cd BackOffice
./build-deps.sh
# 2. Verify DLLs
ls libs/*.dll | wc -l # Should be 24
```
### Build & Publish:
```bash
cd BackOffice/src
dotnet publish BackOffice/BackOffice.csproj -c Release -o ./publish
```
### Docker Build:
```bash
cd BackOffice
docker build -t backoffice:latest .
```
### Dockerfile:
```dockerfile
FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build
WORKDIR /src
# Copy pre-built proto DLLs
COPY ["libs/", "libs/"]
COPY ["src/BackOffice/", "BackOffice/"]
RUN dotnet publish "BackOffice/BackOffice.csproj" -c Release -o /app/publish
FROM nginx:alpine
COPY --from=build /app/publish/wwwroot /usr/share/nginx/html
EXPOSE 80
```
---
## 📋 BFF & CMS Deployment
### Standard .NET Web API:
```bash
# Build
cd BackOffice.BFF/src
dotnet publish BackOffice.BFF.WebApi/BackOffice.BFF.WebApi.csproj -c Release -o ./publish
# Docker
docker build -t backoffice-bff:latest .
```
### Dockerfile Template:
```dockerfile
FROM mcr.microsoft.com/dotnet/aspnet:9.0 AS runtime
FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build
WORKDIR /src
COPY . .
RUN dotnet publish -c Release -o /app
FROM runtime
WORKDIR /app
COPY --from=build /app .
EXPOSE 80
ENTRYPOINT ["dotnet", "BackOffice.BFF.WebApi.dll"]
```
---
## ⚙️ Configuration
### appsettings.Staging.json (BackOffice):
```json
{
"Environment": "Staging",
"GwUrl": "https://backoffice-bff.se.kbs1.ir",
"AllowedHosts": "*"
}
```
### appsettings.Staging.json (FrontOffice):
```json
{
"GwUrl": "https://frontoffice-bff.se.kbs1.ir",
"AllowedHosts": "*"
}
```
### appsettings.json (BFF):
```json
{
"ConnectionStrings": {
"DefaultConnection": "Host=postgres;Database=cms;Username=xxx;Password=xxx"
},
"CMSMSAddress": "https://cms.se.kbs1.ir",
"Jwt": {
"Secret": "xxx",
"Issuer": "FourSat",
"Audience": "FourSat"
}
}
```
---
## 🔧 Kubernetes Resources
### Deployment Template:
```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: backoffice
spec:
replicas: 2
selector:
matchLabels:
app: backoffice
template:
spec:
containers:
- name: backoffice
image: git.se.kbs1.ir/admin/backoffice:latest
ports:
- containerPort: 80
env:
- name: ASPNETCORE_ENVIRONMENT
value: "Staging"
```
### Service Template:
```yaml
apiVersion: v1
kind: Service
metadata:
name: backoffice-svc
spec:
selector:
app: backoffice
ports:
- port: 80
targetPort: 80
```
### Ingress Template:
```yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: backoffice-ingress
spec:
rules:
- host: backoffice.se.kbs1.ir
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: backoffice-svc
port:
number: 80
```
---
## 🏥 Health Checks
### CMS Health Endpoints:
| Endpoint | استفاده |
|----------|---------|
| `/health` | وضعیت کلی |
| `/health/ready` | Readiness probe |
| `/health/live` | Liveness probe |
### Kubernetes Probes:
```yaml
livenessProbe:
httpGet:
path: /health/live
port: 80
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe:
httpGet:
path: /health/ready
port: 80
initialDelaySeconds: 5
periodSeconds: 5
```
---
## 📊 Monitoring
### Hangfire Dashboard:
```
https://cms.se.kbs1.ir/hangfire
```
### Logs:
```bash
# Kubernetes logs
kubectl logs -f deployment/cms -n foursat
# Docker logs
docker logs -f cms
```
---
## 🔄 Deploy Process
### 1. Manual Deploy:
```bash
# BackOffice
cd BackOffice
./build-deps.sh
git add .
git commit -m "Deploy: v1.x.x"
git push kub-stage main
# BFF/CMS
cd BackOffice.BFF
git add .
git commit -m "Deploy: v1.x.x"
git push kub-stage main
```
### 2. Verify Deployment:
```bash
# Check pods
kubectl get pods -n foursat
# Check services
kubectl get svc -n foursat
# Check ingress
kubectl get ingress -n foursat
```
### 3. Rollback:
```bash
# Rollback to previous version
kubectl rollout undo deployment/backoffice -n foursat
```
---
## 🛠️ Troubleshooting
### Build Failed:
```bash
# Check proto DLLs
ls BackOffice/libs/*.dll | wc -l # Should be 24
# Rebuild
./build-deps.sh
```
### Image Push Failed:
```bash
# Login to registry
docker login git.se.kbs1.ir
# Check daemon.json
cat /etc/docker/daemon.json
```
### Pod CrashLoopBackOff:
```bash
# Check logs
kubectl logs pod-name -n foursat
# Check events
kubectl describe pod pod-name -n foursat
```
---
## 📚 مستندات مرتبط
- [BackOffice Documentation](./01-BACKOFFICE.md)
- [Proto Guide](./02-PROTO-GUIDE.md)
- [CMS Documentation](./04-CMS.md)