Repository navigation
feat: add favorite functionality for teams - #2963
Conversation
409f74d to
d578b7e
Compare
09ed404 to
956839c
Compare
Codecov Report❌ Patch coverage is 📢 Thoughts on this report? Let us know! |
There was a problem hiding this comment.
Copilot review overview
🟡 Changes recommended
Team-page favoriting is incomplete, and filtered ordering plus accessibility issues can produce incorrect or inaccessible behavior.
Review effort: Balanced
Findings: 5
Open (6)
Expose favorite state to screen readers · New Avoid duplicate team links and keyboard stops · New Show favorite state for the current team avatars · New Add favorite action for the current team · New Disable favorite sorting while a search query is active · New Include TeamCard.spec.ts in the focused test command · New
What changed in this PR
Adds persistent, ordered team favorites across the backend, home view, and team switcher.
Changes:
- Adds favorite APIs, storage, locking, cleanup, and ordering.
- Adds favorite controls, drag-and-drop ordering, and switcher indicators.
- Adds frontend/backend tests and testing documentation.
| File | Description |
|---|---|
tests/unit/lib/Service/TeamFavoriteServiceTest.php |
Tests service ordering and locking. |
tests/unit/lib/Db/TeamFavoriteRequestTest.php |
Tests favorite persistence and access filtering. |
TESTING.md |
Documents favorite regression tests. |
src/teams/views/HomeView.vue |
Adds favorite sections and ordering controls. |
src/teams/views/HomeView.spec.ts |
Tests drag-and-drop behavior. |
src/teams/types.ts |
Adds favorite metadata to teams. |
src/teams/store.ts |
Manages favorite state and mutations. |
src/teams/store.spec.ts |
Tests favorite store behavior. |
src/teams/components/TeamHeader.vue |
Prioritizes favorites in the switcher. |
src/teams/components/TeamCard.vue |
Adds favorite and ordering actions. |
src/teams/components/TeamCard.spec.ts |
Tests card actions and dragging. |
src/teams/components/TeamAvatar.vue |
Adds the favorite star indicator. |
src/teams/api.ts |
Adds favorite API integration. |
src/teams/api.spec.ts |
Tests favorite API requests. |
REUSE.toml |
Adds licensing annotations for tests. |
lib/Service/TeamFavoriteService.php |
Implements favorite business logic. |
lib/Migration/Version20260922120000.php |
Creates the favorites table. |
lib/Listeners/UserDeleted.php |
Cleans favorites after user deletion. |
lib/Db/TeamFavoriteRequest.php |
Implements favorite database operations. |
lib/Db/CoreRequestBuilder.php |
Registers favorite table metadata. |
lib/Db/CircleRequest.php |
Cleans favorites after team deletion. |
lib/Controller/TeamFavoritesController.php |
Exposes favorite endpoints. |
appinfo/routes.php |
Registers favorite routes. |
appinfo/info.xml |
Bumps the app version. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Assisted-by: GitHub Copilot GPT-5.6 Terra Assisted-by: GitHub Copilot GPT-6 Astra Signed-off-by: Fin Clausen <Fin.Clausen@dataport.de>
Signed-off-by: Fin Clausen <Fin.Clausen@dataport.de>
8d8e6a4 to
7c4424a
Compare
931c22d to
422f167
Compare
Assisted-by: GitHub Copilot Claude Opus 5.5 Assisted-by: GitHub Copilot GPT-5.6 Luna Signed-off-by: Fin Clausen <Fin.Clausen@dataport.de>
…osition Assisted-by: GitHub Copilot Claude Opus 5.5 Assisted-by: GitHub Copilot GPT-5.6 Luna Signed-off-by: Fin Clausen <Fin.Clausen@dataport.de>
422f167 to
8ff4842
Compare
| @@ -0,0 +1,63 @@ | |||
| <?php | |||
There was a problem hiding this comment.
nit: naming convention for migrations is Version{appVersion}Date{timestamp}. Not a big deal for this migration since it creates a new table, but might be a problem if a future migration alters the table. Not blocking though :)
|
Hello there, We hope that the review process is going smooth and is helpful for you. We want to ensure your pull request is reviewed to your satisfaction. If you have a moment, our community management team would very much appreciate your feedback on your experience with this PR review process. Your feedback is valuable to us as we continuously strive to improve our community developer experience. Please take a moment to complete our short survey by clicking on the following link: https://cloud.nextcloud.com/apps/forms/s/i9Ago4EQRZ7TWxjfmeEpPkf6 Thank you for contributing to Nextcloud and we hope to hear from you soon! (If you believe you should not receive this message, you can add yourself to the blocklist.) |
| public int $position = 0; | ||
|
|
||
| #[Column(name: 'created', type: ColumnType::Datetime)] | ||
| public DateTime $created; |
There was a problem hiding this comment.
Do we really need this column?
There was a problem hiding this comment.
Alternatively we can replace the incremental id with a snowflake id which will contain the creation date.
There was a problem hiding this comment.
No, you’re right. The creation timestamp is not used anywhere, so I’ll remove this column in a follow-up PR.
A snowflake ID would make sense if we needed the creation timestamp. Since the feature does not use that information, I think keeping the generated integer ID and removing created is the simpler option.


Add ability to favourite teams
#2904
Summary
Add personal team favorites with persistent ordering.
switcher with a star indicator.
TODO
Checklist
3. to review, feature component)stable32)AI (if applicable)