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