@startuml

autonumber

actor "用户" as user

participant "前端" as aladdinFront

participant "aladdin" as aladdinServer

participant "bitbucket" as bitbucket

participant "jira" as jira

 queue rabbitmq

== 新增/编辑部署单元 ==

user -> aladdinFront: 新增/编辑部署单元
activate aladdinFront

note right of aladdinFront: 只有Web端类型的系统有 \n Code Review 开关

aladdinFront -> aladdinServer: 开启 Code Review 开关
activate aladdinServer

aladdinServer -> aladdinServer: cicd_deploy_unit_ 新增或者更新一条数据 \n

note right of aladdinServer:  触发Nodejs端 pr 时，processCodeReviewToQueue codeReview入队列 \n CodeReviewReceiver.receiveMessage 监听消息
aladdinServer -> rabbitmq: receiveMessage.handleCodeReview(elsa.rabbitmq.queue.codereview)
activate rabbitmq

rabbitmq --> aladdinServer: 返回结果
deactivate rabbitmq

note right of aladdinServer: handleCodeReview 收集数据

alt 提交状态是OPEN(提交合并)并且PR关联的Jira issue获取方式是BITBUCKET_PR_WEB(bitbucket pr页面获取

aladdinServer -> aladdinServer: 判断部署单元是否开启CodeReview开关。

aladdinServer -> bitbucket: getJiraListFromBitbucket 从bitbucket上获取jira issue列表
activate bitbucket

bitbucket --> aladdinServer: 返回结果
deactivate bitbucket

aladdinServer -> jira: bitbucketPrWebHandle 根据issue key 获取 issue信息
activate jira

jira --> aladdinServer: 返回结果
deactivate jira

aladdinServer -> aladdinServer: aladdin_jira_issue 表新增数据，根据Jira issue获取方式保存不同的数据，组装，最后保存到 aladdin_code_review_pr 表

else 提交状态是MERGE(已合并)

aladdinServer -> aladdinServer: 更新 aladdin_code_review_pr 表

aladdinServer --> aladdinFront: 返回结果
deactivate aladdinServer

aladdinFront --> user: 返回结果
deactivate aladdinFront

end

@enduml