parent
720247b130
commit
566db3b887
@ -1,2 +1,22 @@
|
|||||||
class ProjectsController < ApplicationController
|
class ProjectsController < ApplicationController
|
||||||
|
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
|
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