modify common function for update blockchain

This commit is contained in:
nigel007 2021-01-03 17:08:13 +08:00
parent 43374c8019
commit 6aef8e19c7
1 changed files with 245 additions and 0 deletions

View File

@ -896,6 +896,251 @@ class ApplicationController < ActionController::Base
}.to_json }.to_json
success_blockchain = invoke_blockchain_api(Blockchain.blockchain_config[:api_url], param) success_blockchain = invoke_blockchain_api(Blockchain.blockchain_config[:api_url], param)
return success_blockchain return success_blockchain
elsif activity_type == "issue_comment_create"
issue_comment_id = model['id']
issue_id = model['journalized_id']
parent_id = model['parent_id'].nil? ? "" : model['parent_id']
issue = Issue.find(issue_id)
issue_classify = issue['issue_classify'] # issue或pull_request
project_id = issue['project_id']
project = Project.find(project_id)
if project['use_blockchain'] == 0
# 无需执行上链操作
return true
end
reponame = project['name']
owner_id = project['user_id']
owner = User.find(owner_id)
ownername = owner['login']
author_id = model['user_id']
author = User.find(author_id)
username = author['login']
action = 'created'
content = model['notes']
created_at = model['created_on']
if issue_classify == "issue"
param = {
"action": "executeContract",
"contractID": "RepositoryDB1",
"operation": "putIssueComment",
"arg": {
"issue_comment_id": issue_comment_id,
"issue_id": issue_id,
"parent_id": parent_id,
"reponame": reponame,
"ownername": ownername,
"username": username,
"action": action,
"content": content,
"created_at": created_at,
}.to_json
}.to_json
elsif issue_classify == "pull_request"
param = {
"action": "executeContract",
"contractID": "RepositoryDB0",
"operation": "putPullRequestComment",
"arg": {
"pull_request_comment_id": issue_comment_id,
"pull_request_id": issue_id,
"parent_id": parent_id,
"reponame": reponame,
"ownername": ownername,
"username": username,
"action": action,
"content": content,
"created_at": created_at,
}.to_json
}.to_json
end
# 调用区块链接口
success_blockchain = invoke_blockchain_api(Blockchain.blockchain_config[:api_url], param)
return success_blockchain
elsif activity_type == "pull_request_create"
# 调用区块链接口
project_id = model['project_id']
project = Project.find(project_id)
if project['use_blockchain'] == 0
# 无需执行上链操作
return true
end
pull_request_id = model['id']
reponame = project['name']
owner_id = project['user_id']
owner = User.find(owner_id)
ownername = owner['login']
action = 'opened'
title = model['title']
content = model['body']
source_branch = model['head']
source_repo_id = model['fork_project_id'].nil? ? project_id : model['fork_project_id']
target_branch = model['base']
target_repo_id = project_id
author_id = model['user_id']
author = User.find(author_id)
username = author['login']
created_at = model['created_at']
updated_at = model['updated_at']
# 查询pull request对应的commit信息
commits = Gitea::PullRequest::CommitsService.call(ownername, reponame, model['gpid'])
commit_shas = []
commits.each do |c|
commit_shas << c["Sha"]
end
param = {
"action": "executeContract",
"contractID": "RepositoryDB0",
"operation": "putPullRequest",
"arg": {
"pull_request_id": pull_request_id,
"repo_id": project_id,
"ownername": ownername,
"reponame": reponame,
"username": username,
"action": action,
"title": title,
"content": content,
"source_branch": source_branch,
"target_branch": target_branch,
"commit_shas": commit_shas,
"created_at": created_at,
"updated_at": updated_at
}.to_json
}.to_json
success_blockchain = invoke_blockchain_api(Blockchain.blockchain_config[:api_url], param)
return success_blockchain
elsif activity_type == "pull_request_merge"
# 调用区块链接口
project_id = model['project_id']
project = Project.find(project_id)
if project['use_blockchain'] == 0
# 无需执行上链操作
return true
end
pull_request_id = model['id']
reponame = project['name']
owner_id = project['user_id']
owner = User.find(owner_id)
ownername = owner['login']
action = 'merged'
# 查询pull request对应的commit信息
commits = Gitea::PullRequest::CommitsService.call(ownername, reponame, model['gpid'])
commit_shas = []
commits.each do |c|
commit_shas << c["Sha"]
end
# 将pull request相关信息写入链上
param = {
"action": "executeContract",
"contractID": "RepositoryDB0",
"operation": "putPullRequest",
"arg": {
"pull_request_id": pull_request_id,
"repo_id": project_id,
"ownername": ownername,
"reponame": reponame,
"username": username,
"action": action,
"title": title,
"content": content,
"source_branch": source_branch,
"target_branch": target_branch,
"commit_shas": commit_shas,
"created_at": created_at,
"updated_at": updated_at
}.to_json
}.to_json
success_blockchain = invoke_blockchain_api(Blockchain.blockchain_config[:api_url], param)
# 将commit相关信息写入链上
commit_shas.each do |commit_sha|
commit_diff = Gitea::Commit::DiffService.call(ownername, reponame, commit_sha)
commit = Gitea::Commit::InfoService.call(ownername, reponame, commit_sha)
param = {
"action": "executeContract",
"contractID": "RepositoryDB1",
"operation": "putCommit",
"arg": {
"commit_hash": commit_sha,
"repo_id": project_id,
"author": commit['author']['login'],
"author_email": commit['author']['email'],
"committer": commit['committer']['login'],
"committer_email": commit['committer']['email'],
"author_time": commit['commit']['author']['date'],
"committer_time": commit['commit']['committer']['date'],
"message": commit['commit']['message'],
"diff": commit_diff['Files']
}.to_json
}.to_json
success_blockchain_commit = invoke_blockchain_api(Blockchain.blockchain_config[:api_url], param)
success_blockchain = success_blockchain & success_blockchain_commit
end
return success_blockchain
elsif activity_type == "pull_request_refuse"
# 调用区块链接口
project_id = model['project_id']
project = Project.find(project_id)
if project['use_blockchain'] == 0
# 无需执行上链操作
return true
end
pull_request_id = model['id']
reponame = project['name']
owner_id = project['user_id']
owner = User.find(owner_id)
ownername = owner['login']
action = 'refused'
# 将pull request相关信息写入链上
param = {
"action": "executeContract",
"contractID": "RepositoryDB0",
"operation": "putPullRequest",
"arg": {
"pull_request_id": pull_request_id,
"repo_id": project_id,
"ownername": ownername,
"reponame": reponame,
"username": username,
"action": action,
"title": title,
"content": content,
"source_branch": source_branch,
"target_branch": target_branch,
"created_at": created_at,
"updated_at": updated_at
}.to_json
}.to_json
success_blockchain = invoke_blockchain_api(Blockchain.blockchain_config[:api_url], param)
return success_blockchain
end end
end end