Skip to content

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ó FirebaseCommandListener là consumer duy nhất, cần kiểm tra firebaselistener module có inject Firebase DatabaseReference dưới dạng @Autowired hay thông qua FirebaseDatabase.getInstance(). Cleanup cần loại bỏ listener registration trong @PostConstruct hoặ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-register trong 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 FirebaseCommandListener nếu v1 là consumer duy nhất của Firebase commands path:

  • [ ] Grep: grep -r "commands/" trong firebaselistener/ để 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-register endpoint không còn tồn tại → trả 404
  • [ ] POST /sync-register hoạt động bình thường cho toàn bộ clients sau migration
  • [ ] Không còn FirebaseCommandListener references tới commands/ path (nếu v1 là consumer duy nhất)
  • [ ] Zero traffic log [DEPRECATION] /room-sync-register trong í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.java
  • firebaselistener/listener/FirebaseCommandListener.java (nếu applicable)