AOSSIE-Org / AOSSIE-Org/PictoPy

Refactor/toggle-favourite endpoint to eliminate full-table query and improve query efficiency

未关闭
#1,200 4 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
主要语言
Python
星标
283
派生
679
平均合并
7 天 2 小时
30 天内合并 PR
3

描述

### 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:

```python
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

1. Introduce a dedicated method:

```python
db_get_image_by_id(image_id: str)
```

2. Query only the required record with necessary JOINs.
3. Refactor `/toggle-favourite` to use this optimized method instead of calling `db_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

- [x] I agree to follow this project's Code of Conduct
- [x] I want to work on this issue

贡献指南

打开贡献指南

评估

这个 Issue 还没有评估数据。

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。