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

166 lines
4.6 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________###########")
all_users = User.where("login is not null").all
# 这里再把所有用户循环
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,:repository,:project_score,:commits, :pull_requests, issues: [:journals,:commit_issues],owner: [:user_extension], members: [roles: [:member_roles]])
projects.find_each do |p|
identifier = p.try(:identifier)
if p.repository.present? && p.repository.try(:identifier).present?
identifier = p.repository.try(:identifier)
end
member_params = get_members(p.members,p)
project_params = p.as_json
project_params["identifier"] = identifier
issue_params = get_issues(p, u.id)
versions_params = get_versions(p)
project_score_params = get_scores(p)
commit_params = get_commits(p)
pull_request_params = get_prs(p)
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,
commit_params: commit_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
def get_commits(project)
pr_params = []
prs = project.commits
prs.find_each do |i|
pr_params.push(i.as_json)
end
pr_params
end
def get_prs(project)
pr_params = []
prs = project.pull_requests
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