تخطيط الحل
ما هو
يُنظَّم حل ManpowerIQ في مشاريع Clean Architecture الأربعة إضافةً إلى تطبيقي العميل. هذه الصفحة هي الخريطة: أي مشروع يحمل ماذا، وأي اتجاه تشير إليه الاعتماديات.
لماذا بُني بهذه الطريقة
تُقسَّم المشاريع بحيث لا يعتمد جوهر العمل على قاعدة البيانات أو إطار الويب. يحمل Domain وApplication القواعد؛ ويحمل Infrastructure وAPI الأسلاك. ذلك الاتجاه (كل شيء يشير إلى الداخل نحو النطاق) هو ما يجعل محرّك التخصيص وقواعد الطلب والكيانات قابلة للاختبار دون Postgres أو HTTP. قاعدة الاعتمادية مُغطّاة بالتفصيل في Clean Architecture.
كيف يعمل
flowchart LR
API[ManpowerIQ.API<br/>ASP.NET Core] --> APP[ManpowerIQ.Application]
INFRA[ManpowerIQ.Infrastructure<br/>EF Core, Hangfire, Auth] --> APP
API --> INFRA
APP --> DOM[ManpowerIQ.Domain]
INFRA --> DOM
WEB[web/ · React + Vite] -.HTTP/JWT.-> API
MOB[mobile/ · Expo skeleton] -.HTTP.-> API
الواجهة الخلفية (manpoweriq/src/)
| المشروع | المسؤولية | محتويات تمثيلية |
|---|---|---|
ManpowerIQ.Domain |
الكيانات، التعدادات، أشكال القواعد — دون اعتماديات على الإطار. | Domain/Common/AuditableEntity.cs، TenantEntity.cs؛ Domain/Entities/* (Employee، Role، Permission، AuditEvent…) (الورقة 01 §entities) |
ManpowerIQ.Application |
خدمات وواجهات العمل — حالات الاستخدام. | محرّك التخصيص، تخطيط الطلب، الإجازة، خدمات الحضور؛ Application/Auditing/IAuditLogger.cs، Application/Tenancy/ICurrentTenantProvider.cs، Application/Resources/ErrorMessages.resx |
ManpowerIQ.Infrastructure |
تنفيذ EF Core، المعترضات، المصادقة، Hangfire، الاستيرادات. | Persistence/ManpowerIQDbContext.cs، Persistence/Interceptors/TenantStampingInterceptor.cs، Tenancy/CurrentTenantProvider.cs، Auth/JwtTokenMinter.cs، Services/ImportJobRunner.cs |
ManpowerIQ.API |
مضيف ASP.NET Core: المتحكّمات، الوسائط، DI، خطّ أنابيب الطلب. | Program.cs (DI + ترتيب الوسائط)، Controllers/*، Middleware/TenantContextMiddleware.cs |
العملاء (manpoweriq/)
web/— تطبيق الصفحة الواحدة React + Vite. سطح المنتج الحقيقي؛ Tailwind متجاوب، مصادقة JWT.mobile/— مشروع Expo + React Native + TypeScript هو شاشة فحص-صحة واحدة (mobile/App.tsx)، لا تطبيق وظيفي (الورقة 20 §build-status).
الاختبارات — tests/ManpowerIQ.E2E.Tests/ (Playwright E2E + بذرة البيانات التجريبية) ومشاريع اختبار الوحدة/التكامل.
مزالق / قيود
- يعتمد Infrastructure على Application، لا العكس. يُعرِّف Application الواجهات (
ICurrentTenantProvider،IAuditLogger)؛ وينفّذها Infrastructure. لا تُضِف مرجعًا Application→Infrastructure (انظر Clean Architecture). - حجم
mobile/هو وزن اعتماديات، لا ميزات.mobile/node_modulesكبير، لكن شيفرة التطبيق هيApp.tsx+index.tsفقط (الورقة 20). لا تخلطه بتطبيق جوّال مبني. web/وmobile/لا يتشاركان أي شيفرة — قاعدتا شيفرة منفصلتان (DOM+Tailwind مقابل أوليّات React Native) (الورقة 20).- المستودع ليس تحت git في بيئة التحقّق، فتُستشهَد المصادر بـ
file.cs:lineمقابل لقطة نموذج EF، لا hash لـ commit (الورقة 00-index).
حالة البناء
Available — الواجهة الخلفية بأربعة مشاريع وتطبيق ويب React هما الحل الحيّ. مشروع الجوّال Planned/هيكل (الورقة 20).
ذات صلة
- Clean Architecture — قاعدة الاعتمادية بين هذه المشاريع.
- نظرة عامة على البنية
- أوراق الحقائق: 01 (الأساس)، 20 (الجوّال).