You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
educoder/app/tasks/sync_user_forge_task.rb

150 lines
4.4 KiB

#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