efff5e9cd5
- business/ (5): club-commission, payment, ecommerce, membership, content - technical/ (5): cms-arch, ui, deployment, migration, api - overview/ (5): flowcharts, index, changelog, glossary, roadmap - Removed all old folders: backoffice, cms, deployment, docs, frontoffice, migration, ui-modernization, business (old) - Updated internal links with relative folder paths
7.1 KiB
7.1 KiB
📄 محتوا، صفحات، بلاگ و ایمیل/SMS
منابع ادغامشده:
SITE-PAGES-SIMPLIFICATION.md,system-constants.md,email-sms-configuration.md,chatika-integration.md,CMS-README.md
آخرین بروزرسانی: اسفند ۱۴۰۴
۱. مدیریت صفحات سایت (Site Pages)
۱.۱ معماری سادهشده (Shopify-style)
قبل (پیچیده):
SitePage → SitePageSetting → SitePageContent → Template → ... (7 جدول)
بعد (ساده):
SitePage (PageType, JsonSettings, IsPublished)
│
└─→ هر PageType → یک typed editor در BackOffice
۱.۲ انواع صفحات
| PageType | Route | Editor | وضعیت |
|---|---|---|---|
Home |
/ |
HomePageEditor | ✅ |
About |
/about |
AboutPageEditor | ✅ |
Contact |
/contact |
ContactPageEditor | ✅ |
Landing |
/landing |
LandingPageEditor | ✅ |
Licenses |
/licenses |
LicensesPageEditor | ✅ |
FAQ |
/faq |
FAQPageEditor | ✅ |
Terms |
/terms |
MarkdownEditor | ✅ |
Privacy |
/privacy |
MarkdownEditor | ✅ |
۱.۳ SitePageSettingsService
public interface ISitePageSettingsService {
Task<T> GetSettingsAsync<T>(string pageType) where T : class, new();
Task SaveSettingsAsync<T>(string pageType, T settings) where T : class;
}
// ذخیرهسازی: JSON serialization در فیلد Settings
// Cache: MemoryCache با Expiry 15 دقیقه
۱.۴ مثال — تنظیمات صفحه اصلی
{
"heroTitle": "کارا بازار سلامت",
"heroSubtitle": "سلامتی در دستان شما",
"heroImageUrl": "/images/hero.jpg",
"featuredCategories": ["guid1", "guid2"],
"showPromotionBanner": true,
"promotionText": "تخفیف ویژه زمستانه"
}
۲. سیستم بلاگ
۲.۱ Entity
public class BlogPost {
public Guid Id { get; set; }
public string Title { get; set; }
public string Slug { get; set; } // URL-friendly
public string Content { get; set; } // HTML/Markdown
public string Summary { get; set; }
public string FeaturedImageUrl { get; set; }
public Guid AuthorId { get; set; }
public Guid? CategoryId { get; set; }
public bool IsPublished { get; set; }
public DateTime PublishedAt { get; set; }
public List<string> Tags { get; set; }
public int ViewCount { get; set; }
}
۲.۲ Pagination (gRPC)
message GetBlogPostsRequest {
PaginationState pagination = 1;
string categoryId = 2;
string searchTerm = 3;
bool publishedOnly = 4;
}
۳. مدیریت فایل (File Management)
۳.۱ معماری
آپلود فایل (تصویر/سند)
│
▼
FileManagementService → ذخیره در فایلسیستم + ثبت در DB
│
▼
مسیر فیزیکی: /app/uploads/{year}/{month}/{guid}.{ext}
مسیر URL: /api/files/{guid}
محدودیتها:
• حداکثر حجم: 10MB (configurable)
• فرمتهای مجاز: jpg, png, webp, pdf, doc, docx
• تصاویر: resize خودکار به 800×800 (محصولات)
۳.۲ Storage Strategy
| محیط | ذخیرهسازی |
|---|---|
| Development | Local filesystem |
| Staging | Local filesystem (server) |
| Production | Local filesystem (server) |
| آینده | MinIO / S3 compatible (planned) |
۴. تنظیمات ایمیل و SMS
۴.۱ SMS (Kavenegar)
{
"Kavenegar": {
"ApiKey": "***",
"SenderNumber": "10008663",
"Templates": {
"OTP": "verify-foursat",
"ContractOTP": "contract-verify",
"WelcomeClub": "club-welcome",
"OrderConfirm": "order-confirm"
}
}
}
۴.۲ ایمیل
{
"Email": {
"SmtpHost": "smtp.example.com",
"SmtpPort": 587,
"Username": "noreply@foursat.ir",
"FromName": "کارا بازار سلامت",
"UseSsl": true,
"Templates": {
"WelcomeEmail": "welcome.html",
"OrderReceipt": "order-receipt.html"
}
}
}
⚠️ ایمیل فعلاً فقط برای اطلاعرسانی ادمین استفاده میشود — SMS کانال اصلی کاربران
۵. ثوابت سیستمی (SystemConstants)
۵.۱ جدول اصلی
CREATE TABLE SystemConfigurations (
[Key] NVARCHAR(200) PRIMARY KEY,
[Value] NVARCHAR(MAX),
[Description] NVARCHAR(500),
[Category] NVARCHAR(100),
[LastModified] DATETIME2
);
۵.۲ مقادیر کلیدی
| Category | Key | Value | توضیح |
|---|---|---|---|
| Club | Club.ActivationFee |
25000000 | هزینه فعالسازی |
| Club | Club.GiftValue |
25200000 | واریز Pool |
| Club | GoldenPackageAmount |
56000000 | قیمت پکیج طلایی |
| Club | MaxNetworkLevel |
15 | حداکثر عمق درخت |
| Club | MaxWeeklyBalance |
300 | سقف هفتگی |
| Payment | VAT.Percentage |
10 | مالیات ارزش افزوده |
| Payment | DayaLoanAmount |
56000000 | مبلغ وام |
| Store | DiscountPercentage |
30 | تخفیف باشگاه |
| Store | ProductsPerPage |
12 | تعداد در صفحه |
| System | SmsProvider |
Kavenegar | ارائهدهنده SMS |
| System | MaintenanceMode |
false | حالت تعمیر |
۶. Chatika AI Integration
۶.۱ معماری
Hangfire Recurring Job (هر ۵ دقیقه)
│
▼
ChatikaJob → بررسی پیامهای جدید کاربران
│
▼
ارسال به Chatika API (با Polly retry ×3)
│
▼
دریافت پاسخ → ذخیره در ChatMessages
│
▼
نمایش در UI باشگاه (real-time via SignalR planned)
۶.۲ فعلی vs آینده
| آیتم | فعلی | آینده |
|---|---|---|
| ارتباط | Polling (Hangfire) | SignalR real-time |
| دسترسی | فقط اعضای باشگاه | تعمیم به همه؟ |
| نوع پیام | متنی | متنی + تصویری |
۷. Landing Page
۷.۱ ساختار
Hero Section (انیمیشن fade-in)
│
▼
ویژگیها (Features Grid — 3 ستونه)
│
▼
محصولات ویژه (Carousel)
│
▼
آمار (Counter animation — اصلاحشده)
│
▼
CTA — Call to Action (ثبتنام / ورود)
۷.۲ اصلاح انیمیشن Counter
مشکل: اعداد به صورت exponential افزایش پیدا میکردند
راهحل: linear interpolation با requestAnimationFrame
start → target در ۲ ثانیه، مساویالفاصله
۸. خلاصه وضعیت
| ماژول | وضعیت | درصد |
|---|---|---|
| Site Pages (Shopify-style) | ✅ | 100% |
| بلاگ + Pagination | ✅ | 100% |
| مدیریت فایل | ✅ | 100% |
| SMS (Kavenegar) | ✅ | 100% |
| ایمیل | ⚠️ محدود | 50% |
| Chatika AI | ✅ | 100% |
| Landing Page | ✅ | 100% |
| SystemConstants | ✅ | 100% |
| SEO Meta Tags | ⬜ | 20% |