You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
40 lines
1.8 KiB
40 lines
1.8 KiB
module Api
|
|
module V1
|
|
module Admin
|
|
class UsersController < BaseController
|
|
before_action :set_user, only: %i[show update destroy]
|
|
def index = render json: User.order(:email).map { |user| payload(user) }
|
|
def show = render json: payload(@user)
|
|
def create
|
|
user = User.new(email: params.dig(:user, :email), password: params.dig(:user, :password), password_confirmation: params.dig(:user, :password))
|
|
user.skip_confirmation! if ActiveModel::Type::Boolean.new.cast(params.dig(:user, :confirmed))
|
|
user.save ? render(json: payload(user), status: :created) : render_validation(user)
|
|
end
|
|
def update
|
|
attributes = params.require(:user).permit(:email, :praepedeutikum_done, :confirmed, :password)
|
|
password = attributes.delete(:password)
|
|
confirmed = attributes.delete(:confirmed)
|
|
@user.assign_attributes(attributes)
|
|
@user.password = password if password.present?
|
|
@user.password_confirmation = password if password.present?
|
|
unless confirmed.nil?
|
|
if confirmed
|
|
@user.confirm
|
|
else
|
|
@user.confirmed_at = nil
|
|
end
|
|
end
|
|
@user.save ? render(json: payload(@user)) : render_validation(@user)
|
|
end
|
|
def destroy
|
|
return render json: { error: "Das eigene Administratorkonto kann nicht gelöscht werden" }, status: :unprocessable_entity if @user == current_user
|
|
@user.destroy!
|
|
head :no_content
|
|
end
|
|
private
|
|
def set_user = @user = User.find(params[:id])
|
|
def payload(user) = user.as_json(only: %i[id email confirmed_at praepedeutikum_done created_at updated_at]).merge(is_admin: user.is_admin?, entries_count: user.entries.count)
|
|
end
|
|
end
|
|
end
|
|
end
|