70 lines
1.8 KiB
Ruby
70 lines
1.8 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class BeamersController < ApplicationController
|
|
before_action :set_tournament
|
|
before_action :set_beamer, only: %i[show update destroy]
|
|
before_action :authenticate_user!, only: %i[create update destroy]
|
|
before_action -> { require_owner! @tournament.owner }, only: %i[create update destroy]
|
|
rescue_from ActiveRecord::RecordNotFound, with: :render_not_found_error
|
|
|
|
# GET /tournaments/:tournament_id/beamers
|
|
def index
|
|
render json: @tournament.beamers, each_serializer: BeamerSerializer
|
|
end
|
|
|
|
# GET /tournaments/:tournament_id/beamers/:id
|
|
def show
|
|
render json: @beamer
|
|
end
|
|
|
|
# GET /tournaments/:tournament_id/beamers/by_name?name=beamername
|
|
def by_name
|
|
beamer = @tournament.beamers.find_by(name: params[:name])
|
|
beamer ||= @tournament.beamers.default_beamer.first
|
|
if beamer
|
|
render json: beamer
|
|
else
|
|
render json: { error: 'No beamer found' }, status: :not_found
|
|
end
|
|
end
|
|
|
|
# POST /tournaments/:tournament_id/beamers
|
|
def create
|
|
beamer = @tournament.beamers.new(beamer_params)
|
|
if beamer.save
|
|
render json: beamer, status: :created
|
|
else
|
|
render json: beamer.errors, status: :unprocessable_entity
|
|
end
|
|
end
|
|
|
|
# PATCH /tournaments/:tournament_id/beamers/:id
|
|
def update
|
|
if @beamer.update(beamer_params)
|
|
render json: @beamer
|
|
else
|
|
render json: @beamer.errors, status: :unprocessable_entity
|
|
end
|
|
end
|
|
|
|
# DELETE /tournaments/:tournament_id/beamers/:id
|
|
def destroy
|
|
@beamer.destroy
|
|
head :no_content
|
|
end
|
|
|
|
private
|
|
|
|
def set_tournament
|
|
@tournament = Tournament.find(params[:tournament_id])
|
|
end
|
|
|
|
def set_beamer
|
|
@beamer = @tournament.beamers.find(params[:id])
|
|
end
|
|
|
|
def beamer_params
|
|
params.permit(:name, :display_state, :is_default, :qr_code_url, :logo_url)
|
|
end
|
|
end
|