From d7dd3901b8f60f76283d00c7f8d9a18bf0e776d0 Mon Sep 17 00:00:00 2001 From: yystopf Date: Wed, 22 Jun 2022 19:08:14 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E:=20=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E8=AF=A6=E6=83=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Gemfile | 2 +- Gemfile.lock | 4 +- app/controllers/api/v1/base_controller.rb | 4 ++ app/controllers/api/v1/projects_controller.rb | 11 +++++ app/controllers/api/v1/repos_controller.rb | 6 --- .../concerns/api/project_helper.rb | 20 ++++++++ app/services/api/v1/projects/get_service.rb | 48 +++++++++++++++++++ .../v1/projects/_simple_detail.json.jbuilder | 10 ++++ app/views/api/v1/projects/show.json.jbuilder | 5 ++ .../api/v1/users/_simple_user.json.jbuilder | 9 ++++ config/routes/api.rb | 16 ++++++- 11 files changed, 125 insertions(+), 10 deletions(-) create mode 100644 app/controllers/api/v1/projects_controller.rb delete mode 100644 app/controllers/api/v1/repos_controller.rb create mode 100644 app/controllers/concerns/api/project_helper.rb create mode 100644 app/services/api/v1/projects/get_service.rb create mode 100644 app/views/api/v1/projects/_simple_detail.json.jbuilder create mode 100644 app/views/api/v1/projects/show.json.jbuilder create mode 100644 app/views/api/v1/users/_simple_user.json.jbuilder diff --git a/Gemfile b/Gemfile index 0347de453..1542856cf 100644 --- a/Gemfile +++ b/Gemfile @@ -135,4 +135,4 @@ gem 'doorkeeper' gem 'doorkeeper-jwt' -gem 'gitea-client', '~> 0.5.1' \ No newline at end of file +gem 'gitea-client', '~> 0.6.2' \ No newline at end of file diff --git a/Gemfile.lock b/Gemfile.lock index 6e4f079fb..467e19a2d 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -135,7 +135,7 @@ GEM fugit (1.4.1) et-orbi (~> 1.1, >= 1.1.8) raabro (~> 1.4) - gitea-client (0.5.1) + gitea-client (0.6.2) rest-client (~> 2.1.0) globalid (0.4.2) activesupport (>= 4.2.0) @@ -478,7 +478,7 @@ DEPENDENCIES enumerize faraday (~> 0.15.4) font-awesome-sass (= 4.7.0) - gitea-client (~> 0.5.1) + gitea-client (~> 0.6.2) grape-entity (~> 0.7.1) groupdate (~> 4.1.0) harmonious_dictionary (~> 0.0.1) diff --git a/app/controllers/api/v1/base_controller.rb b/app/controllers/api/v1/base_controller.rb index 76c527d85..2202df8d2 100644 --- a/app/controllers/api/v1/base_controller.rb +++ b/app/controllers/api/v1/base_controller.rb @@ -1,2 +1,6 @@ class Api::V1::BaseController < ApplicationController + + include Api::ProjectHelper + + skip_before_action :user_setup end \ No newline at end of file diff --git a/app/controllers/api/v1/projects_controller.rb b/app/controllers/api/v1/projects_controller.rb new file mode 100644 index 000000000..05a3750ca --- /dev/null +++ b/app/controllers/api/v1/projects_controller.rb @@ -0,0 +1,11 @@ +class Api::V1::ProjectsController < Api::V1::BaseController + before_action :load_project, only: [:show] + + def index + render_ok + end + + def show + @result_object = Api::V1::Projects::GetService.call(@project, current_user.gitea_token) + end +end \ No newline at end of file diff --git a/app/controllers/api/v1/repos_controller.rb b/app/controllers/api/v1/repos_controller.rb deleted file mode 100644 index 667f47dbc..000000000 --- a/app/controllers/api/v1/repos_controller.rb +++ /dev/null @@ -1,6 +0,0 @@ -class Api::V1::ReposController < Api::V1::BaseController - - def index - render_ok - end -end \ No newline at end of file diff --git a/app/controllers/concerns/api/project_helper.rb b/app/controllers/concerns/api/project_helper.rb new file mode 100644 index 000000000..0b444c488 --- /dev/null +++ b/app/controllers/concerns/api/project_helper.rb @@ -0,0 +1,20 @@ +module Api::ProjectHelper + extend ActiveSupport::Concern + + def load_project + namespace = params[:owner] + repo = params[:repo] + + @project, @owner = Project.find_with_namespace(namespace, repo) + + if @project + logger.info "###########:project not founded" + @project + else + logger.info "###########:project not found" + @project = nil + render_not_found and return + end + @project + end +end \ No newline at end of file diff --git a/app/services/api/v1/projects/get_service.rb b/app/services/api/v1/projects/get_service.rb new file mode 100644 index 000000000..1244938ce --- /dev/null +++ b/app/services/api/v1/projects/get_service.rb @@ -0,0 +1,48 @@ +class Api::V1::Projects::GetService < ApplicationService + + attr_reader :project, :token, :owner, :repo + attr_accessor :gitea_data, :gitea_branch_tag_count + + def initialize(project, token=nil) + @project = project + @owner = project&.owner.login + @repo = project&.identifier + @token = token + end + + def call + $gitea_client.token = token unless token.blank? + load_gitea_data + load_gitea_branch_tag_count + + $gitea_client.token = nil unless token.blank? + + result_object + rescue + raise Error, "服务器错误,请联系系统管理员!" + end + + private + + def result_object + { + full_name: "#{owner}/#{repo}", + owner: project&.owner, + ssh_url: gitea_data["ssh_url"], + clone_url: gitea_data["clone_url"], + size: gitea_data["size"], + default_branch: gitea_data["default_branch"], + empty: gitea_data["empty"], + branch_count: gitea_branch_tag_count["branch_count"], + tag_count: gitea_branch_tag_count["tag_count"], + } + end + + def load_gitea_data + @gitea_data = $gitea_client.get_repos_by_owner_repo(owner, repo) + end + + def load_gitea_branch_tag_count + @gitea_branch_tag_count = $gitea_client.get_repos_branch_tag_count_by_owner_repo(owner, repo) + end +end \ No newline at end of file diff --git a/app/views/api/v1/projects/_simple_detail.json.jbuilder b/app/views/api/v1/projects/_simple_detail.json.jbuilder new file mode 100644 index 000000000..f5f6b1dbe --- /dev/null +++ b/app/views/api/v1/projects/_simple_detail.json.jbuilder @@ -0,0 +1,10 @@ +if project.present? + json.type @project.project_type + json.(project, + :description, :forked_count, :forked_from_project_id, :identifier, + :issues_count, :pull_requests_count, :invite_code, :website, :platform, + :name, :open_devops, :praises_count, :is_public, :status, :watchers_count, + :ignore_id, :license_id, :project_category_id, :project_language_id) +else + json.nil! +end \ No newline at end of file diff --git a/app/views/api/v1/projects/show.json.jbuilder b/app/views/api/v1/projects/show.json.jbuilder new file mode 100644 index 000000000..40862365c --- /dev/null +++ b/app/views/api/v1/projects/show.json.jbuilder @@ -0,0 +1,5 @@ +json.owner do + json.partial! "api/v1/users/simple_user", user: @result_object[:owner] +end +json.(@result_object, :full_name, :ssh_url, :clone_url, :default_branch, :empty, :branch_count, :tag_count) +json.partial! "api/v1/projects/simple_detail", project: @project \ No newline at end of file diff --git a/app/views/api/v1/users/_simple_user.json.jbuilder b/app/views/api/v1/users/_simple_user.json.jbuilder new file mode 100644 index 000000000..ef45bcd94 --- /dev/null +++ b/app/views/api/v1/users/_simple_user.json.jbuilder @@ -0,0 +1,9 @@ +if user.present? + json.id user.id + json.type user.type + json.name user.real_name + json.login user.login + json.image_url url_to_avatar(user) +else + json.nil! +end \ No newline at end of file diff --git a/config/routes/api.rb b/config/routes/api.rb index 718f705a6..cf55cfcf7 100644 --- a/config/routes/api.rb +++ b/config/routes/api.rb @@ -1,7 +1,21 @@ defaults format: :json do namespace :api do namespace :v1 do - resources :repos + resources :projects, only: [:index] + # 项目相关的api + scope ':owner/:repo' do + # projects + resource :projects, path: '/', only: [:show, :update, :edit, :destroy] + + # projects文件夹下的 + scope module: :projects do + resources :issues + resources :pull_requests + resources :versions + resources :release_versions + end + end + end end end \ No newline at end of file