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

Commit 6bd3f9e

Browse files
committed
Merge pull request #183 from Ghost141/apply_review
Improve develop review opportunity detail api.
2 parents b826873 + 2577570 commit 6bd3f9e

10 files changed

+45
-37
lines changed

actions/reviewOpportunities.js

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
* Copyright (C) 2013 - 2014 TopCoder Inc., All Rights Reserved.
33
*
44
* @version 1.4
5-
* @author Sky_, Ghost_141, TCSASSEMBLER
5+
* @author Sky_, Ghost_141
66
* changes in 1.1
77
* - Implement the studio review opportunities.
88
* changes in 1.2
@@ -555,7 +555,7 @@ var getReviewOpportunities = function (api, connection, isStudio, next) {
555555
*/
556556
var getSoftwareReviewOpportunity = function (api, connection, next) {
557557
var helper = api.helper, dbConnectionMap = connection.dbConnectionMap, challengeId, sqlParams, result = {},
558-
phases, positions, applications, basic, adjustPayment,
558+
phases, positions, applications, basic, adjustPayment, assignedResource,
559559
execQuery = function (name) {
560560
return function (cb) {
561561
api.dataAccess.executeQuery(name, sqlParams, dbConnectionMap, cb);
@@ -576,6 +576,7 @@ var getSoftwareReviewOpportunity = function (api, connection, next) {
576576
}
577577

578578
sqlParams = {
579+
challenge_id: challengeId,
579580
challengeId: challengeId,
580581
user_id: connection.caller.userId
581582
};
@@ -602,13 +603,15 @@ var getSoftwareReviewOpportunity = function (api, connection, next) {
602603
phases: execQuery('get_review_opportunity_detail_phases'),
603604
positions: execQuery('get_review_opportunity_detail_positions'),
604605
applications: execQuery('get_review_opportunity_detail_applications'),
606+
resource: execQuery('get_assigned_review_resource_role'),
605607
adjustPayment: execQuery('search_software_review_opportunities_adjust_payment')
606608
}, cb);
607609
},
608610
function (results, cb) {
609611
phases = results.phases;
610612
positions = results.positions;
611613
applications = results.applications;
614+
assignedResource = results.resource;
612615
basic = results.basic[0];
613616
adjustPayment = results.adjustPayment;
614617

@@ -630,16 +633,21 @@ var getSoftwareReviewOpportunity = function (api, connection, next) {
630633
});
631634
});
632635

