انتقل إلى المحتوى الرئيسي

المشروع أ: منصة التجارة الإلكترونية

الوصف​

تطوير API RESTful كامل لمنصة تجارة إلكترونية تتيح إدارة المنتجات، المستخدمين، السلة والطلبات.


الميزات المطلوبة​

1. إدارة المستخدمين​

POST   /api/auth/register     - التسجيل
POST /api/auth/login - تسجيل الدخول (يُرجع JWT)
GET /api/users/me - ملف المستخدم
PUT /api/users/me - تعديل الملف الشخصي

كيان المستخدم:

  • id، البريد الإلكتروني، كلمة المرور، الاسم الأول، الاسم الأخير
  • الدور (CUSTOMER، ADMIN)
  • createdAt، updatedAt

2. كتالوج المنتجات​

GET    /api/products              - قائمة المنتجات (التقسيم إلى صفحات)
GET /api/products/{id} - تفاصيل المنتج
GET /api/products/search - البحث بالاسم/الفئة
POST /api/products - إنشاء منتج (ADMIN)
PUT /api/products/{id} - تعديل المنتج (ADMIN)
DELETE /api/products/{id} - حذف المنتج (ADMIN)

كيان المنتج:

  • id، الاسم، الوصف، السعر، المخزون
  • الفئة (علاقة ManyToOne)
  • imageUrl، نشط

كيان الفئة:

  • id، الاسم، الوصف

3. السلة​

GET    /api/cart                  - عرض السلة
POST /api/cart/items - إضافة منتج
PUT /api/cart/items/{id} - تعديل الكمية
DELETE /api/cart/items/{id} - حذف من السلة
DELETE /api/cart - إفراغ السلة

كيان عنصر السلة:

  • id، السلة، المنتج، الكمية، السعر

4. الطلبات​

POST   /api/orders                - إنشاء طلب (من السلة)
GET /api/orders - قائمة الطلبات (المستخدم)
GET /api/orders/{id} - تفاصيل الطلب
PUT /api/orders/{id}/status - تعديل الحالة (ADMIN)
GET /api/admin/orders - جميع الطلبات (ADMIN)

كيان الطلب:

  • id، المستخدم، العناصر، المبلغ الإجمالي
  • الحالة (PENDING، CONFIRMED، SHIPPED، DELIVERED، CANCELLED)
  • عنوان الشحن، createdAt

مخطط قاعدة البيانات​

users
├── id (PK)
├── email (UNIQUE)
├── password
├── first_name
├── last_name
├── role
└── created_at

categories
├── id (PK)
├── name
└── description

products
├── id (PK)
├── name
├── description
├── price
├── stock
├── category_id (FK)
├── image_url
└── active

carts
├── id (PK)
└── user_id (FK, UNIQUE)

cart_items
├── id (PK)
├── cart_id (FK)
├── product_id (FK)
├── quantity
└── price

orders
├── id (PK)
├── user_id (FK)
├── total_amount
├── status
├── shipping_address
└── created_at

order_items
├── id (PK)
├── order_id (FK)
├── product_id (FK)
├── quantity
├── price
└── product_name

قواعد العمل​

المخزون​

  • التحقق من التوفر قبل الإضافة إلى السلة
  • تقليل المخزون عند الطلب
  • استعادة المخزون إذا تم إلغاء الطلب

السعر​

  • السعر في السلة يجب أن يكون سعر اللحظة
  • السعر في الطلب ثابت

السلة​

  • للمستخدم سلة واحدة فقط
  • يتم إنشاء السلة تلقائيًا
  • السلة فارغة بعد الطلب

الطلبات​

  • يمكن للمستخدم فقط رؤية طلباته
  • يمكن للمسؤول رؤية جميع الطلبات
  • انتقالات الحالة الصالحة:
    • PENDING -> CONFIRMED -> SHIPPED -> DELIVERED
    • PENDING -> CANCELLED
    • CONFIRMED -> CANCELLED

نقاط النهاية المفصلة​

المصادقة​

POST /api/auth/register
Content-Type: application/json

{
"email": "john@example.com",
"password": "Password123!",
"firstName": "John",
"lastName": "Doe"
}

Response 201:
{
"id": 1,
"email": "john@example.com",
"firstName": "John",
"lastName": "Doe",
"role": "CUSTOMER"
}
POST /api/auth/login
Content-Type: application/json

{
"email": "john@example.com",
"password": "Password123!"
}

Response 200:
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"type": "Bearer",
"expiresIn": 86400
}

المنتجات​

GET /api/products?page=0&size=10&category=electronics
Authorization: Bearer <token>

Response 200:
{
"content": [
{
"id": 1,
"name": "Laptop Pro",
"description": "High-performance laptop",
"price": 999.99,
"stock": 50,
"category": {
"id": 1,
"name": "Electronics"
},
"imageUrl": "https://..."
}
],
"page": 0,
"size": 10,
"totalElements": 100,
"totalPages": 10
}

السلة​

POST /api/cart/items
Authorization: Bearer <token>
Content-Type: application/json

{
"productId": 1,
"quantity": 2
}

Response 200:
{
"items": [
{
"id": 1,
"product": { "id": 1, "name": "Laptop Pro", ... },
"quantity": 2,
"price": 999.99,
"subtotal": 1999.98
}
],
"totalItems": 2,
"totalAmount": 1999.98
}

الطلبات​

POST /api/orders
Authorization: Bearer <token>
Content-Type: application/json

{
"shippingAddress": "123 Main St, City, 12345"
}

Response 201:
{
"id": 1,
"status": "PENDING",
"items": [...],
"totalAmount": 1999.98,
"shippingAddress": "123 Main St, City, 12345",
"createdAt": "2024-01-15T10:30:00"
}

الاختبارات المطلوبة​

اختبارات الوحدة​

  • ProductService: عمليات CRUD
  • CartService: إضافة، تحديث، إزالة العناصر
  • OrderService: إنشاء الطلب، التحقق من المخزون

اختبارات التكامل​

  • ProductController: جميع نقاط النهاية
  • CartController: عمليات السلة
  • OrderController: سير عمل الطلب

نقاط إضافية​

الميزةالنقاط
Cache Redis على المنتجات+5
إشعار البريد الإلكتروني (محاكاة)+3
البحث النصي الكامل+3
تصدير الطلبات بصيغة CSV+2
Docker Compose كامل+5
توثيق Swagger+5

تقدير الوقت​

المهمةالساعات
إعداد المشروع وقاعدة البيانات2
الكيانات والمستودعات4
خدمات العمل6
وحدات التحكم REST4
أمان JWT4
الاختبارات6
التوثيق2
النقاط الإضافية4-8
الإجمالي28-36

العودة إلى المشروع النهائي