From 1b9703c99d3e754a7d2e70ded05e16750a4528dd Mon Sep 17 00:00:00 2001 From: Jason Hatchett Date: Fri, 5 Dec 2014 11:17:22 -0600 Subject: [PATCH 1/2] My changes --- lib/library_plus/user_repo.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/library_plus/user_repo.rb b/lib/library_plus/user_repo.rb index ef6ee87c..45008523 100644 --- a/lib/library_plus/user_repo.rb +++ b/lib/library_plus/user_repo.rb @@ -14,8 +14,10 @@ def self.find(db, user_data) def self.save(db, user_data) if user_data['id'] # TODO: Update SQL statement + db.exec_params("UPDATE users SET name = $2 WHERE id= $1 ",[user_data["id"],user_data[:name]]) else # TODO: Insert SQL statement + db.exec_params("INSERT INTO users (name) VALUES ($1)",[user_data[:name]]) end end From d690c02343233dd2557e4fbed592b9cc469325ce Mon Sep 17 00:00:00 2001 From: Jason Hatchett Date: Mon, 8 Dec 2014 13:38:00 -0600 Subject: [PATCH 2/2] End of Library Plus --- lib/library_plus.rb | 21 +++++++++++++--- lib/library_plus/book_repo.rb | 47 ++++++++++++++++++++++++++++++++++- lib/library_plus/user_repo.rb | 9 +++++-- server.rb | 45 +++++++++++++++++++++++++++++++++ views/books/index.erb | 17 +++++++++++++ views/books/show.erb | 20 +++++++++++++++ views/index.erb | 4 +++ views/users/index.erb | 15 +++++++++++ 8 files changed, 171 insertions(+), 7 deletions(-) create mode 100644 views/books/index.erb create mode 100644 views/books/show.erb create mode 100644 views/users/index.erb diff --git a/lib/library_plus.rb b/lib/library_plus.rb index 9148018a..b38064ad 100644 --- a/lib/library_plus.rb +++ b/lib/library_plus.rb @@ -8,24 +8,37 @@ def self.create_db_connection(dbname) def self.clear_db(db) db.exec <<-SQL DELETE FROM users; - /* TODO: Clear rest of the tables (books, etc.) */ + DELETE FROM books; + DELETE FROM checkouts; SQL end def self.create_tables(db) db.exec <<-SQL - CREATE TABLE users( + CREATE TABLE IF NOT EXISTS users( id SERIAL PRIMARY KEY, name VARCHAR ); - /* TODO: Create rest of the tables (books, etc.) */ + CREATE TABLE IF NOT EXISTS books( + id SERIAL PRIMARY KEY, + title VARCHAR, + author VARCHAR + ); + CREATE TABLE IF NOT EXISTS checkouts( + id SERIAL PRIMARY KEY, + user_id VARCHAR, + book_id VARCHAR, + status VARCHAR DEFAULT 'checked_out', + created_at TIMESTAMP + ); SQL end def self.drop_tables(db) db.exec <<-SQL DROP TABLE users; - /* TODO: Drop rest of the tables (books, etc.) */ + DROP TABLE books; + DROP TABLE checkouts; SQL end end diff --git a/lib/library_plus/book_repo.rb b/lib/library_plus/book_repo.rb index 46409041..dbc2e28b 100644 --- a/lib/library_plus/book_repo.rb +++ b/lib/library_plus/book_repo.rb @@ -1 +1,46 @@ -# TODO +module Library + class BookRepo + + def self.index(db) + # Other code should not have to deal with the PG:Result. + # Therefore, convert the results into a plain array. + db.exec("SELECT * FROM books").to_a + end + + def self.show(db, book_id) + # TODO: Insert SQL statement + res = db.exec_params("SELECT * FROM books WHERE id = $1",[book_id]) + return res.first + end + + def self.show_checkouts(db, book_id) + # TODO: Insert SQL statement + res = db.exec_params("SELECT * FROM checkouts WHERE book_id = $1",[book_id]) + return res.first + end + + def self.checkout(db, book_id, user_id) + exist = db.exec_params("SELECT * FROM checkouts WHERE book_id = $1",[book_id]) + if (exist.first == nil) + db.exec_params("INSERT INTO checkouts (book_id, user_id) VALUES ($1, $2)", [book_id, user_id]) + return 'added' + else + db.exec_params("UPDATE checkouts SET status = 'checked_out' WHERE book_id = $1", [book_id]) + return 'added' + end + end + + def self.create(db, book_data) + # TODO: Insert SQL statement + db.exec_params("INSERT INTO books (title, author) VALUES ($1, $2)",[ book_data['title'], book_data['author'] ]) + res = db.exec_params("SELECT * FROM books WHERE title = $1",[book_data['title']]) + return res.first + end + + def self.destroy(db, book_id) + # TODO: Delete SQL statement + db.exec_params("DELETE FROM books WHERE id= $1 ",[book_id]) + end + + end +end \ No newline at end of file diff --git a/lib/library_plus/user_repo.rb b/lib/library_plus/user_repo.rb index 0f586333..f788e8b1 100644 --- a/lib/library_plus/user_repo.rb +++ b/lib/library_plus/user_repo.rb @@ -9,20 +9,25 @@ def self.all(db) def self.find(db, user_id) # TODO: Insert SQL statement + res = db.exec_params("SELECT * FROM users WHERE id = $1",[user_id]) + return res.first end def self.save(db, user_data) if user_data['id'] # TODO: Update SQL statement - db.exec_params("UPDATE users SET name = $2 WHERE id= $1 ",[user_data["id"],user_data[:name]]) + db.exec_params("UPDATE users SET name = $2 WHERE id= $1 ",[user_data["id"],user_data['name']]) else # TODO: Insert SQL statement - db.exec_params("INSERT INTO users (name) VALUES ($1)",[user_data[:name]]) + db.exec_params("INSERT INTO users (name) VALUES ($1)",[user_data['name']]) end + res = db.exec_params("SELECT * FROM users WHERE name = $1",[user_data['name']]) + return res.first end def self.destroy(db, user_id) # TODO: Delete SQL statement + db.exec_params("DELETE FROM users WHERE id= $1 ",[user_id]) end end diff --git a/server.rb b/server.rb index 91a87bcd..83a8cf02 100644 --- a/server.rb +++ b/server.rb @@ -6,3 +6,48 @@ get '/' do erb :index end + +get '/users' do + db = Library.create_db_connection('library_dev') + @users = Library::UserRepo.all(db) + erb :"users/index" +end + +post '/users' do + db = Library.create_db_connection('library_dev') + Library::UserRepo.save(db,{ 'name' => params[:title] }) + @users = Library::UserRepo.all(db) + erb :"users/index" +end + +get '/books' do + db = Library.create_db_connection('library_dev') + @books = Library::BookRepo.index(db) + erb :"books/index" +end + +post '/books' do + db = Library.create_db_connection('library_dev') + Library::BookRepo.create(db,{ 'title' => params[:title], 'author' => params[:author] }) + @books = Library::BookRepo.index(db) + erb :"books/index" +end + +get '/books/:show' do + db = Library.create_db_connection('library_dev') + @users = Library::UserRepo.all(db) + @book = Library::BookRepo.show(db, params[:show]) + @status= Library::BookRepo.show_checkouts(db, params[:show]) + if (@status == nil) + @status = {'status' => 'available'} + end + + erb :"books/show" +end + +post '/books/:id/checkout' do + db = Library.create_db_connection('library_dev') + Library::BookRepo.checkout(db,params[:id], params[:user_id]) + @books = Library::BookRepo.index(db) + erb :"books/index" +end \ No newline at end of file diff --git a/views/books/index.erb b/views/books/index.erb new file mode 100644 index 00000000..8cbd6714 --- /dev/null +++ b/views/books/index.erb @@ -0,0 +1,17 @@ +

All Books

+ +<% +@books.each do |x| +%> + + +<% end %> + +
+

Register New Book

+ + + + + +
\ No newline at end of file diff --git a/views/books/show.erb b/views/books/show.erb new file mode 100644 index 00000000..5d1607a9 --- /dev/null +++ b/views/books/show.erb @@ -0,0 +1,20 @@ +

Book Page

+ +

Title: <%= @book['title'] %>

+ +

Author: <%= @book['author'] %>

+ +<%if (@status['status'] == "checked_out")%> +

Currently Checked Out

+<%else%> +

Available

+<%end%> + +
+ + +
\ No newline at end of file diff --git a/views/index.erb b/views/index.erb index aba3235d..dcb92d49 100644 --- a/views/index.erb +++ b/views/index.erb @@ -1,3 +1,7 @@

The Library Plus System

Welcome to your freedom!

+ +Manage Users + +Manage Books \ No newline at end of file diff --git a/views/users/index.erb b/views/users/index.erb new file mode 100644 index 00000000..f0429ca0 --- /dev/null +++ b/views/users/index.erb @@ -0,0 +1,15 @@ +

All Users

+ +<% +@users.each do |x| +%> + + +<% end %> + +
+

Register New User

+ + + +