1
0
mirror of https://github.com/LaCasemate/fab-manager.git synced 2024-12-15 00:24:09 +01:00
fab-manager/app/controllers/api/events_controller.rb

108 lines
4.3 KiB
Ruby
Raw Normal View History

2019-01-17 09:53:28 +01:00
# frozen_string_literal: true
# API Controller for resources of type Event
2023-02-24 17:26:55 +01:00
class API::EventsController < API::APIController
2019-01-17 09:53:28 +01:00
before_action :set_event, only: %i[show update destroy]
2015-05-05 03:10:25 +02:00
def index
@events = policy_scope(Event)
@page = params[:page]
2017-09-25 15:48:21 +02:00
@scope = params[:scope]
# filters
@events = @events.joins(:category).where(categories: { id: params[:category_id] }) if params[:category_id]
@events = @events.joins(:event_themes).where(event_themes: { id: params[:theme_id] }) if params[:theme_id]
@events = @events.where(age_range_id: params[:age_range_id]) if params[:age_range_id]
if current_user&.admin? || current_user&.manager?
2019-01-17 09:53:28 +01:00
@events = case params[:scope]
when 'future'
@events.where('availabilities.start_at >= ?', Time.current).order('availabilities.start_at DESC')
2019-01-17 09:53:28 +01:00
when 'future_asc'
@events.where('availabilities.start_at >= ?', Time.current).order('availabilities.start_at ASC')
2019-01-17 09:53:28 +01:00
when 'passed'
@events.where('availabilities.start_at < ?', Time.current).order('availabilities.start_at DESC')
2019-01-17 09:53:28 +01:00
else
@events.order('availabilities.start_at DESC')
end
2017-09-25 15:48:21 +02:00
end
# paginate
@events = @events.page(@page).per(12)
2015-05-05 03:10:25 +02:00
end
# GET /events/upcoming/:limit
def upcoming
limit = params[:limit]
@events = Event.includes(:event_image, :event_files, :availability, :category)
.where('events.nb_total_places != -1 OR events.nb_total_places IS NULL')
2023-01-19 17:41:21 +01:00
.where(deleted_at: nil)
.order('availabilities.start_at').references(:availabilities)
.limit(limit)
@events = case Setting.get('upcoming_events_shown')
when 'until_start'
@events.where('availabilities.start_at >= ?', Time.current)
when '2h_before_end'
@events.where('availabilities.end_at >= ?', 2.hours.from_now)
else
@events.where('availabilities.end_at >= ?', Time.current)
end
2015-05-05 03:10:25 +02:00
end
2023-01-19 17:41:21 +01:00
def show
head :not_found if @event.deleted_at
end
2015-05-05 03:10:25 +02:00
def create
authorize Event
@event = Event.new(event_params.permit!)
if @event.save
service = Availabilities::CreateAvailabilitiesService.new
service.create_slots(@event.availability)
2015-05-05 03:10:25 +02:00
render :show, status: :created, location: @event
else
render json: @event.errors, status: :unprocessable_entity
end
end
def update
authorize Event
res = Event::UpdateEventService.update(@event, event_params.permit!, params[:edit_mode])
render json: { action: 'update', total: res[:events].length, updated: res[:events].select { |r| r[:status] }.length, details: res },
status: :ok,
location: @event
2015-05-05 03:10:25 +02:00
end
def destroy
authorize Event
2020-01-07 17:18:49 +01:00
res = EventService.delete(params[:id], params[:mode])
if res.all? { |r| r[:status] }
render json: { deleted: res.length, details: res }, status: :ok
2015-05-05 03:10:25 +02:00
else
2020-01-07 17:18:49 +01:00
render json: { total: res.length, deleted: res.select { |r| r[:status] }.length, details: res }, status: :unprocessable_entity
2015-05-05 03:10:25 +02:00
end
end
private
2019-01-17 09:53:28 +01:00
# Use callbacks to share common setup or constraints between actions.
def set_event
@event = Event.find(params[:id])
end
2015-05-05 03:10:25 +02:00
2019-01-17 09:53:28 +01:00
# Never trust parameters from the scary internet, only allow the white list through.
def event_params
# handle general properties
event_preparams = params.required(:event).permit(:title, :description, :start_date, :start_time, :end_date, :end_time,
:amount, :nb_total_places, :availability_id, :all_day, :recurrence,
:recurrence_end_at, :category_id, :event_theme_ids, :age_range_id,
event_theme_ids: [],
event_image_attributes: %i[id attachment],
event_files_attributes: %i[id attachment _destroy],
event_price_categories_attributes: %i[id price_category_id amount _destroy],
advanced_accounting_attributes: %i[code analytical_section])
2019-01-17 09:53:28 +01:00
EventService.process_params(event_preparams)
end
2015-05-05 03:10:25 +02:00
end