Skip to content

ערכות נושא מבוססות זמן - #2906

Draft
amirbiron wants to merge 2 commits into
mainfrom
cursor/-bc-170c6ade-3d38-4eca-9152-698445c49123-0ea8
Draft

ערכות נושא מבוססות זמן#2906
amirbiron wants to merge 2 commits into
mainfrom
cursor/-bc-170c6ade-3d38-4eca-9152-698445c49123-0ea8

Conversation

@amirbiron

Copy link
Copy Markdown
Owner

✨ תיאור קצר

הוספנו מדריך מקיף למימוש פיצ'ר המאפשר למשתמשים להגדיר תחלופה אוטומטית של ערכות נושא (יום/לילה) לפי שעות ביממה. המדריך כולל עדכוני סכמה, API, לוגיקת צד לקוח וממשק משתמש, ומטרתו לספק חווית שימוש מותאמת אישית ונוחה יותר.

📦 שינויים עיקריים

  • קוד (Backend)
  • בוט טלגרם
  • מסד נתונים/מיגרציות
  • תיעוד (docs/)
  • DevOps/CI/CD

פירוט נקודות:

  • יצירת קובץ GUIDES/AUTO_THEME_SCHEDULING_GUIDE.md המפרט את כל שלבי המימוש של הפיצ'ר.
  • הוספת שלושה endpoints חדשים ב-webapp/themes_api.py לניהול תזמון ערכות נושא (GET/POST /api/themes/schedule, GET /api/themes/schedule/current).
  • פיתוח לוגיקת צד לקוח חדשה ב-webapp/static/js/theme-scheduler.js לחישוב והחלת הערכה הנוכחית באופן אוטומטי.
  • יצירת דף הגדרות חדש ב-webapp/templates/settings/theme_schedule.html עם ממשק משתמש אינטואיטיבי להגדרת התזמון.
  • אינטגרציה עם מערכת ה-themes הקיימת ב-base.html וב-dark-mode.js למניעת FOUC ולשילוב חלק.
  • עדכון סכמת ui_prefs ב-MongoDB להכלת הגדרות התזמון.

🧪 בדיקות

  • המדריך כולל דוגמאות לבדיקות Unit ו-Integration עבור הלוגיקה וה-API.
  • Unit
  • Integration
  • Manual - נדרשת בדיקה ידנית של דף ההגדרות, שמירת שינויים, ובדיקה שהערכות מתחלפות אוטומטית בזמן.

🧪 בדיקות נדרשות ב‑PR

  • 🔍 Code Quality & Security
  • Unit Tests (3.11)
  • Unit Tests (3.12)

📝 סוג שינוי

  • feat: פיצ'ר חדש
  • fix: תיקון באג
  • docs: שינוי תיעוד בלבד
  • refactor: שינוי קוד ללא שינוי התנהגות
  • perf: שיפור ביצועים
  • chore/ci: תשתית/CI
  • breaking change: שינוי שובר תאימות

