구현할 기능
소셜(친구) 토너먼트에서 내가 먼저 완주했을 때도 새로고침 없이 "전체 결과 보기" 배너가 보이도록 결과 화면의 배너 노출 조건을 교체한다.
서버 후속 작업: 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 를 그린다 (useGetGroupResult 는 retry: false).
따라서 이 이슈에서 카드 비활성 variant·보조 문구 등 신규 UI 는 만들지 않는다. 클라가 hasGroupResult 를 참조할 필요도 없어진다.
작업 상세 내용
참고 — 범위 밖
- 카드 자체를 비활성 처리하는 안(회색 +
친구가 완료하면 볼 수 있어요 류 보조 문구)은 헛걸음을 줄이지만 시안이 필요하다. 필요해지면 별도 이슈로 분리한다.
GetTournamentCompletedResponseT.completed 에 서버가 내려주는 canAddItem 이 빠져 있다 (PostRecordMatchResponseT 쪽엔 있음). 현재 클라에서 쓰는 곳이 없어 동작 문제는 없지만, 같은 파일을 손대는 김에 채울지 판단.
구현할 기능
소셜(친구) 토너먼트에서 내가 먼저 완주했을 때도 새로고침 없이 "전체 결과 보기" 배너가 보이도록 결과 화면의 배너 노출 조건을 교체한다.
서버 후속 작업: core#976 (merged) —
close core#975배경
배너 노출을 서버의
completed.hasGroupResult하나로 제어했는데, 이 값은 "완료한 플레이어 2명 이상"(= 그룹 결과 조회 가능 여부)이다. 그래서 혼자 먼저 완주한 시점엔false라 배너가 아예 안 보이고, 다른 사람이 완주한 뒤 화면을 새로 불러야 나타났다. "노출 여부"와 "조회 가능 여부"가 한 플래그에 묶여 있던 게 원인.core#976 에서 두 값을 분리해
completed.isGroupTournament를 추가했다.isGroupTournament(신규)hasGroupResult(기존)isGroupTournament는 서버가TournamentDetailResponse.CompletedData를 재사용하므로GET /tournaments/{id}와POST /tournaments/{id}/matches응답 양쪽에 모두 내려온다.비활성 상태는 기존 화면에 맡긴다
배너는
isGroupTournament로만 노출하고 항상 활성으로 둔다. 아직 다른 사람 결과가 없으면 진입한result/group페이지가 이미 그 상황을 처리한다 —GET /group-result가 완료 참여자 2명 미만일 때 409 를 주고,GroupResultClient가 이를 받아아직 친구 결과가 없어요 / 친구가 토너먼트를 완료하면 결과를 비교해볼 수 있어요.empty state 를 그린다 (useGetGroupResult는retry: false).따라서 이 이슈에서 카드 비활성 variant·보조 문구 등 신규 UI 는 만들지 않는다. 클라가
hasGroupResult를 참조할 필요도 없어진다.작업 상세 내용
isGroupTournament추가 —app/tournament/[id]/_common/_types/tournamentResponse.tsGetTournamentCompletedResponseT.completed에isGroupTournament: booleanPostRecordMatchResponseT.completed에isGroupTournament: booleanhasGroupResult주석 정정 — 현재/** 참여자 2명 이상이면 true */(core#370 옛 스펙)이지만 실제 계산은 "완료한 플레이어 2명 이상 = 조회 가능"이다result/_components/ResultClient.tsx:106tournamentData.completed.hasGroupResult→tournamentData.completed.isGroupTournamenthasGroupResult 가 false 면 ... 서버가 409 를 주므로 숨긴다)을 "노출은 소셜 여부로, 결과 없음은 group 페이지 empty state 로" 기준으로 갱신match/_hooks/useTournament.ts:67setQueryData의completed에isGroupTournament: completed.isGroupTournament추가e2e/mocks/tournament.tsMOCK_TOURNAMENT_COMPLETED.completed에isGroupTournament추가e2e/specs/tournament/tournamentMatch.spec.ts:54결승 기록 응답 목에isGroupTournament추가isGroupTournament: true+hasGroupResult: false에서 배너가 노출되는지 (= 예전에 배너가 사라지던 지점)참고 — 범위 밖
친구가 완료하면 볼 수 있어요류 보조 문구)은 헛걸음을 줄이지만 시안이 필요하다. 필요해지면 별도 이슈로 분리한다.GetTournamentCompletedResponseT.completed에 서버가 내려주는canAddItem이 빠져 있다 (PostRecordMatchResponseT쪽엔 있음). 현재 클라에서 쓰는 곳이 없어 동작 문제는 없지만, 같은 파일을 손대는 김에 채울지 판단.