ADD create project and repository api

dev_forge
Jasder 5 years ago
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

@ -1,5 +1,5 @@
class Gitea::RepositoryInteractor
attr_reader :token, :repository
attr_reader :error
# params: token and repository
def self.call(token, repository)
@ -27,7 +27,7 @@ class Gitea::RepositoryInteractor
private
attr_reader :error
attr_reader :token, :repository
def fail!(error)
@error = error

@ -1,4 +1,6 @@
class Project < ApplicationRecord
belongs_to :ignore, optional: true
belongs_to :license, optional: true
belongs_to :owner, class_name: 'User', foreign_key: :user_id
belongs_to :project_category , :counter_cache => true
belongs_to :project_language , :counter_cache => true
@ -6,6 +8,7 @@ class Project < ApplicationRecord
has_many :members
has_many :manager_members, -> { joins(:roles).where(roles: { name: 'Manager' }) }, class_name: 'Member'
has_one :project_score, dependent: :destroy
has_one :repository, dependent: :destroy
has_many :issues
has_many :user_grades, dependent: :destroy

@ -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

@ -8,7 +8,7 @@ class Gitea::Repository::CreateService < Gitea::ClientService
# "gitignores": "string",
# "issue_labels": "string",
# "license": "string",
# "name": "string",
# "name": "string", *
# "private": true,
# "readme": "string"
# }

@ -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

@ -27,6 +27,8 @@ Rails.application.routes.draw do
resources :ignores, only: [:index, :show]
resources :licenses, only: [:index, :show]
resources :projects, only: [:index, :create]
# resources :memos do
# member do
# post :sticky_or_cancel

Loading…
Cancel
Save