Skip to content

Commit

Permalink
Compact group members api response
Browse files Browse the repository at this point in the history
  • Loading branch information
umar221b committed Dec 30, 2023
1 parent 22b4edf commit 84bd247
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 7 deletions.
34 changes: 29 additions & 5 deletions app/controllers/api/v1/groups_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,24 @@ class Api::V1::GroupsController < Api::V1::BaseApiController

# endpoint to obtain all groups
def index
show_members = params[:with_members]&.to_s == 'true'
groups = @assessment.groups(with_members: show_members)
show_members = ActiveModel::Type::Boolean.new.cast(params[:show_members]&.downcase) || false
groups = @assessment.groups(show_members: show_members)

if show_members
groups_json = groups.as_json(include: { assessment_user_data: { include: { course_user_datum: { include: :user } } } })
groups_json = []
groups.each do |group|
members = []
group.assessment_user_data.each do |assessment_user_datum|
user_json = assessment_user_datum.course_user_datum.user.as_json
user_json[:course_user_datum_id] = assessment_user_datum.course_user_datum_id
members << user_json
end

group_json = group.as_json
group_json[:members] = members

groups_json << group_json
end
else
groups_json = groups.as_json
end
Expand All @@ -22,13 +36,23 @@ def index

def show
require_params([:id])
group = @assessment.groups(with_members: true).find(params[:id])
group = @assessment.groups(show_members: true).find_by(id: params[:id])

if group.nil?
raise ApiError.new("Couldn't find group with id #{params[:id]}", :bad_request)
end

respond_with(group, include: { assessment_user_data: { include: { course_user_datum: { include: :user } } } })
members = []
group.assessment_user_data.each do |assessment_user_datum|
user_json = assessment_user_datum.course_user_datum.user.as_json
user_json[:course_user_datum_id] = assessment_user_datum.course_user_datum_id
members << user_json
end

group_json = group.as_json
group_json[:members] = members

respond_with group_json
end

# create group endpoint
Expand Down
4 changes: 2 additions & 2 deletions app/models/assessment.rb
Original file line number Diff line number Diff line change
Expand Up @@ -372,8 +372,8 @@ def has_handout?
overwrites_method?(:handout) || handout_is_url? || handout_is_file?
end

def groups(with_members: false)
if with_members
def groups(show_members: false)
if show_members
Group.includes(assessment_user_data: { course_user_datum: :user })
.where(assessment_user_data: { assessment_id: id })
else
Expand Down

0 comments on commit 84bd247

Please sign in to comment.