main
 1# frozen_string_literal: true
 2
 3module Scim
 4  module V2
 5    class UsersController < ::Scim::Controller
 6      include Pageable
 7      rescue_from ActiveRecord::RecordNotFound do |_error|
 8        @resource_id = params[:id] if params[:id].present?
 9        render "record_not_found", status: :not_found
10      end
11
12      def index
13        @users = User.order(:created_at).scim_search(params[:filter])
14        @users = paginate(@users, page: page - 1, page_size: page_size)
15        render formats: :scim, status: :ok
16      end
17
18      def show
19        @user = User.find(params[:id])
20        response.headers['Location'] = scim_v2_user_url(@user)
21        fresh_when(@user)
22        render formats: :scim, status: :ok
23      end
24
25      def create
26        user = repository.create!(user_params)
27        response.headers['Location'] = user.meta.location
28        render json: user.to_json, status: :created
29      end
30
31      def update
32        user = repository.update!(params[:id], user_params)
33        response.headers['Location'] = user.meta.location
34        render json: user.to_json, status: :ok
35      end
36
37      def destroy
38        repository.destroy!(params[:id])
39      end
40
41      private
42
43      def user_params
44        params.permit(:schemas, :userName, :locale, :timezone)
45      end
46
47      def repository(container = Spank::IOC)
48        container.resolve(:user_repository)
49      end
50
51      def page
52        page_param(:startIndex, default: 0, bottom: 1, top: 100)
53      end
54
55      def page_size
56        page_param(:count, default: 25, bottom: 0, top: 25)
57      end
58    end
59  end
60end