Sparse username index fix - #2121
Conversation
Co-authored-by: amirbiron <amirbiron@gmail.com>
|
Cursor Agent can help with this pull request. Just |
🧯 Dangerous deletes guard reportPolicy: see .cursorrules — dangerous deletions are blocked unless wrapped safely. Summary:
Flagged findings (file:line:snippet): Excluded matches (by path pattern) |
⏱️ Performance report(No performance test durations collected. Mark tests with |
Codecov Report❌ Patch coverage is
📢 Thoughts on this report? Let us know! |
Co-authored-by: amirbiron <amirbiron@gmail.com>
Co-authored-by: amirbiron <amirbiron@gmail.com>
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
Co-authored-by: amirbiron <amirbiron@gmail.com>
📖 Documentation PreviewThe documentation has been built successfully!
To view locally:
|
Co-authored-by: amirbiron <amirbiron@gmail.com>
|
@cursoragent השגיאה הזו היא היפוך של השגיאה הקודמת, והיא מגיעה מאותו מקור, אבל בזמן פעולה שונה.
חשוב לוודא שהאינדקס הישן נמחק קודם, ורק אז יוצרים את החדשdb.users.create_index( סיכום: שתי השגיאות נובעות מאינדקס ייחודי שאינו דליל, שחוסם את האפשרות ליותר מיוזר אחד עם username ריק (null). |
|
צודק שזה “מאותו אזור” (השדה מה באמת אומרת השגיאה
|
✨ תיאור קצר
תיקון שגיאת
E11000 duplicate key errorב-MongoDB עבור שמות משתמשnull. השגיאה נגרמה מכך שאינדקסunique+sparseלא התעלם מערכיusername: nullשנשמרו במפורש. הפתרון כולל עדכון האינדקס ל-partialFilterExpressionושינוי ב-save_userשלא ישמור את השדהusernameאם הואNoneאו ריק.📦 שינויים עיקריים
פירוט נקודות:
username_uniqueב-database/manager.pyמ-sparse=Trueל-partialFilterExpression={"username": {"$type": "string", "$ne": ""}}.database/repository.pyבפונקציהsave_userכך שהשדהusernameלא יישמר במסד הנתונים אם הערך שלו הואNoneאו מחרוזת ריקה/רווחים בלבד.tests/test_repository_save_user_username.pyלוודא את ההתנהגות הנכונה שלsave_user(השמטתusernameכשאין ערך, ושמירתו כשקיים).docs/database/index.rstכדי לשקף את השינוי באינדקס.🧪 בדיקות
save_userמשמיט את שדה ה-usernameכאשר הערך הואNoneאו ריק, ושומר אותו כראוי כשיש ערך.username: nullכדי לוודא שהשגיאה לא חוזרת.🧪 בדיקות נדרשות ב‑PR
📝 סוג שינוי
✅ צ'קליסט
docs/environment-variables.rst(עמוד רפרנס)docs/webapp/theming_and_css.rst+FEATURE_SUGGESTIONS/theme_matrix.md🧩 השפעות/סיכונים
duplicate keyעבור משתמשים ללא שם משתמש מוגדר.🔗 קישורים
🧯 סיכון / החזרה לאחור (Rollback)
Note
Updates username uniqueness/index + save behavior and adds Sentry alerts via secure webhook and background polling, with tests and docs.
database/manager.py: changeusersusername_uniquefromsparsetopartialFilterExpressionto ignore null/empty values.database/repository.py:save_user(user_id, username)now trims/limits username, omits writing when empty, and updates timestamps accordingly.services/webserver.py: addPOST /webhooks/sentrywith HMAC/Bearer/token auth, in‑memory de‑dup, and mapping to internal alerts.services/sentry_polling.py: new Sentry poller (configurable via env) emitting internal alerts on new issue activity.main.py: schedule Sentry polling background job when enabled.tests/test_repository_save_user_username.py: assert omission/set logic forusername.tests/test_sentry_poller.py: verify seed-then-emit behavior.tests/test_webserver_sentry_webhook.py: verify webhook auth paths and alert emission.docs/database/index.rst: updateusersindexes description to partial filter expression.Written by Cursor Bugbot for commit 036461b. This will update automatically on new commits. Configure here.