# מערך שיעור: Collector Service📋 מערך מרצה

משך: 2 שעות אקדמיות (90 דקות), רובן עבודת צוותים.

מטרת השיעור: החברים האחראים על Collector בכל צוות יממשו את השירות לפי ה-Contract שנקבע.

בסוף השיעור: Collector Service עובד, מקבל בקשות ומפרסם ל-Kafka בפורמט תואם-Contract.

דגש קריטי: זהו שיעור-מימוש שמבוסס לגמרי על כלים שכבר נלמדו (Controllers, DataAnnotations, Kafka Producer) — אין נושא חדש, רק יישום צוותי.

---

## מהלך השיעור

| חלק בשיעור | משך | הערות ודגשים |
| --- | --- | --- |
| פתיחה וחיבור | 5 דקות | הזכירו את ה-Contract שהצוות כתב |
| הדגמה: Endpoint + DTO | 15 דקות | Controller בסיסי, DataAnnotations |
| הדגמה: Kafka Producer | 15 דקות | פרסום תואם-Contract |
| 202 מול 201 | 10 דקות | הסבר קצר, קישרו ליחידת HTTP |
| עבודת צוותים: מימוש | 40 דקות | חבר האחראי על Collector בכל צוות |
| בדיקה: Consumer זמני לאימות | 5 דקות | ודאו שההודעה מגיעה נכון |

---

## דגשים להעברת השיעור

- זהו שיעור-יישום ולא הוראה חדשה — רוב הזמן צריך להיות עבודה בפועל, לא הרצאה.
- ודאו שכל צוות בודק את ההודעה שמתפרסמת מול ה-Contract שלהם עצמם, לא רק "זה עבד" — התאמה מדויקת לשדות חשובה כי Analyzer (השיעור הבא) יסתמך עליה.
- אם חבר צוות מסיים מוקדם, הציעו להם לבדוק עם Consumer זמני (`docker exec` על Kafka, או קוד קונסולה קצר) שההודעה בפורמט הנכון.

---

## מושגים

**Collector Pattern** — קליטה והעברה בלבד, SRP.
**Ingestion Endpoint** — endpoint קליטת נתונים.
**`202 Accepted`** — עיבוד אסינכרוני, לא מיידי.

---

## תרגיל חשיבה

**שאלת פתיחה:** "אם Collector שלכם היה גם מחשב אם האירוע 'חריג' (לא רק מעביר אותו הלאה) — למה זו הפרת SRP, ואיזה שירות אחר אמור לעשות את זה?"

**מהלך:** הובילו לתובנה: זיהוי אנומליה הוא לוגיקה עסקית של **ניתוח** — זו אחריות Analyzer (השיעור הבא), לא Collector. Collector שגם קולט וגם מנתח מערבב שתי אחריויות שונות לגמרי — בדיוק ההפרה מיחידת SOLID (SRP), עכשיו ברמת שירות שלם ולא רק מחלקה בודדת.

**מה המרצה מראה בסוף:** הראו את קוד ה-Collector הסופי שנכתב בשיעור — הצביעו על כך שאין בו שום `if`/חישוב עסקי, רק קליטה, ולידציה בסיסית, ופרסום. זו ההוכחה שהתכנון (SRP ברמת שירות) בא לידי ביטוי בפועל בקוד עצמו.
