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