Announcement: SDD
PRD · Tests · trạng thái: đường đọc đã xây, đường soạn chưa có trong repo
Thông báo của Conan School đã sang CMS (17.10.2026)
Từ conan-web PR 6 (#14), www đọc 20 thông báo scope='school' của Conan School từ api-cms.conan.school (/public/announcements), soạn ở cms.conan.school. Đó là đường soạn đầu tiên của loại này, và nó nằm ở repo conan-web, không ở đây. Route /api/public/announcements* và hai bảng dưới đây giữ vĩnh viễn: route đa trường, conan.media (Pitstop School), inside6 build-seed.mjs (Inside School) và Ran (mọi trường) còn đọc. Dòng của Conan School trong D1 là bản đóng băng; sửa thông báo của Conan School là sửa ở CMS. Xem nội dung biên tập đã sang CMS.
Luồng đọc (có)
D1 announcements + announcement_categories (migration 0002_public_content.sql)
-> GET /api/public/announcements danh sách, phân trang, lọc
-> GET /api/public/announcements/categories
-> GET /api/public/announcements/{slug} chi tiết, 404 nếu không có
-> conan.media (Pitstop), inside6 seed (Inside), Ran (mọi trường)
[www đọc api-cms từ 17.10.2026, không còn đọc route này]| Thành phần | File | Ghi chú |
|---|---|---|
| Bảng | api.conan.school/migrations/0002_public_content.sql | announcements(id, school_id, class_id, category_id, author_id, title, slug, content, scope DEFAULT 'school', status DEFAULT 'draft', priority, is_pinned, published_at, expires_at, deleted_at, ...), UNIQUE(school_id, slug); announcement_categories(... color, icon, sort_order, is_active). Bảng không tiền tố, truy vấn bằng c.env.DB thô. |
| API | api.conan.school/src/domains/public/announcements.ts, mount ở src/domains/public/index.ts (app.route('/announcements', ...)) | Bắt buộc header x-school-id (thiếu thì 400). Điều kiện: status='published', deleted_at IS NULL, chưa hết hạn. Sắp xếp is_pinned DESC, published_at DESC. limit tối đa 50. |
| www | www.conan.school/app/routes/announcements.tsx, announcements.$slug.tsx | Loader ném lỗi khi API không ok hoặc sai hình dạng, đi qua rethrowOrUnavailable (~/lib/loader-errors), nên 500 không thành danh sách rỗng (COMM-ANN-03). |
Những điều mã KHÔNG làm (đối chiếu PRD)
- Đã sửa 13.10.2026: lọc
published_attương lai. Danh sách và chi tiết đều thêmpublished_at IS NULL OR published_at <= now, nên bài hẹn đăng ngày mai không còn hiện sớm. - Đã sửa 13.10.2026: route công khai chỉ trả
scope = 'school'. Trước đó truyềnclass_idbất kỳ là đọc được thông báo của lớp đó, kể cả qua slug ở route chi tiết.class_idvẫn nhận trong query (client cũ không vỡ) nhưng bị bỏ qua. Thông báo cấp lớp chưa có đường đọc nào: muốn hiện cho học viên thì phải làm route có xác thực thành viên và kiểm thuộc lớp (COMM-ANN-05). - Không có đường soạn. Không có router admin nào cho
announcementstrongapi.conan.school/src/domains/admin/, không có trang trongadmin.conan.school/legacy/*. Dữ liệu chỉ vào D1 bằng cách khác ngoài repo. - Không đẩy qua kênh nào (COMM-ANN-06): không email, không in-app.