From c6d06e5a95cd5fa0da00125aeee2000323a40c54 Mon Sep 17 00:00:00 2001 From: Rakesh Recharla Date: Thu, 7 May 2015 03:42:35 +0000 Subject: [PATCH 1/7] Performance improvements for challenges and added cacheTime for few functions --- actions/challenges.js | 8 +++ queries/get_open_challenges | 35 ++++++++++-- queries/get_past_challenges | 35 +++++++++--- .../search_past_software_studio_challenges | 55 +++++++++++++++---- 4 files changed, 110 insertions(+), 23 deletions(-) diff --git a/actions/challenges.js b/actions/challenges.js index fb4fb73d4..9f286616a 100755 --- a/actions/challenges.js +++ b/actions/challenges.js @@ -2443,6 +2443,7 @@ exports.getSoftwareChallenge = { outputExample: {}, version: 'v2', transaction : 'read', // this action is read-only + cacheLifetime: 1000 * 60 * 10, databases : ["tcs_catalog"], run: function (api, connection, next) { if (connection.dbConnectionMap) { @@ -2468,6 +2469,7 @@ exports.getStudioChallenge = { outputExample: {}, version: 'v2', transaction: 'read', // this action is read-only + cacheLifetime: 1000 * 60 * 10, databases: ["tcs_catalog", "tcs_dw"], run: function (api, connection, next) { if (connection.dbConnectionMap) { @@ -2495,6 +2497,7 @@ exports.getChallenge = { outputExample: {}, version: 'v2', transaction: 'read', // this action is read-only + cacheLifetime: 1000 * 60 * 10, databases: ["tcs_catalog", "tcs_dw"], run: function (api, connection, next) { var challengeId = Number(connection.params.challengeId), @@ -2537,6 +2540,7 @@ exports.searchSoftwareChallenges = { outputExample: {}, version: 'v2', transaction : 'read', // this action is read-only + cacheLifetime: 1000 * 60 * 60, databases : ["tcs_catalog"], run: function (api, connection, next) { if (connection.dbConnectionMap) { @@ -2562,6 +2566,7 @@ exports.searchStudioChallenges = { outputExample: {}, version: 'v2', transaction : 'read', // this action is read-only + cacheLifetime: 1000 * 60 * 60, databases : ["tcs_catalog"], run: function (api, connection, next) { if (connection.dbConnectionMap) { @@ -2587,6 +2592,7 @@ exports.searchSoftwareAndStudioChallenges = { outputExample: {}, version: 'v2', transaction : 'read', // this action is read-only + cacheLifetime: 1000 * 60 * 60, databases : ["tcs_catalog"], run: function (api, connection, next) { if (connection.dbConnectionMap) { @@ -3841,6 +3847,7 @@ exports.getOpenChallenges = { outputExample: {}, version: 'v2', transaction: 'read', + cacheLifetime: 1000 * 60 * 10, databases: ['tcs_catalog'], run: function (api, connection, next) { if (connection.dbConnectionMap) { @@ -4027,6 +4034,7 @@ exports.getMyChallenges = { outputExample: {}, version: 'v2', transaction: 'read', + cacheLifetime: 1000 * 60 * 10, databases: ['tcs_catalog'], run: function (api, connection, next) { if (connection.dbConnectionMap) { diff --git a/queries/get_open_challenges b/queries/get_open_challenges index 9fdcb594b..4814d5a0a 100644 --- a/queries/get_open_challenges +++ b/queries/get_open_challenges @@ -1,3 +1,30 @@ +SELECT is_studio +, challenge_type +, challenge_name +, challenge_id +, forum_id +, num_submissions +, num_registrants +, number_of_checkpoints_prizes +, first_place_prize +, total_prize +, total_checkpoint_prize +, registration_end_date +, registration_start_date +, checkpoint_submission_end_date +, submission_end_date +, current_phase_end_date +, current_phase_remaining_time +, status +, current_phase_name +, digital_run_points +, nvl((SELECT max(event_id) from contest_project_xref x, contest c where project_id = challenge_id and c.contest_id = x.contest_id), 0) as event_id +, (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 = challenge_id and c.contest_id = x.contest_id), 0)) as event_name +, technology_list(value_for_technology) AS technologies +, platform_list(id_for_platform) as platforms +, registration_open +, NVL((SELECT CAST('t' AS boolean) FROM contest_eligibility WHERE contest_id =challenge_id), CAST('f' AS boolean)) AS is_private +FROM ( SELECT SKIP @first_row_index@ FIRST @page_size@ @@ -26,12 +53,9 @@ FIRST @page_size@ , CASE WHEN pidr.value = 'On' THEN NVL((SELECT value::decimal FROM project_info pi_dr WHERE pi_dr.project_info_type_id = 30 AND pi_dr.project_id = p.project_id), (SELECT round(NVL(pi16.value::decimal, 0)) FROM project_info pi16 WHERE pi16.project_info_type_id = 16 AND pi16.project_id = p.project_id)) ELSE NULL END AS digital_run_points -, 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 -, (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 -, technology_list(pi1.value) AS technologies -, platform_list(p.project_id) as platforms +, pi1.value AS value_for_technology +, p.project_id as id_for_platform , CASE WHEN (pp1.phase_status_id = 2) THEN 'Yes' ELSE 'No' END AS registration_open -, NVL((SELECT CAST('t' AS boolean) FROM contest_eligibility WHERE contest_id = p.project_id), CAST('f' AS boolean)) AS is_private FROM project p , project_status_lu pstatus , project_phase pp1 --registration phase @@ -74,3 +98,4 @@ AND NVL((SELECT pr.prize_amount FROM prize pr WHERE pr.project_id = p.project_id AND NVL((SELECT pr.prize_amount FROM prize pr WHERE pr.project_id = p.project_id AND pr.prize_type_id = 15 AND pr.place = 1), 0) <= @prize_upper_bound@ AND p.tc_direct_project_id = DECODE(@project_id@, 0, p.tc_direct_project_id, @project_id@) ORDER BY @sort_column@ @sort_order@ +) diff --git a/queries/get_past_challenges b/queries/get_past_challenges index 21c739e3e..45c1668c2 100644 --- a/queries/get_past_challenges +++ b/queries/get_past_challenges @@ -1,3 +1,28 @@ +SELECT is_studio +, challenge_type +, challenge_name +, challenge_id +, (SELECT value FROM project_info WHERE project_id = challenge_id AND project_info_type_id = 4) AS forum_id +, num_submissions +, num_registrants +, number_of_checkpoints_prizes +, first_place_prize +, total_prize +, checkpoint_total_prizes +, registration_start_date +, registration_end_date +, checkpoint_submission_end_date +, submission_end_date +, status +, digital_run_points +, nvl((SELECT MAX(event_id) FROM contest_project_xref x, contest c WHERE project_id = challenge_id AND c.contest_id = x.contest_id), 0) AS event_id +, (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 = challenge_id AND c.contest_id = x.contest_id), 0)) AS event_name +, technology_list(value_for_technology) AS technologies +, platform_list(id_for_platform) AS platforms +, registration_open +, NVL((SELECT CAST('t' AS boolean) FROM contest_eligibility WHERE contest_id = challenge_id), CAST('f' AS boolean)) AS is_private +, (SELECT value FROM project_info pi53 WHERE project_id = challenge_id AND project_info_type_id = 53) AS submissions_viewable +FROM ( SELECT SKIP @first_row_index@ FIRST @page_size@ @@ -5,7 +30,6 @@ FIRST @page_size@ , pcl.description AS challenge_type , pn.value AS challenge_name , p.project_id AS challenge_id -, (SELECT value FROM project_info WHERE project_id = p.project_id AND project_info_type_id = 4) AS forum_id , (SELECT COUNT(*) FROM submission s1 INNER JOIN upload u1 ON s1.upload_id = u1.upload_id WHERE u1.project_id = p.project_id AND s1.submission_type_id = 1 @@ -23,13 +47,9 @@ FIRST @page_size@ , CASE WHEN pidr.value = 'On' THEN NVL((SELECT value::decimal FROM project_info pi_dr WHERE pi_dr.project_info_type_id = 30 AND pi_dr.project_id = p.project_id), (SELECT round(NVL(pi16.value::decimal, 0)) FROM project_info pi16 WHERE pi16.project_info_type_id = 16 AND pi16.project_id = p.project_id)) ELSE NULL END AS digital_run_points -, 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 -, (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 -, technology_list(pi1.value) AS technologies -, platform_list(p.project_id) AS platforms +, pi1.value AS value_for_technology +, p.project_id AS id_for_platform , CASE WHEN (pp1.phase_status_id = 2) THEN 'Yes' ELSE 'No' END AS registration_open -, NVL((SELECT CAST('t' AS boolean) FROM contest_eligibility WHERE contest_id = p.project_id), CAST('f' AS boolean)) AS is_private -, (SELECT value FROM project_info pi53 WHERE project_id = p.project_id AND project_info_type_id = 53) AS submissions_viewable FROM project p INNER JOIN project_status_lu pstatus ON pstatus.project_status_id = p.project_status_id INNER JOIN project_category_lu pcl ON pcl.project_category_id = p.project_category_id @@ -52,3 +72,4 @@ AND NVL((SELECT pr.prize_amount FROM prize pr WHERE pr.project_id = p.project_id AND NVL((SELECT pr.prize_amount FROM prize pr WHERE pr.project_id = p.project_id AND pr.prize_type_id = 15 AND pr.place = 1), 0) <= @prize_upper_bound@ AND p.tc_direct_project_id = DECODE(@project_id@, 0, p.tc_direct_project_id, @project_id@) ORDER BY @sort_column@ @sort_order@ +) diff --git a/queries/search_past_software_studio_challenges b/queries/search_past_software_studio_challenges index 982a3d692..660133285 100644 --- a/queries/search_past_software_studio_challenges +++ b/queries/search_past_software_studio_challenges @@ -1,3 +1,44 @@ +SELECT is_studio +, challenge_id +, challenge_type +, challenge_name +, project_id +, (select max(pc3.parameter) FROM project_phase pp3, phase_criteria pc3 where challenge_id = pp3.project_id and pp3.project_phase_id = pc3.project_phase_id and pp3.phase_type_id = 3 + AND pc3.phase_criteria_type_id = 1) AS screening_scorecard_id +, (select max(pc4.parameter) FROM project_phase pp4, phase_criteria pc4 where challenge_id = pp4.project_id and pp4.project_phase_id = pc4.project_phase_id and pp4.phase_type_id = 4 + AND pc4.phase_criteria_type_id = 1) AS review_scorecard_id +, cmc_task_id +, (select value from project_info forum where forum.project_id = challenge_id and forum.project_info_type_id = 4) as forum_id +, num_submissions +, num_registrants +, number_of_checkpoints_prizes +, top_checkpoint_prize +, prize1 +, prize2 +, prize3 +, prize4 +, prize5 +, prize6 +, prize7 +, prize8 +, posting_date +, registration_end_date +, checkpoint_submission_end_date +, submission_end_date +, appeals_end_date +, final_fix_end_date +, current_phase_end_date +, current_phase_remaining_time +, current_status +, current_phase_name +, digital_run_points +, NVL((SELECT max(event_id) FROM contest_project_xref x, contest c WHERE project_id = challenge_id AND c.contest_id = x.contest_id), 0) AS event_id +, (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 = challenge_id AND c.contest_id = x.contest_id), 0)) AS event_name +, technology_list(value_for_technology) AS technology +, platform_list(id_for_platform) AS platforms +, NVL((SELECT CAST('t' AS boolean) FROM contest_eligibility WHERE contest_id = challenge_id), CAST('f' AS boolean)) AS is_private +, (SELECT value FROM project_info pi53 WHERE project_id = challenge_id AND project_info_type_id = 53) AS submissions_viewable +FROM ( SELECT SKIP @firstRowIndex@ FIRST @pageSize@ @@ -6,12 +47,7 @@ FIRST @pageSize@ , pcl.description AS challenge_type , challenge_name.value as challenge_name , p.tc_direct_project_id AS project_id -, (select max(pc3.parameter) FROM project_phase pp3, phase_criteria pc3 where p.project_id = pp3.project_id and pp3.project_phase_id = pc3.project_phase_id and pp3.phase_type_id = 3 - AND pc3.phase_criteria_type_id = 1) AS screening_scorecard_id -, (select max(pc4.parameter) FROM project_phase pp4, phase_criteria pc4 where p.project_id = pp4.project_id and pp4.project_phase_id = pc4.project_phase_id and pp4.phase_type_id = 4 - AND pc4.phase_criteria_type_id = 1) AS review_scorecard_id , cmc_task_id.value as cmc_task_id -, (select value from project_info forum where forum.project_id = p.project_id and forum.project_info_type_id = 4) as forum_id , (SELECT COUNT(*) FROM submission s1 INNER JOIN upload u1 ON s1.upload_id = u1.upload_id WHERE u1.project_id = p.project_id AND s1.submission_type_id = 1 @@ -42,12 +78,8 @@ FIRST @pageSize@ , '' current_phase_name , (select nvl(pi30.value, 0) from project_info pi30, project_info pi26 where pi30.project_id = p.project_id and pi26.project_id = p.project_id and pi30.project_info_type_id = 30 and pi26.project_info_type_id = 26 and pi26.value = 'On') AS digital_run_points -, 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 -, (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 -, technology_list(pi1.value) AS technology -, platform_list(p.project_id) AS platforms -, NVL((SELECT CAST('t' AS boolean) FROM contest_eligibility WHERE contest_id = p.project_id), CAST('f' AS boolean)) AS is_private -, (SELECT value FROM project_info pi53 WHERE project_id = p.project_id AND project_info_type_id = 53) AS submissions_viewable +, pi1.value AS value_for_technology +, p.project_id AS id_for_platform FROM project p inner JOIN prize pr ON pr.project_id = p.project_id and pr.place =1 and pr.prize_type_id = 15 inner JOIN project_phase pp ON pp.project_id = p.project_id and pp.phase_type_id = 2 @@ -78,3 +110,4 @@ AND (not exists (SELECT contest_id FROM contest_eligibility WHERE contest_id = p and pp.actual_end_time > '2012-01-01 00:00:00' ORDER BY @sortColumn@ @sortOrder@ +) From ccff6c15cf1592dcb3d3f4d1608e387d19a07ff0 Mon Sep 17 00:00:00 2001 From: Rakesh Recharla Date: Thu, 7 May 2015 17:49:50 +0000 Subject: [PATCH 2/7] set cacheLifetime to 10 mins --- actions/challenges.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/actions/challenges.js b/actions/challenges.js index 9f286616a..ebae29efe 100755 --- a/actions/challenges.js +++ b/actions/challenges.js @@ -2540,7 +2540,7 @@ exports.searchSoftwareChallenges = { outputExample: {}, version: 'v2', transaction : 'read', // this action is read-only - cacheLifetime: 1000 * 60 * 60, + cacheLifetime: 1000 * 60 * 10, databases : ["tcs_catalog"], run: function (api, connection, next) { if (connection.dbConnectionMap) { @@ -2566,7 +2566,7 @@ exports.searchStudioChallenges = { outputExample: {}, version: 'v2', transaction : 'read', // this action is read-only - cacheLifetime: 1000 * 60 * 60, + cacheLifetime: 1000 * 60 * 10, databases : ["tcs_catalog"], run: function (api, connection, next) { if (connection.dbConnectionMap) { @@ -2592,7 +2592,7 @@ exports.searchSoftwareAndStudioChallenges = { outputExample: {}, version: 'v2', transaction : 'read', // this action is read-only - cacheLifetime: 1000 * 60 * 60, + cacheLifetime: 1000 * 60 * 10, databases : ["tcs_catalog"], run: function (api, connection, next) { if (connection.dbConnectionMap) { From d16d9eaf1eb204e30251f92d5fc38e58e8053c00 Mon Sep 17 00:00:00 2001 From: Thabo Date: Thu, 7 May 2015 18:23:13 -0700 Subject: [PATCH 3/7] review type filtering --- actions/challenges.js | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/actions/challenges.js b/actions/challenges.js index ebae29efe..b9952d86d 100755 --- a/actions/challenges.js +++ b/actions/challenges.js @@ -133,6 +133,10 @@ var TECHNOLOGY_FILTER = ' AND EXISTS (SELECT DISTINCT 1 FROM comp_technology ct var PLATFORM_FILTER = ' AND EXISTS (SELECT 1 FROM project_platform pp WHERE pp.project_platform_id IN (@filter@) ' + 'AND p.project_id = pp.project_id)'; +/* Filter based on review type */ +var REVIEW_FILTER = ' AND EXISTS (SELECT 1 FROM project_info pi WHERE project_info_type_id = 79 AND value IN (@filter@) ' + + 'AND p.project_id = pi.project_id)'; + /** * The challenge type filter for challenges api. * @since 1.30 @@ -176,7 +180,7 @@ var MY_CHALLENGES_FILTER = 'AND EXISTS ' + var ALLOWABLE_QUERY_PARAMETER = [ "listType", "challengeType", "challengeName", "projectId", SORT_COLUMN, "sortOrder", "pageIndex", "pageSize", "prizeLowerBound", "prizeUpperBound", "cmcTaskId", 'communityId', - "submissionEndFrom", "submissionEndTo", "technologies", "platforms"]; + "submissionEndFrom", "submissionEndTo", "technologies", "platforms", 'review']; /** * Represents a list of valid query parameter for split challenges api. @@ -185,7 +189,7 @@ var ALLOWABLE_QUERY_PARAMETER = [ var SPLIT_API_ALLOWABLE_QUERY_PARAMETER = [ "challengeType", "challengeName", "projectId", SORT_COLUMN, "sortOrder", "pageIndex", "pageSize", "prizeLowerBound", "prizeUpperBound", 'communityId', - "submissionEndFrom", "submissionEndTo", 'type', 'platforms', 'technologies']; + "submissionEndFrom", "submissionEndTo", 'type', 'platforms', 'technologies', 'review']; /** * Represents a predefined list of valid sort column for active challenge. @@ -763,7 +767,7 @@ var editSql = function (sql, template, content) { * @since 1.23 */ var addFilter = function (sql, filter, isMyChallenges, helper, caller) { - var platform, technology, challengeFilter, challengeType; + var platform, technology, review, challengeFilter, challengeType; if (_.isDefined(filter.platforms)) { platform = filter.platforms.join(', '); sql.count = editSql(sql.count, PLATFORM_FILTER, platform); @@ -781,6 +785,16 @@ var addFilter = function (sql, filter, isMyChallenges, helper, caller) { sql.count = editSql(sql.count, CHALLENGE_TYPE_FILTER, challengeType); sql.data = editSql(sql.data, CHALLENGE_TYPE_FILTER, challengeType); } + + if (_.isDefined(filter.review)) { + review = "'" + filter.review.toUpperCase().replace(/,/g, "','") + "'"; + } + else { + review = "'COMMUNITY','INTERNAL'"; + } + + sql.count = editSql(sql.count, REVIEW_FILTER, review); + sql.data = editSql(sql.data, REVIEW_FILTER, review); if (isMyChallenges) { sql.count = editSql(sql.count, MY_CHALLENGES_FILTER, null); @@ -876,7 +890,7 @@ var searchChallenges = function (api, connection, dbConnectionMap, community, ne query = connection.rawConnection.parsedURL.query, caller = connection.caller, copyToFilter = ["challengeType", "challengeName", "projectId", "prizeLowerBound", - "prizeUpperBound", "cmcTaskId", 'communityId', "submissionEndFrom", "submissionEndTo", "technologies", "platforms"], + "prizeUpperBound", "cmcTaskId", 'communityId', "submissionEndFrom", "submissionEndTo", "technologies", "platforms", "review"], sqlParams = {}, filter = {}, pageIndex, @@ -3636,7 +3650,7 @@ var getChallenges = function (api, connection, listType, isMyChallenges, next) { query = connection.rawConnection.parsedURL.query, caller = connection.caller, copyToFilter = ["challengeType", "challengeName", "projectId", "prizeLowerBound", - "prizeUpperBound", 'communityId', "submissionEndFrom", "submissionEndTo", 'type', 'technologies', 'platforms'], + "prizeUpperBound", 'communityId', "submissionEndFrom", "submissionEndTo", 'type', 'technologies', 'platforms', 'review'], dbConnectionMap = connection.dbConnectionMap, sqlParams = {}, filter = {}, From e48b98f6e7f50a8789072d5af4d537cfcbb90236 Mon Sep 17 00:00:00 2001 From: Thabo Date: Fri, 8 May 2015 13:36:18 -0700 Subject: [PATCH 4/7] ignore vscode settings folder --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index b6c9d55d3..e43a04c53 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ test/tmp/design_submissions/*.zip test/tmp/design_tmp_submissions/*.zip test/tmp/memberPhoto/* .idea +.settings From 6d67d13d876d6656fb6d9d4aba2fc8f239d1968a Mon Sep 17 00:00:00 2001 From: Thabo Date: Tue, 12 May 2015 13:12:35 -0700 Subject: [PATCH 5/7] add review type to upcoming and active software challenges --- queries/get_active_challenges | 4 ++++ queries/get_open_challenges | 5 +++++ queries/get_upcoming_challenges | 4 ++++ queries/search_software_studio_challenges | 4 ++++ 4 files changed, 17 insertions(+) diff --git a/queries/get_active_challenges b/queries/get_active_challenges index 68ea5b77a..07053bad9 100644 --- a/queries/get_active_challenges +++ b/queries/get_active_challenges @@ -4,6 +4,7 @@ SELECT , pn.value AS challenge_name , p.project_id AS challenge_id , pi4.value AS forum_id +, pi79.value AS review_type , (SELECT COUNT(*) FROM submission s1 INNER JOIN upload u1 ON s1.upload_id = u1.upload_id WHERE u1.project_id = p.project_id AND s1.submission_type_id = 1 @@ -41,6 +42,7 @@ FROM project p , outer project_phase nd_phase , project_category_lu pcl , outer project_info pi4 --forum id +, outer project_info pi79 , project_info pi1 -- external id WHERE p.project_status_id = pstatus.project_status_id AND p.project_id = pn.project_id @@ -56,6 +58,8 @@ AND pidr.project_info_type_id = 26 --digital run AND pi4.project_id = p.project_id AND pi4.project_info_type_id = 4 --forum id AND p.project_Id = nd_phase.project_id +AND pi79.project_info_type_id = 79 -- review type (COMMUNITY, INTERNAL, PEER) +AND pi79.project_id = p.project_id AND nd_phase.project_phase_id = (SELECT MIN(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)) AND p.project_category_id = pcl.project_category_id AND p.project_status_id = 1 diff --git a/queries/get_open_challenges b/queries/get_open_challenges index 4814d5a0a..47ff4ee5f 100644 --- a/queries/get_open_challenges +++ b/queries/get_open_challenges @@ -3,6 +3,7 @@ SELECT is_studio , challenge_name , challenge_id , forum_id +, review_type , num_submissions , num_registrants , number_of_checkpoints_prizes @@ -33,6 +34,7 @@ FIRST @page_size@ , pn.value AS challenge_name , p.project_id AS challenge_id , pi4.value AS forum_id +, pi79.value as review_type , (SELECT COUNT(*) FROM submission s1 INNER JOIN upload u1 ON s1.upload_id = u1.upload_id WHERE u1.project_id = p.project_id AND s1.submission_type_id = 1 @@ -66,6 +68,7 @@ FROM project p , outer project_phase nd_phase , project_category_lu pcl , outer project_info pi4 --forum id +, outer project_info pi79 , project_info pi1 -- external id WHERE p.project_status_id = pstatus.project_status_id AND p.project_id = pn.project_id @@ -80,6 +83,8 @@ AND pidr.project_id = p.project_id AND pidr.project_info_type_id = 26 --digital run AND pi4.project_id = p.project_id AND pi4.project_info_type_id = 4 --forum id +AND pi79.project_info_type_id = 79 -- review type (COMMUNITY, INTERNAL, PEER) +AND pi79.project_id = p.project_id AND p.project_Id = nd_phase.project_id 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)) AND p.project_category_id = pcl.project_category_id diff --git a/queries/get_upcoming_challenges b/queries/get_upcoming_challenges index 7e5ab3101..35f4903c6 100644 --- a/queries/get_upcoming_challenges +++ b/queries/get_upcoming_challenges @@ -4,6 +4,7 @@ SELECT , pn.value AS challenge_name , p.project_id AS challenge_id , pi4.value AS forum_id +, pi79.value as review_type , 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 , (SELECT pr.prize_amount FROM prize pr WHERE pr.project_id = p.project_id AND pr.prize_type_id = 15 AND pr.place = 1) AS first_place_prize , (SELECT SUM(prize_amount) FROM prize pr WHERE pr.project_id = p.project_id AND pr.prize_type_id = 15) AS total_prize @@ -33,6 +34,7 @@ FROM project p , outer project_info pidr , project_category_lu pcl , outer project_info pi4 --forum id +, outer project_info pi79 , project_info pi1 -- external id WHERE p.project_status_id = pstatus.project_status_id AND p.project_id = pn.project_id @@ -47,6 +49,8 @@ AND pidr.project_id = p.project_id AND pidr.project_info_type_id = 26 --digital run AND pi4.project_id = p.project_id AND pi4.project_info_type_id = 4 --forum id +AND pi79.project_id = p.project_id +AND pi79.project_info_type_id = 79 -- review type (COMMUNITY, INTERNAL, PEER) AND pi32.project_id = p.project_id AND pi32.project_info_type_id = 32 AND pcl.project_type_id IN (@track@) diff --git a/queries/search_software_studio_challenges b/queries/search_software_studio_challenges index 48f850e67..0f148ac57 100644 --- a/queries/search_software_studio_challenges +++ b/queries/search_software_studio_challenges @@ -11,6 +11,7 @@ FIRST @pageSize@ , pc4.parameter AS review_scorecard_id , (select value from project_info pi70 where pi70.project_id = p.project_id and project_info_type_id = 70) AS cmc_task_id , pi4.value AS forum_id + , pi79.value as review_type , (SELECT COUNT(*) FROM submission s1 INNER JOIN upload u1 ON s1.upload_id = u1.upload_id WHERE u1.project_id = p.project_id AND s1.submission_type_id = 1 @@ -66,6 +67,7 @@ FIRST @pageSize@ , outer project_phase nd_phase , project_category_lu pcl , outer project_info pi4 --forum id + , outer project_info pi79 , project_info pi1 WHERE 1=1 AND p.project_status_id = pstatus.project_status_id @@ -94,6 +96,8 @@ FIRST @pageSize@ AND pidr.project_info_type_id = 26 --digital run AND pi4.project_id = p.project_id AND pi4.project_info_type_id = 4 --forum id + AND pi79.project_id = p.project_id + AND pi79.project_info_type_id = 79 -- review type (COMMUNITY, INTERNAL, PEER) AND p.project_Id = nd_phase.project_id AND nd_phase.phase_type_id = (SELECT MIN(phase_type_id) FROM project_phase WHERE project_id = p.project_id AND phase_status_id = 2 AND phase_type_id not in (13,14)) AND p.project_category_id = pcl.project_category_id From 6aeb2829c299b2087e9bff389777a4accc4094fb Mon Sep 17 00:00:00 2001 From: Thabo Date: Wed, 13 May 2015 15:52:57 -0700 Subject: [PATCH 6/7] allow sorting in active and upcoming challenges --- actions/challenges.js | 3 ++- queries/get_active_challenges | 4 +++- queries/get_upcoming_challenges | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/actions/challenges.js b/actions/challenges.js index b9952d86d..e03414f49 100755 --- a/actions/challenges.js +++ b/actions/challenges.js @@ -3670,7 +3670,8 @@ var getChallenges = function (api, connection, listType, isMyChallenges, next) { } } - sortOrder = query.sortorder || "desc"; + sortOrder = query.sortorder || + (!query.sortcolumn && (listType == api.helper.ListType.ACTIVE || listType == api.helper.ListType.UPCOMING) ? "asc" : "desc"); sortColumn = query.sortcolumn || DEFAULT_SORT_COLUMN; pageIndex = Number(query.pageindex || 1); pageSize = Number(query.pagesize || 150); diff --git a/queries/get_active_challenges b/queries/get_active_challenges index 07053bad9..f8a6e9635 100644 --- a/queries/get_active_challenges +++ b/queries/get_active_challenges @@ -1,4 +1,6 @@ SELECT +SKIP @first_row_index@ +FIRST @page_size@ CASE WHEN (p.project_studio_spec_id IS NOT NULL) THEN 1 ELSE 0 END AS is_studio , pcl.description AS challenge_type , pn.value AS challenge_name @@ -71,4 +73,4 @@ AND pp1.phase_status_id IN (2, 3) AND pi1.project_info_type_id = 1 -- external reference id AND pi1.project_id = p.project_id -ORDER BY NVL(pp2.actual_end_time, pp2.scheduled_end_time) ASC +ORDER BY @sort_column@ @sort_order@ diff --git a/queries/get_upcoming_challenges b/queries/get_upcoming_challenges index 35f4903c6..30f5bcaf2 100644 --- a/queries/get_upcoming_challenges +++ b/queries/get_upcoming_challenges @@ -68,4 +68,4 @@ AND pp1.scheduled_start_time < CURRENT + 90 UNITS DAY AND pi1.project_info_type_id = 1 -- external reference id AND pi1.project_id = p.project_id -ORDER BY pp2.scheduled_end_time ASC +ORDER BY @sort_column@ @sort_order@ From 504d4b02cb87fab960068e40d70090ef8c738d5b Mon Sep 17 00:00:00 2001 From: Thabo Date: Wed, 13 May 2015 15:53:21 -0700 Subject: [PATCH 7/7] fix sort columns for total prize and first place prize --- initializers/helper.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/initializers/helper.js b/initializers/helper.js index 55389269f..466d970b1 100644 --- a/initializers/helper.js +++ b/initializers/helper.js @@ -261,7 +261,7 @@ var apiName2dbNameMap = { currentphaseremainingtime: 'current_phase_remaining_time', currentphasename: 'current_phase_name', registrationopen: 'registration_open', - totalPrize: 'total_prize', + totalprize: 'total_prize', registrationstartdate: 'registration_start_date', challengecommunity: 'challenge_community', problemid: 'problem_id', @@ -280,7 +280,8 @@ var apiName2dbNameMap = { challengestarttime: "challenge_start_time", challengeendtime: "challenge_end_time", systeststarttime: "systest_start_time", - systestendtime: "systest_end_time" + systestendtime: "systest_end_time", + firstplaceprize: "first_place_prize" }; /**