diff --git a/app/controllers/admin/reviews_controller.rb b/app/controllers/admin/reviews_controller.rb index 5fe1f68f..7cc7955f 100644 --- a/app/controllers/admin/reviews_controller.rb +++ b/app/controllers/admin/reviews_controller.rb @@ -8,6 +8,7 @@ def initialize @reviews = T.let(nil, T.nilable(Review::RelationType)) @review = T.let(nil, T.nilable(Review)) @author = T.let(nil, T.nilable(User)) + @section = T.let(nil, T.nilable(Section)) end class IndexParams < T::Struct @@ -33,6 +34,7 @@ def show typed_params = TypedParams[ShowParams].new.extract!(params) @review = Review.find(typed_params.id) @author = @review.user + @section = T.must(@review.section) end class UpdateParams < T::Struct @@ -60,4 +62,31 @@ def update redirect_to(admin_review_path(@review)) end + + class UpdateAllParams < T::Struct + const :status, Review::Status + end + + # PATCH/PUT /admin/reviews/all + sig { void } + def update_all_pending + typed_params = TypedParams[UpdateAllParams].new.extract!(params) + status = typed_params.status + + pending_reviews = T.let(T.unsafe(Review.all.where(status: :pending)).to_a, T::Array[Review]) + pending_reviews.map do |review| + case status + when Review::Status::Approved + review.approve! + when Review::Status::Rejected + review.reject! + when Review::Status::Pending + review.set_pending! + else + T.absurd(status) + end + end + + redirect_to(admin_reviews_path) + end end diff --git a/app/views/admin/reviews/index.html.erb b/app/views/admin/reviews/index.html.erb index bef6e915..75060d52 100644 --- a/app/views/admin/reviews/index.html.erb +++ b/app/views/admin/reviews/index.html.erb @@ -2,6 +2,10 @@ <%= render "shared/page_header", title: "Admin: Reviews", breadcrumbs: [{ name: "Home", link: "/" }, { name: "Admin: Reviews", link: admin_reviews_path }] %> +