Zakariae Jaafari

المشاريعالمشروع الرئيسي

ChantiePro

16 خدمة Spring Boot 3.3 على Java 21، و6 مكتبات مشتركة، و31 ترحيل Flyway، وKafka، وAngular 18.

نظرة عامة

مشروع هندسي شخصي يصوغ شركة بناء في ثلاث عشرة خدمة أعمال وثلاث خدمات منصّة. لكل خدمة مخطط PostgreSQL خاص. التغييرات التي يجب أن يلاحظها باقي النظام تنتقل كأحداث Kafka. مساحة عمل Angular 18 في Nx في الأعلى؛ وPrometheus وGrafana وLoki وZipkin في الأسفل.

الواجهة

ChantiePro login screen — construction-site management sign-in
ChantiePro registration form

المشكلة

الورش يتصرّف كمؤسسة صغيرة: تصل المواد وتُستهلك، تنتقل المعدات، تسجّل الفرق حضورها، وتحتاج المصاريف إلى موافقة، وكل حدث يجب أن يُطابق ميزانية المشروع. وضع ذلك في كتلة واحدة يربط كل تغيير بالباقي. الهدف كان تفكيك مجال حقيقي إلى خدمات قابلة للنشر مستقلة، مع الإبقاء على واجهة متماسكة.

الحل التقني

تدخل الطلبات عبر Spring Cloud Gateway يتحقق من JWT مرة واحدة ويمرّر الهوية. تكتشف الخدمات بعضها عبر Eureka وتحمّل الإعداد من خادم إعداد. كل ما يجب أن يلاحظه سياق آخر — تغيّر حالة مشروع، الموافقة على مصروف — يُنشر على Kafka بدل استدعاء متزامن. البيانات مقيّدة بالمؤسسة عبر organizationId في JWT على طبقة الاستعلام. هذا ليس نموذج عزل متعدد المستأجرين مُحصّنًا.

الهندسة

مسار الطلب والخدمات الخلفية
  1. 01

    Angular 18 · Nx

    NgRx Signal Store

  2. 02

    API Gateway :8080

    JWT, routing, CORS

  3. 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. خدمة جديدة ترث اصطلاحات المنصة بإعلان اعتماد.