# Copyright (C) 2024 Manuel Bustillo # Copyright (C) 2024-2025 LibreWeddingPlanner contributors # frozen_string_literal: true class GroupsController < ApplicationController def index query_result = Groups::SummaryQuery.new.call.as_json.map(&:deep_symbolize_keys).map do |group| { id: group[:id], name: group[:name], icon: group[:icon], color: group[:color], parent_id: group[:parent_id], attendance: group.slice(:total, :considered, :invited, :confirmed, :declined, :tentative) } end render json: query_result end def create group = Group.create!(**group_params, parent:) render json: group.as_json(only: %i[id name icon color parent_id]), status: :created end def update group = Group.find(params[:id]) group.update!(**group_params, parent:) render json: group.as_json(only: %i[id name icon color parent_id]), status: :ok end def destroy Group.find(params[:id]).destroy! render json: {}, status: :ok end private def parent params[:group][:parent_id].present? ? Group.find(params[:group][:parent_id]) : nil end def group_params params.expect(group: %i[name icon color]) end end