تفاصيل العمل

> تطبيق ويب مبني على **Next.js (App Router)** لإدارة السفن/الشحنات وعرض بيانات حساسات (Sensor Data) مع نظام صلاحيات (Admin/Auditor/Viewer) ومصادقة عبر كُوكي (auth_token) وبث بيانات لحظي عبر Socket.

---

## 1) نظرة عامة على التطبيق

يتكوّن AtlasLogix من جزئين رئيسيين:

1. **جزء المصادقة (Auth)**

- تسجيل (Register)

- تسجيل دخول (Login)

- تسجيل خروج (Logout)

- جلب معلومات المستخدم الحالي (Me)

2. **جزء لوحة التحكم (Dashboard)**

- صفحة الحسابات (/accounts) لإدارة المستخدمين (للـ Admin)

- صفحة الشحنات (/shipments) مع فلترة وعرض قائمة الشحنات

- صفحة إنشاء شحنة (/shipments/create)

- صفحة تفاصيل شحنة (/shipments/[shipmentId])

- صفحة إضافة قراءة حساسات لشحنة معينة (/shipments/[shipmentId]/add-reading)

- عرض إحصاءات الشحنة/بيانات الحسّاسات

بالإضافة إلى ذلك:

- يوجد **حماية مسارات** (ProtectedRoute / AuthGuard) للتحقق من الصلاحيات.

- يوجد **بث لحظي** لقراءات الحسّاسات عبر Socket.

- يوجد **تنبيهات** (Alert service) كآلية لإظهار حالات/تنبيهات في الواجهة.

---

## 2) هيكل المجلدات (Structure)

- `app/`

- صفحات Next.js (Routes) باستخدام App Router

- أمثلة:

- `app/(auth)/...` صفحات تسجيل/…

- `app/(dashboard)/...` صفحات لوحة التحكم

- `app/api/...` Endpoints

- `features/`

- طبقات المجال (Domain) والمنطق الخاص بكل ميزة

- مثال:

- `features/auth/` (models/services/slices/types)

- `features/shipments/`

- `features/sensor-data/`

- `components/`

- مكوّنات واجهة المستخدم

- مثل: layout (Sidebar/Navbar/FloatingDock)، وعناصر dashboard، وUI components.

- `lib/`

- خدمات عامة مثل الاتصال بـ MongoDB و Socket و utils

- مثال:

- `lib/mongodb.ts`

- `lib/socket.ts`

- `lib/auth/`

- `lib/api/`

---

## 3) المتطلبات وتشغيل المشروع محلياً

> يوجد ملف `package.json` يحدد سكربتات التشغيل.

### 3.1 التثبيت

```bash

npm install

```

### 3.2 التشغيل في وضع التطوير

```bash

npm run dev

```

ثم افتح:

- http://localhost:3000

### 3.3 إنشاء Build وتشغيل الإنتاج

```bash

npm run build

npm run start

```

---

## 4) إعدادات البيئة (Environment)

يوجد ملف `.env` ضمن المشروع (ظاهر في الهيكل). يجب التأكد من القيم المطلوبة مثل:

- إعدادات الاتصال بقاعدة البيانات (MongoDB)

- مفاتيح/Secrets الخاصة بالـ JWT

- إعدادات Socket/أي provider خارجي (إن وجدت)

> **ملاحظة:** لا يمكنني تأكيد أسماء المتغيرات الدقيقة بدون قراءة ملف `.env` (غير ظاهر كمحتوى هنا). راجع `lib/mongodb.ts` و `lib/auth/` و `lib/socket.ts` لاستخراج أسماء المتغيرات المطلوبة.

---

## 5) المصادقة والصلاحيات (Auth & Authorization)

### 5.1 المصادقة

- يتم الاعتماد على **cookie** باسم غالباً `auth_token`.

- يوجد endpoints:

- `/api/auth/login`

- `/api/auth/register`

- `/api/auth/logout`

- `/api/auth/me`

### 5.2 الصلاحيات

- الأدوار المتوقعة: **Admin / Auditor / Viewer**.

