Supabase 2 — APMATHS Platform (giáo viên bên ngoài)

Chỉ dành cho project mhgsvxsjrzaeafvifydu. Database/Authentication độc lập hoàn toàn với Supabase 1 (yhfburffwzvcayjadskr) và AI-CLO PTITHCM.

Các migration đã áp dụng ngày 12/10/2026

Migration trong supabase/migrations/ Mục đích
20261012150743_apmaths_platform_core_v1.sql 8 bảng tài khoản/hồ sơ, xét duyệt, workspace, lớp, ghi danh, mã mời
20261012151205_apmaths_platform_security_v2.sql Schema riêng cho privileged RPC, RLS và giới hạn GRANT
20261012152052_apmaths_platform_profiles_rls_v3.sql Tối ưu policy xem hồ sơ chính mình/học sinh cùng lớp
20261012154209_apmaths_platform_class_lifecycle_v4.sql Xóa học sinh khỏi lớp/rời lớp qua RPC
20261012154346_apmaths_platform_exams_v5.sql Ngân hàng câu hỏi riêng, đề lớp, lượt làm, chấm điểm phía server
20261012155111_apmaths_platform_expired_attempt_fix_v6.sql Chốt trạng thái hết hạn bài làm
20261012155553_apmaths_platform_plans_foundation_v7.sql Danh mục gói, gói miễn phí tự gán workspace, usage events nội bộ
20261012160743_apmaths_platform_fk_indexes_v8.sql Bổ sung index cho khóa ngoại composite của ngân hàng và đề thi

Các migration đã được apply trên Supabase 2, không chạy lại thủ công. Source SQL lưu để đối soát và phục hồi trên project mới. Các bảng public mới đều bật RLS; app_private không lộ qua Data API.

Đợt 3B — Tài khoản Admin

Đợt 3C — Lớp và học sinh

Trang /platform/: Teacher duyệt có workspace của mình, tạo/đổi tên/lưu trữ lớp, tạo mã mời 32 ký tự ngẫu nhiên, xem/xóa học sinh; Student nhận mã và có thể rời lớp. Mã mời dùng tối đa 30 lượt/7 ngày theo lựa chọn mặc định UI, lưu sha256 trong database. Các thao tác đặc quyền qua RPC đã xác minh UID/role/ownership.

Đợt 3D — Ngân hàng và kiểm tra

Trang /platform/exams/: giáo viên tạo bank, thêm câu A–D, tạo đề nháp, gán câu hỏi và công bố. Student chỉ đọc đề đã công bố trong lớp ghi danh qua platform_start_exam, không đọc được khóa đáp án trong bảng; nộp và chấm platform_submit_exam ở database. Tài khoản có một lượt/đề trong v1. Phần câu hỏi tự luận, CLO và AI chưa được triển khai trên Supabase 2.

Đợt 4 — Gói dịch vụ (chưa có thu phí thực tế)

Đã tạo platform_service_plans (free công khai, teacher_pro ẩn chưa chốt giá), platform_workspace_subscriptions và platform_usage_events (chỉ backend). Khi workspace hình thành, trigger tự cấp quyền free. Chưa tích hợp thanh toán, chưa kích hoạt Teacher Pro, chưa enforce hạn mức trả phí.

Kiểm thử đã chạy (rollback transaction)

Theo dõi bảo mật

Advisors: bảng class_invites, teacher_application_events và platform_usage_events chủ ý deny-all/no Data API access (RLS enabled, no policy). Không xóa chính sách bảo vệ chỉ để làm mất thông báo INFO. Bật leaked password protection nếu plan cho phép; có thể dùng CAPTCHA và mật khẩu mạnh khi tính năng này không khả dụng.

Lưu ý phát hành: Build/SQL test không thay thế kiểm thử email redirect, quản trị và quyền riêng tư trên trình duyệt thực tế. Không tự merge PR #4 hoặc mở signup đại trà trước khi kiểm thử này đạt.