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