diff --git a/app/controllers/item_reviews_controller.rb b/app/controllers/item_reviews_controller.rb index 0faab64..fe419ca 100644 --- a/app/controllers/item_reviews_controller.rb +++ b/app/controllers/item_reviews_controller.rb @@ -1,8 +1,4 @@ class ItemReviewsController < ApplicationController - def new - @item_review = ItemReview.new - end - def create if user_signed_in? @item = Item.find(params[:item_id]) @@ -15,10 +11,10 @@ def create puts("saved successfully") redirect_to item_path(@item) else - render'new' + render 'new' end else - render 'new' + redirect_to new_user_session_path end end @@ -27,6 +23,12 @@ def new @item_review = @item.item_reviews.new end + def index + end + + def show + end + def update if user_signed_in? @item = Item.find(params[:item_id]) @@ -44,28 +46,32 @@ def update else render 'edit' end + else + redirect_to new_user_session_path end end - - def destroy - @item = Item.find(params[:item_id]) - @item_review = ItemReview.find(params[:id]) - @item_review.destroy - redirect_to item_path(@item) - end - def index - end - - def show - end - def edit - @item = Item.find(params[:item_id]) - @item_review = @item.item_reviews.find(params[:id]) + if user_signed_in? + @item = Item.find(params[:item_id]) + @item_review = @item.item_reviews.find(params[:id]) + else + redirect_to new_user_session_path + end + end + + def destroy + if user_signed_in? + @item = Item.find(params[:item_id]) + @item_review = @item.find(params[:id]) + @item_review.destroy + redirect_to item_path(@item) + else + redirect_to new_user_session_path + end end - + private def item_review_params params.require(:item_review).permit(:rating, :comment) end diff --git a/app/controllers/user_reviews_controller.rb b/app/controllers/user_reviews_controller.rb index bfbb89e..cedd739 100644 --- a/app/controllers/user_reviews_controller.rb +++ b/app/controllers/user_reviews_controller.rb @@ -1,66 +1,84 @@ class UserReviewsController < ApplicationController def create if user_signed_in? + @user_profile = UserProfile.find(params[:user_profile_id]) + @user_review = @user_profile.user_reviews.create(user_review_params) + @user_review.reviewer_id = @current_user.id + @user_review.reviewee_id = @user_profile.id + @user_review.created_at = DateTime.now + @user_review.updated_at = DateTime.now - @user_review = UserReview.new(user_review_params) - - @item.user_id = @current_user.id - - if @item.save - redirect_to @item + if @user_review.save + redirect_to @user_profile else - render :new + render 'new' end + else + redirect_to new_user_session_path end end def new - @item = Item.new + @user_profile = UserProfile.find(params[:user_profile_id]) + @user_review = @user_profile.user_reviews.new end def index - @item = Item.all + if user_signed_in? + @user_profile = UserProfile.find(params[:user_profile_id]) + @user_reviews = @user_profile.user_reviews.all + else + redirect_to new_user_session_path + end end def show - @item = Item.find(params[:id]) - end - - def edit - if user_signed_in? - @item = Item.find(params[:id]) - end end def update if user_signed_in? - @item = Item.find(params[:id]) - if @item.user_id = @current_user.id - - if @item.update(item_params) - redirect_to @item + @user_profile = UserProfile.find(params[:user_profile_id]) + @user_review = @user_profile.user_reviews.find(params[:id]) + #check if current user is allowed to edit + if @user_review.reviewer_id == @current_user.id + if @user_review.update(user_review_params) + puts("saved") + @user_review.updated_at = DateTime.now + redirect_to @user_profile else + puts("nots saved") render 'edit' end + else + render 'edit' end + else + redirect_to new_user_session_path end end - def destroy + def edit if user_signed_in? - @item = Item.find(params[:id]) - if @item.user_id = @current_user.id - @item.destroy + @user_profile = UserProfile.find(params[:user_profile_id]) + @user_review = @user_profile.user_reviews.find(params[:id]) + else + redirect_to new_user_session_path + end + end - redirect_to items_path - end + def destroy + if user_signed_in? + @user_profile = UserProfile.find(params[:user_profile_id]) + @user_review = @user_profile.user_reviews.find(params[:id]) + @user_review.destroy + redirect_to @user_profile + else + redirect_to new_user_session_path end end -private + private def user_review_params params.require(:user_review).permit(:rating, :comment) end - - end diff --git a/app/models/item_review.rb b/app/models/item_review.rb index 2104a2b..82561e9 100644 --- a/app/models/item_review.rb +++ b/app/models/item_review.rb @@ -3,14 +3,22 @@ # Table name: item_reviews # # id :bigint(8) not null, primary key -# rating :float # comment :text +# rating :float # created_at :datetime not null # updated_at :datetime not null -# owner_id :integer # item_id :bigint(8) +# owner_id :integer +# +# Indexes +# +# index_item_reviews_on_item_id (item_id) +# +# Foreign Keys +# +# fk_rails_... (item_id => items.id) # class ItemReview < ApplicationRecord - belongs_to :item + belongs_to :item end diff --git a/app/models/user.rb b/app/models/user.rb index 5022915..43f2e80 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -3,16 +3,21 @@ # Table name: users # # id :bigint(8) not null, primary key +# current_sign_in_at :datetime +# current_sign_in_ip :inet # email :string default(""), not null # encrypted_password :string default(""), not null -# reset_password_token :string -# reset_password_sent_at :datetime -# remember_created_at :datetime -# sign_in_count :integer default(0), not null -# current_sign_in_at :datetime # last_sign_in_at :datetime -# current_sign_in_ip :inet # last_sign_in_ip :inet +# remember_created_at :datetime +# reset_password_sent_at :datetime +# reset_password_token :string +# sign_in_count :integer default(0), not null +# +# Indexes +# +# index_users_on_email (email) UNIQUE +# index_users_on_reset_password_token (reset_password_token) UNIQUE # class User < ApplicationRecord @@ -23,5 +28,4 @@ class User < ApplicationRecord has_one :user_profile has_many :items has_many :transactions - has_many :user_reviews end diff --git a/app/models/user_profile.rb b/app/models/user_profile.rb index 6ff21ed..c660644 100644 --- a/app/models/user_profile.rb +++ b/app/models/user_profile.rb @@ -15,7 +15,7 @@ # class UserProfile < ApplicationRecord - validates :first_name, :last_name, :date_of_birth, presence: true - + validates :first_name, :last_name, :date_of_birth, presence: true + has_many :user_reviews, dependent: :destroy belongs_to :user end diff --git a/app/models/user_review.rb b/app/models/user_review.rb index 79d26f9..b493547 100644 --- a/app/models/user_review.rb +++ b/app/models/user_review.rb @@ -2,13 +2,17 @@ # # Table name: user_reviews # -# id :bigint(8) not null, primary key -# rating :float -# comment :text -# created_at :datetime not null -# updated_at :datetime not null -# user_id :integer +# id :bigint(8) not null, primary key +# comment :text +# rating :float +# created_at :datetime not null +# updated_at :datetime not null +# reviewee_id :integer +# reviewer_id :integer # class UserReview < ApplicationRecord + belongs_to :reviewer, class_name: :User_Profile, foreign_key: :reviewer_id + belongs_to :reviewee, class_name: :User_Profile, foreign_key: :reviewee_id + belongs_to :user_profile end diff --git a/app/views/item_reviews/_form.html.erb b/app/views/item_reviews/_form.html.erb index 405d451..5d8629c 100644 --- a/app/views/item_reviews/_form.html.erb +++ b/app/views/item_reviews/_form.html.erb @@ -1,18 +1,4 @@ <%= form_with(model: [ @item, @item.item_reviews.build ], local: true) do |form| %> - <% if @item.errors.any? %> -
-

