# frozen_string_literal: true class Api::V1::AccountsController < Api::V1::BaseController include Pagy::Backend # Ensure proper scope authorization for read access before_action :ensure_read_scope def index @per_page = safe_per_page_param @pagy, @accounts = pagy( accounts_scope.alphabetically, page: safe_page_param, limit: @per_page ) render :index rescue => e Rails.logger.error "AccountsController#index error: #{e.message}" Rails.logger.error e.backtrace.join("\n") render json: { error: "internal_server_error", message: "An unexpected error occurred" }, status: :internal_server_error end def show unless valid_uuid?(params[:id]) render json: { error: "not_found", message: "Account not found" }, status: :not_found return end @account = accounts_scope.find(params[:id]) render :show rescue ActiveRecord::RecordNotFound render json: { error: "not_found", message: "Account not found" }, status: :not_found rescue => e Rails.logger.error "AccountsController#show error: #{e.message}" Rails.logger.error e.backtrace.join("\n") render json: { error: "internal_server_error", message: "An unexpected error occurred" }, status: :internal_server_error end private def ensure_read_scope authorize_scope!(:read) end def accounts_scope scope = current_resource_owner.family.accounts .accessible_by(current_resource_owner) .includes(:accountable, account_providers: :provider) include_disabled_accounts? ? scope : scope.visible end def include_disabled_accounts? ActiveModel::Type::Boolean.new.cast(params[:include_disabled]) end end