|
|
|
|
#project的includes应该是包括(:versions, :project_score, :repository,:commits, issues: [:journals,:commit_issues]),但是repository表,commits表,commit_issues表没有,trustie上有。
|
|
|
|
|
#
|
|
|
|
|
# 运行示例: bundle exec rails runner "SyncUserForgeTask.new.call()"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class SyncUserForgeTask
|
|
|
|
|
def call
|
|
|
|
|
Rails.logger.info("##########_______sync_start________###########")
|
|
|
|
|
project_member_user_ids = Member.select(:project_id,:user_id).where.not(project_id: -1).pluck(:user_id).uniq #这个是项目的成员,在用户的项目里已经有了循环
|
|
|
|
|
all_users = User.where.not(id: project_member_user_ids)
|
|
|
|
|
# 这里再把所有用户循环
|
|
|
|
|
all_users.find_each do |u|
|
|
|
|
|
# u = User.find(36390) 测试的
|
|
|
|
|
user_params = u.as_json
|
|
|
|
|
user_extension_params = u.try(:user_extension).as_json || []
|
|
|
|
|
target_params = []
|
|
|
|
|
if u.projects.present?
|
|
|
|
|
projects = u.projects.includes(:versions,:project_score,:commits, issues: [:journals,:commit_issues],owner: [:user_extension], members: [roles: [:member_roles]])
|
|
|
|
|
projects.find_each do |p|
|
|
|
|
|
member_params = get_members(p.members,p)
|
|
|
|
|
project_params = p.as_json
|
|
|
|
|
issue_params = get_issues(p, u.id)
|
|
|
|
|
versions_params = get_versions(p)
|
|
|
|
|
project_score_params = get_scores(p)
|
|
|
|
|
pull_request_params = get_prs(p) #pull_request的,但是目前educoder没有pull_request表
|
|
|
|
|
repo_params = get_repository(p) #repository的内容
|
|
|
|
|
relate_project_params = {
|
|
|
|
|
project_params: project_params,
|
|
|
|
|
member_params: member_params,
|
|
|
|
|
issue_params: issue_params,
|
|
|
|
|
versions_params: versions_params,
|
|
|
|
|
project_score_params: project_score_params,
|
|
|
|
|
pull_request_params: pull_request_params,
|
|
|
|
|
repo_params: repo_params
|
|
|
|
|
}
|
|
|
|
|
target_params.push(relate_project_params)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
roles = Role.all.as_json
|
|
|
|
|
sync_params = {
|
|
|
|
|
target_params: target_params,
|
|
|
|
|
platform: "educoder",
|
|
|
|
|
roles: roles,
|
|
|
|
|
user_params: {user_params: user_params, user_extension_params: user_extension_params}
|
|
|
|
|
}
|
|
|
|
|
SyncUserForgeJob.perform_later(sync_params.to_json)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#工单的内容
|
|
|
|
|
def get_issues(project, user_id)
|
|
|
|
|
issues_params = []
|
|
|
|
|
issues = project.issues.where(author_id: user_id)
|
|
|
|
|
if issues.present?
|
|
|
|
|
issues.find_each do |i|
|
|
|
|
|
issue_json = i.as_json
|
|
|
|
|
jours_params = get_issue_journal(i, user_id)
|
|
|
|
|
commit_params = get_issue_commit(i)
|
|
|
|
|
issues_params.push(
|
|
|
|
|
{issue_params: issue_json,
|
|
|
|
|
jours_params: jours_params,
|
|
|
|
|
commit_params: commit_params
|
|
|
|
|
}
|
|
|
|
|
)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
issues_params
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
#里程碑的内容
|
|
|
|
|
def get_versions(project)
|
|
|
|
|
versions_params = []
|
|
|
|
|
versions = project.versions
|
|
|
|
|
versions.find_each do |i|
|
|
|
|
|
versions_params.push(i.as_json)
|
|
|
|
|
end
|
|
|
|
|
versions_params
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
#project_score的内容
|
|
|
|
|
def get_scores(project)
|
|
|
|
|
project.try(:project_score).as_json || []
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
#pull_reqeust的内容,以前为commits表
|
|
|
|
|
def get_prs(project)
|
|
|
|
|
pr_params = []
|
|
|
|
|
prs = project.commits
|
|
|
|
|
prs.find_each do |i|
|
|
|
|
|
pr_params.push(i.as_json)
|
|
|
|
|
end
|
|
|
|
|
pr_params
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#repository的内容
|
|
|
|
|
def get_repository(project)
|
|
|
|
|
repo_params = []
|
|
|
|
|
repo = project.repository
|
|
|
|
|
repo_params.push(repo.as_json) if repo.present?
|
|
|
|
|
repo_params
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def get_issue_journal(issue, user_id)
|
|
|
|
|
jour_params = []
|
|
|
|
|
jours = issue.journals.where(user_id: user_id)
|
|
|
|
|
if jours.present?
|
|
|
|
|
jours.find_each do |j|
|
|
|
|
|
jour_params.push(j.as_json)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
jour_params
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def get_issue_commit(issue)
|
|
|
|
|
commit_params = []
|
|
|
|
|
commits = issue.commit_issues
|
|
|
|
|
if commits.present?
|
|
|
|
|
commits.find_each do |j|
|
|
|
|
|
commit_params.push(j.as_json)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
commit_params
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def get_members(members,project)
|
|
|
|
|
member_params = []
|
|
|
|
|
if members.present?
|
|
|
|
|
members.find_each do |m|
|
|
|
|
|
member_user = m.user.as_json
|
|
|
|
|
member_extension = m.user.try(:user_extension).as_json || []
|
|
|
|
|
member_role = m.member_roles.as_json
|
|
|
|
|
member_issues = get_issues(project, m.user_id)
|
|
|
|
|
get_member = {
|
|
|
|
|
member: m.as_json,
|
|
|
|
|
member_user: member_user,
|
|
|
|
|
member_extension: member_extension,
|
|
|
|
|
member_roles: member_role,
|
|
|
|
|
member_issues: member_issues
|
|
|
|
|
}
|
|
|
|
|
member_params.push(get_member)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
member_params
|
|
|
|
|
end
|
|
|
|
|
end
|