[BE-02] 채팅 고도화 공통 enum·VO

작업 내용 (설계 의도)

변경 사항

근거 TDD: 20260704-채팅시스템고도화-tdd.md (Detail Design 상태 전이 표).

후행 도메인 티켓이 공통으로 import하는 값 객체(enum)를 선행 wave에서 확정한다. 서로 다른 파일이므로 신규 파일만 추가(기존 파일 무수정, Single Writer 충돌 없음). 상태 전이는 enum 내부 canTransitTo()로 캡슐화한다.

  • domain/message/vo/RoomContextType.kt: COMMUNITY, GOODS_PRODUCT.
  • domain/message/vo/ParticipantType.kt: MEMBER, GUEST.
  • domain/message/vo/InvitationStatus.kt: PENDING, ACCEPTED, REJECTED, REVOKED, EXPIRED + canTransitTo(next) (PENDING에서만 전이 허용).
  • domain/community/vo/CommunityVisibility.kt: PUBLIC, PRIVATE.
  • domain/community/vo/CommunityRole.kt: HOST, MEMBER.
  • domain/community/vo/MembershipStatus.kt: ACTIVE, PENDING_APPROVAL, LEFT, KICKED + canTransitTo(next).
  • domain/community/vo/SportCategory.kt: 종목 카테고리 (기존 goods ProductCategory 참고, 신규 정의).

의존

  • 없음 (선행 병목)

다이어그램

클래스 의존

flowchart LR
    subgraph message.vo
        RCT[RoomContextType]
        PT[ParticipantType]
        IS[InvitationStatus]
    end
    subgraph community.vo
        CV[CommunityVisibility]
        CR[CommunityRole]
        MS[MembershipStatus]
        SC[SportCategory]
    end

테스트 케이스

  • InvitationStatus.PENDING.canTransitTo(ACCEPTED)는 true다.
  • InvitationStatus.ACCEPTED.canTransitTo(REJECTED)는 false다 (terminal).
  • MembershipStatus.PENDING_APPROVAL.canTransitTo(ACTIVE)는 true, LEFT.canTransitTo(ACTIVE)는 false다.
  • 각 enum의 값 집합이 TDD 상태 전이 표와 정확히 일치한다.