📋 فهرست مطالب
🛠️ 11. تکنولوژیها و زبانهای برنامهنویسی
این پروژه با استفاده از معماری Clean Architecture و الگوهای طراحی مدرن پیادهسازی شده است.
زبانهای برنامهنویسی
C#
زبان اصلی برنامهنویسی
Razor
موتور View Engine
HTML/CSS/JavaScript
فرانتاند
SQL
زبان پایگاه داده
فریمورک و پلتفرم
| تکنولوژی | نسخه | کاربرد |
|---|---|---|
| .NET | 9.0 | پلتفرم اصلی توسعه |
| ASP.NET Core MVC | 9.0 | فریمورک وب برای ساخت صفحات و API |
| Entity Framework Core | 9.0.10 | ORM برای دسترسی به پایگاه داده |
| SQL Server | - | پایگاه داده رابطهای |
کتابخانهها و پکیجهای اصلی
MediatR
الگوی CQRS و Mediator
FluentValidation
اعتبارسنجی دادهها
Serilog
سیستم لاگینگ پیشرفته
Hangfire
Background Jobs
Parbad
درگاه پرداخت (ZarinPal)
QuestPDF
تولید فایل PDF
PersianDateTime
تاریخ شمسی
Kavenegar
ارسال پیامک
Swashbuckle (Swagger)
مستندسازی API
WebMarkupMin
فشردهسازی HTML/CSS/JS
MathNet.Numerics
محاسبات ریاضی
ASP.NET Identity
احراز هویت و مدیریت کاربران
معماری و الگوهای طراحی
معماری Clean Architecture
پروژه به صورت لایهای و مستقل از فریمورک طراحی شده:
- Domain Layer: موجودیتها، Enumها و منطق کسبوکار
- Application Layer: Commands, Queries, DTOs و Interfaces
- Infrastructure Layer: پیادهسازی Repository، سرویسهای خارجی
- Presentation Layer (WebSite): Controllers، Views و Middleware
- SharedKernel: کدهای مشترک بین لایهها
الگوهای طراحی استفاده شده
| الگو | توضیحات |
|---|---|
| CQRS | جداسازی Commands و Queries با استفاده از MediatR |
| Repository Pattern | جداسازی دسترسی به داده از منطق کسبوکار |
| Dependency Injection | تزریق وابستگیها با استفاده از DI Container |
| Unit of Work | مدیریت تراکنشهای دیتابیس |
| Specification Pattern | ایجاد Queryهای قابل استفاده مجدد |
ابزارها و تکنولوژیهای کمکی
- Response Compression: فشردهسازی پاسخهای HTTP (Gzip و Brotli)
- HTML Minification: کاهش حجم صفحات HTML
- Memory Cache: کش در حافظه برای بهبود عملکرد
- Session Management: مدیریت نشستهای کاربری
- Cookie Management: مدیریت کوکیها برای سبد خرید و نشست
- File Upload Service: سرویس آپلود و مدیریت فایلها
- Visit Tracking: ردیابی بازدیدهای صفحات
- SEO Metadata: مدیریت متادیتاهای SEO
💼 1. خلاصه بیزینس مدل
فروشگاه جامع یک پلتفرم فروشگاهی چندفروشندگی (Multi-vendor Marketplace) است که امکان فروش محصولات فیزیکی و دیجیتال توسط فروشندگان مختلف را فراهم میکند.
جریان کلی کسبوکار
┌─────────────────────────────────────────────────────────────────────────────┐ │ جریان کلی بیزینس │ ├─────────────────────────────────────────────────────────────────────────────┤ │ │ │ فروشنده ثبتنام → تایید پروفایل → ثبت محصول → تایید ادمین → انتشار محصول │ │ │ │ کاربر مشاهده → افزودن به سبد → پرداخت → ایجاد فاکتور → تحویل/دانلود │ │ │ │ تسویه با فروشنده → محاسبه سهم → درخواست برداشت → پرداخت به فروشنده │ │ │ └─────────────────────────────────────────────────────────────────────────────┘
انواع محصولات
فیزیکی (Physical)
محصولات قابل ارسال پستی با کد پیگیری
دیجیتال (Digital)
فایلهای قابل دانلود پس از پرداخت
💰 مدل درآمدی پلتفرم
| عنوان | توضیحات | مثال |
|---|---|---|
| سهم فروشنده | درصدی که فروشنده از هر فروش دریافت میکند | 70% |
| کارمزد پلتفرم | درصدی که پلتفرم از هر فروش کسب میکند | 30% |
| مالیات ارزش افزوده | درصد مالیات اضافه شده به قیمت | 9% |
| کمیسیون همکاری | درصد پرداختی به بازاریابان | 5% |
📊 روشهای محاسبه کارمزد
| روش | فرمول | مثال (فروش ۱۰۰,۰۰۰) |
|---|---|---|
| مکمل سهم فروشنده | سهم فروشنده = مبلغ × درصد | فروشنده: ۷۰,۰۰۰ | پلتفرم: ۳۰,۰۰۰ |
| کسر از سهم فروشنده | سهم - کارمزد = واریزی | (۷۰,۰۰۰ - ۳۰,۰۰۰) = ۴۰,۰۰۰ |
👨💼 4. پنل مدیریت (Admin)
مسیر پایه: /Admin
داشبورد
آمار کاربران
کل، جدید، فعال، فروشندگان
آمار تجاری
فروش، سفارشات، میانگین
آمار محتوا
محصولات، پستها، نظرات
آمار بازدید
روزانه، هفتگی، پربازدید
لیست کامل بخشهای مدیریت
| بخش | مسیر | امکانات |
|---|---|---|
| کاربران | /Admin/Users |
لیست، افزودن، ویرایش، فعال/غیرفعال، حذف، پروفایل، دستگاهها |
| کاتالوگ | /Admin/Catalog |
دستهبندی، محصولات، تنوعها، ویژگیها، گالری، FAQ |
| سفارشات | /Admin/Orders |
لیست، جزئیات، تغییر وضعیت، ثبت ارسال |
| فاکتورها | /Admin/Invoices |
لیست، جزئیات، اقلام، تراکنشها |
| فروشندگان | /Admin/Sellers |
لیست، افزودن، ویرایش، پروفایل، فعال/غیرفعال |
| درخواست محصول | /Admin/ProductRequests |
بررسی، تایید، رد |
| پیشنهادات | /Admin/ProductOffers |
مدیریت پیشنهادات قیمت فروشندگان |
| نظرات | /Admin/ProductComments |
تایید، رد، پاسخ، حذف |
| گزارش تخلف | /Admin/ProductViolationReports |
بررسی گزارشها |
| کیف پول | /Admin/Wallets |
شارژ کیف پول کاربران |
| درخواست برداشت | /Admin/WithdrawalRequests |
تایید، رد، ثبت پرداخت |
| تیکتها | /Admin/Tickets |
پاسخ، تخصیص، تغییر وضعیت |
| وبلاگ | /Admin/Blog |
پستها، نظرات |
| بنرها | /Admin/Banners |
مدیریت بنرهای تبلیغاتی |
| صفحات | /Admin/Pages |
صفحات استاتیک |
| منو | /Admin/NavigationMenu |
منوی ناوبری |
| کد تخفیف | /Admin/DiscountCodes |
مدیریت کوپنها |
| اعلانها | /Admin/Notifications |
ارسال اعلان |
| SEO | /Admin/Seo |
تنظیمات سئو |
| گزارش مالی | /Admin/FinancialReports |
آمار و گزارشها |
| بازدیدها | /Admin/Visits |
آمار بازدید |
| لاگها | /Admin/ApplicationLogs |
لاگهای سیستم |
وضعیتهای سفارش
| وضعیت | کد | توضیحات |
|---|---|---|
| پیشنویس | Draft | سبد تبدیل نشده به سفارش |
| در انتظار پرداخت | Pending | منتظر پرداخت کاربر |
| تسویه شده | Paid | پرداخت کامل انجام شده |
| تسویه جزئی | PartiallyPaid | پرداخت ناقص |
| لغو شده | Cancelled | سفارش لغو شده |
💳 7. سیستم مالی و پرداخت
روشهای پرداخت
درگاه آنلاین
زرینپال و سایر درگاهها
کیف پول
پرداخت از موجودی حساب
کارت به کارت
واریز دستی با شماره پیگیری
نقدی
پرداخت حضوری
جریان پرداخت آنلاین
1. درخواست توکن از زرینپال
↓
2. هدایت کاربر به درگاه
↓
3. پرداخت توسط کاربر
↓
4. بازگشت به سایت با Authority
↓
5. تایید پرداخت (Verify)
↓
6. ثبت تراکنش و بهروزرسانی فاکتور
⚙️ 9. تنظیمات سیستم
تنظیمات سایت
| فیلد | توضیحات |
|---|---|
| عنوان سایت | نام نمایشی سایت |
| ایمیل اصلی / پشتیبانی | آدرسهای ایمیل |
| تلفن اصلی / پشتیبانی | شمارههای تماس |
| آدرس | آدرس فیزیکی |
| لوگو / Favicon | تصاویر برند |
| شبکههای اجتماعی | تلگرام، اینستاگرام، واتساپ، لینکدین |
تنظیمات مالی
| تنظیم | توضیحات | محدوده |
|---|---|---|
| سهم فروشنده | SellerProductSharePercentage | 0-100% |
| مالیات ارزش افزوده | ValueAddedTaxPercentage | 0-100% |
| کارمزد پلتفرم | PlatformCommissionPercentage | 0-100% |
| کمیسیون همکاری | AffiliateCommissionPercentage | 0-100% |
| روش محاسبه | CommissionCalculationMethod | Complementary / DeductFromSeller |
تنظیمات درگاه پرداخت
زرینپال
- Merchant ID
- Callback URL
- محیط (Sandbox / Production)
🔐 10. احراز هویت و امنیت
ورود با شماره موبایل
1. کاربر شماره موبایل را وارد میکند
↓
2. کد 6 رقمی پیامک میشود
↓
3. کاربر کد را وارد میکند
↓
4. اعتبارسنجی کد
↓
5. کاربر موجود → ورود | کاربر جدید → ایجاد حساب
↓
6. ایجاد نشست (Session)
مدیریت نشستها
| اطلاعات | توضیحات |
|---|---|
| شناسه نشست | Session ID یکتا |
| آدرس IP | آیپی کاربر |
| نوع دستگاه | Desktop / Mobile / Tablet |
| مرورگر | Chrome / Firefox / Safari / ... |
| آخرین فعالیت | زمان آخرین درخواست |
| وضعیت | فعال / بسته شده |
امکانات امنیتی:
- ✅ مشاهده دستگاههای فعال
- ✅ بستن نشست از راه دور
- ✅ خروج از همه دستگاهها
- ✅ تشخیص خودکار نوع دستگاه
🏪 5. پنل فروشنده (Seller)
مسیر پایه: /Seller
داشبورد فروشنده
محصولات
کل، منتشر شده، در انتظار، پیشنویس
سفارشات
کل، جدید، درآمد کل
نظرات
نظرات جدید، بدون پاسخ
درخواستها
درخواستهای سفارشی
امکانات پنل فروشنده
| بخش | مسیر | امکانات |
|---|---|---|
| محصولات | /Seller/Products |
لیست، ایجاد درخواست، ویرایش |
| درخواستها | /Seller/ProductRequests |
مشاهده وضعیت درخواستها |
| پیشنهادات | /Seller/ProductOffers |
مدیریت قیمت و موجودی |
| سفارشات | /Seller/Orders |
مشاهده سفارشات مرتبط |
| ارسال | /Seller/ShipmentTracking |
ثبت وضعیت ارسال |
| نظرات | /Seller/ProductComments |
پاسخ به نظرات |
| پروفایل | /Seller/Profile |
ویرایش اطلاعات |
| مالی | /Seller/Payments |
گزارش درآمد |
| برداشت | /Seller/WithdrawalRequests |
درخواست برداشت |
👤 6. پنل کاربر (User)
مسیر پایه: /User
امکانات پنل کاربر
| بخش | مسیر | امکانات |
|---|---|---|
| پروفایل | /User/Profile |
مشاهده و ویرایش اطلاعات، آپلود آواتار |
| دستگاهها | /User/Profile/ActivityLog |
مشاهده و مدیریت نشستها |
| کیف پول | /User/Wallet |
موجودی، شارژ، تراکنشها |
| آدرسها | /User/UserAddresses |
مدیریت آدرسهای تحویل |
| محصولات | /User/Products |
محصولات خریداری شده، دانلود |
| تیکتها | /User/Tickets |
ارسال و پیگیری تیکت |
| اعلانها | /User/Notifications |
مشاهده اعلانها |
⭐ ویژگیهای خاص سیستم
سبد خرید ناشناس
کاربران بدون ورود میتوانند محصول به سبد اضافه کنند:
- ✅ شناسایی با کوکی
AnonymousCartId - ✅ ذخیره در دیتابیس با
UserId = null - ✅ ادغام خودکار پس از ورود
- ✅ پاکسازی کوکی پس از ادغام
اطلاعرسانی موجودی (Back In Stock)
برای محصولات ناموجود:
- 📱 ثبت شماره موبایل + تایید OTP
- 💾 ذخیره در
BackInStockSubscription - 📨 ارسال پیامک هنگام موجود شدن
- 🔄 حذف اشتراک پس از ارسال
درخواست سفارشی
برای محصولات نیازمند سفارشیسازی:
| وضعیت | توضیحات |
|---|---|
| Pending | در انتظار بررسی |
| Contacted | تماس گرفته شده |
| Completed | تکمیل شده |
| Rejected | رد شده |
مدیریت نشستها
هر ورود یک نشست جدید ایجاد میکند:
اطلاعات ثبت شده
IP, Device, Browser, User Agent
عملیات
مشاهده، بستن، حذف نشست