From 1e1b3f19fc7ff6011095c7019ee55b50dcdd3aae Mon Sep 17 00:00:00 2001 From: Manuel Bustillo Date: Sun, 21 Sep 2025 21:08:01 +0200 Subject: [PATCH] Define an endpoint with table simulation stats --- .../tables_arrangements_controller.rb | 29 ++++++++++++++----- config/routes.rb | 4 ++- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/app/controllers/tables_arrangements_controller.rb b/app/controllers/tables_arrangements_controller.rb index 184b577..7340f9f 100644 --- a/app/controllers/tables_arrangements_controller.rb +++ b/app/controllers/tables_arrangements_controller.rb @@ -4,17 +4,28 @@ class TablesArrangementsController < ApplicationController def index - current_digest = Tables::Distribution.digest(current_tenant) + query = TablesArrangement + .order(valid: :desc) + .order(discomfort: :asc) + .select(:id, :name, :discomfort, :status, :progress) + .select("digest = '#{current_digest}'::uuid OR discomfort IS NULL as valid") + .limit((params[:limit].presence&.to_i || 20).clamp(1..20)) - render json: TablesArrangement - .order(valid: :desc) - .order(discomfort: :asc) - .select(:id, :name, :discomfort, :status, :progress) - .select("digest = '#{current_digest}'::uuid OR discomfort IS NULL as valid") - .limit(20) + query = query.where(status: params[:status]) if params[:status].present? + + render json: query .as_json(only: %i[id name discomfort valid status progress]) end + def stats + scope = TablesArrangement.where('digest = ?::uuid OR discomfort IS NULL', current_digest) + + render json: { + count: scope.group(:status).count, + in_progress: scope.where(status: :in_progress).limit(10).order(progress: :desc).pluck(:progress) + } + end + def show Guest.joins(:seats, :group) .where(seats: { tables_arrangement_id: params[:id] }) @@ -35,6 +46,10 @@ class TablesArrangementsController < ApplicationController private + def current_digest + @current_digest ||= Tables::Distribution.digest(current_tenant) + end + def format(number:, guests:) { number: number, diff --git a/config/routes.rb b/config/routes.rb index d9d4bf0..4490024 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -40,7 +40,9 @@ Rails.application.routes.draw do resource :website, only: [:show, :update] - resources :tables_arrangements, only: %i[index show create] + resources :tables_arrangements, only: %i[index show create] do + get :stats, on: :collection + end resources :summary, only: :index resources :invitations, only: %i[show index create update destroy] do post :email, on: :collection