# 🚀 DOING: Backend Refactor (Tech Debt Crusher)

## 📌 Context
- **Idea:** Tối ưu Hiệu năng Toàn diện & Quy hoạch Kiến trúc
- **Report:** Refactor Workflow (Tech Debt Crusher)
- **Status:** ✅ Done

## 🎯 Goal
Refactor hệ thống backend (`server.py`, thư mục `api/`, `sqlite_db.py`) để dễ bảo trì hơn và chuyển đổi DB sang bất đồng bộ (async) nhằm loại bỏ nút thắt cổ chai hiệu năng, giữ nguyên 100% logic API response.

## ⚠️ Active Trade-offs
- **Thay đổi diện rộng:** Chuyển sang `aiosqlite` sẽ tác động tới gần như toàn bộ API routes đang sử dụng `sqlite_db.py`. Cần test cực kỳ cẩn thận.
- **Thời gian Downtime ảo:** Backend có thể sẽ không chạy được giữa các bước của Phase 2 nếu chưa update xong chữ `await` ở tất cả các routes.

## 🛠 Impact & Files Touched
| File | Symbol | Change | Blast Radius |
|------|--------|--------|--------------|
| `backend/server.py` | `app.include_router` | MODIFY | Toàn bộ API entry points |
| `backend/api/main_router.py` | `api_router` | ADD | Toàn hệ thống API |
| `backend/common/sqlite_db.py` | `fetch_all`, `fetch_one` | MODIFY | > 20 callers (routes) |
| `backend/api/*/*.py` | Các hàm gọi DB | MODIFY | > 20 files bị ảnh hưởng |

**Risk:** High

## 🔙 Rollback Plan
- Backup database (nếu có chỉnh sửa schema).
- Áp dụng nguyên tắc commit cực nhỏ (Atomic Commits) cho từng bước.
- Trước mỗi Phase phải chạy Characterization Test lấy baseline JSON. Nếu JSON lệch sau refactor -> Revert commit ngay lập tức bằng `git checkout`.

## 📋 Execution Checklist

### Phase 1: Quy hoạch Kiến trúc Router (~30m)
- [x] Task 1.1: Tạo file `backend/api/main_router.py` định nghĩa `api_router`.
- [x] Task 1.2: Gộp nhóm các route (ví dụ: Auth, History, N8n, Product, Tools) vào `main_router.py`.
- [x] Task 1.3: Cập nhật `backend/server.py` - Xóa 34+ dòng `include_router` cũ, thay bằng import `main_router`.
- [x] Task 1.4: Run smoke test (start server, check `/docs` Swagger UI không bị thiếu route).

### Phase 2: Nâng cấp Database thành Bất đồng bộ (aiosqlite) (~120m)
- [x] Task 2.1: Backup dữ liệu mẫu (các API call thường dùng) ra file JSON để làm Baseline test.
- [x] Task 2.2: Sửa file `backend/common/sqlite_db.py`: dùng `aiosqlite`, update `fetch_all`, `fetch_one` thành `async`.
- [x] Task 2.3: Refactor diện rộng (Sử dụng lệnh text search + script nếu cần): Cập nhật tất cả các endpoint đang gọi `sqlite_db` sang `await` và sửa `def` thành `async def`.
- [x] Task 2.4: Chạy lại API call so sánh với Baseline test.

### Phase 3: Tối ưu Truy vấn SQL (~60m)
- [x] Task 3.1: Profile hệ thống, xác định các endpoint đang bị N+1 query (đặc biệt trong các hàm lấy outfit/sản phẩm liên quan).
- [x] Task 3.2: Tối ưu logic code từ "Lặp N lần câu SELECT" thành "1 câu SELECT WHERE IN (...)".
- [x] Task 3.3: (Optional) Xem xét bổ sung `CREATE INDEX` cho các bảng SQLite dựa trên query log.
- [x] Task 3.4: Chạy lại API call so sánh với Baseline test.

## 🔄 Sub-Doings
_None yet_

## ✅ Completion Gate
- [x] All tasks [x]
- [x] Sub-Doings resolved
- [x] Smoke test passed
- [x] Trade-offs confirmed

---
_Started: 2026-04-28 | Updated: 2026-04-28 | Completed: 2026-04-28_