636+
// Iterative each positions that this challenge have.
633637
positions.forEach(function (row) {
634638
var positionOpen,
635-
approvedNumber = _.countBy(applications,
636-
function (item) {
637-
return item.review_application_role_id === row.review_application_role_id
638-
&& item.status === 'Approved';
639-
})['true'] || 0;
640-
641-
if (approvedNumber === row.num_positions) {
642-
// There is no spaces for new reviewer on this role.
639+
isClosed = false,
640+
i,
641+
reviewApplicationRole = _.filter(results.basic, function (item) { return item.review_application_role_id === row.review_application_role_id; });
642+
643+
for (i = 0; i < reviewApplicationRole.length; i += 1) {
644+
if (!isClosed && reviewApplicationRole[i].is_unique && assignedResource.indexOf(reviewApplicationRole[i].resource_role_id) >= 0) {
645+
isClosed = true;
646+
}
647+
}
648+
649+
if (isClosed) {
650+
// Review application role is closed.
643651
return;
644652
}
645653

@@ -762,7 +770,6 @@ var applyDevelopReviewOpportunity = function (api, connection, next) {
762770
.value(),
763771
privateCheck = res.privateCheck[0],
764772
positionsLeft,
765-
reviewersCount,
766773
assignedResourceRoles = res.resourceRoles,
767774
currentUserResourceRole = _.filter(assignedResourceRoles, function (item) { return item.user_id === caller.userId; });
768775

@@ -776,8 +783,6 @@ var applyDevelopReviewOpportunity = function (api, connection, next) {
776783
// Initialize it after the definition check.
777784
// The total review positions left for this challenge.
778785
positionsLeft = details[0].positions_left;
779-
// The needed reviewer count.
780-
reviewersCount = details[0].reviewers_count;
781786
// The reviewer assignment date.
782787
reviewAssignmentDate = details[0].assignment_date;
783788
// The review auction id. This will bed used when insert new review application.
@@ -833,12 +838,12 @@ var applyDevelopReviewOpportunity = function (api, connection, next) {
833838
}
834839

835840
for (i = 0; i < reviewApplicationRole.length; i += 1) {
836-
if (reviewApplicationRole[i].is_unique && assignedRoles.indexOf(reviewApplicationRole[i].resource_role_id) >= 0) {
841+
if (!isClosed && reviewApplicationRole[i].is_unique && assignedRoles.indexOf(reviewApplicationRole[i].resource_role_id) >= 0) {
837842
isClosed = true;
838843
}
839844
}
840-
console.log('isClosed: ' + isClosed);
841845

846+
// The review application role is closed so no need to calculate the positions left(we already did in query).
842847
if (isClosed) {
843848
cb(new BadRequestError('There is no open positions for selected review application role: ' + reviewApplicationRole[0].role_name + '.'));
844849
return;

queries/check_challenge_review_opportunity

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
SELECT 1
22
FROM project p
3-
INNER JOIN review_auction ra ON ra.project_id = @challengeId@
3+
INNER JOIN review_auction ra ON ra.project_id = @challenge_id@
44
INNER JOIN project_category_lu pcl ON pcl.project_category_id = p.project_category_id
55
WHERE 1=1
6-
AND p.project_id = @challengeId@
6+
AND p.project_id = @challenge_id@
77
AND p.project_category_id != 29 -- filter out the copilot posting challenge.
88
AND p.project_category_id != 37 -- filter out the marathon match challenge.
99
AND pcl.display = 't'
Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
SELECT
22
u.handle
33
, rarl.name AS role
4-
, rarl.review_application_role_id AS role_id
54
, ratingTable.rating AS reviewer_rating
65
, rasl.name AS status
76
, ra.create_date AS application_date
@@ -10,24 +9,24 @@ INNER JOIN user u ON u.user_id = ra.user_id
109
INNER JOIN review_auction rauc ON rauc.review_auction_id = ra.review_auction_id
1110
INNER JOIN review_application_role_lu rarl ON rarl.review_application_role_id = ra.review_application_role_id
1211
INNER JOIN review_application_status_lu rasl ON rasl.review_application_status_id = ra.review_application_status_id
13-
INNER JOIN project p ON p.project_id = @challengeId@ AND p.project_id = rauc.project_id
12+
INNER JOIN project p ON p.project_id = @challenge_id@ AND p.project_id = rauc.project_id
1413
LEFT OUTER JOIN (
1514
SELECT
1615
DISTINCT
1716
rating
1817
, rr.user_id
1918
, rr.review_date
2019
FROM reviewer_rating rr
21-
INNER JOIN project p1 ON p1.project_id = @challengeId@
20+
INNER JOIN project p1 ON p1.project_id = @challenge_id@
2221
INNER JOIN project p2 ON p2.project_id = rr.project_id
2322
WHERE 1=1
2423
AND p1.project_category_id = p2.project_category_id
2524
AND review_date = (SELECT
2625
max(rr.review_date)
2726
FROM reviewer_rating rr
28-
INNER JOIN project p1 ON p1.project_id = @challengeId@
27+
INNER JOIN project p1 ON p1.project_id = @challenge_id@
2928
INNER JOIN project p2 ON p2.project_id = rr.project_id
3029
WHERE 1=1
3130
AND p1.project_category_id = p2.project_category_id)
3231
) ratingTable ON ratingTable.user_id = u.user_id
33-
ORDER BY ra.create_date ASC
32+
ORDER BY ra.create_date ASC

queries/get_review_opportunity_detail_basic

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ SELECT
77
, 1 - (SELECT count(r.resource_id) FROM resource r WHERE r.project_id=p.project_id AND r.resource_role_id = 18) AS reviewers_required
88
, rarl.review_application_role_id
99
, dpp.resource_role_id
10+
, rarrrx.unique_role AS is_unique
1011
, dpp.fixed_amount
1112
, dpp.base_coefficient
1213
, dpp.incremental_coefficient
@@ -24,7 +25,7 @@ SELECT
2425
END AS submission_count
2526
FROM review_auction ra
2627
INNER JOIN review_auction_type_lu ratl ON ratl.review_auction_type_id=ra.review_auction_type_id AND ratl.review_auction_category_id=2
27-
INNER JOIN project p ON p.project_id=ra.project_id AND p.project_id = @challengeId@
28+
INNER JOIN project p ON p.project_id=ra.project_id AND p.project_id = @challenge_id@
2829
INNER JOIN project_category_lu pcl ON p.project_category_id = pcl.project_category_id
2930
INNER JOIN project_info pi ON pi.project_id = p.project_id AND pi.project_info_type_id = 6
3031
INNER JOIN project_phase pp13 ON pp13.project_id=p.project_id AND pp13.phase_type_id=13 AND not exists (SELECT 1 FROM phase_dependency WHERE dependent_phase_id=pp13.project_phase_id)
@@ -45,6 +46,7 @@ SELECT
4546
, pc.parameter::int - (SELECT count(r.resource_id) FROM resource r WHERE r.project_id=p.project_id AND r.resource_role_id IN (4,5,6,7)) AS reviewers_required
4647
, rarl.review_application_role_id
4748
, dpp.resource_role_id
49+
, rarrrx.unique_role AS is_unique
4850
, dpp.fixed_amount
4951
, dpp.base_coefficient
5052
, dpp.incremental_coefficient
@@ -62,7 +64,7 @@ SELECT
6264
END AS submission_count
6365
FROM review_auction ra
6466
INNER JOIN review_auction_type_lu ratl ON ratl.review_auction_type_id=ra.review_auction_type_id AND ratl.review_auction_category_id=1
65-
INNER JOIN project p ON p.project_id=ra.project_id AND p.project_id = @challengeId@
67+
INNER JOIN project p ON p.project_id=ra.project_id AND p.project_id = @challenge_id@
6668
INNER JOIN project_category_lu pcl ON p.project_category_id = pcl.project_category_id
6769
INNER JOIN project_info pi ON pi.project_id = p.project_id AND pi.project_info_type_id = 6
6870
INNER JOIN project_phase pp2 ON pp2.project_id=p.project_id AND pp2.phase_type_id=2
@@ -83,6 +85,7 @@ SELECT
8385
, pc.parameter::int - (SELECT count(r.resource_id) FROM resource r WHERE r.project_id=p.project_id AND r.resource_role_id = 21) AS reviewers_required
8486
, rarl.review_application_role_id
8587
, dpp.resource_role_id
88+
, rarrrx.unique_role AS is_unique
8689
, dpp.fixed_amount
8790
, dpp.base_coefficient
8891
, dpp.incremental_coefficient
@@ -100,7 +103,7 @@ SELECT
100103
END AS submission_count
101104
FROM review_auction ra
102105
INNER JOIN review_auction_type_lu ratl ON ratl.review_auction_type_id=ra.review_auction_type_id AND ratl.review_auction_category_id=3
103-
INNER JOIN project p ON p.project_id=ra.project_id AND p.project_id = @challengeId@
106+
INNER JOIN project p ON p.project_id=ra.project_id AND p.project_id = @challenge_id@
104107
INNER JOIN project_category_lu pcl ON p.project_category_id = pcl.project_category_id
105108
INNER JOIN project_info pi ON pi.project_id = p.project_id AND pi.project_info_type_id = 6
106109
INNER JOIN project_phase pp2 ON pp2.project_id=p.project_id AND pp2.phase_type_id=2
@@ -110,4 +113,4 @@ INNER JOIN phase_criteria pc ON pc.project_phase_id=pp18.project_phase_id AND pc
110113
INNER JOIN review_application_role_lu rarl ON rarl.review_auction_type_id = ra.review_auction_type_id
111114
INNER JOIN review_application_role_resource_role_xref rarrrx ON rarrrx.review_application_role_id = rarl.review_application_role_id
112115
INNER JOIN default_project_payment dpp ON dpp.resource_role_id = rarrrx.resource_role_id AND p.project_category_id = dpp.project_category_id
113-
WHERE dpp.resource_role_id = 21
116+
WHERE dpp.resource_role_id = 21

queries/get_review_opportunity_detail_phases

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,5 @@ SELECT
88
FROM project_phase pp
99
INNER JOIN phase_status_lu psl ON psl.phase_status_id = pp.phase_status_id
1010
INNER JOIN phase_type_lu ptl ON ptl.phase_type_id = pp.phase_type_id
11-
WHERE pp.project_id = @challengeId@
12-
ORDER BY NVL(actual_start_time, scheduled_start_time) ASC
11+
WHERE pp.project_id = @challenge_id@
12+
ORDER BY NVL(actual_start_time, scheduled_start_time) ASC

queries/get_review_opportunity_detail_positions

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@ SELECT
22
rarl.name AS role
33
, rarl.review_application_role_id
44
, rarl.positions AS num_positions
5+
, rarl.order_index
56
FROM review_auction ra
6-
INNER JOIN project p ON p.project_id = @challengeId@ AND ra.project_id = @challengeId@
7+
INNER JOIN project p ON p.project_id = @challenge_id@ AND ra.project_id = @challenge_id@
78
INNER JOIN review_auction_type_lu ratl ON ratl.review_auction_type_id = ra.review_auction_type_id
89
INNER JOIN review_application_role_lu rarl ON rarl.review_auction_type_id = ra.review_auction_type_id
10+
ORDER BY rarl.order_index ASC

queries/review_opportunity_detail

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
SELECT
33
ra.review_auction_id
44
, 1 - (SELECT COUNT(r.resource_id) FROM resource r WHERE r.project_id=p.project_id AND r.resource_role_id = 18) AS positions_left
5-
, 1 AS reviewers_count
65
, rarl.name AS role_name
76
, rarl.review_application_role_id
87
, rarl.positions
@@ -31,7 +30,6 @@ UNION ALL
3130
SELECT
3231
ra.review_auction_id
3332
, pc.parameter::int - (SELECT COUNT(r.resource_id) FROM resource r WHERE r.project_id=p.project_id AND r.resource_role_id IN (4,5,6,7)) AS positions_left
34-
, pc.parameter::int AS reviewers_count
3533
, rarl.name AS role_name
3634
, rarl.review_application_role_id
3735
, rarl.positions
@@ -61,7 +59,6 @@ UNION ALL
6159
SELECT
6260
ra.review_auction_id
6361
, pc.parameter::int - (SELECT COUNT(r.resource_id) FROM resource r WHERE r.project_id=p.project_id AND r.resource_role_id = 21) AS positions_left
64-
, pc.parameter::int AS reviewers_count
6562
, rarl.name AS role_name
6663
, rarl.review_application_role_id
6764
, rarl.positions
@@ -85,3 +82,5 @@ AND p.project_status_id = 1
8582
AND pp2.phase_status_id IN (2, 3)
8683
AND pp18.phase_status_id IN (1, 2)
8784
AND not exists (SELECT 1 FROM project_phase pp12 WHERE pp12.project_id=p.project_id AND pp12.phase_type_id=12)
85+
86+
ORDER BY rarl.order_index ASC

queries/search_software_review_opportunities_adjust_payment

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ DISTINCT
88
FROM project_payment_adjustment ppa
99
INNER JOIN review_auction ra ON ra.project_id = ppa.project_id
1010
INNER JOIN review_auction_type_lu ratl ON ratl.review_auction_type_id=ra.review_auction_type_id AND ratl.review_auction_category_id=2
11-
INNER JOIN project p ON p.project_id=ra.project_id AND p.project_id = DECODE(@challengeId@, 0, p.project_id, @challengeId@)
11+
INNER JOIN project p ON p.project_id=ra.project_id AND p.project_id = DECODE(@challenge_id@, 0, p.project_id, @challenge_id@)
1212
INNER JOIN project_phase pp13 ON pp13.project_id=p.project_id AND pp13.phase_type_id=13 AND not exists (SELECT 1 FROM phase_dependency WHERE dependent_phase_id=pp13.project_phase_id)
1313
INNER JOIN phase_dependency pd ON pd.dependency_phase_id=pp13.project_phase_id
1414
INNER JOIN project_phase pp14 ON pp14.project_id=p.project_id AND pp14.phase_type_id=14 AND pp14.project_phase_id=pd.dependent_phase_id
@@ -27,7 +27,7 @@ DISTINCT
2727
FROM project_payment_adjustment ppa
2828
INNER JOIN review_auction ra ON ra.project_id = ppa.project_id
2929
INNER JOIN review_auction_type_lu ratl ON ratl.review_auction_type_id=ra.review_auction_type_id AND ratl.review_auction_category_id=1
30-
INNER JOIN project p ON p.project_id=ra.project_id AND p.project_id = DECODE(@challengeId@, 0, p.project_id, @challengeId@)
30+
INNER JOIN project p ON p.project_id=ra.project_id AND p.project_id = DECODE(@challenge_id@, 0, p.project_id, @challenge_id@)
3131
INNER JOIN project_phase pp2 ON pp2.project_id=p.project_id AND pp2.phase_type_id=2
3232
INNER JOIN project_phase pp4 ON pp4.project_id=p.project_id AND pp4.phase_type_id=4
3333
INNER JOIN phase_criteria pc ON pc.project_phase_id=pp4.project_phase_id AND pc.phase_criteria_type_id=6
@@ -46,7 +46,7 @@ DISTINCT
4646
FROM project_payment_adjustment ppa
4747
INNER JOIN review_auction ra ON ra.project_id = ppa.project_id
4848
INNER JOIN review_auction_type_lu ratl ON ratl.review_auction_type_id=ra.review_auction_type_id AND ratl.review_auction_category_id=3
49-
INNER JOIN project p ON p.project_id=ra.project_id AND p.project_id = DECODE(@challengeId@, 0, p.project_id, @challengeId@)
49+
INNER JOIN project p ON p.project_id=ra.project_id AND p.project_id = DECODE(@challenge_id@, 0, p.project_id, @challenge_id@)
5050
INNER JOIN project_phase pp2 ON pp2.project_id=p.project_id AND pp2.phase_type_id=2
5151
INNER JOIN project_phase pp18 ON pp18.project_id=p.project_id AND pp18.phase_type_id=18
5252
INNER JOIN phase_dependency pd ON pd.dependent_phase_id=pp18.project_phase_id AND pd.dependent_start=1 AND pd.dependency_phase_id=pp2.project_phase_id AND pd.dependency_start=1

test/test.applyDevelopReviewOpportunity.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
* Copyright (C) 2014 TopCoder Inc., All Rights Reserved.
33
*
44
* @version 1.0
5-
* @author TCSASSEMBLER
5+
* @author Ghost_141
66
*/
77
'use strict';
88
/*global describe, it, before, beforeEach, after, afterEach */

test/test.softwareReviewOpportunityDetails.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
* Copyright (C) 2014 TopCoder Inc., All Rights Reserved.
33
*
44
* @version 1.0
5-
* @author TCSASSEMBLER
5+
* @author Ghost_141
66
*/
77
'use strict';
88
/*global describe, it, before, beforeEach, after, afterEach */

0 commit comments

Comments
 (0)