Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
08cadfa
Edit .gitignore file
bashmb Dec 11, 2014
05ae417
Test of collaborative push and pull
charlesmilam Dec 11, 2014
749dc73
delete test.txt
bashmb Dec 11, 2014
9a4a795
Created initial files.
bashmb Dec 11, 2014
99fff70
Create shops_repo.rb
bashmb Dec 11, 2014
dfb8be6
Add methods all, find and find_by_name
charlesmilam Dec 11, 2014
ec11daf
Modify methods all, name to correct spelling errors.
charlesmilam Dec 11, 2014
79e5c95
Add methods all, find, find_by_name
charlesmilam Dec 11, 2014
0ba0e66
Modify names
charlesmilam Dec 11, 2014
f691a3d
Modify to correct poor typing on charles' part.
charlesmilam Dec 11, 2014
e786ad3
Add configure method for enabling sessions, and rack flash.
charlesmilam Dec 12, 2014
9ba54d0
Modify module name
charlesmilam Dec 12, 2014
9998ea5
Modify module name.
charlesmilam Dec 12, 2014
cd5ed6f
Add requires and method create_db_connection
charlesmilam Dec 12, 2014
e906012
Modify paths for required files.
charlesmilam Dec 12, 2014
615ed47
Modify endpoint / to attempt to grab user. Errors.
charlesmilam Dec 12, 2014
9bc799b
Reset server.rb
bashmb Dec 12, 2014
0d8aca6
Continue to update server connection file.
bashmb Dec 12, 2014
c40db7e
Building revised user object.
bashmb Dec 12, 2014
0207c3a
Correct build_user method
bashmb Dec 12, 2014
8032a68
Modified method build_user in pets_repo
bashmb Dec 12, 2014
24dafd7
Fix login.
bashmb Dec 12, 2014
7e88dd4
Maringal functionality. To-do: sign in and session work.
bashmb Dec 12, 2014
5125beb
Correct sign-in issue in server.rb
bashmb Dec 13, 2014
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
.bundle
vendor/bundle
.DS_Store
.gems
Gemfile
Gemfile.lock
12 changes: 12 additions & 0 deletions lib/pet-shop-server/petshop.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
require 'pg'

require_relative 'repos/pets_repo.rb'
require_relative 'repos/shops_repo.rb'
require_relative 'repos/users_repo.rb'
#pet-shop-server

module PetShopServer
def self.create_db_connection(dbname)
PG::Connection.new(dbname: dbname)
end
end
97 changes: 97 additions & 0 deletions lib/pet-shop-server/repos/pets_repo.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
module PetShopServer
class PetsRepo
def self.all db
sql = %q[select * from pets]
result = db.exec(sql)
result.entries
end

def self.find db, id
sql = %[select * from pets where id = $1]
result = db.exec(sql, [id])
result.first
end

def self.build_user db, id
# sql = %[select * from pets where id = $1]
# result = db.exec(sql, [id])
catSql = %Q[SELECT
users.username,
users.password,
pets.id,
pets.name,
pets.image_url,
pets.happiness,
pets.adopted,
pets.shop_id,
pets.userid,
pets.species
FROM
public.pets,
public.users
WHERE
users.id = $1 AND
users.id = pets.userid AND
pets.species = 'cat' ]
dogSql = %Q[SELECT
users.username,
users.password,
pets.id,
pets.name,
pets.image_url,
pets.happiness,
pets.adopted,
pets.shop_id,
pets.userid,
pets.species
FROM
public.pets,
public.users
WHERE
users.id = $1 AND
users.id = pets.userid AND
pets.species = 'dog' ]
catResult = db.exec(catSql, [id])
dogResult = db.exec(dogSql, [id])

$real_user = {}
$real_user['id'] = catResult.first['id']
$real_user['username'] = catResult.first['username']
$real_user['cats'] = []
# push cats
catResult.each do |cat|
push_object = {
'shopId' => cat['shop_id'],
'name' => cat['name'],
'imageUrl' => cat['image_url'],
'adopted' => cat['adopted'],
'happiness' => cat['happiness']
}

$real_user['cats'] << push_object
end

# push dogs
$real_user['dogs'] = []
dogResult.each do |dog|
push_object = {
'shopId' => dog['shop_id'],
'name' => dog['name'],
'imageUrl' => dog['image_url'],
'adopted' => dog['adopted'],
'happiness' => dog['happiness']
}
$real_user['dogs'] << push_object


end

$real_user

end

def self.find_by_name db, name
sql = %[select * from pets]
end
end
end
15 changes: 15 additions & 0 deletions lib/pet-shop-server/repos/shops_repo.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
module PetShopServer
class ShopsRepo
def self.all db
sql = %q[SELECT * FROM petshops]
result = db.exec(sql)
result.entries
end

def self.find db, id
sql = %q[SELECT * FROM petshops WHERE id = $1]
result = db.exec(sql, [id])
result.first
end
end
end
21 changes: 21 additions & 0 deletions lib/pet-shop-server/repos/users_repo.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
module PetShopServer
class UsersRepo
def self.all db
sql = %q[select * from users]
result = db.exec(sql)
result.entries
end

def self.find db, id
sql = %[select * from users where id = $1]
result = db.exec(sql, [id])
result.first
end

def self.find_by_name db, name
sql = %[select * from users WHERE username = $1]
result = db.exec(sql, [name])
result.first
end
end
end
88 changes: 63 additions & 25 deletions server.rb
Original file line number Diff line number Diff line change
@@ -1,22 +1,49 @@
require 'sinatra'
require 'sinatra/reloader'
require 'rest-client'
require 'pg'
require 'json'

require_relative 'lib/pet-shop-server/petshop.rb'

configure do
enable :sessions
end

before do

if session[:user_id]
# TODO: Grab user from database
db = PetShopServer.create_db_connection 'petshop'
@current_user = PetShopServer::PetsRepo.build_user(db, session[:user_id])
# @current_user = PetshopServer::PetsRepo.find
end
end

# before '/shops/*' do
# status(401) unless @current_user
# end
# #
# This is our only html view...
#
get '/' do
if session[:user_id]
# TODO: Grab user from database
@current_user = $sample_user
end
# db = PetShopServer.create_db_connection 'petshop'
# @current_user = PetShopServer::UsersRepo.find(db, session[:user_id])

# puts PetShopServer::PetsRepo.build_user(db, 999)
@real_user.to_json
erb :index
end

get '/logout' do
session.clear
redirect '/'
end


# #
# ...the rest are JSON endpoints
#
#UsersRepo
get '/shops' do
headers['Content-Type'] = 'application/json'
RestClient.get("http://pet-shop.api.mks.io/shops")
Expand All @@ -28,14 +55,21 @@
username = params['username']
password = params['password']

db = PetShopServer.create_db_connection 'petshop'
user = PetShopServer::UsersRepo.find_by_name(db, username)

# TODO: Grab user by username from database and check password
user = { 'username' => 'alice', 'password' => '123' }

# user = { 'username' => 'alice', 'password' => '123' }

if password == user['password']
headers['Content-Type'] = 'application/json'
# TODO: Return all pets adopted by this user
# TODO: Set session[:user_id] so the server will remember this user has logged in
$sample_user.to_json
# @real_user = PetShopServer::PetsRepo.build_user(db, user['id'])

session["user_id"] = user['id']
user.to_json
else
status 401
end
Expand All @@ -52,13 +86,17 @@
end

put '/shops/:shop_id/cats/:id/adopt' do
headers['Content-Type'] = 'application/json'
shop_id = params[:shop_id]
id = params[:id]
# TODO: Grab from database instead
RestClient.put("http://pet-shop.api.mks.io/shops/#{shop_id}/cats/#{id}",
{ adopted: true }, :content_type => 'application/json')
# TODO (after you create users table): Attach new cat to logged in user
if @current_user
headers['Content-Type'] = 'application/json'
shop_id = params[:shop_id]
id = params[:id]
# TODO: Grab from database instead
RestClient.put("http://pet-shop.api.mks.io/shops/#{shop_id}/cats/#{id}",
{ adopted: true }, :content_type => 'application/json')
# TODO (after you create users table): Attach new cat to logged in user
else
status 401
end
end


Expand All @@ -83,14 +121,14 @@
end


$sample_user = {
id: 999,
username: 'alice',
cats: [
{ shopId: 1, name: "NaN Cat", imageUrl: "http://i.imgur.com/TOEskNX.jpg", adopted: true, id: 44 },
{ shopId: 8, name: "Meowzer", imageUrl: "http://www.randomkittengenerator.com/images/cats/rotator.php", id: 8, adopted: "true" }
],
dogs: [
{ shopId: 1, name: "Leaf Pup", imageUrl: "http://i.imgur.com/kuSHji2.jpg", happiness: 2, id: 2, adopted: "true" }
]
}
# $sample_user = {
# id: 999,
# username: 'alice',
# cats: [
# { shopId: 1, name: "NaN Cat", imageUrl: "http://i.imgur.com/TOEskNX.jpg", adopted: true, id: 44 },
# { shopId: 8, name: "Meowzer", imageUrl: "http://www.randomkittengenerator.com/images/cats/rotator.php", id: 8, adopted: "true" }
# ],
# dogs: [
# { shopId: 1, name: "Leaf Pup", imageUrl: "http://i.imgur.com/kuSHji2.jpg", happiness: 2, id: 2, adopted: "true" }
# ]
# }
4 changes: 3 additions & 1 deletion views/index.erb
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@
<link rel="stylesheet" type="text/css" href="/css/pets.css">
</head>
<body>

<center>
<a href='/logout'>Log out</a>
</center>
<div id="app">
<h4>Loading...</h4>
</div>
Expand Down