class Admins::UsersController < Admins::BaseController def index params[:sort_by] = params[:sort_by].presence || 'created_on' params[:sort_direction] = params[:sort_direction].presence || 'desc' users = Admins::UserQuery.call(params) @users = paginate users.includes(:user_extension, projects: :members) end def edit @user = User.find(params[:id]) end def update @user = User.find(params[:id]) Admins::UpdateUserService.call(@user, update_params) flash[:success] = '保存成功' redirect_to edit_admins_user_path(@user) rescue ActiveRecord::RecordInvalid flash.now[:danger] = '保存失败' render 'edit' rescue Admins::UpdateUserService::Error => ex flash.now[:danger] = ex.message render 'edit' end def destroy User.find(params[:id]).destroy! render_delete_success end def lock User.find(params[:id]).lock! render_ok end def unlock User.find(params[:id]).activate! render_ok end def reward_grade user = User.find(params[:user_id]) return render_unprocessable_entity('金币数量必须大于0') if params[:grade].to_i <= 0 RewardGradeService.call(user, container_id: user.id, container_type: 'Feedback', score: params[:grade].to_i, not_unique: true) render_ok(grade: user.grade) end def reset_login_times User.find(params[:id]).reset_login_times! render_ok end def new @user = User.new end def create Users::AdminCreateUserForm.new(validate_create_params).validate! user = User.new(create_params) login = User.generate_login("p") user.type = 'User' user.login = login user.mail = "#{login}@example.org" ActiveRecord::Base.transaction do if user.save! UserExtension.create!(user_id: user.id) interactor = Gitea::RegisterInteractor.call({username: user.login, email: user.mail, password: create_params[:password]}) if interactor.success? gitea_user = interactor.result result = Gitea::User::GenerateTokenService.call(user.login, create_params[:password]) user.gitea_token = result['sha1'] user.gitea_uid = gitea_user[:body]['id'] user.save! end end end flash[:success] = '保存成功' redirect_to admins_users_path rescue ActiveRecord::RecordInvalid => e logger.info "------------ #{e.message}" puts e.message flash.now[:danger] = e.message render 'new' rescue Exception => ex flash.now[:danger] = ex.message render 'new' end private def update_params params.require(:user).permit(%i[lastname nickname gender identity technical_title student_id is_shixun_marker mail phone location location_city school_id department_id admin business is_test password professional_certification authentication]) end def create_params params.require(:user).permit(%i[nickname gender mail phone location location_city password professional_certification]) end def validate_create_params create_params.slice(:phone, :password) end end