المشاريعالمشروع الرئيسي
ChantiePro
16 خدمة Spring Boot 3.3 على Java 21، و6 مكتبات مشتركة، و31 ترحيل Flyway، وKafka، وAngular 18.
نظرة عامة
مشروع هندسي شخصي يصوغ شركة بناء في ثلاث عشرة خدمة أعمال وثلاث خدمات منصّة. لكل خدمة مخطط PostgreSQL خاص. التغييرات التي يجب أن يلاحظها باقي النظام تنتقل كأحداث Kafka. مساحة عمل Angular 18 في Nx في الأعلى؛ وPrometheus وGrafana وLoki وZipkin في الأسفل.
الواجهة


المشكلة
الورش يتصرّف كمؤسسة صغيرة: تصل المواد وتُستهلك، تنتقل المعدات، تسجّل الفرق حضورها، وتحتاج المصاريف إلى موافقة، وكل حدث يجب أن يُطابق ميزانية المشروع. وضع ذلك في كتلة واحدة يربط كل تغيير بالباقي. الهدف كان تفكيك مجال حقيقي إلى خدمات قابلة للنشر مستقلة، مع الإبقاء على واجهة متماسكة.
الحل التقني
تدخل الطلبات عبر Spring Cloud Gateway يتحقق من JWT مرة واحدة ويمرّر الهوية. تكتشف الخدمات بعضها عبر Eureka وتحمّل الإعداد من خادم إعداد. كل ما يجب أن يلاحظه سياق آخر — تغيّر حالة مشروع، الموافقة على مصروف — يُنشر على Kafka بدل استدعاء متزامن. البيانات مقيّدة بالمؤسسة عبر organizationId في JWT على طبقة الاستعلام. هذا ليس نموذج عزل متعدد المستأجرين مُحصّنًا.
الهندسة
01
Angular 18 · Nx
NgRx Signal Store
02
API Gateway :8080
JWT, routing, CORS
03
Eureka + Config
:8761 · :8888
خدمات الأعمال
auth :8081
Registration, login, roles
user :8082
Profiles and organisations
referentiel :8083
Categories, units
project :8084
Projects, milestones
material :8085
Stock and movements
equipment :8086
Register and assignments
hr :8087
Employees, attendance
expense :8088
Capture and approval
finance :8089
Invoices, budgets
notification :8090
In-app and email
document :8091
PDF, Excel, Word
file :8092
MinIO uploads
audit :8093
Trail and history
Kafka → notification, audit, finance · PostgreSQL 16 · Redis · MinIO · Prometheus / Grafana / Loki / Zipkin
ما يوجد في المستودع
- ثلاث عشرة خدمة أعمال وثلاث خدمات منصّة (gateway وEureka وconfig server) على Java 21 وSpring Boot 3.3
- ست مكتبات مشتركة: DTO والأمن وKafka والتدقيق والاستثناءات ومرشحات الويب
- PostgreSQL 16، مخطط لكل خدمة، وترحيلات Flyway
- أحداث Kafka تستهلكها خدمات الإشعار والتدقيق والمالية
- ذاكرة Redis مؤقتة، وتخزين كائنات MinIO، وOpenAPI عبر springdoc
- Angular 18 في مستودع Nx مع NgRx Signal Store
- Prometheus وGrafana وLoki وZipkin
- التكامل المستمر: اختبارات Maven على JDK 21 بما فيها اختبارات تكامل Testcontainers/Flyway، وبناء Nx للإنتاج، والتحقق من Compose
قرارات تقنية
- مخطط لكل خدمة، لا قاعدة مشتركة
- كل خدمة تملك جداولها. لا عمليات ضم بين الخدمات. يبقى النشر مستقلًا؛ وكل تعاون يمر عبر واجهة أو حدث.
- أحداث للتفاعل، وREST للأوامر
- يبقى REST المتزامن داخل حالة الاستخدام التي ينتظرها المستدعي. التدقيق والإشعارات لا يحتاجان ذلك المسار: يشتركان.
- مكتبات مشتركة بدل النسخ
- مرشحات JWT وأغلفة الأحداث وأشكال الأخطاء تعيش في وحدات Maven. خدمة جديدة ترث اصطلاحات المنصة بإعلان اعتماد.