# 8-3 · 발산 · 익명 순위표

> **보는 사람**: 모두  
> **파일**: [index.html](index.html) (화면) · [screen.js](screen.js) (이 화면 동작)

## 이 화면은

모두의 1·2·3순위를 이름 대신 팀원 A·B·C·D로 보여준다. 줄 순서는 섞여 있고, 내 줄만 나에게 표시된다.

## 프론트엔드

**이미 구현한 것**

- ✅ 진행자가 댓글 단계로 넘기면 자동 이동
- ✅ 실서버 모드에서 순위표 다시 그리기(renderBoard)

**남은 일**

- ⬜ 아직 제출 안 한 사람이 있을 때의 빈 줄 모양(디자인 필요)

## 백엔드가 해야 할 일 (쉽게)

- <b>익명 순위표</b>: 세션마다 참가자에게 A·B·C·D 별칭을 <b>무작위로 한 번</b> 정해서 고정한다(새로고침해도 같은 별칭).
- 줄 순서도 한 번 섞어서 고정한다. 제출 순서나 입장 순서로 사람을 추측하지 못하게.
- <b>isMe</b>는 요청한 사람 본인 줄에만 true. 별칭↔사람 연결은 진행자에게도 주지 않는다.
- 누가 AI 추천을 골랐는지(source)는 절대 보내지 않는다.

## 이 화면이 쓰는 API

| 언제 | API | 요약 |
|---|---|---|
| 화면 열 때 | `GET /sessions/{sessionId}/ideas/board` | 익명 순위표 |

## 실시간 이벤트 (웹소켓으로 받는 것)

| 이벤트 | 받으면 |
|---|---|
| `stage.changed` | 해당 단계 화면으로 이동, 상단바 갱신 |

형식은 [docs/02-API-공통-규칙.md](../../docs/02-API-공통-규칙.md#실시간-이벤트) 참고.

## API 상세

모든 경로 앞에 `/api/v1`가 붙어요. 공통 규칙(인증·에러 형식)은 [docs/02-API-공통-규칙.md](../../docs/02-API-공통-규칙.md).

### `GET /api/v1/sessions/{sessionId}/ideas/board` — 익명 순위표

- **API id**: `idea.board` (프론트: `api.call('idea.board', …)`)
- **누가 부를 수 있나**: 세션 참가자 (회원)
- **하는 일**: 모두의 1·2·3순위를 이름 대신 팀원 A·B·C·D로. 줄 순서는 세션마다 무작위로 한 번 섞어서 고정.

**응답** `200`

```json
{
  "submittedCount": 4,
  "memberCount": 4,
  "rows": [
    {
      "alias": "A",
      "isMe": false,
      "ideas": [
        {
          "ideaId": "ide_a1",
          "rank": 1,
          "text": "열람실·카페 빈자리를 함께 알려주는 지도"
        },
        {
          "ideaId": "ide_a2",
          "rank": 2,
          "text": "팀플 회의가 끝나면 할 일을 정리해 주는 서비스"
        },
        {
          "ideaId": "ide_a3",
          "rank": 3,
          "text": "내 필기로 시험 예상 문제를 만들어 주는 웹"
        }
      ]
    },
    {
      "alias": "C",
      "isMe": true,
      "ideas": [
        {
          "ideaId": "ide_c1",
          "rank": 1,
          "text": "과제 공지와 마감을 한곳에 모아 알려주는 웹"
        }
      ]
    }
  ]
}
```

**백엔드 메모**

- alias(A~D)와 실제 사람 연결은 서버만 안다. 진행자에게도 주지 않는다.
- isMe는 요청한 본인 줄에만 true.
