-
-
Notifications
You must be signed in to change notification settings - Fork 615
Open
Description
Describe the feature
Overview
The current implementation of the /toggle-favourite endpoint retrieves all images from the database after updating the isFavourite flag, and then filters the target image in memory.
Although functionally correct, this introduces unnecessary database and processing overhead.
Current Implementation
After toggling the favourite status, the route executes:
image = next(
(img for img in db_get_all_images() if img["id"] == image_id), None
)db_get_all_images() performs:
- Multiple JOIN operations
- Metadata parsing
- Tag grouping
- Dataset sorting
This entire workflow runs even though only a single image record is required.
Why This Matters
This approach:
- Scales linearly with total image count
- Increases latency for a frequently used endpoint
- Performs unnecessary joins and metadata parsing
- Couples a single-record use case with a full-collection query
As image collections grow, this can negatively impact responsiveness.
Proposed Improvement
-
Introduce a dedicated method:
db_get_image_by_id(image_id: str)
-
Query only the required record with necessary JOINs.
-
Refactor
/toggle-favouriteto use this optimized method instead of callingdb_get_all_images().
Expected Benefits
- Reduced database load
- Improved scalability
- Cleaner endpoint behavior
- Better separation of concerns
I would be happy to implement this improvement.
Record
- I agree to follow this project's Code of Conduct
- I want to work on this issue
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels