# Copyright (C) 2024 Manuel Bustillo # frozen_string_literal: true class AffinitiesController < ApplicationController before_action :set_group def index overridden_affinities = @group.affinities .each_with_object({}) { |affinity, acc| acc[affinity.another_group(@group).id] = affinity.discomfort } Group.pluck(:id).index_with { |group_id| overridden_affinities[group_id] || GroupAffinity::NEUTRAL } .then { |affinities| render json: affinities } end def bulk_update params.expect(affinities: [[:group_id, :discomfort]]).map(&:to_h).map do |affinity| { group_a_id: @group.id, group_b_id: affinity[:group_id], discomfort: affinity[:discomfort] } end.then { |affinities| GroupAffinity.upsert_all(affinities) } render json: {}, status: :ok rescue ActiveRecord::InvalidForeignKey render json: { error: 'At least one of the group IDs provided does not exist.' }, status: :bad_request rescue ActiveRecord::StatementInvalid render json: { error: 'Invalid group ID or discomfort provided.' } end private def set_group @group = Group.find(params[:group_id]) end end