-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathschool_projects_controller.rb
More file actions
92 lines (79 loc) · 3 KB
/
Copy pathschool_projects_controller.rb
File metadata and controls
92 lines (79 loc) · 3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# frozen_string_literal: true
module Api
class SchoolProjectsController < ApiController
before_action :authorize_user
load_and_authorize_resource :project
def show_status
authorize! :show_status, school_project
render :show_status, formats: [:json], status: :ok
end
def unsubmit
authorize! :unsubmit, school_project
result = SchoolProject::SetStatus.call(school_project:, status: :unsubmitted, user_id: current_user.id)
if result.success?
@school_project = result[:school_project]
render :show_status, formats: [:json], status: :ok
else
render json: { error: result[:error] }, status: :unprocessable_content
end
end
def submit
authorize! :submit, school_project
previous_status = school_project.status
result = SchoolProject::SetStatus.call(school_project:, status: :submitted, user_id: current_user.id)
if result.success?
@school_project = result[:school_project]
track_project_event('Project - Submitted for review', @school_project.project) if previous_status != 'submitted'
render :show_status, formats: [:json], status: :ok
else
render json: { error: result[:error] }, status: :unprocessable_content
end
end
def return
authorize! :return, school_project
result = SchoolProject::SetStatus.call(school_project:, status: :returned, user_id: current_user.id)
if result.success?
@school_project = result[:school_project]
render :show_status, formats: [:json], status: :ok
else
render json: { error: result[:error] }, status: :unprocessable_content
end
end
def complete
authorize! :complete, school_project
previous_status = school_project.status
result = SchoolProject::SetStatus.call(school_project:, status: :complete, user_id: current_user.id)
if result.success?
@school_project = result[:school_project]
track_project_event('Project - Marked as completed', @school_project.project) if previous_status != 'complete'
render :show_status, formats: [:json], status: :ok
else
render json: { error: result[:error] }, status: :unprocessable_content
end
end
def show_finished
authorize! :show_finished, school_project
render :finished, formats: [:json], status: :ok
end
def set_finished
authorize! :set_finished, school_project
result = SchoolProject::SetFinished.call(school_project:, finished: params[:finished])
if result.success?
@school_project = result[:school_project]
render :finished, formats: [:json], status: :ok
else
render json: { error: result[:error] }, status: :unprocessable_content
end
end
private
def project
@project ||= Project.find_by!(identifier: params.expect(:id))
end
def school_project
@school_project ||= project.school_project
end
def school_project_params
params.permit(:finished)
end
end
end