Skip to content

fix: 소셜 토너먼트 첫 완주자에게 전체 결과 배너 노출 (isGroupTournament 반영) #557

Description

@iOdiO89

구현할 기능

소셜(친구) 토너먼트에서 내가 먼저 완주했을 때도 새로고침 없이 "전체 결과 보기" 배너가 보이도록 결과 화면의 배너 노출 조건을 교체한다.

서버 후속 작업: core#976 (merged) — close core#975

배경

배너 노출을 서버의 completed.hasGroupResult 하나로 제어했는데, 이 값은 "완료한 플레이어 2명 이상"(= 그룹 결과 조회 가능 여부)이다. 그래서 혼자 먼저 완주한 시점엔 false라 배너가 아예 안 보이고, 다른 사람이 완주한 뒤 화면을 새로 불러야 나타났다. "노출 여부"와 "조회 가능 여부"가 한 플래그에 묶여 있던 게 원인.

core#976 에서 두 값을 분리해 completed.isGroupTournament 를 추가했다.

플래그 의미 서버 계산 클라 용도
isGroupTournament (신규) 소셜 토너먼트 여부 참여자 수 >= 2 (완료 무관) 배너 노출
hasGroupResult (기존) 그룹 결과 조회 가능 완료 플레이어 수 >= 2 클라에서 직접 쓰지 않음 (아래 참고)

isGroupTournament 는 서버가 TournamentDetailResponse.CompletedData 를 재사용하므로 GET /tournaments/{id}POST /tournaments/{id}/matches 응답 양쪽에 모두 내려온다.

비활성 상태는 기존 화면에 맡긴다

배너는 isGroupTournament 로만 노출하고 항상 활성으로 둔다. 아직 다른 사람 결과가 없으면 진입한 result/group 페이지가 이미 그 상황을 처리한다 — GET /group-result 가 완료 참여자 2명 미만일 때 409 를 주고, GroupResultClient 가 이를 받아 아직 친구 결과가 없어요 / 친구가 토너먼트를 완료하면 결과를 비교해볼 수 있어요. empty state 를 그린다 (useGetGroupResultretry: false).

따라서 이 이슈에서 카드 비활성 variant·보조 문구 등 신규 UI 는 만들지 않는다. 클라가 hasGroupResult 를 참조할 필요도 없어진다.

작업 상세 내용

  • 타입에 isGroupTournament 추가app/tournament/[id]/_common/_types/tournamentResponse.ts
    • GetTournamentCompletedResponseT.completedisGroupTournament: boolean
    • PostRecordMatchResponseT.completedisGroupTournament: boolean
    • hasGroupResult 주석 정정 — 현재 /** 참여자 2명 이상이면 true */ (core#370 옛 스펙)이지만 실제 계산은 "완료한 플레이어 2명 이상 = 조회 가능"이다
  • 배너 노출 조건 교체result/_components/ResultClient.tsx:106
    • tournamentData.completed.hasGroupResulttournamentData.completed.isGroupTournament
    • 위 주석(hasGroupResult 가 false 면 ... 서버가 409 를 주므로 숨긴다)을 "노출은 소셜 여부로, 결과 없음은 group 페이지 empty state 로" 기준으로 갱신
  • 결승 기록 직후 캐시 시드에 플래그 포함match/_hooks/useTournament.ts:67
    • setQueryDatacompletedisGroupTournament: completed.isGroupTournament 추가
    • 이걸 빠뜨리면 이번 이슈의 핵심 경로(첫 완주자)에서 배너가 그대로 안 보인다 — 결승 기록 응답으로 COMPLETED 를 시드하고 결과 화면으로 넘어가므로 재조회가 없다
  • E2E 목/스펙 갱신
    • e2e/mocks/tournament.ts MOCK_TOURNAMENT_COMPLETED.completedisGroupTournament 추가
    • e2e/specs/tournament/tournamentMatch.spec.ts:54 결승 기록 응답 목에 isGroupTournament 추가
    • 신규 케이스: isGroupTournament: true + hasGroupResult: false 에서 배너가 노출되는지 (= 예전에 배너가 사라지던 지점)

참고 — 범위 밖

  • 카드 자체를 비활성 처리하는 안(회색 + 친구가 완료하면 볼 수 있어요 류 보조 문구)은 헛걸음을 줄이지만 시안이 필요하다. 필요해지면 별도 이슈로 분리한다.
  • GetTournamentCompletedResponseT.completed 에 서버가 내려주는 canAddItem 이 빠져 있다 (PostRecordMatchResponseT 쪽엔 있음). 현재 클라에서 쓰는 곳이 없어 동작 문제는 없지만, 같은 파일을 손대는 김에 채울지 판단.

Metadata

Metadata

Assignees

Labels

WEBfixSomething isn't working

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions