Skip to content

Task 1-1: Chuẩn hóa Reason Codes

Phase: 1 - Validation hardening Priority: Medium Module: websocket, application-core Depends on: Không có Blocks: task-4-1, task-4-2 Reference: docs/BountyHunter-Backend/details/feature-game-room-management/SPEC.md

Background

Reason codes trong VALIDATE_GAME events là hardcoded strings rải rác trong nhiều class. Khó maintain và client phải hardcode tương ứng.

Tasks

1. Audit tất cả reason codes

  • [ ] Grep VALIDATE_GAME broadcasts trong:
  • CreateRoomValidationService.java
  • RoomCmdConsumer.java
  • CreateRoomService.java
  • CreateRoomJMSService.java
  • [ ] Liệt kê tất cả reason strings hiện tại

2. Tạo RoomReasonCode constants

File mới: common/src/main/java/com/figpop/common/constants/RoomReasonCode.java

DI Note: RoomReasonCode là một plain constants class (no Spring beans). Không cần inject — các class khác chỉ cần import com.figpop.common.constants.RoomReasonCode; và dùng static references RoomReasonCode.ROOM_ALREADY_EXIST.

public final class RoomReasonCode {
    private RoomReasonCode() {} // prevent instantiation

    public static final String ROOM_ALREADY_EXIST = "ROOM_ALREADY_EXIST";
    public static final String INVALID_PRIZE_ID = "INVALID_PRIZE_ID";
    public static final String INSUFFICIENT_BALANCE = "INSUFFICIENT_BALANCE";
    public static final String MACHINE_NOT_AVAILABLE = "MACHINE_NOT_AVAILABLE";
    public static final String ROOM_IS_FULL = "ROOM_IS_FULL";
    public static final String INVALID_GAME_MODE = "INVALID_GAME_MODE";
    // ... thêm tất cả codes sau khi audit
}

3. Replace hardcoded strings

Clarification: Mỗi class dưới đây broadcast VALIDATE_GAME event với một reason field là string. Thay thế literal string đó bằng constant tương ứng từ RoomReasonCode. Không thay đổi logic gửi event, chỉ thay giá trị string.

  • [ ] CreateRoomValidationService.java → dùng RoomReasonCode.* (import com.figpop.common.constants.RoomReasonCode)
  • [ ] RoomCmdConsumer.java → dùng constants (import com.figpop.common.constants.RoomReasonCode)
  • [ ] CreateRoomService.java → dùng constants (import com.figpop.common.constants.RoomReasonCode)
  • [ ] CreateRoomJMSService.java → dùng constants (import com.figpop.common.constants.RoomReasonCode)

Verification / Acceptance Criteria

  • [ ] grep -r '"ROOM_ALREADY_EXIST"' --include="*.java" trả về 0 kết quả (tất cả đã dùng constant)
  • [ ] grep -r '"INVALID_PRIZE_ID"' --include="*.java" trả về 0 kết quả
  • [ ] grep -r '"INSUFFICIENT_BALANCE"' --include="*.java" trả về 0 kết quả
  • [ ] grep -r '"MACHINE_NOT_AVAILABLE"' --include="*.java" trả về 0 kết quả
  • [ ] grep -r '"ROOM_IS_FULL"' --include="*.java" trả về 0 kết quả
  • [ ] grep -r '"INVALID_GAME_MODE"' --include="*.java" trả về 0 kết quả
  • [ ] RoomReasonCode.java compile thành công trong module common
  • [ ] Tất cả unit tests liên quan đến CreateRoomValidationService vẫn pass
  • [ ] Audit step (Step 1) được hoàn thành trước khi viết constants — đảm bảo không bỏ sót reason code nào

Files to Modify

  • common/constants/RoomReasonCode.java (new)
  • application-core/service/cache_room/create_room/validate/CreateRoomValidationService.java
  • websocket/handler/consumer_handler/RoomCmdConsumer.java
  • websocket/handler/handle/CreateRoomService.java
  • batch/jms/service/CreateRoomJMSService.java