diff --git a/app/controllers/admins/users_controller.rb b/app/controllers/admins/users_controller.rb index 98f0a6bf..31946257 100644 --- a/app/controllers/admins/users_controller.rb +++ b/app/controllers/admins/users_controller.rb @@ -58,11 +58,55 @@ class Admins::UsersController < Admins::BaseController render_ok end - private + def new + @user = User.new + end + + def create + logger.info "---validate_create_params: #{validate_create_params}" + Users::AdminCreateUserForm.new(validate_create_params).validate! + user = User.new(create_params) + user.type = 'User' + 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[login nickname gender mail phone location location_city password professional_certification]) + end + + def validate_create_params + create_params.slice(:login, :mail, :phone, :password) + end end diff --git a/app/forms/users/admin_create_user_form.rb b/app/forms/users/admin_create_user_form.rb new file mode 100644 index 00000000..06b9dc21 --- /dev/null +++ b/app/forms/users/admin_create_user_form.rb @@ -0,0 +1,32 @@ +class Users::AdminCreateUserForm + include ActiveModel::Model + + + attr_accessor :mail, :login, :phone, :password + + validates :login, presence: true + validates :mail, presence: true, format: { with: CustomRegexp::EMAIL, message: "邮箱格式错误." } + validates :phone, presence: true, format: { with: CustomRegexp::PHONE, message: "手机号格式错误" } + validates :password, presence: true, length: { minimum: 8, maximum: 16 }, format: { with: CustomRegexp::PASSWORD, message: "8~16位密码,支持字母数字和符号" } + + validate :check_login, :check_mail + + private + def check_mail + return if mail.blank? + if User.exists?(mail: mail) + raise "邮箱 #{mail} 已使用." + errors.add(:mail, :not_exist) + end + end + + def check_login + return if login.blank? + if User.exists?(login: login) + raise "手机号 #{login} 已使用." + errors.add(:login, :not_exist) + end + end + +end + diff --git a/app/views/admins/users/edit.html.erb b/app/views/admins/users/edit.html.erb index 5abc8271..7cf32331 100644 --- a/app/views/admins/users/edit.html.erb +++ b/app/views/admins/users/edit.html.erb @@ -64,12 +64,12 @@ <%= f.label :identity, label: '职业' %> <%= select_tag('user[identity]', [], class: 'form-control identity-select optional', 'data-value': @user.user_extension&.identity, 'data-first-title': '请选择') %> -