Class: Api::PeerReviewsController
Instance Method Summary
collapse
Methods included from Utils
#get_id_from_short_title, #is_member, #is_reviewer, #nickname_exist, #short_title_exist
Methods included from Upload
#remove_avatar, #remove_banner, #remove_document, #upload_avatar, #upload_banner, #upload_document
Methods included from Relations
#clap, #clappers, #follow, #review, #reviewed_object, #save, #saved_objects
Methods included from Members
#get_current_role, #get_roles_list, #has_membership, #invite, #invite_as_admin, #join, #leave, #members_list, #remove_member, #update_member
Methods included from Faq
#faq_create, #faq_destroy, #faq_index, #faq_show, #faq_update
Methods included from Response
#json_response
Instance Method Details
#create ⇒ Object
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
# File 'app/controllers/api/peer_reviews_controller.rb', line 19
def create
peer_review = PeerReview.new(peer_review_params)
if peer_review.save
peer_review.update_interests(params[:peer_review][:interests]) unless params[:peer_review][:interests].nil?
peer_review.update_skills(params[:peer_review][:skills]) unless params[:peer_review][:skills].nil?
current_user.add_role :owner, peer_review
current_user.add_role :admin, peer_review
render json: peer_review, status: :created
else
render json: peer_review.errors.full_messages, status: :unprocessable_entity
end
end
|
#destroy ⇒ Object
35
36
37
38
39
|
# File 'app/controllers/api/peer_reviews_controller.rb', line 35
def destroy
@peer_review.destroy
render status: :ok
end
|
#email_admins ⇒ Object
41
42
43
44
45
46
47
48
49
50
51
|
# File 'app/controllers/api/peer_reviews_controller.rb', line 41
def email_admins
params.permit(:content, :subject)
@peer_review.proposals.each do |proposal|
User.with_role(:admin, proposal).each do |user|
PeerReviewEmailWorker.perform_async(current_user.id, user.id, @peer_review.id, params[:content], params[:subject])
end
end
render status: :accepted
end
|
#email_admins_single ⇒ Object
53
54
55
56
57
58
59
60
61
62
63
64
65
|
# File 'app/controllers/api/peer_reviews_controller.rb', line 53
def email_admins_single
params.permit(:content, :subject, :proposal_ids)
@peer_review.proposals.each do |proposal|
if params[:proposal_ids].include?(proposal.id)
User.with_role(:admin, proposal).each do |user|
PeerReviewEmailWorker.perform_async(current_user.id, user.id, @peer_review.id, params[:content], params[:subject])
end
end
end
render status: :accepted
end
|
#email_reviewers ⇒ Object
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
# File 'app/controllers/api/peer_reviews_controller.rb', line 77
def email_reviewers
params.permit(:content, :subject)
members = User.with_role(:member, @peer_review)
@peer_review.proposals.each do |proposal|
members += User.with_role(:admin, proposal)
members += User.with_role(:member, proposal)
end
members.uniq(&:id).each do |user|
PeerReviewEmailWorker.perform_async(current_user.id, user.id, @peer_review.id, params[:content], params[:subject])
end
render status: :accepted
end
|
#email_users ⇒ Object
67
68
69
70
71
72
73
74
75
|
# File 'app/controllers/api/peer_reviews_controller.rb', line 67
def email_users
params.permit(:content, :subject, :user_ids)
params[:user_ids].each do |user_id|
PeerReviewEmailWorker.perform_async(current_user.id, user_id, @peer_review.id, params[:content], params[:subject])
end
render status: :accepted
end
|
#get_admins_info ⇒ Object
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
# File 'app/controllers/api/peer_reviews_controller.rb', line 94
def get_admins_info
members = []
@peer_review.proposals.each do |proposal|
User.with_role(:admin, proposal).each do |user|
members << user
end
end
respond_to do |format|
format.csv do
send_data User.to_csv(members.uniq(&:id)), filename: "admins-info-#{Time.zone.today}.csv"
end
format.json do
render json: {
users: members.uniq(&:id).map { |user| Api::UserSerializer.new(user) }
}, status: :ok
end
end
end
|
#get_reviewers_info ⇒ Object
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
|
# File 'app/controllers/api/peer_reviews_controller.rb', line 115
def get_reviewers_info
members = User.with_role(:member, @peer_review)
@peer_review.proposals.each do |proposal|
members += User.with_role(:admin, proposal)
members += User.with_role(:member, proposal)
end
respond_to do |format|
format.csv do
send_data User.to_csv(members.uniq(&:id)), filename: "reviewers-info-#{Time.zone.today}.csv"
end
format.json do
render json: {
users: members.uniq(&:id).map { |user| Api::UserSerializer.new(user) }
}, status: :ok
end
end
end
|
#index ⇒ Object
136
137
138
139
140
141
142
143
144
145
146
|
# File 'app/controllers/api/peer_reviews_controller.rb', line 136
def index
peer_reviews = if params[:program_id]
Program.find(params.require(:program_id)).peer_reviews
elsif params[:space_id]
Space.find(params.require(:space_id)).peer_reviews
else
PeerReview.all
end
render json: peer_reviews.order(created_at: :desc), controller: true
end
|
#index_people ⇒ Object
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
|
# File 'app/controllers/api/peer_reviews_controller.rb', line 148
def index_people
members = User
.select("users.*, 'member' as relation")
.joins('LEFT JOIN users_roles ON users.id = users_roles.user_id')
.joins('LEFT JOIN roles ON roles.id = users_roles.role_id')
.where("roles.name = 'member' AND roles.resource_type = 'PeerReview' AND roles.resource_id = :peer_review_id", peer_review_id: @peer_review.id)
proposal_participants = User
.select("users.*, 'participant' as relation")
.joins('LEFT JOIN users_roles ON users.id = users_roles.user_id')
.joins('LEFT JOIN roles ON roles.id = users_roles.role_id')
.where("roles.resource_type = 'Proposal' AND roles.resource_id IN (SELECT id FROM proposals WHERE peer_review_id = :peer_review_id)", peer_review_id: @peer_review.id)
people = (members + proposal_participants).uniq(&:id)
pagy = Pagy.new(count: people.count, items: params.key?(:items) ? params[:items] : 25, page: params.key?(:page) ? params[:page] : 1)
render json: people[pagy.offset, pagy.items],
each_serializer: Api::UserSerializer,
root: 'people',
adapter: :json
end
|
#index_proposals ⇒ Object
171
172
173
174
175
176
177
178
|
# File 'app/controllers/api/peer_reviews_controller.rb', line 171
def index_proposals
proposals = Proposal
.where(peer_review_id: @peer_review.id)
.order(id: :desc)
@pagy, records = pagy(proposals)
render json: records, each_serializer: Api::ProposalSerializer, root: 'proposals', adapter: :json
end
|
#my_peer_reviews ⇒ Object
180
181
182
183
184
185
186
|
# File 'app/controllers/api/peer_reviews_controller.rb', line 180
def my_peer_reviews
peer_reviews = PeerReview.with_role(:owner, current_user)
peer_reviews += PeerReview.with_role(:admin, current_user)
peer_reviews += PeerReview.with_role(:member, current_user)
render json: peer_reviews.uniq.sort_by(&:id)
end
|
#remove_proposal ⇒ Object
DELETE /proposals/:proposal_id
189
190
191
192
193
194
195
196
197
|
# File 'app/controllers/api/peer_reviews_controller.rb', line 189
def remove_proposal
proposal = Proposal.find(params[:proposal_id])
if @peer_review.proposals.include?(proposal)
@peer_review.proposals.delete(proposal)
render json: { data: "Proposal with id:#{proposal.id} was removed" }, status: :ok
else
render json: { data: "Proposal with id:#{proposal.id} is not attached" }, status: :not_found
end
end
|
#show ⇒ Object
199
200
201
|
# File 'app/controllers/api/peer_reviews_controller.rb', line 199
def show
render json: @peer_review, status: :ok, controller: true
end
|
#update ⇒ Object
rubocop:disable Metrics/AbcSize
rubocop:disable Metrics/CyclomaticComplexity
rubocop:disable Metrics/PerceivedComplexity
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
|
# File 'app/controllers/api/peer_reviews_controller.rb', line 206
def update
if peer_review_params[:score_threshold] && @peer_review.score_threshold
@peer_review.proposals.each do |proposal|
project = Project.find(proposal.project_id)
if proposal.score && proposal.score > @peer_review.score_threshold
User.with_role(:reviewer).first.add_role(:reviewer, project)
else
User.with_role(:reviewer).first.remove_role(:reviewer, project)
end
end
end
if @peer_review.update(peer_review_params)
@peer_review.update_interests(params[:peer_review][:interests]) unless params[:peer_review][:interests].nil?
@peer_review.update_skills(params[:peer_review][:skills]) unless params[:peer_review][:skills].nil?
render json: @peer_review, status: :ok, controller: true
else
render json: @peer_review.errors.full_messages, status: :unprocessable_entity
end
end
|