Task 1-1: Chuẩn hóa Reason Codes
Phase: 1 - Validation hardening Priority: Medium Module:
websocket,application-coreDepends 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_GAMEbroadcasts trong: CreateRoomValidationService.javaRoomCmdConsumer.javaCreateRoomService.javaCreateRoomJMSService.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:
RoomReasonCodelà một plain constants class (no Spring beans). Không cần inject — các class khác chỉ cầnimport com.figpop.common.constants.RoomReasonCode;và dùng static referencesRoomReasonCode.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_GAMEevent với mộtreasonfield 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ùngRoomReasonCode.*(importcom.figpop.common.constants.RoomReasonCode) - [ ]
RoomCmdConsumer.java→ dùng constants (importcom.figpop.common.constants.RoomReasonCode) - [ ]
CreateRoomService.java→ dùng constants (importcom.figpop.common.constants.RoomReasonCode) - [ ]
CreateRoomJMSService.java→ dùng constants (importcom.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.javacompile thành công trong modulecommon - [ ] Tất cả unit tests liên quan đến
CreateRoomValidationServicevẫ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.javawebsocket/handler/consumer_handler/RoomCmdConsumer.javawebsocket/handler/handle/CreateRoomService.javabatch/jms/service/CreateRoomJMSService.java