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

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#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