diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index dfc3e5f1..4b073415 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -19,15 +19,15 @@ class IssuesController < ApplicationController @all_issues = issues @filter_issues = @all_issues - @filter_issues = @filter_issues.where.not(status_id: 5) if params[:status_type].to_i == 1 - @filter_issues = @filter_issues.where(status_id: 5) if params[:status_type].to_i == 2 + @filter_issues = @filter_issues.where.not(status_id: IssueStatus::CLOSED) if params[:status_type].to_i == IssueStatus::ADD + @filter_issues = @filter_issues.where(status_id: IssueStatus::CLOSED) if params[:status_type].to_i == IssueStatus::SOLVING @filter_issues = @filter_issues.where("subject LIKE ? OR description LIKE ? ", "%#{params[:search]}%", "%#{params[:search]}%") if params[:search].present? - @open_issues = @all_issues.where.not(status_id: 5) - @close_issues = @all_issues.where(status_id: 5) + @open_issues = @all_issues.where.not(status_id: IssueStatus::CLOSED) + @close_issues = @all_issues.where(status_id: IssueStatus::CLOSED) @assign_to_me = @filter_issues.where(assigned_to_id: current_user&.id) @my_published = @filter_issues.where(author_id: current_user&.id) scopes = Issues::ListQueryService.call(issues,params.delete_if{|k,v| v.blank?}, "Issue") - @issues_size = @filter_issues.size + @issues_size = scopes.size @issues = paginate(scopes) respond_to do |format| diff --git a/app/controllers/pull_requests_controller.rb b/app/controllers/pull_requests_controller.rb index 2a9713f8..8521cd4b 100644 --- a/app/controllers/pull_requests_controller.rb +++ b/app/controllers/pull_requests_controller.rb @@ -15,13 +15,13 @@ class PullRequestsController < ApplicationController @all_issues = issues.distinct @filter_issues = @all_issues @filter_issues = @filter_issues.where("subject LIKE ? OR description LIKE ? ", "%#{params[:search]}%", "%#{params[:search]}%") if params[:search].present? - @open_issues = @filter_issues.joins(:pull_request).where(pull_requests: {status: 0}) - @close_issues = @filter_issues.joins(:pull_request).where(pull_requests: {status: 2}) - @merged_issues = @filter_issues.joins(:pull_request).where(pull_requests: {status: 1}) + @open_issues = @filter_issues.joins(:pull_request).where(pull_requests: {status: PullRequest::OPEN}) + @close_issues = @filter_issues.joins(:pull_request).where(pull_requests: {status: PullRequest::CLOSED}) + @merged_issues = @filter_issues.joins(:pull_request).where(pull_requests: {status: PullRequest::MERGED}) @user_admin_or_member = current_user.present? && (current_user.admin || @project.member?(current_user)) scopes = Issues::ListQueryService.call(issues,params.delete_if{|k,v| v.blank?}, "PullRequest") - @issues_size = @filter_issues.size + @issues_size = scopes.size @issues = paginate(scopes) end diff --git a/app/interactors/gitea/create_file_interactor.rb b/app/interactors/gitea/create_file_interactor.rb index acceeaa9..38981352 100644 --- a/app/interactors/gitea/create_file_interactor.rb +++ b/app/interactors/gitea/create_file_interactor.rb @@ -24,8 +24,14 @@ module Gitea def run Contents::CreateForm.new(valid_params).validate! - response = Gitea::Repository::Entries::CreateService.new(token, owner, @params[:identifier], @params[:filepath], file_params).call - render_result(response) + result = Gitea::Repository::Entries::CreateService.call(token, + owner, @params[:identifier], @params[:filepath], file_params) + + if result[:status] == :success + @result = result[:body] + else + fail!(result[:message]) + end rescue Exception => exception Rails.logger.info "Exception ===========> #{exception.message}" fail!(exception.message) @@ -56,7 +62,7 @@ module Gitea file_params = {} file_params = file_params.merge(branch: @params[:branch]) unless @params[:branch].blank? file_params = file_params.merge(new_branch: @params[:new_branch]) unless @params[:new_branch].blank? - file_params = file_params.merge(content: Base64.encode64(@params[:content])) + file_params = file_params.merge(content: Base64.encode64(@params[:content] || "")) file_params = file_params.merge(message: @params[:message]) unless @params[:message].blank? file_params = file_params.merge(committer: @params[:committer]) file_params diff --git a/app/services/gitea/client_service.rb b/app/services/gitea/client_service.rb index 0ef04199..b88d8382 100644 --- a/app/services/gitea/client_service.rb +++ b/app/services/gitea/client_service.rb @@ -214,6 +214,14 @@ class Gitea::ClientService < ApplicationService [body, message] end + def json_parse!(body) + return nil unless body.present? + + body = JSON.parse(body) + body, message = fix_body(body) + body + end + def log_error(status, body) puts "[gitea] status: #{status}" puts "[gitea] body: #{body&.force_encoding('UTF-8')}" diff --git a/app/services/gitea/repository/entries/create_service.rb b/app/services/gitea/repository/entries/create_service.rb index 9f5abad2..5e1a4c4b 100644 --- a/app/services/gitea/repository/entries/create_service.rb +++ b/app/services/gitea/repository/entries/create_service.rb @@ -30,8 +30,7 @@ class Gitea::Repository::Entries::CreateService < Gitea::ClientService def call response = post(url, params) - - render_201_response(response) + response_payload(response) end private @@ -43,4 +42,21 @@ class Gitea::Repository::Entries::CreateService < Gitea::ClientService "/repos/#{owner}/#{repo_name}/contents/#{filepath}".freeze end + def response_payload(response) + status = response.status + body = response&.body + + log_error(status, body) + status_payload(status, body) + end + + def status_payload(status, body) + case status + when 201 then success(json_parse!(body)) + when 403 then error("你没有权限操作!") + when 404 then error("你操作的链接不存在!") + when 422 then error("#{filepath}文件已存在,不能重复创建!") + else error("系统错误!") + end + end end diff --git a/app/views/pull_requests/index.json.jbuilder b/app/views/pull_requests/index.json.jbuilder index b8326647..e13f1005 100644 --- a/app/views/pull_requests/index.json.jbuilder +++ b/app/views/pull_requests/index.json.jbuilder @@ -1,5 +1,4 @@ json.partial! "commons/success" -json.all_count @all_issues.size json.open_count @open_issues.size json.close_count @close_issues.size json.merged_issues_size @merged_issues.size