-
Notifications
You must be signed in to change notification settings - Fork 297
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Development
: Speedup loading of active courses
#9768
Conversation
WalkthroughThe changes involve updates to the Changes
Suggested labels
Suggested reviewers
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
Documentation and Community
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Outside diff range and nitpick comments (1)
src/main/java/de/tum/cit/aet/artemis/core/web/CourseResource.java (1)
451-454
: Great optimization: Moving filtering to the database level!The refactoring improves performance by leveraging database-level filtering instead of in-memory filtering. This is particularly beneficial when dealing with large datasets.
Consider adding a comment explaining the performance optimization for future maintainers:
if (onlyActive) { // only include courses that have NOT been finished final var now = ZonedDateTime.now(); + // Filtering is done at database level for better performance return courseRepository.findActiveCoursesForAtLeastTutorWithGroups(user.getGroups(), authCheckService.isAdmin(user), now); }
📜 Review details
Configuration used: .coderabbit.yaml
Review profile: CHILL
📒 Files selected for processing (2)
src/main/java/de/tum/cit/aet/artemis/core/repository/CourseRepository.java
(1 hunks)src/main/java/de/tum/cit/aet/artemis/core/web/CourseResource.java
(1 hunks)
🧰 Additional context used
📓 Path-based instructions (2)
src/main/java/de/tum/cit/aet/artemis/core/repository/CourseRepository.java (1)
Pattern src/main/java/**/*.java
: naming:CamelCase; principles:{single_responsibility,small_methods,no_duplication}; db:{perf_queries,datetime_not_timestamp}; rest:{stateless,singleton,delegate_logic,http_only,minimal_dtos}; dtos:{java_records,no_entities,min_data,single_resp}; di:constructor_injection; kiss:simple_code; file_handling:os_indep_paths; practices:{least_access,avoid_transactions,code_reuse,static_member_ref,prefer_primitives}; sql:{param_annotation,uppercase,avoid_subqueries};java:avoid_star_imports
src/main/java/de/tum/cit/aet/artemis/core/web/CourseResource.java (1)
Pattern src/main/java/**/*.java
: naming:CamelCase; principles:{single_responsibility,small_methods,no_duplication}; db:{perf_queries,datetime_not_timestamp}; rest:{stateless,singleton,delegate_logic,http_only,minimal_dtos}; dtos:{java_records,no_entities,min_data,single_resp}; di:constructor_injection; kiss:simple_code; file_handling:os_indep_paths; practices:{least_access,avoid_transactions,code_reuse,static_member_ref,prefer_primitives}; sql:{param_annotation,uppercase,avoid_subqueries};java:avoid_star_imports
🔇 Additional comments (2)
src/main/java/de/tum/cit/aet/artemis/core/repository/CourseRepository.java (2)
583-584
: LGTM! Method rename improves clarity.
The rename from findCoursesForAtLeastTutorWithGroups
to findAllCoursesForAtLeastTutorWithGroups
better describes the method's behavior by explicitly indicating it returns all courses.
585-594
: LGTM! Efficient implementation of active courses filtering.
The new method efficiently implements the PR's performance objective by:
- Filtering active courses directly at the database level
- Using proper parameter binding for the timestamp
- Following the repository's consistent pattern for handling course dates
This implementation prevents unnecessary loading of inactive courses, reducing both database load and memory usage.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
On the front page all courses (where you are at least student) are shown, on the course management page you only see courses where you are at least tutor. So that's a correct behaviour. |
Perfect! I was not sure how it worked for my account! Should i edit my old comment? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Tested on TS1 with both tutor and instructor test accounts. All active courses were displayed correctly
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Tested on TS1, everything worked as expected.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Tested on TS1. Active courses are displayed correctly
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Tested on TS4. Everything works as expected
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
[Tested on TS3]
Active courses displayed correctly without problem.
Checklist
General
Server
Motivation and Context
While reviewing PR #9727 I spotted a filter call that could be moved into a database query to improve performance.
Description
We now directly filter out inactive courses at the database level to avoid loading to many objects.
Steps for Testing
Navigate to Aretmis -> Course management and check that the currently active courses are diplayed correctly.
Testserver States
Note
These badges show the state of the test servers.
Green = Currently available, Red = Currently locked
Click on the badges to get to the test servers.
Review Progress
Performance Review
Code Review
Manual Tests
Performance Tests
Summary by CodeRabbit
New Features
Improvements
Bug Fixes