Skip to content

Commit 25114a3

Browse files
committed
Create read endpoint, add functionality
1 parent d50910e commit 25114a3

5 files changed

Lines changed: 39 additions & 5 deletions

File tree

app/controllers/api/feedback_controller.rb

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,18 @@ def create
3030
end
3131
end
3232

33+
def set_read
34+
feedback = Feedback.find(params[:id])
35+
result = Feedback::SetRead.call(feedback: feedback)
36+
37+
if result.success?
38+
@feedback = result[:feedback]
39+
render :show, formats: [:json], status: :ok
40+
else
41+
render json: { error: result[:error] }, status: :unprocessable_entity
42+
end
43+
end
44+
3345
private
3446

3547
def project
@@ -68,8 +80,8 @@ def feedback_create_params
6880
end
6981

7082
def url_params
71-
permitted_params = params.permit(:project_id)
72-
{ identifier: permitted_params[:project_id] }
83+
permitted_params = params.permit(:project_id, :id)
84+
{ identifier: permitted_params[:project_id], id: permitted_params[:id] }
7385
end
7486

7587
def base_params

app/models/ability.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ def define_school_student_abilities(user:, school:)
113113
can(%i[read], Lesson, school_id: school.id, visibility: 'students', school_class: { students: { student_id: user.id } })
114114
can(%i[read create update], Project, school_id: school.id, user_id: user.id, lesson_id: nil, remixed_from_id: visible_lesson_project_ids)
115115
can(%i[read show_context], Project, lesson: { school_id: school.id, visibility: 'students', school_class: { students: { student_id: user.id } } })
116-
can(%i[read], Feedback, school_project: { project: { school_id: school.id, user_id: user.id, lesson_id: nil, remixed_from_id: visible_lesson_project_ids } })
116+
can(%i[read set_read], Feedback, school_project: { project: { school_id: school.id, user_id: user.id, lesson_id: nil, remixed_from_id: visible_lesson_project_ids } })
117117
can(%i[show_finished set_finished show_status unsubmit submit], SchoolProject, project: { user_id: user.id, lesson_id: nil }, school_id: school.id)
118118
end
119119

app/views/api/feedback/_feedback.json.jbuilder

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,6 @@ json.call(
77
:user_id,
88
:content,
99
:created_at,
10-
:updated_at
10+
:updated_at,
11+
:read_at
1112
)

config/routes.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,9 @@
4646
resource :remix, only: %i[show create], controller: 'projects/remixes'
4747
resources :remixes, only: %i[index], controller: 'projects/remixes'
4848
resource :images, only: %i[show create], controller: 'projects/images'
49-
resources :feedback, only: %i[index create], controller: 'feedback'
49+
resources :feedback, only: %i[index create], controller: 'feedback' do
50+
put :read, on: :member, to: 'feedback#set_read'
51+
end
5052
end
5153

5254
resource :project_errors, only: %i[create]

lib/concepts/feedback/set_read.rb

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# frozen_string_literal: true
2+
3+
class Feedback
4+
class SetRead
5+
class << self
6+
def call(feedback:)
7+
response = OperationResponse.new
8+
response[:feedback] = feedback
9+
response[:feedback].read_at = Time.current
10+
response[:feedback].save!
11+
response
12+
rescue StandardError => e
13+
Sentry.capture_exception(e)
14+
response[:error] = response[:feedback]&.errors
15+
response
16+
end
17+
end
18+
end
19+
end

0 commit comments

Comments
 (0)