From b667664ed40e486d6fb4360b894648dd5eab651a Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Wed, 25 Dec 2019 13:55:40 +0800 Subject: [PATCH] ADD gitea pull request api --- app/services/gitea/client_service.rb | 7 ++-- .../gitea/pull_request/check_service.rb | 35 ++++++++++++++++ .../gitea/pull_request/create_service.rb | 32 ++++++++++++++ .../gitea/pull_request/get_service.rb | 37 ++++++++++++++++ .../gitea/pull_request/list_service.rb | 7 ++++ .../gitea/pull_request/merge_service.rb | 42 +++++++++++++++++++ app/services/gitea/repository/get_service.rb | 13 +++++- 7 files changed, 168 insertions(+), 5 deletions(-) create mode 100644 app/services/gitea/pull_request/check_service.rb create mode 100644 app/services/gitea/pull_request/create_service.rb create mode 100644 app/services/gitea/pull_request/get_service.rb create mode 100644 app/services/gitea/pull_request/list_service.rb create mode 100644 app/services/gitea/pull_request/merge_service.rb diff --git a/app/services/gitea/client_service.rb b/app/services/gitea/client_service.rb index 6723fa248..2e5b88d70 100644 --- a/app/services/gitea/client_service.rb +++ b/app/services/gitea/client_service.rb @@ -15,7 +15,7 @@ class Gitea::ClientService < ApplicationService # token: {}, # data: {} # } - def post(url, params) + def post(url, params={}) puts "[gitea] request params: #{params}" request_url = [api_url, url].join('').freeze auth_token = authen_params(params[:token]) @@ -29,11 +29,10 @@ class Gitea::ClientService < ApplicationService def get(url, params={}) auth_token = authen_params(params[:token]) - response = conn(auth_token).get do |req| + conn(auth_token).get do |req| req.url full_url(url) req.body = params[:data].to_json end - render_status(response) end def delete(url, params={}) @@ -109,6 +108,8 @@ class Gitea::ClientService < ApplicationService # return {status: -1, message: result[0]} raise Error, result[0] when 204 + + puts "[gitea] " raise Error, "[gitea] delete ok" else result = JSON.parse(response&.body) diff --git a/app/services/gitea/pull_request/check_service.rb b/app/services/gitea/pull_request/check_service.rb new file mode 100644 index 000000000..e562a57fc --- /dev/null +++ b/app/services/gitea/pull_request/check_service.rb @@ -0,0 +1,35 @@ +# Check if a pull request has been merged +class Gitea::PullRequest::CheckService < Gitea::ClientService + attr_reader :user, :repo, :pull_request_id + + # user: 用户 + # repo: 仓库名称/标识 + # pull_request_id: pull request主键id + def initialize(user, repo, pull_request_id) + super({token: user.gitea_token}) + @user = user + @repo = repo + @pull_request_id = pull_request_id + end + + def call + response = get(url, params) + render_response(response) + end + + private + def params + Hash.new.merge(token: user.gitea_token) + end + + def url + "/repos/#{user.login}/#{repo}/pulls/#{pull_request_id}/merge".freeze + end + + def render_response(response) + case response.status + when 204 then true + when 404 then false + end + end +end diff --git a/app/services/gitea/pull_request/create_service.rb b/app/services/gitea/pull_request/create_service.rb new file mode 100644 index 000000000..32fd02093 --- /dev/null +++ b/app/services/gitea/pull_request/create_service.rb @@ -0,0 +1,32 @@ +# Create a pull request +class Gitea::PullRequest::CreateService < Gitea::ClientService + attr_reader :user, :repo, :params + + # params ex: + # { + # title: 'pull request title', + # body: 'pull request content', + # head: 'develop', // from branch 源分支 + # base: 'master' // to branch 目标分支 + # } + # 以上列子说明从develop分支合并到master分支 + # repo: 仓库名称 + def initialize(user, repo, params={}) + @user = user + @repo = repo + @params = params + end + + def call + post(url, request_params) + end + + private + def url + "/repos/#{user.login}/#{repo}/pulls".freeze + end + + def request_params + Hash.new.merge(token: user.gitea_token, data: params) + end +end diff --git a/app/services/gitea/pull_request/get_service.rb b/app/services/gitea/pull_request/get_service.rb new file mode 100644 index 000000000..6a7ec30f4 --- /dev/null +++ b/app/services/gitea/pull_request/get_service.rb @@ -0,0 +1,37 @@ +# Get a pull request +class Gitea::PullRequest::GetService < Gitea::ClientService + attr_reader :user, :repo, :pull_request_id + + # user: 用户 + # repo: 仓库名称/标识 + # pull_request_id: pull request主键id + def initialize(user, repo, pull_request_id) + super({token: user.gitea_token}) + @user = user + @repo = repo + @pull_request_id = pull_request_id + end + + def call + response = get(url, params) + render_result(response) + end + + private + def params + Hash.new.merge(token: user.gitea_token) + end + + def url + "/repos/#{user.login}/#{repo}/pulls/#{pull_request_id}".freeze + end + + def render_result(response) + case response.status + when 200 + JSON.parse(response.body) + else + nil + end + end +end diff --git a/app/services/gitea/pull_request/list_service.rb b/app/services/gitea/pull_request/list_service.rb new file mode 100644 index 000000000..a77443f59 --- /dev/null +++ b/app/services/gitea/pull_request/list_service.rb @@ -0,0 +1,7 @@ +# List a repo's pull requests +class Gitea::PullRequest::ListService < Gitea::ClientService + + def url + "/repos/{owner}/{repo}/pulls" + end +end diff --git a/app/services/gitea/pull_request/merge_service.rb b/app/services/gitea/pull_request/merge_service.rb new file mode 100644 index 000000000..971794a7c --- /dev/null +++ b/app/services/gitea/pull_request/merge_service.rb @@ -0,0 +1,42 @@ +# Merge a pull request +class Gitea::PullRequest::MergeService < Gitea::ClientService + attr_reader :user, :repo, :pull_request_id, :params + + # parameters: + # repo: name of the repo + # pull_request_id: index of the pull request to merge + # params: + # title: merge标题 + # message: merge说明 + def initialize(user, repo, pull_request_id, params={}) + @user = user + @repo = repo + @params = params + @pull_request_id = pull_request_id + end + + def call + post(url, request_params) + end + + private + def url + "/repos/#{user.login}/#{repo}/pulls/#{pull_request_id}/merge" + end + + def request_params + Hash.new.merge(token: user.gitea_token, data: body) + end + + def body + # TODO + # 暂时只支持 merge模式 + #params Do: Enum [ merge, rebase, rebase-merge, squash ], default merge + body = { + Do: 'merge' + } + body = body.merge(MergeTitleField: params[:title]) if params[:title] + body = body.merge(MergeMessageField: params[:message]) if params[:message] + body + end +end diff --git a/app/services/gitea/repository/get_service.rb b/app/services/gitea/repository/get_service.rb index 257607c83..372abce28 100644 --- a/app/services/gitea/repository/get_service.rb +++ b/app/services/gitea/repository/get_service.rb @@ -7,11 +7,11 @@ class Gitea::Repository::GetService < Gitea::ClientService end def call - get(url, params) + response = get(url, params) + render_result(response) end private - def params Hash.new.merge(token: user.gitea_token) end @@ -19,4 +19,13 @@ class Gitea::Repository::GetService < Gitea::ClientService def url "/repos/#{user.login}/#{repo_name}".freeze end + + def render_result(response) + case response.status + when 200 + JSON.parse(response.body) + else + nil + end + end end