فكرة المشروع
مشروع Talabat هو تطبيق API متكامل لمنصة تجارة إلكترونية (E-Commerce) مبني بتقنية .NET. يوفر المشروع نظاماً شاملاً لإدارة المنتجات، سلة التسوق، الطلبات، والمدفوعات الإلكترونية. يهدف المشروع إلى توفير تجربة تسوق آمنة وسلسة مع دعم كامل للمصادقة والتفويض، معالجة الدفع عبر Stripe، وإدارة متقدمة للطلبات.
________________________________________
التقنيات المستخدمة
1. الإطار الأساسي (Framework)
•ASP.NET Core Web API - لبناء واجهات برمجية RESTful
•.NET 6/7/8 - الإصدار الحديث من .NET
2. قواعد البيانات (Databases)
•SQL Server - قاعدة البيانات الرئيسية لتخزين المنتجات، الطلبات، والمستخدمين
•Entity Framework Core - ORM للتعامل مع قاعدة البيانات
•Redis - قاعدة بيانات In-Memory لتخزين سلة التسوق بشكل مؤقت وسريع
•StackExchange.Redis - مكتبة للتعامل مع Redis
3. الأمان والمصادقة (Security & Authentication)
•ASP.NET Core Identity - نظام إدارة المستخدمين والهوية
•JWT (JSON Web Tokens) - للمصادقة والتفويض
•JWT Bearer Authentication - لتأمين الـ Endpoints
4. معالجة الدفع (Payment Processing)
•Stripe Payment Gateway - بوابة دفع إلكتروني متكاملة لمعالجة المدفوعات
5. المكتبات المساعدة (Helper Libraries)
•AutoMapper - لتحويل الكائنات (Object Mapping) بين Entities و DTOs
•Swagger/OpenAPI - لتوثيق الـ API وتجربتها
6. معمارية البرمجة (Software Architecture)
•Clean Architecture - فصل واضح بين الطبقات
•Repository Pattern - لعزل منطق الوصول للبيانات
•Unit of Work Pattern - لإدارة المعاملات (Transactions)
•Specification Pattern - لبناء استعلامات ديناميكية ومعقدة
•Dependency Injection - لإدارة التبعيات
________________________________________
معمارية المشروع (Project Architecture)
المشروع مقسم إلى طبقات منفصلة تتبع مبادئ Clean Architecture:
1. طبقة API (Presentation Layer)
•Controllers: تحتوي على جميع نقاط النهاية (Endpoints)
oAccountController - إدارة التسجيل، تسجيل الدخول، والحسابات
oProductController - عرض وإدارة المنتجات
oBasketsController - إدارة سلة التسوق
oOrderController - إنشاء وإدارة الطلبات
oPaymentController - معالجة المدفوعات
oBuggyController - للاختبار ومعالجة الأخطاء
oErrorsController - معالجة الأخطاء المركزية
•Middleware: معالجة الأخطاء المخصصة
oCustomExceptionMiddleware - لالتقاط ومعالجة الأخطاء بشكل موحد
•Extensions: امتدادات مخصصة لتنظيم الكود
oApplicationServicesExtension - تسجيل خدمات التطبيق
oIdentityServicesExtensions - إعداد Identity و JWT
oSwaggerServicesExtensions - إعداد Swagger
oUserManagerExtensionMethod - امتدادات UserManager
2. طبقة النطاق (Core/Domain Layer)
•Entities: الكيانات الأساسية
oProduct, ProductBrand, ProductType
oOrder, OrderItem, Delivery
oCustomerBasket, BasketItem
oAppuser, Address (للهوية)
•Interfaces: الواجهات البرمجية
oIGenericRepository<T> - مستودع عام
oIBasketRepository - مستودع السلة
oIUnitOfWork - وحدة العمل
oIOrderService, IPaymentService, ITokenService
•Specifications: نمط المواصفات للاستعلامات
oProductWithProductBrandAndProductTypeSpecifications
oProductWithFiltrationAndCountSpecifications
oOrderwithBuyerEmailSpecifications
3. طبقة البنية التحتية (Infrastructure Layer)
•Repository: تنفيذ المستودعات
oGenericRepository<T>
oBasketRepository
oUnitOfWork
•Data Context:
oTalabatContext - سياق قاعدة البيانات الرئيسية
oIdentityContext - سياق Identity
oData Seeding - ملء البيانات الأولية
•Configurations: إعدادات Entity Framework
oProductEntityTypeConfiguration
oOrderEntityTypeConfiguration
oDeliveryEntityTypeConfiguration
4. طبقة الخدمات (Service Layer)
•OrderService - منطق إنشاء وإدارة الطلبات
•PaymentService - تكامل Stripe ومعالجة الدفع
•TokenService - إنشاء JWT Tokens
5. طبقة DTOs
•LoginDto, RegisterDto, UserDto
•ProductToReturnDto
•OrderDto, OrderToReturnDto, OrderItemDto
•CustomerBasketDto, BasketItemDto
•AddressDto
6. Error Handling
•ApiResponse - استجابة موحدة للأخطاء
•ApiExceptionError - استجابة تفصيلية للأخطاء
•ValidationErrorResponse - أخطاء التحقق من الصحة
________________________________________
أنماط التصميم المستخدمة (Design Patterns)
1. Repository Pattern
•عزل منطق الوصول للبيانات عن منطق الأعمال
•IGenericRepository<T> و GenericRepository<T> للعمليات العامة
2. Unit of Work Pattern
•إدارة المعاملات عبر عدة مستودعات
•ضمان الاتساق في حفظ التغييرات
•IUnitOfWork و UnitOfWork
3. Specification Pattern
•بناء استعلامات معقدة وقابلة لإعادة الاستخدام
•ISpecifications<T> و BaseSpecifications<T>
•SpecificationEvaluator<T> لتطبيق المواصفات
4. Dependency Injection Pattern
•حقن التبعيات عبر Constructor
•استخدام IServiceCollection لتسجيل الخدمات
5. DTO Pattern
•فصل كائنات النقل عن الكيانات
•استخدام AutoMapper للتحويل
6. Middleware Pattern
•معالجة الطلبات بشكل متسلسل
•CustomExceptionMiddleware للأخطاء
7. Factory Pattern
•UnitOfWork يستخدم Hashtable لإنشاء المستودعات عند الطلب
________________________________________
الميزات الرئيسية (Key Features)
1. إدارة المستخدمين
• التسجيل بنظام Identity مع التحقق القوي من كلمات المرور
• تسجيل الدخول باستخدام JWT
• إدارة العناوين للمستخدمين
• التحقق من وجود البريد الإلكتروني
2. إدارة المنتجات
• عرض المنتجات مع Pagination
• فلترة المنتجات حسب النوع والعلامة التجارية
• البحث في المنتجات
• ترتيب المنتجات (حسب السعر، الاسم)
• Eager Loading للعلامات والأنواع
3. سلة التسوق
• تخزين السلة في Redis لسرعة الأداء
• إنشاء أو تحديث السلة
• حذف السلة
• مدة صلاحية السلة 24 ساعة
4. إدارة الطلبات
• إنشاء طلبات جديدة
• عرض طلبات المستخدم
• تفاصيل الطلب الواحد
• حساب التكلفة الكلية (المنتجات + الشحن)
• طرق توصيل متعددة
5. معالجة الدفع
• تكامل مع Stripe Payment Gateway
• إنشاء Payment Intent
• تحديث Payment Intent
• تصحيح الأسعار من قاعدة البيانات
6. الأمان
• JWT Authentication
• Authorization باستخدام [Authorize] Attribute
• تشفير كلمات المرور
• Claims-based Authentication
7. معالجة الأخطاء
• Middleware مخصص للأخطاء
• استجابات موحدة للأخطاء
• معالجة أخطاء Validation
• Status Code Pages
________________________________________
تدفق البيانات (Data Flow)
Client Request
↓
Controller (API Layer)
↓
Service Layer (Business Logic)
↓
Unit of Work & Repository
↓
Specifications (Query Building)
↓
Entity Framework Core
↓
SQL Server / Redis
________________________________________
آلية المصادقة (Authentication Flow)
1.المستخدم يرسل بيانات تسجيل الدخول
2.AccountController يتحقق من البيانات
3.TokenService ينشئ JWT Token
4.يتم إرجاع Token للمستخدم
5.المستخدم يرسل Token في Header مع كل طلب
6.JWT Middleware يتحقق من صحة Token
7.إذا كان صحيحاً، يتم السماح بالوصول
________________________________________
قواعد البيانات
SQL Server
•TalabatContext: المنتجات، الطلبات، طرق التوصيل
•IdentityContext: المستخدمين، الأدوار، العناوين
Redis
•تخزين سلة التسوق مؤقتاً
•Key: BasketId
•Value: Serialized CustomerBasket
•TTL: 24 ساعة
________________________________________
النقاط التقنية المميزة
1.استخدام Specifications Pattern لبناء استعلامات ديناميكية معقدة
2.Unit of Work Pattern مع Hashtable لإنشاء المستودعات عند الطلب
3.AutoMapper مع Custom Value Resolvers لمعالجة URLs
4.Redis للتخزين المؤقت عالي الأداء
5.Stripe Integration للمدفوعات الآمنة
6.Automatic Migration & Data Seeding عند بدء التطبيق
7.Custom Exception Middleware لمعالجة موحدة للأخطاء
8.Extension Methods لتنظيم وتبسيط الكود
9.Pagination للمنتجات مع عدد النتائج الكلي
10.Fluent Validation مع Data Annotations
________________________________________
الخلاصة
مشروع Talabat هو تطبيق احترافي للتجارة الإلكترونية يعكس أفضل الممارسات في تطوير ASP.NET Core APIs. يستخدم معمارية نظيفة، أنماط تصميم قوية، ويدمج تقنيات حديثة مثل Redis و Stripe. المشروع مصمم ليكون قابلاً للتوسع، سهل الصيانة، ويوفر تجربة مستخدم آمنة وسلسة.