Giao diện
Quản trị dữ liệu
Nạp dữ liệu thật
Giai đoạn 1 chưa có giao diện quản trị. Dữ liệu nạp bằng SQL qua wrangler d1 execute.
bash
cd chuyenchon.com/apps/api
npx wrangler d1 execute chuyenchon --remote --file=./data/truong-2027.sqlSau mỗi lần nạp hoặc sửa hàng loạt, bắt buộc dựng lại chỉ mục tìm kiếm:
bash
curl -X POST https://api.chuyenchon.com/v1/admin/reindex \
-H "Authorization: Bearer $ADMIN_TOKEN"Bỏ bước này thì bản ghi mới không xuất hiện trong ô tìm kiếm dù trang chi tiết vẫn truy cập được.
Quy tắc khi thêm bản ghi
slugkhông dấu, viết thường, nối bằng dấu gạch ngang — dùngslugify()trongpackages/shared.verificationbắt đầu ởunverified; chỉ nâng lênverifiedkhi đã đối chiếu nguồn gốc.- Có
source_urlthì luôn điền — giao diện hiển thị đường dẫn đó cho người dùng. - Ngày tháng theo
YYYY-MM-DD. - Số liệu tuyển sinh luôn gắn với một năm cụ thể; không sửa đè bản ghi năm cũ mà thêm dòng mới.
Thay dữ liệu mẫu bằng dữ liệu thật
- Xoá các bảng nội dung (giữ
provincesvàsubjectsnếu vẫn dùng được). - Nạp dữ liệu thật.
- Gọi
/v1/admin/reindex. - Gỡ component
SampleDataNoticekhỏiapps/web/src/components/layout.tsx. - Build lại website để prerender bám theo dữ liệu mới.
Sao lưu
bash
npx wrangler d1 export chuyenchon --remote --output=backup-$(date +%F).sqlNên chạy trước mỗi lần nạp hàng loạt.
Thêm một thực thể mới
- Viết migration mới trong
apps/api/migrations(đánh số tăng dần, không sửa file cũ). - Thêm file route trong
apps/api/src/routesvà đăng ký ởsrc/index.ts. - Bổ sung vào
rebuildSearchIndex()nếu thực thể cần tìm kiếm được. - Thêm kiểu dữ liệu ở
apps/web/src/types.ts, trang ởapps/web/src/pages, route ởApp.tsx. - Thêm vào
scripts/prerender.mjsnếu trang chi tiết cần lên chỉ mục tìm kiếm.