• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

sleede / fab-manager / #98

pending completion
#98

push

coveralls-ruby

sylvainbx
Merge branch 'dev' for release 5.7.0

1368 of 1368 new or added lines in 161 files covered. (100.0%)

7383 of 12030 relevant lines covered (61.37%)

14.06 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

55.1
/app/controllers/api/events_controller.rb
1
# frozen_string_literal: true
2

3
# API Controller for resources of type Event
4
class API::EventsController < API::ApiController
1✔
5
  before_action :set_event, only: %i[show update destroy]
1✔
6

7
  def index
1✔
8
    @events = policy_scope(Event)
×
9
    @page = params[:page]
×
10
    @scope = params[:scope]
×
11

12
    # filters
13
    @events = @events.joins(:category).where(categories: { id: params[:category_id] }) if params[:category_id]
×
14
    @events = @events.joins(:event_themes).where(event_themes: { id: params[:theme_id] }) if params[:theme_id]
×
15
    @events = @events.where(age_range_id: params[:age_range_id]) if params[:age_range_id]
×
16

17
    if current_user&.admin? || current_user&.manager?
×
18
      @events = case params[:scope]
×
19
                when 'future'
20
                  @events.where('availabilities.start_at >= ?', Time.current).order('availabilities.start_at DESC')
×
21
                when 'future_asc'
22
                  @events.where('availabilities.start_at >= ?', Time.current).order('availabilities.start_at ASC')
×
23
                when 'passed'
24
                  @events.where('availabilities.start_at < ?', Time.current).order('availabilities.start_at DESC')
×
25
                else
26
                  @events.order('availabilities.start_at DESC')
×
27
                end
28
    end
29

30
    # paginate
31
    @events = @events.page(@page).per(12)
×
32
  end
33

34
  # GET /events/upcoming/:limit
35
  def upcoming
1✔
36
    limit = params[:limit]
×
37
    @events = Event.includes(:event_image, :event_files, :availability, :category)
×
38
                   .where('events.nb_total_places != -1 OR events.nb_total_places IS NULL')
39
                   .where(deleted_at: nil)
40
                   .order('availabilities.start_at').references(:availabilities)
41
                   .limit(limit)
42

43
    @events = case Setting.get('upcoming_events_shown')
×
44
              when 'until_start'
45
                @events.where('availabilities.start_at >= ?', Time.current)
×
46
              when '2h_before_end'
47
                @events.where('availabilities.end_at >= ?', 2.hours.from_now)
×
48
              else
49
                @events.where('availabilities.end_at >= ?', Time.current)
×
50
              end
51
  end
52

53
  def show
1✔
54
    head :not_found if @event.deleted_at
×
55
  end
56

57
  def create
1✔
58
    authorize Event
5✔
59
    @event = Event.new(event_params.permit!)
5✔
60
    if @event.save
5✔
61
      service = Availabilities::CreateAvailabilitiesService.new
5✔
62
      service.create_slots(@event.availability)
5✔
63
      render :show, status: :created, location: @event
5✔
64
    else
65
      render json: @event.errors, status: :unprocessable_entity
×
66
    end
67
  end
68

69
  def update
1✔
70
    authorize Event
2✔
71
    res = Event::UpdateEventService.update(@event, event_params.permit!, params[:edit_mode])
2✔
72
    render json: { action: 'update', total: res[:events].length, updated: res[:events].select { |r| r[:status] }.length, details: res },
4✔
73
           status: :ok,
74
           location: @event
75
  end
76

77
  def destroy
1✔
78
    authorize Event
2✔
79
    res = EventService.delete(params[:id], params[:mode])
2✔
80
    if res.all? { |r| r[:status] }
4✔
81
      render json: { deleted: res.length, details: res }, status: :ok
2✔
82
    else
83
      render json: { total: res.length, deleted: res.select { |r| r[:status] }.length, details: res }, status: :unprocessable_entity
×
84
    end
85
  end
86

87
  private
1✔
88

89
  # Use callbacks to share common setup or constraints between actions.
90
  def set_event
1✔
91
    @event = Event.find(params[:id])
4✔
92
  end
93

94
  # Never trust parameters from the scary internet, only allow the white list through.
95
  def event_params
1✔
96
    # handle general properties
97
    event_preparams = params.required(:event).permit(:title, :description, :start_date, :start_time, :end_date, :end_time,
7✔
98
                                                     :amount, :nb_total_places, :availability_id, :all_day, :recurrence,
99
                                                     :recurrence_end_at, :category_id, :event_theme_ids, :age_range_id,
100
                                                     event_theme_ids: [],
101
                                                     event_image_attributes: %i[id attachment],
102
                                                     event_files_attributes: %i[id attachment _destroy],
103
                                                     event_price_categories_attributes: %i[id price_category_id amount _destroy],
104
                                                     advanced_accounting_attributes: %i[code analytical_section])
105
    EventService.process_params(event_preparams)
7✔
106
  end
107
end
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc