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

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