parent
720247b130
commit
566db3b887
@ -1,2 +1,22 @@
|
||||
class ProjectsController < ApplicationController
|
||||
end
|
||||
before_action :require_login
|
||||
|
||||
def index
|
||||
end
|
||||
|
||||
def create
|
||||
ActiveRecord::Base.transaction do
|
||||
Projects::CreateForm.new(project_params).validate!
|
||||
@project = Projects::CreateService.new(current_user, project_params).call
|
||||
end
|
||||
rescue Exception => e
|
||||
uid_logger_error(e.message)
|
||||
tip_exception(e.message)
|
||||
end
|
||||
|
||||
private
|
||||
def project_params
|
||||
params.permit(:user_id, :name, :description, :repository_name,
|
||||
:project_category_id, :project_language_id, :license_id, :ignore_id)
|
||||
end
|
||||
end
|
||||
|
@ -0,0 +1,3 @@
|
||||
class BaseForm
|
||||
include ActiveModel::Model
|
||||
end
|
@ -0,0 +1,10 @@
|
||||
class Projects::CreateForm < BaseForm
|
||||
REPOSITORY_NAME_REGEX = /^(?!_)(?!.*?_$)[a-zA-Z0-9_-]+$/ #只含有数字、字母、下划线不能以下划线开头和结尾
|
||||
attr_accessor :user_id, :name, :description, :repository_name, :project_category_id,
|
||||
:project_language_id, :ignore_id, :license_id, :private
|
||||
|
||||
validates :user_id, :name, :description,:repository_name,
|
||||
:project_category_id, :project_language_id, presence: true
|
||||
validates_format_of :repository_name, with: REPOSITORY_NAME_REGEX, multiline: true
|
||||
|
||||
end
|
@ -0,0 +1,6 @@
|
||||
class Repository < ApplicationRecord
|
||||
self.inheritance_column = nil # FIX The single-table inheritance mechanism failed
|
||||
belongs_to :project
|
||||
|
||||
validates :identifier, presence: true, uniqueness: true
|
||||
end
|
@ -0,0 +1,49 @@
|
||||
class Projects::CreateService < ApplicationService
|
||||
attr_reader :user, :params
|
||||
|
||||
def initialize(user, params)
|
||||
@user = user
|
||||
@params = params
|
||||
end
|
||||
|
||||
def call
|
||||
@project = Project.new(project_params)
|
||||
ActiveRecord::Base.transaction do
|
||||
if @project.save!
|
||||
Repositories::CreateService.new(user, @project, repository_params).call
|
||||
else
|
||||
#
|
||||
end
|
||||
end
|
||||
@project
|
||||
rescue => e
|
||||
puts "create project service error: #{e.message}"
|
||||
raise Error, e.message
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def project_params
|
||||
{
|
||||
name: params[:name],
|
||||
user_id: params[:user_id],
|
||||
description: params[:description],
|
||||
project_category_id: params[:project_category_id],
|
||||
project_language_id: params[:project_language_id],
|
||||
is_public: get_is_public,
|
||||
ignore_id: params[:ignore_id],
|
||||
license_id: params[:license_id]
|
||||
}
|
||||
end
|
||||
|
||||
def repository_params
|
||||
{
|
||||
hidden: get_is_public,
|
||||
identifier: params[:repository_name]
|
||||
}
|
||||
end
|
||||
|
||||
def get_is_public
|
||||
params[:private] || true
|
||||
end
|
||||
end
|
@ -0,0 +1,51 @@
|
||||
class Repositories::CreateService < ApplicationService
|
||||
attr_reader :user, :project, :params
|
||||
|
||||
def initialize(user, project, params)
|
||||
@project = project
|
||||
@user = user
|
||||
@params = params
|
||||
end
|
||||
|
||||
def call
|
||||
@repository = Repository.new(repository_params)
|
||||
ActiveRecord::Base.transaction do
|
||||
if @repository.save!
|
||||
gitea_repository = Gitea::Repository::CreateService.new(user.gitea_token, gitea_repository_params).call
|
||||
project.update_attributes(gpid: gitea_repository["id"]) if gitea_repository
|
||||
end
|
||||
@repository
|
||||
end
|
||||
rescue => e
|
||||
puts "create repository service error: #{e.message}"
|
||||
raise Error, e.message
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def repository_params
|
||||
params.merge(project_id: project.id)
|
||||
end
|
||||
|
||||
def gitea_repository_params
|
||||
hash = {
|
||||
name: params[:identifier],
|
||||
private: !params[:hidden]
|
||||
# "auto_init": true,
|
||||
# "description": "string",
|
||||
# "gitignores": "string",
|
||||
# "issue_labels": "string",
|
||||
# "license": "string",
|
||||
# "name": "string",
|
||||
# "private": true,
|
||||
# "readme": "string"
|
||||
}
|
||||
|
||||
ignore = project.ignore
|
||||
license = project.license
|
||||
hash.merge(license: license.content) if license
|
||||
hash.merge(gitignores: ignore.content) if ignore
|
||||
puts "[gitea] create repository params: #{hash}"
|
||||
hash
|
||||
end
|
||||
end
|
@ -0,0 +1 @@
|
||||
json.extract! @project, :id, :name
|
@ -0,0 +1 @@
|
||||
json.projects []
|
Loading…
Reference in new issue