# פרויקט מסכם סופי — צנרת הנתונים המלאה📖 שיעור

## הגדרת הפרויקט

זהו הפרויקט האחרון והמסכם של הקורס כולו. שלושה שירותים עצמאיים — Ingestion (C#), Processing (Python), Query (C#) — כל אחד נבנה בנפרד בשיעורים הקודמים, צריכים כעת להתחבר לצנרת נתונים שלמה אחת: נתון גולמי נכנס דרך Ingestion, מעובד ומאוחסן דרך Processing (כולל Windowing ו-DLQ), וזמין לשליפה דרך Query — כל זה עם `docker-compose`. אין כאן שום כלי טכני חדש — `docker-compose`, Kafka, Redis, Postgres+EF Core כולם כבר נבנו בנפרד ביחידות הקודמות. המשימה היחידה כאן היא **חיבור**: בדיקת כל שירות בבידוד לא מוכיחה שה-Interface Contracts בין Ingestion↔Processing↔Query נכונים — רק Full Pipeline Verification (נתון אחד שעובר את כל השרשרת) מוכיח שהמערכת עובדת כמכלול אחד, לא כאוסף חלקים נפרדים.

## מה צריך להיות מוכן בסוף

**דרישות:**
1. `docker-compose.yml` מלא עם כל 3 השירותים (Ingestion, Processing, Query) + 4 רכיבי התשתית (Kafka, Redis, Mongo, Postgres)
2. Full Pipeline Verification: נתון אחד שנשלח ב-`POST /api/ingestion` מגיע בסוף נכון ומעובד דרך `GET /api/query/records`
3. הדגמת DLQ: נתון פגום מכוון מגיע ל-queue הייעודי לשגיאות ולא פוגע בשאר הזרימה
4. הדגמת Cache Invalidation: הוספת נתון חדש ולאחר מכן invalidation גורמים לשליפה הבאה להציג את הנתון המעודכן

**קריטריוני הצלחה:**

• `docker-compose up` מעלה את כל 7 הרכיבים (3 שירותים + 4 תשתית) בלי שגיאות בלוגים

• תרחיש קצה-לקצה מלא (נתון תקין) עובד בהרצה אחת: מ-Ingestion, דרך Kafka ו-Processing, ועד זמינות ב-Query

• נתון פגום מנותב ל-DLQ ולא גורם לקריסה או לעצירה של שאר הצנרת

• עדכון קאש (invalidation) משקף מיד את הנתון החדש בשליפה הבאה

## דוקומנטציה רשמית מותרת

[Docker — Compose overview](https://docs.docker.com/compose/)

[Microsoft Learn — Microservices architecture](https://learn.microsoft.com/dotnet/architecture/microservices/)
