Skip to content

Repository files navigation

TIY Hackathon

Ruby on Rails

This application requires:

  • Ruby 2.1.5
  • Rails 4.2.0

Learn more about Installing Rails.

ROUTING

USER ROUTING

To create a new user

POST /users

 JSON requested: {user: {username: string, email: string, password: string}}`
if the user is successfully created NOTE: THE USER IS NOT SIGNED IN AFTER REGISTRATION
JSON returned: {user: {email: string, id: string, authentication-token: string}}, status: :created (status 201)
else
status: {error: {errors thrown}}, status: :ok

To view a list of all users

GET /users

if authenticated
JSON returned: {users: {user: {email: string, id: integer, total_points: integer}... for each user}}, status: :ok (status 200)

To view an individual user's information

GET /users/:id

 JSON returned: {user: {username: string, email: string, id: integer, game_id: nil OR integer}}, status: :ok (status 200)
else
JSON returned: {error: {errors thrown}}, status: :unprocessable_entity (status 422)

To sign in a user

POST /users/sign_in

 JSON requested: {user: {email: string, password: string}}
return if successful
JSON returned: {user: {email: string, id: string, total_points: integer, game_id: nil OR integer}}, status: :ok (status 200)
else
JSON returned: {error: {errors thrown}}, status: unprocessable_entity (status 422)

GAME ROUTING

To create a game

POST /games/new

 JSON requested: {game: {center_lat: up to 6 decimal places, center_long: up to 6 decimal places, radius: up to 3 decimal places, starts_at: string (this will be a time... example: 5:00pm), duration: integer}}
if successful:
JSON returned: {game: {center_lat: up to 6 decimal places, center_long: up to 6 decimal places, radius: up to 3 decimal places, starts_at: timestamp, game_duration: integer}}, status: :created (status 201)
else
JSON returned: {error: {list of errors thrown}}, status: :unprocessable_entity (status 422)

To view an individual game (from PC)

GET /games/:id/admin

 JSON requested: only authentication_token
if authenticated
JSON returned: {game: {
center_lat: up to 6 decimal places, center_long: up to 6 decimal places, radius: up to 3 decimal places, starts_at: timestamp, ends_at: timestamp}, users: {
user: {
id: integer, email: string, username: string}
user: {
id: integer, email: string, username: string}
}
}
},
players: {
player: {
id: integer
score: integer
user_id: integer
game_id: integer},
player: {
id: integer
score: integer
user_id: integer
game_id: integer}
},
flags: {
flag: {
flag_id: integer,
player_id: integer,
flag_lat: decimal,
flag_long: decimal},
flag: {
flag_id: integer,
player_id: integer,
flag_lat: decimal,
flag_long: decimal}
}
} status: :ok (status 200)
else
JSON returned: {error: {errors thrown}}, status: :unprocessable_entity (status 422)

To View an Individual Game (from iOS)

GET /games/:id

 query params: only authentication_token
if authenticated
JSON returned: {game: {
center_lat: up to 6 decimal places, center_long: up to 6 decimal places, radius: up to 3 decimal places, starts_at: timestamp, ends_at: timestamp}, users: {
user: {
id: integer, email: string, username: string}
user: {
id: integer, email: string, username: string}
}
}
},
players: {
player: {
id: integer
score: integer
user_id: integer
game_id: integer},
player: {
id: integer
score: integer
user_id: integer
game_id: integer}
},
flags: {
flag: {
flag_id: integer,
player_id: integer,
flag_lat: decimal,
flag_long: decimal},
flag: {
flag_id: integer,
player_id: integer,
flag_lat: decimal,
flag_long: decimal}
}
} status: :ok (status 200)
else
JSON returned: {error: {errors thrown}}, status: :unprocessable_entity (status 422)

INVITATION ROUTING

To send Invitations to Users

POST /invitations

 JSON requested: {inviter_id (will be current user's ID): integer, invited_id: integer, game_id: integer}
if successful
JSON returned: {invitation: {inviter_id: integer, invited_id: integer, game_id: integer}}, status: :created (status 201)
else
JSON returned: {error: {all errors thrown}}, status: :unprocessable_entity (status 422)

iOS - To View All of User's Invitations

GET /invitations/users/:id

if the user has any invitations
JSON returned: {invitations: {
invitation: { inviter_id: integer
invited_id: integer (this is the current user)
game_id: integer}
invitation: { inviter_id: integer
invited_id: integer (this is the current user)
game_id: integer}
}
}, status: :ok (status 200)
else
JSON returned: {invitations: nil}, status: :ok (status 200)

iOS - To Accept an Invitation

POST /invitations/:id/accept

 JSON requested: {invitation: {inviter_id: integer, invited_id: integer, game_id: integer}}
if the game is joined successfully
JSON returned: {game: { center_lat: decimal,
center_long: decimal,
radius: decimal,
starts_at: timestamp,
ends_at: timestamp}
players: { user: {
id: integer, email: string, username: string},
user: {
id: integer, email: string, username: string}
}
}, status: :ok (status 200) else
JSON returned: {error: {errors thrown}}, status: :unprocessable_entity (status 422)

iOS - To Decline an Invitation

POST /invitations/:id/decline

 JSON requested: {invitation: {inviter_id: integer, invited_id: integer, game_id: integer}}
if the invitation was successfully declined/destroyed
JSON returned: {invitation: nil}, status: :ok (status 200)
else
JSON returned: {error: {errors thrown}}, status: :unprocessable_entity (status 422)

FLAG ROUTING

iOS - To Place a Flag

POST /flags

 JSON requested: {flag: {name: string, flag_lat: decimal, flag_long: decimal}}
if created
JSON returned: {flag: {name: string, flag_lat: decimal, flag_long: decimal, player_id: integer}}, status: :created (status 201)
else
JSON returned: {error: {errors thrown}}, status: :unprocessable_entity (status 422)

iOS - To Delete a Flag (before game starts)

DELETE /flags/:id

if successful
JSON returned: {flag: nil}, status: :ok (status 200)
else
JSON returned: {error: {errors thrown}}, status: :unprocessable_entity (status 422)

TAG ROUTING

iOS - To Tag a Flag

POST /tags

A user cannot tag their own flag! This will throw a Forbidden 403 error!
JSON requested: {tag: {flag_id: integer}}
if successful
JSON returned: {tag: {id: integer, flag_id: integer, player_id: integer}}, status: :created (status 201)
else
JSON returned: {error: {errors thrown}}, status: :unprocessable_entity (status 422)

About

back-end

Resources

Stars

0 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages