66using System . Text ;
77using System . Threading . Tasks ;
88using APIViewWeb . Models ;
9- using APIViewWeb . Repositories ;
9+ using APIViewWeb . Repositories ;
1010using Microsoft . Azure . Cosmos ;
1111using Microsoft . Extensions . Configuration ;
1212
@@ -25,12 +25,22 @@ public CosmosPullRequestsRepository(IConfiguration configuration, ICosmosReviewR
2525
2626 public async Task < PullRequestModel > GetPullRequestAsync ( int pullRequestNumber , string repoName , string packageName , string language = null )
2727 {
28- var queryBuilder = new StringBuilder ( $ "SELECT * FROM PullRequests c WHERE c.PullRequestNumber = { pullRequestNumber } AND c.RepoName = ' { repoName } ' AND c.PackageName = ' { packageName } ' AND c.IsDeleted = false") ;
28+ var queryBuilder = new StringBuilder ( "SELECT * FROM PullRequests c WHERE c.PullRequestNumber = @ pullRequestNumber AND c.RepoName = @ repoName AND c.PackageName = @ packageName AND c.IsDeleted = false" ) ;
2929 if ( language != null )
3030 {
31- queryBuilder . Append ( $ " AND IS_DEFINED(c.Language) AND c.Language = ' { language } ' ") ;
31+ queryBuilder . Append ( " AND IS_DEFINED(c.Language) AND c.Language = @ language" ) ;
3232 }
33- var requests = await GetPullRequestFromQueryAsync ( queryBuilder . ToString ( ) ) ;
33+
34+ var queryDefinition = new QueryDefinition ( queryBuilder . ToString ( ) )
35+ . WithParameter ( "@pullRequestNumber" , pullRequestNumber )
36+ . WithParameter ( "@repoName" , repoName )
37+ . WithParameter ( "@packageName" , packageName ) ;
38+ if ( language != null )
39+ {
40+ queryDefinition = queryDefinition . WithParameter ( "@language" , language ) ;
41+ }
42+
43+ var requests = await GetPullRequestFromQueryAsync ( queryDefinition ) ;
3444 return requests . Count > 0 ? requests [ 0 ] : null ;
3545 }
3646
@@ -41,30 +51,41 @@ public async Task UpsertPullRequestAsync(PullRequestModel pullRequestModel)
4151
4252 public async Task < IEnumerable < PullRequestModel > > GetPullRequestsAsync ( bool isOpen )
4353 {
44- var query = $ "SELECT * FROM PullRequests c WHERE c.IsOpen = { ( isOpen ? "true" : "false" ) } AND c.IsDeleted = false";
45- return await GetPullRequestFromQueryAsync ( query ) ;
46- }
47-
54+ var queryDefinition = new QueryDefinition ( "SELECT * FROM PullRequests c WHERE c.IsOpen = @isOpen AND c.IsDeleted = false" )
55+ . WithParameter ( "@isOpen" , isOpen ) ;
56+ return await GetPullRequestFromQueryAsync ( queryDefinition ) ;
57+ }
58+
4859 public async Task < List < PullRequestModel > > GetPullRequestsAsync ( int pullRequestNumber , string repoName )
4960 {
50- var query = $ "SELECT * FROM PullRequests c WHERE c.PullRequestNumber = { pullRequestNumber } and c.RepoName = '{ repoName } ' AND c.IsDeleted = false";
51- return await GetPullRequestFromQueryAsync ( query ) ;
52- }
53-
54- public async Task < IEnumerable < PullRequestModel > > GetPullRequestsAsync ( string reviewId , string apiRevisionId = null ) {
55- var query = $ "SELECT * FROM PullRequests c WHERE c.ReviewId = '{ reviewId } ' AND c.IsDeleted = false";
56- if ( ! string . IsNullOrEmpty ( apiRevisionId ) )
57- {
58- query += $ " AND c.APIRevisionId = '{ apiRevisionId } '";
59- }
60-
61- return await GetPullRequestFromQueryAsync ( query ) ;
61+ var queryDefinition = new QueryDefinition ( "SELECT * FROM PullRequests c WHERE c.PullRequestNumber = @pullRequestNumber AND c.RepoName = @repoName AND c.IsDeleted = false" )
62+ . WithParameter ( "@pullRequestNumber" , pullRequestNumber )
63+ . WithParameter ( "@repoName" , repoName ) ;
64+ return await GetPullRequestFromQueryAsync ( queryDefinition ) ;
65+ }
66+
67+ public async Task < IEnumerable < PullRequestModel > > GetPullRequestsAsync ( string reviewId , string apiRevisionId = null )
68+ {
69+ var queryBuilder = new StringBuilder ( "SELECT * FROM PullRequests c WHERE c.ReviewId = @reviewId AND c.IsDeleted = false" ) ;
70+ if ( ! string . IsNullOrEmpty ( apiRevisionId ) )
71+ {
72+ queryBuilder . Append ( " AND c.APIRevisionId = @apiRevisionId" ) ;
73+ }
74+
75+ var queryDefinition = new QueryDefinition ( queryBuilder . ToString ( ) )
76+ . WithParameter ( "@reviewId" , reviewId ) ;
77+ if ( ! string . IsNullOrEmpty ( apiRevisionId ) )
78+ {
79+ queryDefinition = queryDefinition . WithParameter ( "@apiRevisionId" , apiRevisionId ) ;
80+ }
81+
82+ return await GetPullRequestFromQueryAsync ( queryDefinition ) ;
6283 }
6384
64- private async Task < List < PullRequestModel > > GetPullRequestFromQueryAsync ( string query )
85+ private async Task < List < PullRequestModel > > GetPullRequestFromQueryAsync ( QueryDefinition queryDefinition )
6586 {
6687 var allRequests = new List < PullRequestModel > ( ) ;
67- var itemQueryIterator = _pullRequestsContainer . GetItemQueryIterator < PullRequestModel > ( query ) ;
88+ var itemQueryIterator = _pullRequestsContainer . GetItemQueryIterator < PullRequestModel > ( queryDefinition ) ;
6889 while ( itemQueryIterator . HasMoreResults )
6990 {
7091 var result = await itemQueryIterator . ReadNextAsync ( ) ;
@@ -76,32 +97,32 @@ private async Task<List<PullRequestModel>> GetPullRequestFromQueryAsync(string q
7697 Dictionary < string , List < PullRequestModel > > kvp = new Dictionary < string , List < PullRequestModel > > ( ) ;
7798 foreach ( var pr in allRequests )
7899 {
79- if ( ! string . IsNullOrEmpty ( pr . ReviewId ) )
100+ if ( ! string . IsNullOrEmpty ( pr . ReviewId ) )
101+ {
102+ if ( kvp . ContainsKey ( pr . ReviewId ) )
103+ {
104+ kvp [ pr . ReviewId ] . Add ( pr ) ;
105+ }
106+ else
107+ {
108+ kvp . Add ( pr . ReviewId , new List < PullRequestModel > { pr } ) ;
109+ }
110+ }
111+ }
112+
113+ if ( kvp . Any ( ) )
114+ {
115+ var reviews = await _reviewsRepository . GetReviewsAsync ( reviewIds : new List < string > ( kvp . Keys ) , isClosed : false ) ;
116+ var reviewIds = reviews . Select ( r => r . Id ) . ToList ( ) ;
117+
118+ foreach ( var kv in kvp )
80119 {
81- if ( kvp . ContainsKey ( pr . ReviewId ) )
82- {
83- kvp [ pr . ReviewId ] . Add ( pr ) ;
84- }
85- else
86- {
87- kvp . Add ( pr . ReviewId , new List < PullRequestModel > { pr } ) ;
120+ if ( reviewIds . Contains ( kv . Key ) )
121+ {
122+ filtered . AddRange ( kv . Value ) ;
88123 }
89124 }
90125 }
91-
92- if ( kvp . Any ( ) )
93- {
94- var reviews = await _reviewsRepository . GetReviewsAsync ( reviewIds : new List < string > ( kvp . Keys ) , isClosed : false ) ;
95- var reviewIds = reviews . Select ( r => r . Id ) . ToList ( ) ;
96-
97- foreach ( var kv in kvp )
98- {
99- if ( reviewIds . Contains ( kv . Key ) )
100- {
101- filtered . AddRange ( kv . Value ) ;
102- }
103- }
104- }
105126 return filtered ;
106127 }
107128 }
0 commit comments