מנהל סימניות – BookmarksManager
database.bookmarks_manager.BookmarksManager הוא שכבת ה-DB הראשית
שמאחורי פיצ’ר הסימניות. הוא דואג לולידציה, לאכיפת מגבלות, ליצירת
אינדקסים ולסנכרון הסימניות מול שינויים בקבצי הקוד.
מתי משתמשים בו?
תפריט הסימניות ב-WebApp (פאנל ימין + לוח הניהול).
APIs של
/api/bookmarks/*(toggle, list, update, delete).מנגנוני סנכרון שמריצים התאמת שורות לאחר שהקובץ נערך.
מבנה ואינדקסים
עם יצירת המנהל אנחנו דואגים לאינדקסים הבאים:
שם |
שימוש |
|---|---|
|
מונע כפילות באותה שורה (user_id + file_id + line_number). |
|
partial index לעוגנים בלבד, פעיל רק כאשר |
|
מאפשר טעינה מהירה של היסטוריית הסימניות לממשק המשתמש. |
|
אינדקס טקסטואלי לחיפוש בתוך הערות. |
בנוסף מתבצע ניקוי שדות anchor_id ישנים (None / "") כדי
שה-partial index לא יישבר גם כאשר יש מסמכים היסטוריים.
מגבלות שימוש
MAX_BOOKMARKS_PER_FILE(כיום 50) – כדי לא להציף את ה-UI.MAX_BOOKMARKS_PER_USER(כיום 500) – מגביל צריכה לא אחראית.צבעים מותרים מוגדרים ב-
database.bookmark.VALID_COLORS.אורך הערה מקסימלי
MAX_NOTE_LENGTH; הערה ארוכה נחתכת אוטומטית.
תהליך Toggle
נוודא שהשורה/עוגן תקינים ונמצאים בטווח המותר.
נבדוק אם קיימת כבר סימנייה – במידה וכן, נמחק ונחזיר
action=removed.כשאין סימנייה קיימת:
נבדוק מגבלות (לקובץ ולמשתמש).
נחשב
file_hashכדי לאפשר בדיקות Drift עתידיות.אם מדובר בעוגן, נייצר מספר שורה סינתטי יציב בעזרת
_anchor_line_from_id(מיליארד + hash).נשמור את הסימנייה ונרשום אירוע ב-
bookmark_events.
סנכרון עם שינויים בקובץ
check_file_sync משווה בין גרסאות ישנות וחדשות של הקובץ (או Markdown)
ומסווג את ההשפעה על כל סימנייה:
modified– השורה קיימת אך הטקסט השתנה.moved– אותן מילים נמצאו במקום אחר בקובץ.deleted– לא נמצאה התאמה, הסימנייה תסומן כלא תקפה.
הניתוח משתמש ב-difflib.SequenceMatcher עם ספים שונים למעבר ולשינוי.
כל תוצאה מתועדת ב-sync_status ומאפשרת חוויית ”סימון סימניות פגומות“
ב-WebApp.
אירועים (Analytics)
כל פעולה (הוספה, מחיקה, עדכון צבע/הערה) נרשמת ב-bookmark_events עם
שדה metadata. הנתונים האלו מניעים את ההודעות push ואת תרשימי
השימוש.