- <%= pluralize(@item.errors.count, "error") %> prohibited - this item from being saved: -

- -
- <% end %> - <% if user_signed_in? %>
  • <%=link_to('Logout', destroy_user_session_path, method: :delete) %> diff --git a/app/views/item_reviews/_item_review.html.erb b/app/views/item_reviews/_item_review.html.erb index 3f7304b..0599c56 100644 --- a/app/views/item_reviews/_item_review.html.erb +++ b/app/views/item_reviews/_item_review.html.erb @@ -8,12 +8,12 @@ <%= item_review.comment %>

    - <% if item_review.owner_id == current_user.id %> + <% if current_user != nil and item_review.owner_id == current_user.id %> <%= link_to 'Edit', edit_item_item_review_path(@item, item_review) %> <% end %>

    - <% if item_review.owner_id == current_user.id %> + <% if current_user != nil and item_review.owner_id == current_user.id %> <%= link_to 'Delete Review', [item_review.item, item_review], method: :delete, data: { confirm: 'Are you sure?'} %> diff --git a/app/views/user_profiles/edit.html.erb b/app/views/user_profiles/edit.html.erb index 3edf7cc..5b4f4f3 100644 --- a/app/views/user_profiles/edit.html.erb +++ b/app/views/user_profiles/edit.html.erb @@ -1,31 +1,5 @@

    Edit User Profile

    <%= form_with model: @user_profile, local: true do |form| %> - - <% if @user_profile.errors.any? %> -
    -

    - <%= pluralize(@user_profile.errors.count, "error") %> prohibited - this user_profile from being saved: -

    - -
    - <% end %> - - <% if user_signed_in? %> -
  • - <%=link_to('Logout', destroy_user_session_path, method: :delete) %> -
  • - - <% else %> -
  • - <%= link_to('Login', new_user_session_path) %> -
  • - <%end%> -

    <%= form.label :"First Name" %>
    <%= form.text_field :first_name %> diff --git a/app/views/user_profiles/new.html.erb b/app/views/user_profiles/new.html.erb index 3edf7cc..c71e607 100644 --- a/app/views/user_profiles/new.html.erb +++ b/app/views/user_profiles/new.html.erb @@ -1,20 +1,6 @@

    Edit User Profile

    <%= form_with model: @user_profile, local: true do |form| %> - <% if @user_profile.errors.any? %> -
    -

    - <%= pluralize(@user_profile.errors.count, "error") %> prohibited - this user_profile from being saved: -

    - -
    - <% end %> - <% if user_signed_in? %>
  • <%=link_to('Logout', destroy_user_session_path, method: :delete) %> diff --git a/app/views/user_profiles/show.html.erb b/app/views/user_profiles/show.html.erb index 3be3af7..a9a1845 100644 --- a/app/views/user_profiles/show.html.erb +++ b/app/views/user_profiles/show.html.erb @@ -46,6 +46,7 @@ <% if current_user.id == @user_profile.user_id %> <%= link_to("Edit profile", "/user_profiles/" + @user_profile.id.to_s + "/edit") %> <% end %> + <%= link_to('Reviews', user_profile_user_reviews_path(@user_profile)) %> <% end %> diff --git a/app/views/user_reviews/_form.html.erb b/app/views/user_reviews/_form.html.erb new file mode 100644 index 0000000..4f5c7e8 --- /dev/null +++ b/app/views/user_reviews/_form.html.erb @@ -0,0 +1,38 @@ +<%= form_with(model: [ @user_profile, @user_profile.user_review.build ], local: true) do |form| %> + <% if @user_profile.errors.any? %> +
    +

    + <%= pluralize(@user_profile.errors.count, "error") %> prohibited + this user review from being saved: +

    + +
    + <% end %> + + <% if user_signed_in? %> +
  • + <%=link_to('Logout', destroy_user_session_path, method: :delete) %> +
  • + + <% else %> +
  • + <%= link_to('Login', new_user_session_path) %> +
  • + <%end%> + +

    + <%= form.label :rating %>
    + <%= form.text_field :rating %> +

    +

    + <%= form.label :comment %>
    + <%= form.text_field :comment %> +

    +

    + <%= form.submit %> +

    + <% end %> \ No newline at end of file diff --git a/app/views/user_reviews/_user_review.html.erb b/app/views/user_reviews/_user_review.html.erb new file mode 100644 index 0000000..0d34066 --- /dev/null +++ b/app/views/user_reviews/_user_review.html.erb @@ -0,0 +1,29 @@ +

    Reviews

    +<% @user_profile.user_reviews.each do |user_review| %> +
  • +

    + Rating: + <%= user_review.rating %> +

    + +

    + Comment: + <%= user_review.comment %> +

    +

    + <% if current_user != nil and user_review.reviewer_id == current_user.id %> + <%= link_to 'Edit', edit_user_profile_user_review_path(@user_profile, user_review) %> + <% end %> +

    +

    + <% if current_user != nil and if user_review.reviewer_id == current_user.id %> + <%= link_to 'Delete Review', [user_review.user_profile, user_review], + method: :delete, + data: { confirm: 'Are you sure?'} %> + <% end %> +

    +
  • +<% end %> + +<%= link_to 'Add New Review', new_item_item_review_path(@user_profile, user_review) %> +<% end %> diff --git a/app/views/user_reviews/create.html.erb b/app/views/user_reviews/create.html.erb deleted file mode 100644 index 3c1e35e..0000000 --- a/app/views/user_reviews/create.html.erb +++ /dev/null @@ -1,2 +0,0 @@ -

    UserReviews#create

    -

    Find me in app/views/user_reviews/create.html.erb

    diff --git a/app/views/user_reviews/destroy.html.erb b/app/views/user_reviews/destroy.html.erb deleted file mode 100644 index 6c29812..0000000 --- a/app/views/user_reviews/destroy.html.erb +++ /dev/null @@ -1,2 +0,0 @@ -

    UserReviews#destroy

    -

    Find me in app/views/user_reviews/destroy.html.erb

    diff --git a/app/views/user_reviews/edit.html.erb.rails b/app/views/user_reviews/edit.html.erb.rails new file mode 100644 index 0000000..c8eb895 --- /dev/null +++ b/app/views/user_reviews/edit.html.erb.rails @@ -0,0 +1,39 @@ +

    Edite User Review

    +<%= form_with(model: @user_review, url: [@user_profile, @user_review]) do |form| %> + <% if @user_review.errors.any? %> +
    +

    + <%= pluralize(@user_review.errors.count, "error") %> prohibited + this review from being saved: +

    + +
    + <% end %> + + <% if user_signed_in? %> +
  • + <%=link_to('Logout', destroy_user_session_path, method: :delete) %> +
  • + + <% else %> +
  • + <%= link_to('Login', new_user_session_path) %> +
  • + <%end%> + +

    + <%= form.label :rating %>
    + <%= form.text_field :rating %> +

    +

    + <%= form.label :comment %>
    + <%= form.text_field :comment %> +

    +

    + <%= form.submit %> +

    + <% end %><%= link_to 'Back', user_profile_path(@user_profile) %> diff --git a/app/views/user_reviews/index.html.erb b/app/views/user_reviews/index.html.erb index f8c284d..925f551 100644 --- a/app/views/user_reviews/index.html.erb +++ b/app/views/user_reviews/index.html.erb @@ -1,2 +1,45 @@ -

    UserReviews#index

    -

    Find me in app/views/user_reviews/index.html.erb

    +

    Reviews

    + + + + + + + + + + +<% user_reviews.each do |user_review| %> + + + + + + +

    + <% if current_user != nil and user_review.reviewer_id == current_user.id %> + <%= link_to 'Edit', edit_user_profile_user_review_path(@user_profile, user_review) %> + <% end %> +

    + +

    + <% if current_user != nil and if user_review.reviewer_id == current_user.id %> + <%= link_to 'Delete Review', [user_review.user_profile, user_review], + method: :delete, + data: { confirm: 'Are you sure?'} %> + <% end %> +

    + +<% end %> + +
    RatingCommentReviewerUpdated On
    <%= user_review.rating %><%= user_review.comment %><%= UserProfile.find(user_review.reviewer_id).first_name %> + <%= UserProfile.find(user_review.reviewer_id).last_name %> + <%= UserProfile.find(user_review.reviewer_id).email %> + <%= user_review.updated_on %>
    + +<% if @user_reviews.empty? %> +

    You do not have any reviews

    +<% end %> +<% end %> + + diff --git a/app/views/user_reviews/new.html.erb b/app/views/user_reviews/new.html.erb index 35fcfc8..e38d8d0 100644 --- a/app/views/user_reviews/new.html.erb +++ b/app/views/user_reviews/new.html.erb @@ -1,2 +1,3 @@ -

    UserReviews#new

    -

    Find me in app/views/user_reviews/new.html.erb

    +

    Create New User Review

    +<%= render 'form' %> +<%= link_to 'Back', user_profile_path %> diff --git a/app/views/user_reviews/update.html.erb b/app/views/user_reviews/update.html.erb deleted file mode 100644 index 4bb45e5..0000000 --- a/app/views/user_reviews/update.html.erb +++ /dev/null @@ -1,2 +0,0 @@ -

    UserReviews#update

    -

    Find me in app/views/user_reviews/update.html.erb

    diff --git a/config/routes.rb b/config/routes.rb index ad05ac8..eef2569 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -10,10 +10,11 @@ devise_for :users root to: "user_profiles#index" - resources :users do + resources :users + + resources :user_profiles do resources :user_reviews end - resources :user_profiles resources :items do resources :item_reviews resources :transactions diff --git a/db/migrate/20181106044155_create_user_reviews.rb b/db/migrate/20181108040613_create_user_reviews.rb similarity index 80% rename from db/migrate/20181106044155_create_user_reviews.rb rename to db/migrate/20181108040613_create_user_reviews.rb index 36994d9..1ad6268 100644 --- a/db/migrate/20181106044155_create_user_reviews.rb +++ b/db/migrate/20181108040613_create_user_reviews.rb @@ -5,7 +5,8 @@ def change t.text :comment t.datetime :created_at t.datetime :updated_at - t.integer :user_id + t.integer :reviewer_id + t.integer :reviewee_id t.timestamps end diff --git a/db/schema.rb b/db/schema.rb index 9aa5237..23e254a 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2018_11_06_044155) do +ActiveRecord::Schema.define(version: 2018_11_08_040613) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -67,7 +67,8 @@ t.text "comment" t.datetime "created_at", null: false t.datetime "updated_at", null: false - t.integer "user_id" + t.integer "reviewer_id" + t.integer "reviewee_id" end create_table "users", force: :cascade do |t| diff --git a/test/fixtures/item_reviews.yml b/test/fixtures/item_reviews.yml index f2dd438..2704cb8 100644 --- a/test/fixtures/item_reviews.yml +++ b/test/fixtures/item_reviews.yml @@ -1,3 +1,24 @@ +# == Schema Information +# +# Table name: item_reviews +# +# id :bigint(8) not null, primary key +# comment :text +# rating :float +# created_at :datetime not null +# updated_at :datetime not null +# item_id :bigint(8) +# owner_id :integer +# +# Indexes +# +# index_item_reviews_on_item_id (item_id) +# +# Foreign Keys +# +# fk_rails_... (item_id => items.id) +# + # Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html one: diff --git a/test/fixtures/transactions.yml b/test/fixtures/transactions.yml index 8f116be..14e6a8e 100644 --- a/test/fixtures/transactions.yml +++ b/test/fixtures/transactions.yml @@ -1,3 +1,19 @@ +# == Schema Information +# +# Table name: transactions +# +# id :bigint(8) not null, primary key +# expiry_date :datetime +# lend_date :datetime +# return_date :datetime +# status :string +# created_at :datetime not null +# updated_at :datetime not null +# borrower_id :integer +# item_id :integer +# lender_id :integer +# + # Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html one: diff --git a/test/fixtures/user_reviews.yml b/test/fixtures/user_reviews.yml index 7cd16f4..41adc4d 100644 --- a/test/fixtures/user_reviews.yml +++ b/test/fixtures/user_reviews.yml @@ -1,15 +1,30 @@ +# == Schema Information +# +# Table name: user_reviews +# +# id :bigint(8) not null, primary key +# comment :text +# rating :float +# created_at :datetime not null +# updated_at :datetime not null +# reviewee_id :integer +# reviewer_id :integer +# + # Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html one: rating: 1.5 comment: MyText - created_at: 2018-11-05 23:41:55 - updated_at: 2018-11-05 23:41:55 - user_id: 1 + created_at: 2018-11-07 23:06:13 + updated_at: 2018-11-07 23:06:13 + reviewer_id: 1 + reviewee_id: 1 two: rating: 1.5 comment: MyText - created_at: 2018-11-05 23:41:55 - updated_at: 2018-11-05 23:41:55 - user_id: 1 + created_at: 2018-11-07 23:06:13 + updated_at: 2018-11-07 23:06:13 + reviewer_id: 1 + reviewee_id: 1 diff --git a/test/fixtures/users.yml b/test/fixtures/users.yml index 14b799a..10106c0 100644 --- a/test/fixtures/users.yml +++ b/test/fixtures/users.yml @@ -1,3 +1,25 @@ +# == Schema Information +# +# Table name: users +# +# id :bigint(8) not null, primary key +# current_sign_in_at :datetime +# current_sign_in_ip :inet +# email :string default(""), not null +# encrypted_password :string default(""), not null +# last_sign_in_at :datetime +# last_sign_in_ip :inet +# remember_created_at :datetime +# reset_password_sent_at :datetime +# reset_password_token :string +# sign_in_count :integer default(0), not null +# +# Indexes +# +# index_users_on_email (email) UNIQUE +# index_users_on_reset_password_token (reset_password_token) UNIQUE +# + # Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html one: diff --git a/test/models/item_review_test.rb b/test/models/item_review_test.rb index 529e9a6..247eac0 100644 --- a/test/models/item_review_test.rb +++ b/test/models/item_review_test.rb @@ -1,3 +1,24 @@ +# == Schema Information +# +# Table name: item_reviews +# +# id :bigint(8) not null, primary key +# comment :text +# rating :float +# created_at :datetime not null +# updated_at :datetime not null +# item_id :bigint(8) +# owner_id :integer +# +# Indexes +# +# index_item_reviews_on_item_id (item_id) +# +# Foreign Keys +# +# fk_rails_... (item_id => items.id) +# + require 'test_helper' class ItemReviewTest < ActiveSupport::TestCase diff --git a/test/models/transaction_test.rb b/test/models/transaction_test.rb index f2b87fe..40b9bfc 100644 --- a/test/models/transaction_test.rb +++ b/test/models/transaction_test.rb @@ -1,3 +1,19 @@ +# == Schema Information +# +# Table name: transactions +# +# id :bigint(8) not null, primary key +# expiry_date :datetime +# lend_date :datetime +# return_date :datetime +# status :string +# created_at :datetime not null +# updated_at :datetime not null +# borrower_id :integer +# item_id :integer +# lender_id :integer +# + require 'test_helper' class TransactionTest < ActiveSupport::TestCase diff --git a/test/models/user_review_test.rb b/test/models/user_review_test.rb index 79e1db4..fcbbe77 100644 --- a/test/models/user_review_test.rb +++ b/test/models/user_review_test.rb @@ -1,3 +1,16 @@ +# == Schema Information +# +# Table name: user_reviews +# +# id :bigint(8) not null, primary key +# comment :text +# rating :float +# created_at :datetime not null +# updated_at :datetime not null +# reviewee_id :integer +# reviewer_id :integer +# + require 'test_helper' class UserReviewTest < ActiveSupport::TestCase diff --git a/test/models/user_test.rb b/test/models/user_test.rb index 82f61e0..6da671b 100644 --- a/test/models/user_test.rb +++ b/test/models/user_test.rb @@ -1,3 +1,25 @@ +# == Schema Information +# +# Table name: users +# +# id :bigint(8) not null, primary key +# current_sign_in_at :datetime +# current_sign_in_ip :inet +# email :string default(""), not null +# encrypted_password :string default(""), not null +# last_sign_in_at :datetime +# last_sign_in_ip :inet +# remember_created_at :datetime +# reset_password_sent_at :datetime +# reset_password_token :string +# sign_in_count :integer default(0), not null +# +# Indexes +# +# index_users_on_email (email) UNIQUE +# index_users_on_reset_password_token (reset_password_token) UNIQUE +# + require 'test_helper' class UserTest < ActiveSupport::TestCase