- يتم تحويل/تطبيع أسماء الأدوار لضمان التوافق مع المنطق داخل:

- `app/config/routes.ts`

- مكوّنات الحماية مثل `ProtectedRoute`.

### 5.3 حماية المسارات

- يتم حماية صفحات لوحة التحكم عبر:

- `components/auth/ProtectedRoute.tsx`

- `components/auth/AuthGuard.tsx`

---

## 6) تدفق الشحنات (Shipments Workflow)

### 6.1 قائمة الشحنات

- الصفحة: `app/(dashboard)/shipments/page.tsx`

- تقوم باستدعاء البيانات (غالباً عبر hooks/services من `features/shipments/`).

### 6.2 إنشاء شحنة

- الصفحة: `app/(dashboard)/shipments/create/page.tsx`

- تعتمد على services داخل `features/shipments/services/shipment.service.ts`

### 6.3 تفاصيل شحنة

- الصفحة: `app/(dashboard)/shipments/[shipmentId]/page.tsx`

- تعرض معلومات الشحنة بالإضافة إلى بيانات حساسات مرتبطة بها.

### 6.4 إضافة قراءة حساسات

- الصفحة: `app/(dashboard)/shipments/[shipmentId]/add-reading/page.tsx`

- ترسل قراءة جديدة إلى API خاص بالحساسات.

---

## 7) بيانات الحسّاسات (Sensor Data)

يوجد Modules:

- `features/sensor-data/`

وأجزاء مهمة:

- موديل القراءة: `features/sensor-data/models/sensor-reading.model.ts`

- خدمة البيانات: `features/sensor-data/services/sensor-data.service.ts`

- Redux slice: `features/sensor-data/slices/sensorData.slice.ts`

### 7.1 API الخاصة بالـ Sensor Data

أمثلة endpoints:

- `app/api/v1/shipments/[shipmentId]/sensor-data/route.ts`

- `app/api/v1/stream/sensor-data/route.ts` (لبث لحظي)

---

## 8) بث Socket في التطبيق

- يوجد Context: `app/context/SocketContext.tsx`

- يوجد ملف اتصال/Client: `lib/socket.ts`

الفكرة العامة:

- يتم فتح اتصال Socket

- يتم استلام أحداث/رسائل خاصة بقراءات حساسات

- يتم تحديث الحالة داخل الـ store/Redux أو داخل components حسب تصميم التطبيق

---

## 9) الأداء (Performance)

يوجد إعدادات مرتبطة بالأداء مثل:

- `app/config/performance.ts`

كما يوجد `instrumentation.ts` لميزات/Tracking حسب إعداد المشروع.

---

## 10) اختبارات (Testing)

يوجد `vitest.config.ts` بالإضافة إلى deps الخاصة بالـ Vitest.

راجع:

- `vitest.config.ts`

- أي ملفات test داخل المشروع (إن وجدت)

---

## 11) كيف أضيف Feature جديدة؟ (إرشادات عملية)

1. ضع منطق المجال داخل `features/<feature-name>/`

2. إذا كانت هناك صفحة جديدة:

- أضف Route داخل `app/(dashboard)/...` أو `app/(auth)/...`

3. استخدم services/models/types لتوحيد عقود البيانات.

4. إذا كانت هناك API جديدة:

- أضف Endpoint داخل `app/api/...`

5. حدّث `app/config/routes.ts` لإضافة قواعد الصلاحيات للمسار الجديد.

---

## مراجع ملفات مهمة في المشروع

- `app/config/routes.ts` — تعريف صلاحيات المسارات

- `components/auth/ProtectedRoute.tsx` — حماية المسارات

- `app/api/auth/*` — Endpoints المصادقة

- `app/api/v1/shipments/*` — Endpoints الشحنات

- `app/api/v1/stream/sensor-data/*` — بث حساسات لحظياً

- `features/*/services/*` — طبقات الخدمات

- `lib/mongodb.ts` — الاتصال ب MongoDB

بطاقة العمل

اسم المستقل
عدد الإعجابات
0
تاريخ الإضافة
تاريخ الإنجاز
المهارات