mirror of
https://github.com/LaCasemate/fab-manager.git
synced 2024-12-01 12:24:28 +01:00
87 lines
2.7 KiB
Ruby
87 lines
2.7 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
# API Controller for resources of type Training
|
|
class API::TrainingsController < API::APIController
|
|
include ApplicationHelper
|
|
|
|
before_action :authenticate_user!, except: %i[index show]
|
|
before_action :set_training, only: %i[update destroy]
|
|
|
|
def index
|
|
@requested_attributes = params[:requested_attributes]
|
|
@trainings = TrainingService.list(params)
|
|
end
|
|
|
|
def show
|
|
@training = Training.friendly.find(params[:id])
|
|
end
|
|
|
|
def create
|
|
authorize Training
|
|
@training = Training.new(training_params)
|
|
if @training.save
|
|
render :show, status: :created, location: @training
|
|
else
|
|
render json: @training.errors, status: :unprocessable_entity
|
|
end
|
|
end
|
|
|
|
def update
|
|
authorize Training
|
|
if params[:training][:users].present?
|
|
members = User.where(id: valid_training_params[:users])
|
|
members.each do |m|
|
|
m.trainings << @training
|
|
end
|
|
|
|
head :no_content
|
|
elsif current_user.admin? && @training.update(training_params)
|
|
# only admins can fully update a training, not managers
|
|
render :show, status: :ok, location: @training
|
|
else
|
|
render json: @training.errors, status: :unprocessable_entity
|
|
end
|
|
end
|
|
|
|
def destroy
|
|
authorize @training
|
|
@training.destroy
|
|
head :no_content
|
|
end
|
|
|
|
# This endpoint is used to get a list of trainings to validate
|
|
def availabilities
|
|
authorize Training
|
|
@training = Training.find(params[:id])
|
|
@availabilities = @training.availabilities
|
|
.includes(slots: {
|
|
slots_reservations: {
|
|
reservation: {
|
|
statistic_profile: [:trainings, { user: [:profile] }]
|
|
}
|
|
}
|
|
})
|
|
.where('slots_reservations.canceled_at': nil)
|
|
.order('availabilities.start_at DESC')
|
|
end
|
|
|
|
private
|
|
|
|
def set_training
|
|
@training = Training.find(params[:id])
|
|
end
|
|
|
|
def valid_training_params
|
|
params.require(:training).permit(:id, users: [])
|
|
end
|
|
|
|
def training_params
|
|
params.require(:training)
|
|
.permit(:id, :name, :description, :machine_ids, :plan_ids, :nb_total_places, :public_page, :disabled,
|
|
:auto_cancel, :auto_cancel_threshold, :auto_cancel_deadline, :authorization, :authorization_period,
|
|
:invalidation, :invalidation_period,
|
|
training_image_attributes: %i[id attachment], machine_ids: [], plan_ids: [],
|
|
advanced_accounting_attributes: %i[code analytical_section])
|
|
end
|
|
end
|