diff --git a/app.rb b/app.rb index 335d422..db0a307 100644 --- a/app.rb +++ b/app.rb @@ -57,6 +57,14 @@ class MakersBnb < Sinatra::Base Spaces.delete(params[:space_id]) redirect '/main_view' end + + + get '/review-request/:host_id' do + @space_id_array = Spaces.find_hosts_spaces(params[:host_id]) + # @user_id_array = Spaces.find_guest(space_id) + erb :host_review_requests + end + get '/booking/:space_id/book' do @space_id = params[:space_id] @current_space = Spaces.find(params[:space_id]) diff --git a/lib/spaces.rb b/lib/spaces.rb index 700d3c0..822270d 100644 --- a/lib/spaces.rb +++ b/lib/spaces.rb @@ -73,8 +73,36 @@ def self.delete_availability(availability_id) DatabaseConnection.query("DELETE FROM availability WHERE availability_id = ($1)", [availability_id]) end - - + def self.find_hosts_spaces(user_id) + ids = DatabaseConnection.query("SELECT space_id FROM spaces WHERE user_id = $1;", [user_id]) + ids.map { |id| id['space_id'] } + end + + def self.find_guest(space_id) + guest_ids = DatabaseConnection.query( + "SELECT request.user_id + FROM spaces + JOIN availability ON availability.space_id = spaces.space_id + JOIN request ON request.availability_id = availability.availability_id + WHERE spaces.space_id = ($1)", [space_id] + ) + guest_ids.map { |guest_id| guest_id['user_id']} + + end + + def self.find_guest_dates(space_id, user_id) + dates = DatabaseConnection.query( + "SELECT availability.dates + FROM spaces + JOIN availability ON availability.space_id = spaces.space_id + JOIN request ON request.availability_id = availability.availability_id + Where spaces.space_id = ($1) AND request.user_id = ($2)", [space_id, user_id] + ) + dates.map { |dates| dates['dates']} + + end + + end # def self.find(space_id) diff --git a/lib/user.rb b/lib/user.rb index 9972684..d853f0d 100644 --- a/lib/user.rb +++ b/lib/user.rb @@ -12,6 +12,18 @@ def initialize(user_id:, username:, email:, fullname:, pw:) @pw = pw end + def self.all + table = DatabaseConnection.query('SELECT * FROM users ORDER BY user_id ASC') + table.map do |user| + User.new(user_id: user['user_id'], username: user['username'], email: user['email'], + fullname: user['fullname'], pw: user['pw']) + end + end + + def self.find(user_id) + all.select { |user| user.user_id == user_id }.first + end + def self.add_user(username:, email:, fullname:, pw:) encrypted_password = BCrypt::Password.create(pw) diff --git a/spec/features/host_review_requests_spec.rb b/spec/features/host_review_requests_spec.rb new file mode 100644 index 0000000..dea5141 --- /dev/null +++ b/spec/features/host_review_requests_spec.rb @@ -0,0 +1,19 @@ +feature 'review requests for spaces owned by the user' do + scenario 'user approves a request' do + space_id = add_user_space_and_avaliability + + visit("/booking/#{space_id}/book") + + check '2022-01-02' + check '2022-01-03' + click_on 'Request' + + visit('/review-requests') + + check '2022-01-03' + click_on 'Approve' + + expect(page).to have_content('2022-01-02') + expect(page).not_to have_content('2022-01-03') + end +end \ No newline at end of file diff --git a/views/host_review_requests.erb b/views/host_review_requests.erb new file mode 100644 index 0000000..20affee --- /dev/null +++ b/views/host_review_requests.erb @@ -0,0 +1,37 @@ +