diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 1c9fd124..ee47563c 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -896,6 +896,251 @@ class ApplicationController < ActionController::Base }.to_json success_blockchain = invoke_blockchain_api(Blockchain.blockchain_config[:api_url], param) 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