forked from Gitlink/forgeplus
77 lines
1.7 KiB
Ruby
77 lines
1.7 KiB
Ruby
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
|