Task 2-2: Migrate Clients từ Room Sync v1 sang v2
Phase: 2 - Deprecation Priority: Medium Depends on: task-2-1 Reference: docs/BountyHunter-Backend/details/feature-livestream/SPEC.md
Background
Sau khi v1 được đánh deprecation, cần phối hợp với client team để migrate hoàn toàn sang v2 và sau đó xóa v1.
Tasks
DI Note: Nếu v1 có
FirebaseCommandListenerlà consumer duy nhất, cần kiểm trafirebaselistenermodule có inject FirebaseDatabaseReferencedưới dạng@Autowiredhay thông quaFirebaseDatabase.getInstance(). Cleanup cần loại bỏ listener registration trong@PostConstructhoặc tương đương.
- [ ] Document sự khác biệt v1 vs v2 (tạo comment hoặc wiki page):
- v1: qua Firebase RTDB
commands/path → async, phụ thuộc Firebase - v2: direct REST call → sync response, không cần Firebase round-trip
-
Migration checklist cho client: thay URL (
/room-sync-register→/sync-register), verify response format giống nhau -
[ ] Theo dõi access log trong 2 tuần sau khi notify: query
[DEPRECATION] /room-sync-registertrong logs - [ ] Xác nhận không còn traffic tới v1 endpoint (zero hits trong 48h liên tiếp)
-
[ ] Xóa v1 endpoint sau khi xác nhận zero traffic:
// Remove or comment with TODO: // @PostMapping("/room-sync-register") // Removed: YYYY-MM-DD - see task-2-2 -
[ ] Cleanup
FirebaseCommandListenernếu v1 là consumer duy nhất của Firebase commands path: - [ ] Grep:
grep -r "commands/"trongfirebaselistener/để xác nhận không còn dependency - [ ] Remove listener class nếu không còn consumer nào
Verification / Acceptance Criteria
- [ ]
POST /room-sync-registerendpoint không còn tồn tại → trả 404 - [ ]
POST /sync-registerhoạt động bình thường cho toàn bộ clients sau migration - [ ] Không còn
FirebaseCommandListenerreferences tớicommands/path (nếu v1 là consumer duy nhất) - [ ] Zero traffic log
[DEPRECATION] /room-sync-registertrong ít nhất 48h trước khi xóa - [ ] Application khởi động không lỗi sau khi cleanup Firebase listener
Files to Modify
livestreamweb/controllers/livestream/LivestreamController.javafirebaselistener/listener/FirebaseCommandListener.java(nếu applicable)