1. 연결 정보

항목 설명
연결 URL /
필수 쿼리 파라미터 sessionId: 세션 ID
token: 사용자 토큰
연결 예시 const socket = io('ws://localhost:3000', {
query: {
sessionId: '2003544c-d901-4455-818d-d54af3784afa',
token: 'df7c4881-1047-4bc5-aa98-5b37add3cc65'

} }); |

이벤트명 설명 데이터 형식 데이터 예시
duplicatedConnection connection에
실패한 경우 없음 없음 (이벤트만 갑니다)

image.png

2. 이벤트 목록

2.1 발신 이벤트 (Client → Server)

이벤트명 설명 데이터 형식 데이터 예시 예시
createChat 채팅 메시지 전송 string '황정민' socket.emit('createChat', '황정민')

2.2 수신 이벤트 (Server → Client)

A. 채팅 이벤트

이벤트명 설명 데이터 형식 데이터 예시
chatMessage 채팅 메시지 수신

all 브로드 캐스팅 전송자 포함 | { content: string, nickname: string, chattingId: number, abuse: boolean } | { content: "황정민", nickname: "대정민", chattingId: 40, abuse: false } | | chatError | 채팅 메시지 실패 시

채팅 작성자에게만 보내드리는 응답입니다. | { message: string, error: string } | { message: '채팅 생성에 실패했습니다', error: ‘에러메시지’ } |

B. 질문 이벤트

이벤트명 설명 실행된 api 예시 비고
questionCreated 새 질문 등록됨 POST
/api/questions {
"question": {
    "questionId": 68,
    "createUserToken": "6a76804d-28bd-48f2-9c56-780633e3e25b",
    "sessionId": "2003544c-d901-4455-818d-d54af3784afa",
    "body": "## 대정민님!",
    "closed": false,
    "pinned": false,
    "createdAt": "2024-11-20T11:03:38.032Z",
    "isOwner": false,
    "likesCount": 0,
    "liked": false,
    "nickname": "익명",
    "replies": []
}

} | 작성자 제외하고 해당 세션 모두에게 전송 | | questionUpdated | 질문 수정됨 | PATCH /api/questions/{questionId}/body

PATCH /api/questions/{questionId}/pinned

PATCH /api/questions/{questionId}/closed | { "question": { "questionId": 68, "createUserToken": "6a76804d-28bd-48f2-9c56-780633e3e25b", "sessionId": "2003544c-d901-4455-818d-d54af3784afa", "body": "대영재님 수정갑니다!", "closed": false, "pinned": false, "createdAt": "2024-11-20T11:03:38.032Z" } } | 작성자 제외하고 해당 세션 모두에게 전송 | | questionDeleted | 질문 삭제됨 | DELETE /api/questions/{questionId} | { "questionId": 68 } | 작성자 제외하고 해당 세션 모두에게 전송 | | questionLiked | 질문 좋아요 변경 | POST /api/questions/{questionId}/likes | { "questionId": 68, "liked": false, "likesCount": 1 } | 작성자 제외하고 해당 세션 모두에게 전송 |

C. 답변 이벤트

이벤트명 설명 실행된 api 예시 비고
replyCreated 새 답변 등록됨 POST
/api/replies {
"reply": {
    "replyId": 58,
    "body": "다 대상현님 덕분이죠.",
    "createdAt": "2024-11-20T11:19:20.044Z",
    "isOwner": false,
    "likesCount": 0,
    "liked": false,
    "deleted": false,
    "nickname": "익명",
    "isHost": false,
    "questionId": 69,
},

} | 작성자 제외하고 해당 세션 모두에게 전송 | | replyUpdated | 답변 수정됨 | PATCH /api/replies/{replyId}/body | { "reply": { "replyId": 58, "createUserToken": "6a76804d-28bd-48f2-9c56-780633e3e25b", "sessionId": "2003544c-d901-4455-818d-d54af3784afa", "questionId": 69, "body": "수정합니다!", "createdAt": "2024-11-20T11:19:20.044Z", "deleted": false } } | 작성자 제외하고 해당 세션 모두에게 전송 | | replyDeleted | 답변 삭제됨 | DELETE /api/replies/{replyId} | { "replyId": 58, "questionId": 69, } | 작성자 제외하고 해당 세션 모두에게 전송 | | replyLiked | 답변 좋아요 변경 | POST /api/replies/{replyId}/likes | { “replyId”: 58 "liked": true,x "likesCount": 1, "questionId": 69, } | 작성자 제외하고 해당 세션 모두에게 전송 |

D. 세션에 참가중인 사용자 수

이벤트명 설명 예시 비고
participantCountUpdated 세션에 참가중인 사람 수 변동 {
“participantCount” : 15

} | session 내에 누군가가 나가거나 들어왔다면 이벤트를 발생 |

E. 호스트 변경

이벤트명 설명 실행된 api 예시 비고
hostChanged 호스트 권한 부여/해제 시 PATCH
/api/sessions-auth/host/{userId} {
“user”: {
  “userId”: 31,
  “nickname”: “minsuhan”,
  “isHost” :  true,

} } | |

F. 세션 종료