Skip to content
This repository was archived by the owner on Jan 23, 2025. It is now read-only.

Commit 337c5d1

Browse files
committed
Merge pull request #199 from Ghost141/performanc_improvement
Performanc improvement
2 parents 0adb67d + 6198130 commit 337c5d1

9 files changed

+486
-0
lines changed

actions/challenges.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -500,12 +500,24 @@ var searchChallenges = function (api, connection, dbConnectionMap, community, ne
500500
count: 'search_private_software_studio_challenges_count',
501501
challenges: 'search_private_software_studio_challenges'
502502
};
503+
if (listType === helper.ListType.PAST) {
504+
queryName = {
505+
count: 'search_private_past_software_studio_challenges_count',
506+
challenges: 'search_private_past_software_studio_challenges'
507+
};
508+
}
503509
} else {
504510
// Public & Private challenge query name.
505511
queryName = {
506512
count: 'search_software_studio_challenges_count',
507513
challenges: 'search_software_studio_challenges'
508514
};
515+
if (listType === helper.ListType.PAST) {
516+
queryName = {
517+
count: 'search_past_software_studio_challenges_count',
518+
challenges: 'search_past_software_studio_challenges'
519+
};
520+
}
509521
}
510522

511523
async.parallel({
Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
SELECT
2+
SKIP @firstRowIndex@
3+
FIRST @pageSize@
4+
CASE WHEN (p.project_studio_spec_id IS NOT NULL) THEN 1 ELSE 0 END AS is_studio
5+
, p.project_id AS challenge_id
6+
, pcl.description AS challenge_type
7+
, pi.challenge_name
8+
, p.tc_direct_project_id AS project_id
9+
, screening.parameter AS screening_scorecard_id
10+
, review.parameter AS review_scorecard_id
11+
, pi.cmc_task_id
12+
, pi.forum_id
13+
, (SELECT COUNT(*) FROM submission s1 INNER JOIN upload u1 ON s1.upload_id = u1.upload_id
14+
WHERE u1.project_id = p.project_id
15+
AND s1.submission_type_id IN (1, 3)
16+
AND s1.submission_status_id <> 5) AS num_submissions
17+
, (SELECT COUNT(*) FROM resource r WHERE r.project_id = p.project_id AND r.resource_role_id = 1) AS num_registrants
18+
, NVL((SELECT SUM(pr.number_of_submissions) FROM prize pr WHERE pr.project_id = p.project_id AND pr.prize_type_id = 14), 0) AS number_of_checkpoints_prizes
19+
, pr.top_checkpoint_prize
20+
, pr.prize1
21+
, pr.prize2
22+
, pr.prize3
23+
, pr.prize4
24+
, pr.prize5
25+
, pr.prize6
26+
, pr.prize7
27+
, pr.prize8
28+
, NVL(pp1.actual_start_time, pp1.scheduled_start_time) AS posting_date
29+
, NVL(pp1.actual_end_time, pp1.scheduled_end_time) AS registration_end_date
30+
, NVL(pp.checkpoint_actual_end_time , pp.checkpoint_scheduled_end_time) AS checkpoint_submission_end_date
31+
, NVL(pp.submission_actual_end_time, pp.submission_scheduled_end_time) AS submission_end_date
32+
, NVL(pp.appeals_scheduled_end_time, review.scheduled_end_time) AS appeals_end_date
33+
, NVL(pp.final_fix_actual_end_time, pp.final_fix_scheduled_end_time) AS final_fix_end_date
34+
, NVL(nd_phase.actual_end_time, nd_phase.scheduled_end_time) AS current_phase_end_date
35+
, (( nd_phase.scheduled_end_time - CURRENT)::interval second(9) to second)::char(10)::int8 AS current_phase_remaining_time
36+
, pstatus.name AS current_status
37+
, CASE WHEN (nd_phase.scheduled_end_time IS NOT NULL) THEN
38+
(SELECT phase_type_lu.description FROM phase_type_lu
39+
WHERE phase_type_id = nd_phase.phase_type_id)
40+
ELSE NULL
41+
END AS current_phase_name
42+
, CASE WHEN pi.digital_run_flag = 'On' THEN NVL(pi.digital_run_points, pi.payments)
43+
ELSE NULL
44+
END AS digital_run_points
45+
, NVL((SELECT max(event_id) FROM contest_project_xref x, contest c WHERE project_id = p.project_id AND c.contest_id = x.contest_id), 0) AS event_id
46+
, (SELECT event_short_desc FROM event e WHERE e.event_id = nvl((SELECT max(event_id) FROM contest_project_xref x, contest c WHERE project_id = p.project_id AND c.contest_id = x.contest_id), 0)) AS event_name
47+
, technology_list(p.project_id) AS technology
48+
, platform_list(p.project_id) AS platforms
49+
FROM project p
50+
LEFT JOIN (
51+
SELECT
52+
project_id
53+
, MAX(CASE WHEN prize_type_id = 14 AND place = 1 THEN prize_amount ELSE NULL END) AS top_checkpoint_prize
54+
, MAX(CASE WHEN prize_type_id = 15 AND place = 1 THEN prize_amount ELSE NULL END) AS prize1
55+
, MAX(CASE WHEN prize_type_id = 15 AND place = 2 THEN prize_amount ELSE NULL END) AS prize2
56+
, MAX(CASE WHEN prize_type_id = 15 AND place = 3 THEN prize_amount ELSE NULL END) AS prize3
57+
, MAX(CASE WHEN prize_type_id = 15 AND place = 4 THEN prize_amount ELSE NULL END) AS prize4
58+
, MAX(CASE WHEN prize_type_id = 15 AND place = 5 THEN prize_amount ELSE NULL END) AS prize5
59+
, MAX(CASE WHEN prize_type_id = 15 AND place = 6 THEN prize_amount ELSE NULL END) AS prize6
60+
, MAX(CASE WHEN prize_type_id = 15 AND place = 7 THEN prize_amount ELSE NULL END) AS prize7
61+
, MAX(CASE WHEN prize_type_id = 15 AND place = 8 THEN prize_amount ELSE NULL END) AS prize8
62+
FROM prize
63+
WHERE prize_type_id IN (14, 15)
64+
GROUP BY project_id
65+
) pr ON pr.project_id = p.project_id
66+
INNER JOIN (
67+
SELECT
68+
project_id
69+
, MAX(DECODE(phase_type_id, 2, actual_end_time, NULL)) AS submission_actual_end_time
70+
, MAX(DECODE(phase_type_id, 2, scheduled_end_time, NULL)) AS submission_scheduled_end_time
71+
, MAX(DECODE(phase_type_id, 6, scheduled_end_time, NULL)) AS appeals_scheduled_end_time
72+
, MAX(DECODE(phase_type_id, 9, actual_end_time, NULL)) AS final_fix_actual_end_time
73+
, MAX(DECODE(phase_type_id, 9, scheduled_end_time, NULL)) AS final_fix_scheduled_end_time
74+
, MAX(DECODE(phase_type_id, 15, actual_end_time, NULL)) AS checkpoint_actual_end_time
75+
, MAX(DECODE(phase_type_id, 15, scheduled_end_time, NULL)) AS checkpoint_scheduled_end_time
76+
FROM project_phase
77+
WHERE phase_type_id IN (1,2,6,9,15)
78+
GROUP BY project_id
79+
) pp ON pp.project_id = p.project_id
80+
INNER JOIN (
81+
SELECT
82+
project_id
83+
, MAX(DECODE(project_info_type_id, 4, value, '')) AS forum_id
84+
, MAX(DECODE(project_info_type_id, 16, value, '')) AS payments
85+
, MAX(DECODE(project_info_type_id, 26, value, '')) AS digital_run_flag
86+
, MAX(DECODE(project_info_type_id, 30, value, '')) AS digital_run_points
87+
, MAX(DECODE(project_info_type_id, 70, value, '')) AS cmc_task_id
88+
, MAX(DECODE(project_info_type_id, 6, value, '')) AS challenge_name
89+
FROM project_info
90+
WHERE project_info_type_id IN (70, 30, 16, 26, 4, 6)
91+
GROUP BY project_id
92+
) pi ON pi.project_id = p.project_id
93+
LEFT OUTER JOIN (
94+
SELECT
95+
pp3.project_id
96+
, pc3.parameter
97+
FROM project_phase pp3
98+
LEFT OUTER JOIN phase_criteria pc3 ON pp3.project_phase_id = pc3.project_phase_id
99+
WHERE pp3.phase_type_id = 3
100+
AND pc3.phase_criteria_type_id = 1
101+
) screening ON screening.project_id = p.project_id
102+
LEFT OUTER JOIN (
103+
SELECT
104+
pp4.project_id
105+
, pc4.parameter
106+
, pp4.scheduled_end_time
107+
FROM project_phase pp4
108+
LEFT OUTER JOIN phase_criteria pc4 ON pp4.project_phase_id = pc4.project_phase_id
109+
WHERE pp4.phase_type_id = 4
110+
AND pc4.phase_criteria_type_id = 1
111+
) review ON review.project_id = p.project_id
112+
INNER JOIN project_phase pp1 ON pp1.project_id = p.project_id AND pp1.phase_type_id = 1
113+
INNER JOIN project_status_lu pstatus ON p.project_status_id = pstatus.project_status_id
114+
LEFT OUTER JOIN project_phase nd_phase ON p.project_Id = nd_phase.project_id
115+
, project_category_lu pcl
116+
WHERE 1=1
117+
AND p.project_category_id = pcl.project_category_id
118+
-- Filter out the challenge that user is not belong to.
119+
AND (not exists (SELECT contest_id FROM contest_eligibility WHERE contest_id = p.project_id)
120+
OR exists(SELECT contest_id FROM contest_eligibility ce, group_contest_eligibility gce, user_group_xref x
121+
WHERE x.login_id = @userId@ AND x.group_id = gce.group_id AND gce.contest_eligibility_id = ce.contest_eligibility_id
122+
AND ce.contest_id = p.project_id))
123+
AND pcl.project_category_id NOT IN (27, 37) --exclude when spec review was a 'contest.' Also exclude MM, which is in there as a 'software' contest.
124+
AND p.project_status_id IN (4, 5, 6, 7, 8, 9, 10, 11)
125+
AND pcl.project_type_id IN (@project_type_id@)
126+
AND pp1.phase_status_id = 3
127+
AND nd_phase.project_phase_id = (SELECT MAX(project_phase_id) FROM project_phase WHERE project_id = p.project_id AND phase_status_id = 2 AND phase_type_id IN (1,2,3,4,5,6,7,8,9,10,11,12))
128+
129+
AND NVL(pp.submission_actual_end_time, pp.submission_scheduled_end_time) BETWEEN TO_DATE('@submissionEndFrom@ 00:00:00', '%Y-%m-%d %H:%M:%S') AND TO_DATE('@submissionEndTo@ 23:59:59', '%Y-%m-%d %H:%M:%S')
130+
AND LOWER(pcl.description) = DECODE('@categoryName@', '', LOWER(pcl.description), '@categoryName@')
131+
AND LOWER(pi.challenge_name) LIKE ('@challengeName@')
132+
AND NVL(pr.prize1, 0) >= @prilower@
133+
AND NVL(pr.prize1, 0) <= @priupper@
134+
AND p.tc_direct_project_id = DECODE(@tcdirectid@, 0, p.tc_direct_project_id, @tcdirectid@)
135+
AND NVL(LOWER(pi.cmc_task_id), '') = DECODE('@cmc@', '', NVL(LOWER(pi.cmc_task_id), ''), '@cmc@')
136+
137+
ORDER BY @sortColumn@ @sortOrder@
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"name" : "search_past_software_studio_challenges",
3+
"db" : "tcs_catalog",
4+
"sqlfile" : "search_past_software_studio_challenges"
5+
}
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
SELECT COUNT(*) AS total
2+
FROM project p
3+
LEFT JOIN (
4+
SELECT
5+
project_id
6+
, MAX(CASE WHEN prize_type_id = 14 AND place = 1 THEN prize_amount ELSE NULL END) AS top_checkpoint_prize
7+
, MAX(CASE WHEN prize_type_id = 15 AND place = 1 THEN prize_amount ELSE NULL END) AS prize1
8+
, MAX(CASE WHEN prize_type_id = 15 AND place = 2 THEN prize_amount ELSE NULL END) AS prize2
9+
, MAX(CASE WHEN prize_type_id = 15 AND place = 3 THEN prize_amount ELSE NULL END) AS prize3
10+
, MAX(CASE WHEN prize_type_id = 15 AND place = 4 THEN prize_amount ELSE NULL END) AS prize4
11+
, MAX(CASE WHEN prize_type_id = 15 AND place = 5 THEN prize_amount ELSE NULL END) AS prize5
12+
, MAX(CASE WHEN prize_type_id = 15 AND place = 6 THEN prize_amount ELSE NULL END) AS prize6
13+
, MAX(CASE WHEN prize_type_id = 15 AND place = 7 THEN prize_amount ELSE NULL END) AS prize7
14+
, MAX(CASE WHEN prize_type_id = 15 AND place = 8 THEN prize_amount ELSE NULL END) AS prize8
15+
FROM prize
16+
WHERE prize_type_id IN (14, 15)
17+
GROUP BY project_id
18+
) pr ON pr.project_id = p.project_id
19+
INNER JOIN (
20+
SELECT
21+
project_id
22+
, MAX(DECODE(phase_type_id, 2, actual_end_time, NULL)) AS submission_actual_end_time
23+
, MAX(DECODE(phase_type_id, 2, scheduled_end_time, NULL)) AS submission_scheduled_end_time
24+
, MAX(DECODE(phase_type_id, 6, scheduled_end_time, NULL)) AS appeals_scheduled_end_time
25+
, MAX(DECODE(phase_type_id, 9, actual_end_time, NULL)) AS final_fix_actual_end_time
26+
, MAX(DECODE(phase_type_id, 9, scheduled_end_time, NULL)) AS final_fix_scheduled_end_time
27+
, MAX(DECODE(phase_type_id, 15, actual_end_time, NULL)) AS checkpoint_actual_end_time
28+
, MAX(DECODE(phase_type_id, 15, scheduled_end_time, NULL)) AS checkpoint_scheduled_end_time
29+
FROM project_phase
30+
WHERE phase_type_id IN (1,2,6,9,15)
31+
GROUP BY project_id
32+
) pp ON pp.project_id = p.project_id
33+
INNER JOIN (
34+
SELECT
35+
project_id
36+
, MAX(DECODE(project_info_type_id, 4, value, '')) AS forum_id
37+
, MAX(DECODE(project_info_type_id, 16, value, '')) AS payments
38+
, MAX(DECODE(project_info_type_id, 26, value, '')) AS digital_run_flag
39+
, MAX(DECODE(project_info_type_id, 30, value, '')) AS digital_run_points
40+
, MAX(DECODE(project_info_type_id, 70, value, '')) AS cmc_task_id
41+
, MAX(DECODE(project_info_type_id, 6, value, '')) AS challenge_name
42+
FROM project_info
43+
WHERE project_info_type_id IN (70, 30, 16, 26, 4, 6)
44+
GROUP BY project_id
45+
) pi ON pi.project_id = p.project_id
46+
LEFT OUTER JOIN (
47+
SELECT
48+
pp3.project_id
49+
, pc3.parameter
50+
FROM project_phase pp3
51+
LEFT OUTER JOIN phase_criteria pc3 ON pp3.project_phase_id = pc3.project_phase_id
52+
WHERE pp3.phase_type_id = 3
53+
AND pc3.phase_criteria_type_id = 1
54+
) screening ON screening.project_id = p.project_id
55+
LEFT OUTER JOIN (
56+
SELECT
57+
pp4.project_id
58+
, pc4.parameter
59+
, pp4.scheduled_end_time
60+
FROM project_phase pp4
61+
LEFT OUTER JOIN phase_criteria pc4 ON pp4.project_phase_id = pc4.project_phase_id
62+
WHERE pp4.phase_type_id = 4
63+
AND pc4.phase_criteria_type_id = 1
64+
) review ON review.project_id = p.project_id
65+
INNER JOIN project_phase pp1 ON pp1.project_id = p.project_id AND pp1.phase_type_id = 1
66+
INNER JOIN project_status_lu pstatus ON p.project_status_id = pstatus.project_status_id
67+
LEFT OUTER JOIN project_phase nd_phase ON p.project_Id = nd_phase.project_id
68+
, project_category_lu pcl
69+
WHERE 1=1
70+
AND p.project_category_id = pcl.project_category_id
71+
-- Filter out the challenge that user is not belong to.
72+
AND (not exists (SELECT contest_id FROM contest_eligibility WHERE contest_id = p.project_id)
73+
OR exists(SELECT contest_id FROM contest_eligibility ce, group_contest_eligibility gce, user_group_xref x
74+
WHERE x.login_id = @userId@ AND x.group_id = gce.group_id AND gce.contest_eligibility_id = ce.contest_eligibility_id
75+
AND ce.contest_id = p.project_id))
76+
AND pcl.project_category_id NOT IN (27, 37) --exclude when spec review was a 'contest.' Also exclude MM, which is in there as a 'software' contest.
77+
AND p.project_status_id IN (4, 5, 6, 7, 8, 9, 10, 11)
78+
AND pcl.project_type_id IN (@project_type_id@)
79+
AND pp1.phase_status_id = 3
80+
AND nd_phase.project_phase_id = (SELECT MAX(project_phase_id) FROM project_phase WHERE project_id = p.project_id AND phase_status_id = 2 AND phase_type_id IN (1,2,3,4,5,6,7,8,9,10,11,12))
81+
82+
AND NVL(pp.submission_actual_end_time, pp.submission_scheduled_end_time) BETWEEN TO_DATE('@submissionEndFrom@ 00:00:00', '%Y-%m-%d %H:%M:%S') AND TO_DATE('@submissionEndTo@ 23:59:59', '%Y-%m-%d %H:%M:%S')
83+
AND LOWER(pcl.description) = DECODE('@categoryName@', '', LOWER(pcl.description), '@categoryName@')
84+
AND LOWER(pi.challenge_name) LIKE ('@challengeName@')
85+
AND NVL(pr.prize1, 0) >= @prilower@
86+
AND NVL(pr.prize1, 0) <= @priupper@
87+
AND p.tc_direct_project_id = DECODE(@tcdirectid@, 0, p.tc_direct_project_id, @tcdirectid@)
88+
AND NVL(LOWER(pi.cmc_task_id), '') = DECODE('@cmc@', '', NVL(LOWER(pi.cmc_task_id), ''), '@cmc@')
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"name" : "search_past_software_studio_challenges_count",
3+
"db" : "tcs_catalog",
4+
"sqlfile" : "search_past_software_studio_challenges_count"
5+
}

0 commit comments

Comments
 (0)