✅ צ'קליסט

  • הקוד עוקב אחרי הסגנון (Black/isort/flake8/mypy)
  • בדיקות רצות ועוברות
  • תיעוד עודכן (README/Docs)
  • אם נוספו ג'ובים חדשים (Background Jobs) – וודא שהם רשומים ב-services/register_jobs.py (כולל Callback/Trigger להפעלה ידנית — למשל callback_name/trigger_func לפי המבנה) כדי שיופיעו בדשבורד
  • אם נוספו/שונו משתני סביבה – עודכן docs/environment-variables.rst וגם services/config_inspector_service.py
  • אם נוספו/השתנו טוקנים – עודכן גם docs/webapp/theming_and_css.rst + FEATURE_SUGGESTIONS/theme_matrix.md
  • אין סודות/מפתחות בקוד
  • אין מחיקות מסוכנות (ראו .cursorrules)
  • הודעת הקומיט תואמת Conventional Commits (ע"פ הטבלה)
  • CHANGELOG עודכן אם נדרש
  • כל ה‑Required Checks לעיל ירוקים
  • צילום/וידאו UI מצורף אם רלוונטי

🧩 השפעות/סיכונים

  • ביצועים: לוגיקת צד לקוח רצה כל דקה, ההשפעה על ביצועי הדפדפן צפויה להיות מינימלית.
  • אבטחה: ה-API החדש דורש אימות משתמש וכולל וולידציה של קלט, אך יש לוודא שאין פרצות.
  • חווית משתמש: שינוי ערכת הנושא עלול להיות מורגש, אך הוא צפוי ומוגדר ע"י המשתמש.

🔗 קישורים

  • Issues קשורים: #

🧯 סיכון / החזרה לאחור (Rollback)

  • תוכנית חזרה לאחור במקרה תקלה: ניתן לבצע Rollback מלא של הקוד. שינויי סכמה ב-MongoDB קלים להסרה על ידי מחיקת השדה ui_prefs.theme_schedule מהמסמכים הרלוונטיים.

Open in Cursor Open in Web

מדריך מקיף למימוש פיצ'ר תחלופת ערכות נושא אוטומטית לפי שעות ביממה.

הפיצ'ר מאפשר:
- הגדרת ערכת יום וערכת לילה
- בחירת שעות התחלה וסיום ליום
- החלפה אוטומטית בין הערכות
- תמיכה בכל סוגי הערכות (Built-in, Shared, Custom)

המדריך כולל:
- סכמת MongoDB מפורטת
- API endpoints (GET/POST /api/themes/schedule)
- לוגיקת JavaScript צד לקוח (theme-scheduler.js)
- ממשק משתמש מלא עם תצוגה מקדימה
- בדיקות unit ואינטגרציה
- שיקולי UX ונגישות

Co-authored-by: amirbiron <amirbiron@gmail.com>
@cursor

cursor Bot commented Jan 23, 2026

Copy link
Copy Markdown
Contributor

Cursor Agent can help with this pull request. Just @cursor in comments and I'll start working on changes in this branch.
Learn more about Cursor Agents

@github-actions

github-actions Bot commented Jan 23, 2026

Copy link
Copy Markdown

🧯 Dangerous deletes guard report

Policy: see .cursorrules — dangerous deletions are blocked unless wrapped safely.

Summary:

  • Flagged findings (blocking): 0
    0
  • Excluded matches (not blocking): 15
  • Total matches (all files): 125

Flagged findings (file:line:snippet):
(none)

Excluded matches (by path pattern)
./Dockerfile:42:    rm -rf /var/lib/apt/lists/*
./Dockerfile:121:    rm -rf /var/lib/apt/lists/*
./webapp/static/js/md_preview.bundle.js.map:4:  "sourcesContent": ["// Markdown-it plugin to render GitHub-style task lists; see\n//\n// https://github.com/blog/1375-task-lists-in-gfm-issues-pulls-comments\n// https://github.com/blog/1825-t … [truncated]
./README.md:842:find . -name "__pycache__" -exec rm -rf {} +
./docs/DOCUMENTATION_GUIDE.md:453:rm -rf _build
./docs/Makefile:24:	rm -rf $(BUILDDIR)
./node_modules/mermaid/dist/chunks/mermaid.core/chunk-KS23V3DP.mjs.map:4:  "sourcesContent": ["{\n  \"name\": \"mermaid\",\n  \"version\": \"11.12.0\",\n  \"description\": \"Markdown-ish syntax for generating flowcharts, mindmaps, sequence  … [truncated]
./node_modules/mermaid/dist/chunks/mermaid.esm.min/chunk-4HFYJGYH.mjs.map:4:  "sourcesContent": ["{\n  \"name\": \"mermaid\",\n  \"version\": \"11.12.0\",\n  \"description\": \"Markdown-ish syntax for generating flowcharts, mindmaps, sequen … [truncated]
./node_modules/mermaid/dist/chunks/mermaid.esm.min/chunk-4HFYJGYH.mjs:1:var r={name:"mermaid",version:"11.12.0",description:"Markdown-ish syntax for generating flowcharts, mindmaps, sequence diagrams, class diagrams, gantt charts, git graph … [truncated]
./node_modules/mermaid/dist/chunks/mermaid.esm/chunk-2M32CCKP.mjs.map:4:  "sourcesContent": ["{\n  \"name\": \"mermaid\",\n  \"version\": \"11.12.0\",\n  \"description\": \"Markdown-ish syntax for generating flowcharts, mindmaps, sequence d … [truncated]
./node_modules/mermaid/dist/mermaid.min.js:1524:`,"getStyles"),c1e=RQe});var h1e={};dr(h1e,{diagram:()=>NQe});var NQe,f1e=N(()=>{"use strict";$ge();a1e();l1e();u1e();NQe={parser:Fge,db:n1e,renderer:o1e,styles:c1e}});var m1e,g1e=N(()=>{"use  … [truncated]
./node_modules/mermaid/dist/mermaid.js.map:4:  "sourcesContent": ["/**\n* Default values for dimensions\n*/\nconst defaultIconDimensions = Object.freeze({\n\tleft: 0,\n\ttop: 0,\n\twidth: 16,\n\theight: 16\n});\n/**\n* Default values for tr … [truncated]
./node_modules/mermaid/dist/mermaid.min.js.map:4:  "sourcesContent": ["/**\n* Default values for dimensions\n*/\nconst defaultIconDimensions = Object.freeze({\n\tleft: 0,\n\ttop: 0,\n\twidth: 16,\n\theight: 16\n});\n/**\n* Default values fo … [truncated]
./node_modules/katex/package.json:153:    "build": "rimraf dist/ && mkdirp dist && cp README.md dist && rollup -c --failAfterWarnings && webpack && node update-sri.js package dist/README.md",
./node_modules/katex/src/fonts/Makefile:139:	rm -rf pfa ff otf ttf woff woff2

@github-actions

github-actions Bot commented Jan 23, 2026

Copy link
Copy Markdown

⏱️ Performance report

(No performance test durations collected. Mark tests with @pytest.mark.performance.)

@sentry

sentry Bot commented Jan 23, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

עדכון המדריך בעקבות ביקורת קוד:

תיקוני באגים וארכיטקטורה:
- הלקוח הוא מקור האמת לזמן (לא השרת) - פותר בעיות timezone
- חסימת טווח יום שחוצה חצות בוולידציה (day_start < day_end)
- השרת לא מעדכן ui_prefs.theme בעת שמירת הגדרות

שיפורי ביצועים:
- טיימר חכם (setTimeout לאירוע הבא) במקום polling כל דקה
- Timer גיבוי כל 5 דקות למקרה של drift

שיפורי UX:
- תמיכה ב-override ידני זמני (עד המעבר הבא)
- הודעה למשתמש כשיש override פעיל
- הודעות שגיאה בעברית

שיפורי קוד:
- מזהה ערכה מלא (builtin:/shared:/custom:)
- וולידציה מול DB לערכות shared/custom
- cache עם fetchedAt לבדיקת תוקף (24 שעות)
- בדיקות unit מעודכנות

Co-authored-by: amirbiron <amirbiron@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants