From 61dae9944eb60388ce1c6492dfc07a59a94a197e Mon Sep 17 00:00:00 2001 From: Min Khant Kyaw Date: Mon, 15 Sep 2025 17:33:35 +0630 Subject: [PATCH] Add server settings controller with menu visibility endpoint --- .../api/v1/server_settings_controller.rb | 41 +++++++++++++++++++ config/routes/api_v1.rb | 7 ++++ 2 files changed, 48 insertions(+) create mode 100644 app/controllers/api/v1/server_settings_controller.rb diff --git a/app/controllers/api/v1/server_settings_controller.rb b/app/controllers/api/v1/server_settings_controller.rb new file mode 100644 index 00000000..07d02804 --- /dev/null +++ b/app/controllers/api/v1/server_settings_controller.rb @@ -0,0 +1,41 @@ +# frozen_string_literal: true + +module Api + module V1 + class ServerSettingsController < ApiController + skip_before_action :verify_key! + before_action :authenticate_client_credentials, only: [:menu_visibility] + + # GET /api/v1/server_settings/menu_visibility + def menu_visibility + # Cache the result for performance since server settings don't change frequently + @menu_config = build_menu_visibility_config + + render_success(@menu_config) + end + + private + + def build_menu_visibility_config + # Efficiently fetch the Bluesky setting with a single optimized query + bluesky_setting = fetch_bluesky_setting + + # Build the menu visibility configuration + { + bluesky_bridge_enabled: bluesky_setting&.value || false, + } + end + + def fetch_bluesky_setting + # Use a more efficient query with includes to avoid N+1 queries + ServerSetting.includes(:parent) + .joins(:parent) + .where(name: 'Enable bluesky bridge', parent: { name: 'Bluesky Bridge' }) + .first + rescue StandardError => e + Rails.logger.error "Error fetching Bluesky setting: #{e.message}" + nil + end + end + end +end \ No newline at end of file diff --git a/config/routes/api_v1.rb b/config/routes/api_v1.rb index 79a68462..2f645682 100644 --- a/config/routes/api_v1.rb +++ b/config/routes/api_v1.rb @@ -128,6 +128,12 @@ end end + resources :server_settings, only: [:index] do + collection do + get :menu_visibility + end + end + resources :statuses, only: [] do collection do post :boost_post @@ -135,5 +141,6 @@ end post 'users/bluesky_bridge', to: 'users#update_bluesky_bridge_setting' + get 'server_settings/menu_visibility', to: 'server_settings#menu_visibility' end end