diff --git a/lib/library_plus.rb b/lib/library_plus.rb index 9148018a..ce07d82b 100644 --- a/lib/library_plus.rb +++ b/lib/library_plus.rb @@ -14,11 +14,11 @@ def self.clear_db(db) 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.) */ + # TODO: Create rest of the tables (books, etc.) SQL end diff --git a/lib/library_plus/book_repo.rb b/lib/library_plus/book_repo.rb index 46409041..721ed91f 100644 --- a/lib/library_plus/book_repo.rb +++ b/lib/library_plus/book_repo.rb @@ -1 +1,54 @@ # TODO +module Library + class BookRepo + + def self.all(db) + db.exec("SELECT * FROM books").to_a + end + + def self.find(db, book_id) + db.exec("SELECT * FROM books WHERE id = $1", [book_id]).to_a[0] + end + + def self.get_status(db, book_id) + db.exec("SELECT status from checkouts where bookid = $1", [book_id]).to_a[0] + end + + def self.getborrower(db, book_id) + db.exec("SELECT name from users u join checkouts c on c.userid = u.id join books b on c.bookid = b.id where c.bookid = $1", [book_id]).to_a[0] + end + + #Libary::UserRepo.save(db, {'id' => "1"}) + def self.save(db, book_data) + if book_data['id'] + # TODO: Update SQL statement + db.exec("UPDATE books SET title = $1, author = $2 WHERE id = $3 returning *", [book_data['title'], book_data['author'], book_data['id']]).to_a[0] + else + # TODO: Insert SQL statement + newbook = db.exec("INSERT INTO books (title, author) VALUES ($1, $2) returning *", [book_data['title'], book_data['author']]).to_a[0] + Library::BookRepo.addtocheckouts(db, newbook['id']) + end + end + + def self.addtocheckouts(db, book_id) + db.exec("INSERT INTO checkouts (bookid, status, time) values ($1, 'available', $2)",[book_id, DateTime.now]) + end + + def self.checkout(db, user_id, book_id) + @findbook = Library::BookRepo.get_status(db, book_id) + if @findbook["status"] == 'available' + db.exec("UPDATE checkouts SET status = 'checked out', userid = $1, time = $2 where bookid = $3",[user_id, DateTime.now, book_id]) + end + end + + def self.return(db, book_id) + db.exec("UPDATE checkouts SET status = 'available', userid = null, time = $1 where bookid = $2", [DateTime.now, book_id]) + end + + def self.destroy(db, user_id) + # TODO: Delete SQL statement + end + + end +end + diff --git a/lib/library_plus/user_repo.rb b/lib/library_plus/user_repo.rb index f293fe6a..9c6bf0e3 100644 --- a/lib/library_plus/user_repo.rb +++ b/lib/library_plus/user_repo.rb @@ -1,3 +1,6 @@ +# Library::UserRepo.all(db) +#Library::BookRepo.all(db) + module Library class UserRepo @@ -9,13 +12,18 @@ def self.all(db) def self.find(db, user_id) # TODO: Insert SQL statement + db.exec("SELECT * FROM users WHERE id = $1", [user_id]).to_a[0] end + #Libary::UserRepo.save(db, {'id' => "1"}) def self.save(db, user_data) if user_data['id'] # TODO: Update SQL statement + db.exec("UPDATE users SET name = $1 WHERE id = $2 returning *", [user_data['name'], user_data['id']]).to_a[0] else # TODO: Insert SQL statement + db.exec("INSERT INTO users (name) VALUES ($1) returning *", [user_data['name']]).to_a[0] + end end diff --git a/server.rb b/server.rb index 91a87bcd..ba7465ff 100644 --- a/server.rb +++ b/server.rb @@ -6,3 +6,51 @@ 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,params) + redirect to('/users') +end + +get '/books' do + db = Library.create_db_connection('library_dev') + @books = Library::BookRepo.all(db) + erb :"books/index" +end + +post '/books' do + db = Library.create_db_connection('library_dev') + book = Library::BookRepo.save(db, params) + redirect to("/books") +end + +get '/books/:id' do + db = Library.create_db_connection('library_dev') + @book = Library::BookRepo.find(db,params[:id]) + @bookstat = Library::BookRepo.get_status(db, params[:id]) + @borrower = nil + if @bookstat["status"] == "checked out" + @borrower = Library::BookRepo.getborrower(db, params[:id]) + end + @users = Library::UserRepo.all(db) + erb :"books/show" +end + +post '/books/:id/checkout' do + db = Library.create_db_connection('library_dev') + Library::BookRepo.checkout(db,params["userid"], params["id"]) + redirect to("/books/"+params[:id]) +end + +post '/books/:id/return' do + db = Library.create_db_connection('library_dev') + Library::BookRepo.return(db, params[:id]) + redirect to("/books/"+params[:id]) +end \ No newline at end of file diff --git a/spec/repos/user_repo_spec.rb b/spec/repos/user_repo_spec.rb index 44d0278b..c7490a6f 100644 --- a/spec/repos/user_repo_spec.rb +++ b/spec/repos/user_repo_spec.rb @@ -38,12 +38,13 @@ def user_count(db) expect(user['name']).to eq "Alice" end - xit "finds users" do + it "finds users" do user = Library::UserRepo.save(db, { 'name' => "Alice" }) retrieved_user = Library::UserRepo.find(db, user['id']) expect(retrieved_user['name']).to eq "Alice" end + xit "updates users" do user1 = Library::UserRepo.save(db, { 'name' => "Alice" }) user2 = Library::UserRepo.save(db, { 'id' => user1['id'], 'name' => "Alicia" }) diff --git a/views/books/index.erb b/views/books/index.erb new file mode 100644 index 00000000..58901d65 --- /dev/null +++ b/views/books/index.erb @@ -0,0 +1,30 @@ + +
+Book status:
+ <% if @bookstat["status"] == "available" %> +This book is available.
+Select a user to check out this book to:
+ + <% elsif @bookstat["status"] == "checked out" %> +This book has been checked out by <%= @borrower["name"] %>.
+ <% end %> + Back to home. + + \ No newline at end of file diff --git a/views/index.erb b/views/index.erb index aba3235d..eef783a7 100644 --- a/views/index.erb +++ b/views/index.erb @@ -1,3 +1,22 @@ -Welcome to your freedom!
+View all users | View all booksFind a book: