API root route is at host/api
admin, friend, friend2, friend3, friend4
| endpoint | remarks | body | response |
|---|---|---|---|
| post /signup | {username, password, name} | ||
| non-200 responses (text in response body): |
"Already logged in” "User exists” "Bad request” "Bad params” | | post /login | log in and set session cookie axios: withCredentials? for all requests
| {username, password} | non-200 responses (text in response body):
"Already logged in” ****”Invalid credentials” "Bad params” | | get /logged-in | check if logged in | | { loggedIn: true } |
| endpoint | remarks | body | response |
|---|---|---|---|
| post /logout | |||
| get /user-stats | get user’s results for the past week | {results: [ {numGuesses, timeTaken, date}, … ]} (for the past week) | |
| get /leaderboard | get friends’ results for today | {data: [ {name, username, numGuesses, timeTaken}, …] } | |
| get /friends | get all friends | {friends: [ {name, username}… ]} | |
| get /played-today | {played: true} | ||
| post /add-friend | {username} | ||
| non-200 responses (text in response body): |
"No such user” "Friend exists” | | post /unfriend | | {username} | non-200 responses (text in response body):
"No such user” "No such friend” |
| endpoint | remarks | body | response |
|---|---|---|---|
| post /guess | after every guess | {guess} | {score: “12021”} |
| post /end-game | post game scores after end of game (server will ignore if not logged in) |
”Result exists for today” | {scores : [], timeTaken: int (seconds) } | {word: “apple”} |
| endpoint | remarks | body | response |
|---|---|---|---|
| get /register | get playerId before creating/joining room | {playerId} | |
| get /create-room | {roomId} |
Socket: include playerId
Channel: include roomId
| event | payload → reply (pushing) | message (receiving) |
|---|---|---|
| joined | {playerId, playerName, roomId, players: [ {playerId, playerName, state} ], started, round} | |
| ready | null → null | {playerId, playerName} |
| start_game | ||
| start_round | ||
| new_guess | {guess} → {result, allFinished, row} | {row, ****playerId, playerName} |
| finish | {playerId, playerName, result} | |
| end_round | {gameOver, scores: {playerId: score}, word} |