Pollo
Documentation for Pollo
General
Generate a group code
GET
http://pollo-backend.cornellappdev.com/api/v2/generate/code/
Headers
Authentication
string
'Bearer ' + accessToken
{
success: true,
data: {
code: string
}
}
Drafts
type Draft {
id: number,
createdAt?: number,
text: string,
options: string[]
}
Get all drafts for a user
GET
http://pollo-backend.cornellappdev.com/api/v2/drafts/
Headers
Authentication
string
'Bearer ' + accessToken
{
success: true,
data: List<Draft>
}
Create a draft
POST
http://pollo-backend.cornellappdev.com/api/v2/drafts/
Query Parameters
text
string
options
array
string[]
Headers
Authentication
string
'Bearer ' + accessToken
{
success: true,
data: <Draft>
}
Update a draft
PUT
http://pollo-backend.cornellappdev.com/api/v2/drafts/:id
Path Parameters
id
string
Query Parameters
text
string
options
array
string[]
Headers
Authentication
string
'Bearer ' + accessToken
{
success: true,
data: <Draft>
}
Delete a draft
DELETE
http://pollo-backend.cornellappdev.com/api/v2/drafts/:id
Path Parameters
id
string
Headers
Authentication
string
'Bearer ' + accessToken
{
success: true,
data: null
}
Groups
type Group {
id: number,
name: string,
code: string,
updatedAt: number,
isLive: boolean
}
Create a group
POST
http://pollo-backend.cornellappdev.com/api/v2/sessions/
Query Parameters
name
string
code
string
Headers
Authentication
string
'Bearer ' + accessToken
{
success: true,
data: <Group>
}
Get a group
GET
http://pollo-backend.cornellappdev.com/api/v2/sessions/:id
Path Parameters
id
string
Headers
Authentication
string
'Bearer ' + accessToken
{
success: true,
data: <Group>
}
Get all groups
GET
http://pollo-backend.cornellappdev.com/api/v2/sessions/all/:role
Path Parameters
role
string
If role is member
, this will return all groups you are in. If role is admin
, this will return all groups you are an admin of.
Headers
Authorization
string
'Bearer ' + accessToken
{
success: true,
data: List<Group>
}
Update a group
PUT
http://pollo-backend.cornellappdev.com/api/v2/sessions/:id/
Path Parameters
id
string
Query Parameters
name
string
Headers
Authorization
string
'Bearer ' + accessToken
{
success: true,
data: <Group>
}
Delete a group
DELETE
http://pollo-backend.cornellappdev.com/api/v2/sessions/:id/
Path Parameters
id
string
Headers
Authorization
string
'Bearer ' + accessToken
{
success: true,
data: null
}
Leave a group
DELETE
http://pollo-backend.cornellappdev.com/api/v2/sessions/:id/members/
Path Parameters
id
string
Headers
Authorization
string
'Bearer ' + accessToken
{
success: true,
data: null
}
Get members
GET
http://pollo-backend.cornellappdev.com/api/v2/sessions/:id/members/
Path Parameters
id
string
Headers
Authorization
string
'Bearer ' + accessToken
{
success: true,
data: List<User>
}
Get admins
GET
http://pollo-backend.cornellappdev.com/api/v2/sessions/:id/admins/
Path Parameters
id
string
Headers
Authorization
string
'Bearer ' + accessToken
{
success: true,
data: List<User>
}
Add members
POST
http://pollo-backend.cornellappdev.com/api/v2/sessions/:id/members/
Path Parameters
id
string
Query Parameters
memberIDs
array
int[]
Headers
Authorization
string
'Bearer ' + accessToken
{
success: true,
data: null
}
Remove members
DELETE
http://pollo-backend.cornellappdev.com/api/v2/sessions/:id/members/
Path Parameters
id
string
Query Parameters
memberIDs
array
int[]
Headers
Authorization
string
'Bearer ' + accessToken
{
success: true,
data: null
}
Add admins
POST
http://pollo-backend.cornellappdev.com/api/v2/sessions/:id/admins/
Path Parameters
id
string
Query Parameters
adminIDs
array
int[]
Headers
Authorization
string
'Bearer ' + accessToken
{
success: true,
data: null
}
Remove admins
PUT
http://pollo-backend.cornellappdev.com/api/v2/sessions/:id/admins/
Path Parameters
id
string
Query Parameters
adminIDs
array
int[]
Headers
Authorization
string
'Bearer ' + accessToken
{
success: true,
data: null
}
Polls
type Poll {
id: number,
text: string,
results: json,
shared: boolean,
type: string, // MULTIPLE_CHOICE OR FREE_RESPONSE
answer: ?string[],
correctAnswer: string
}
Create a poll
POST
http://pollo-backend.cornellappdev.com/api/v2/sessions/:id/polls/
Path Parameters
id
string
Headers
Authorization
string
'Bearer ' + accessToken
Request Body
type
string
text
string
results
object
json
shared
boolean
{
success: true,
data: <Poll>
}
Get a poll
GET
http://pollo-backend.cornellappdev.com/api/v2/polls/:id/
Path Parameters
id
string
Headers
Authorization
string
'Bearer ' + accessToken
{
success: true,
data: <Poll>
}
Get all polls for a group sorted by date (ascending)
GET
http://pollo-backend.cornellappdev.com/api/v2/sessions/:id/polls/
Admin user will receive all polls
Member user will receive all polls but with poll results hidden (set to {}
) if poll is unshared
Path Parameters
id
string
Headers
Authorization
string
'Bearer ' + accessToken
{
success: true,
data: [
{
date: "1551846479",
polls: [
{
"id": 9,
"text": "question!",
"results": {},
"shared": true,
"type": "MULTIPLE_CHOICE",
"answer": ["A"]
}
]
}
]
}
Update a poll
PUT
http://pollo-backend.cornellappdev.com/api/v2/polls/:id/
Path Parameters
id
string
Headers
Authorization
string
'Bearer ' + accessToken
Request Body
text
string
results
string
shared
boolean
{
success: true,
data: <Poll>
}
Delete a poll
DELETE
http://pollo-backend.cornellappdev.com/api/v2/polls/:id/
Path Parameters
id
string
Headers
Authorization
string
'Bearer ' + accessToken
{
success: true,
data: null
}
Questions
type Question {
id: number,
createdAt?: number,
text: string
}
Create a question
POST
http://pollo-backend.cornellappdev.com/api/v2/sessions/:id/questions/
Path Parameters
id
string
group id
Headers
Authorization
string
'Bearer ' + accessToken
Request Body
text
string
{
success: true,
data: <Question>
}
Get a question
GET
http://pollo-backend.cornellappdev.com/api/v2/questions/:id/
Path Parameters
id
string
question id
Headers
Authorization
string
'Bearer ' + accessToken
{
success: true,
data: <Question>
}
Get all questions for a group
GET
http://pollo-backend.cornellappdev.com/api/v2/sessions/:id/questions/
Path Parameters
id
string
group id
Headers
Authorization
string
'Bearer ' + accessToken
{
success: true,
data: List<Question>
}
Get all questions for a group sorted by date (ascending)
GET
http://pollo-backend.cornellappdev.com/api/v2/sessions/:id/questions/date/
Path Parameters
id
string
group id
Headers
Authorization
string
'Bearer ' + accessToken
{
success: true,
data: [
{
date: "1551846479",
questions: [
{
id: string,
text: string
}
]
}
]
}
Update a question
PUT
http://pollo-backend.cornellappdev.com/api/v2/questions/:id/
Path Parameters
id
string
question id
Headers
Authorization
string
'Bearer ' + accessToken
Request Body
text
string
{
success: true,
data: <Question>
}
Delete a question
DELETE
http://pollo-backend.cornellappdev.com/api/v2/questions/:id/
Path Parameters
id
string
question id
Headers
Authorization
string
'Bearer ' + accessToken
{
success: true,
data: null
}
Users
type User {
id: number,
name: string,
netID: string
}
Get me
GET
http://pollo-backend.cornellappdev.com/api/v2/users/
Headers
Authorization
string
'Bearer ' + accessToken
{
success: true,
data: <User>
}
Authentication
type UserSession {
accessToken: string,
refreshToken: string,
sessionExpiration: number,
isActive: boolean
}
Authenticate mobile
POST
http://pollo-backend.cornellappdev.com/api/v2/auth/mobile
Request Body
idToken
string
{
success: true,
data: <UserSession>
}
Refresh session
POST
http://pollo-backend.cornellappdev.com/api/v2/auth/refresh/
Headers
Authorization
string
'Bearer ' + refreshToken
{
success: true,
data:<UserSession>
}
Socket Protocol
Built with Socket.io. Documentation found here.
Socket Connection
Connect (default socket) Make sure to visit /join/session/
before joining a socket because this will create the socket if not created yet. You will need to emit userType
on connect to socket.
Disconnect (default socket)
Group
Rest
Method
Body
URL
Response
Description
POST
code: string
and name?: string
/start/session/
Group
- The group that was created, use id
as a namespace
User sends to start a group
POST
id: number
or code: string
/join/session/
Group
User sends to join a group
Socket
To Server
Message
Body
Description
server/poll/start
Poll
object without id
Admin sends to start a poll
server/poll/end
empty
Admin sends to stop a poll
server/poll/results
empty
Admin sends to share results
server/poll/tally
Answer
object without id
User sends to reveal their chosen response to the server
server/poll/upvote
{ answerID,
googleID }
User sends to upvote an answer
server/poll/delete
pollID
*same as db ID
Admin sends to delete saved poll
server/poll/deleteLive
empty
Admin sends to delete live poll
To Student
Message
Body
Description
user/poll/start
{ poll: Poll
object }
User receives to display a poll
user/poll/end
{ poll: Poll
object }
User receives when poll has ended
user/poll/results/
CurrentState
object
User receives when if admin decides to share results
user/poll/results/live
CurrentState
object
User receives when there is a live FR question when user first joins socket
user/count
{ count: user count
}
User receives number of live users in socket
user/poll/delete
pollID
*same as db ID
User receives when poll is deleted
user/poll/deleteLive
empty
User receives when live poll is deleted
user/answer/success
empty
User receives when FR answer is successfully registered (pass filter)
user/answer/filter
{ text: string
, filter: string array
}
User receives when FR answer is not registered (doesn't pass filter)
To Admin
Message
Body
Description
admin/poll/start
{ poll: Poll
object }
Admin receives current poll upon entry (if there is one)
admin/poll/updateTally
CurrentState
object
Admin receives state of poll i.e. tallies
admin/poll/ended
{ poll: Poll
object }
Admin receives when poll has been ended
user/count
{ count: user count
}
User receives number of live users in socket
Type Definitions
Current State
type CurrentState {
poll: number,
results: {},
answers: {}, // google id to answer choice for MC and array of answer ids for FR
upvotes: {} // google id to array of answer ids
}
Example of results. Note: answers is a mapping of googleID to selected option.
results = {'A': {'text': 'blue', 'count': 1}, 'B': {'text': 'red', 'count': 2}}
// FR example of answer id to answer
results = {1: {'text': 'blue', 'count': 0}, 2: {'text': 'red', 'count': 2}}
Answer
type Answer {
id: id,
googleID: string,
poll: id,
choice: string,
text: string
}
For MC: choice
should be C
and text should be Saturn
.
For FR: choice
and text
should be Saturn
.
Poll
type Poll {
id: number, // id doesn't correspond to poll id when saved in db
text: string,
type: string,
options: ?string[],
shared: boolean,
correctAnswer: string
}
options
is the text of the choices. If the choices are
A) Blue B) Red C) Green D)
where D
is a blank option, the choices would be:
options = ['Blue', 'Red', 'Green', '']
Last updated