module Gitea class DeleteFileInteractor def self.call(token, owner, params={}) interactor = new(token, owner, params) interactor.run interactor end attr_reader :error, :result def initialize(token, owner, params) @token = token @owner = owner @params = params end def success? @error.nil? end def result @result end def run Contents::DeleteForm.new(valid_params).validate! response = Gitea::Repository::Entries::DeleteService.new(token, owner, @params[:identifier], file_path, file_params).call render_result(response) rescue Exception => exception fail!(exception.message) end private attr_reader :params, :owner, :token def fail!(error) puts "[exception]: error" @error = error end def render_result(response) if response.status == 200 @result = JSON.parse(response.body) else Rails.logger.error("Gitea::Repository::Entries::DeleteService error[#{response.status}]======#{response.body}") @error = "删除失败,请确认该分支是否是保护分支。" @error = "删除失败,参数sha不匹配。" if response.body.to_s.include?("sha does not match") end end def file_path if @params[:base64_filepath].present? Base64.decode64(params[:base64_filepath]) else @params[:filepath] end end def valid_params { filepath: file_path, sha: @params[:sha] } end def file_params Hash.new.merge( branch: @params[:branch], sha: @params[:sha], new_branch: @params[:new_branch], message: @params[:message], ).compact end end end