# CMS Microservice - Network & Club Commission System [![Status](https://img.shields.io/badge/Status-Production%20Ready-success)]() [![Progress](https://img.shields.io/badge/Progress-98%25-blue)]() [![MVP](https://img.shields.io/badge/MVP-100%25%20Complete-brightgreen)]() ## 📊 Project Status (2025-12-27) **Overall Progress**: 98% Complete **Production Readiness**: 99% **MVP Status**: ✅ 100% Complete ### ✅ Completed Phases 1. ✅ Domain Layer (Entities, Enums, Value Objects) 2. ✅ Club Membership System 3. ✅ Binary Network Tree 4. ✅ Commission Calculation & Background Worker (MVP) 5. ✅ Protobuf gRPC Services 6. ✅ History & Configuration Management 7. ✅ Database Migration & Seed Data 8. ✅ App Version Management 9. ✅ SMS Templates & SystemConstants ### 🟡 Partially Complete - Withdrawal & Settlement (40%) - ✅ Commands & Database - ❌ Payment Gateway Integration --- ## 🚀 Recent Updates (2025-12-27 / ۷ دی) ### SystemConstants - مقادیر ثابت ✅ - ✅ **فایل جدید**: `Domain/Common/SystemConstants.cs` - ✅ `GoldenPackageAmount = 56_000_000` - پکیج طلایی - ✅ `DayaLoanAmount = 56_000_000` - وام دایا - ✅ حذف مقادیر hardcode از همه handlers ### SmsTemplates - قالب‌های پیامک ✅ - ✅ **فایل جدید**: `Domain/Common/SmsTemplates.cs` - ✅ قالب‌ها: DayaLoan, ClubActivated, PackagePurchased, Commission, Withdrawal, OTP, Welcome - ✅ ارسال SMS خودکار هنگام تأیید وام دایا ### Mapping Fixes ✅ - ✅ `AppVersionProfile.cs` - Map List to GetAllAppVersionsResponse ### Previous Updates (2025-12-26) - ✅ **App Version Management**: Entity, gRPC, Handlers - ✅ **ReferralCode in Network Tree**: SP + Proto update --- ## 🏗️ Architecture **Clean Architecture** with 4 layers: ``` CMSMicroservice.Domain/ # Entities, Enums, Interfaces CMSMicroservice.Application/ # CQRS (Commands, Queries, MediatR) CMSMicroservice.Infrastructure/ # DbContext, Services, Background Jobs CMSMicroservice.WebApi/ # gRPC Services, Controllers CMSMicroservice.Protobuf/ # Protocol Buffers definitions ``` **Technology Stack**: - .NET 9.0 - Entity Framework Core 9.0.11 - gRPC + JSON Transcoding - Hangfire 1.8.22 (Job Scheduling) - MediatR 13.0.0 (CQRS) - Polly 8.5.0 (Resilience) - MailKit 4.14.1 (Email) - Kavenegar 1.2.5 (SMS) - SQL Server --- ## 📖 Documentation - **[Implementation Progress](docs/implementation-progress.md)** - Detailed phase-by-phase progress - **[Email/SMS Configuration Guide](docs/email-sms-configuration-guide.md)** - Production setup instructions - **[Balance Calculation Logic](docs/balance-calculation-carryover-logic.md)** - Commission algorithm details - **[Binary Tree Registration](docs/binary-tree-registration-guide.md)** - Network tree guide - **[Network Club Commission System](docs/network-club-commission-system-v1.1.md)** - Full system specification --- ## 🚀 Quick Start ### Prerequisites - .NET 9.0 SDK - SQL Server (local or remote) - (Optional) Gmail account for Email - (Optional) Kavenegar account for SMS ### 1. Clone & Build ```bash cd /home/masoud/Apps/project/FourSat/CMS/src dotnet build ``` ### 2. Configure Database Update `appsettings.json` with your SQL Server connection: ```json "ConnectionStrings": { "DefaultConnection": "Server=YOUR_SERVER;Database=Foursat_CMS;..." } ``` ### 3. Apply Migrations ```bash cd CMSMicroservice.WebApi dotnet ef database update ``` ### 4. Configure Notifications (Optional) See [Email/SMS Configuration Guide](docs/email-sms-configuration-guide.md) ### 5. Run ```bash dotnet run --urls="http://localhost:5133" ``` ### 6. Access Endpoints - **Health**: http://localhost:5133/health - **Hangfire Dashboard**: http://localhost:5133/hangfire - **gRPC**: localhost:5133 (HTTP/2) --- ## 🔧 Configuration ### Email (SMTP) ```json "Email": { "Enabled": true, "SmtpHost": "smtp.gmail.com", "SmtpPort": 587, "SmtpUsername": "your-email@gmail.com", "SmtpPassword": "your-gmail-app-password", "FromEmail": "noreply@foursat.com", "FromName": "FourSat CMS", "EnableSsl": true } ``` ### SMS (Kavenegar) ```json "Sms": { "Enabled": true, "Provider": "Kavenegar", "KavenegarApiKey": "YOUR_API_KEY", "Sender": "10008663" } ``` ### Background Worker ```csharp // Cron: "5 0 * * 0" = Every Sunday at 00:05 UTC RecurringJob.AddOrUpdate( "weekly-commission-calculation", job => job.ExecuteAsync(CancellationToken.None), "5 0 * * 0"); ``` --- ## 🧪 Testing ### Manual Trigger (via API) ```bash # Trigger weekly calculation immediately curl -X POST http://localhost:5133/api/admin/trigger-weekly-calculation # Trigger recurring job now curl -X POST http://localhost:5133/api/admin/trigger-recurring-job-now # Get recurring jobs status curl http://localhost:5133/api/admin/recurring-jobs-status ``` ### Health Checks ```bash curl http://localhost:5133/health # Overall health curl http://localhost:5133/health/ready # Readiness probe (K8s) curl http://localhost:5133/health/live # Liveness probe (K8s) ``` --- ## 📊 What's Remaining? ### High Priority 1. **Payment Gateway Integration** (Phase 10 - 1 week) - Daya API integration (فقط برای Payout) - IBAN transfer automation - Admin approval UI in BackOffice 2. **Production Configuration** (30 minutes) - Gmail App Password setup - Kavenegar API key registration - Update `appsettings.Production.json` ### Medium Priority 3. **Club Shop Integration** (Phase 9 - 2 weeks) - Product catalog for club memberships - Shopping cart integration - Auto-activation on purchase ### Low Priority 4. **Testing** (Phase 7 - Postponed) - Unit tests for business logic - Integration tests for API - Load testing for background worker ### Optional Enhancements - Redis distributed locks (multi-server deployment) - Sentry error tracking (API key needed) - Slack notifications (webhook needed) - FCM push notifications --- ## 🎯 MVP Features (100% Complete) ✅ Binary network tree with automatic placement ✅ Club membership (Member/Trial) with different commission rates ✅ Weekly commission calculation (Lesser Leg algorithm) ✅ Background worker with Hangfire (cron scheduling) ✅ Balance carryover logic (rollover unused volumes) ✅ MaxWeeklyBalances cap enforcement ✅ Health check endpoints (Kubernetes-ready) ✅ Manual trigger API (admin control) ✅ Email + SMS notifications (MailKit + Kavenegar) ✅ Retry logic with exponential backoff (Polly) ✅ Audit trail (WorkerExecutionLog, History tables) ✅ Structured logging (AlertService for Sentry/Slack) ✅ JWT authentication context (CurrentUserService) --- ## 👥 Team **Development**: FourSat Team **Last Updated**: 2025-12-01 --- ## 📝 License Proprietary - FourSat Company