99using System . Web . Http ;
1010using System . Web . Http . OData ;
1111using System . Web . Http . OData . Query ;
12- using Microsoft . Data . OData ;
1312using NuGet . Services . Entities ;
1413using NuGetGallery . Configuration ;
1514using NuGetGallery . OData ;
@@ -54,7 +53,21 @@ public ODataV1FeedController(
5453 [ CacheOutput ( NoCache = true ) ]
5554 public IHttpActionResult Get ( ODataQueryOptions < V1FeedPackage > options )
5655 {
57- if ( ! _featureFlagService . IsODataV1GetAllEnabled ( ) )
56+ return Get ( options , _featureFlagService . IsODataV1GetAllEnabled ( ) ) ;
57+ }
58+
59+ // /api/v1/Packages/$count
60+ [ HttpGet ]
61+ [ CacheOutput ( NoCache = true ) ]
62+ public IHttpActionResult GetCount ( ODataQueryOptions < V1FeedPackage > options )
63+ {
64+ return Get ( options , _featureFlagService . IsODataV1GetAllCountEnabled ( ) )
65+ . FormattedAsCountResult < V1FeedPackage > ( ) ;
66+ }
67+
68+ private IHttpActionResult Get ( ODataQueryOptions < V1FeedPackage > options , bool isNonHijackEnabled )
69+ {
70+ if ( ! isNonHijackEnabled )
5871 {
5972 return BadRequest ( Strings . ODataDisabled ) ;
6073 }
@@ -71,7 +84,7 @@ public IHttpActionResult Get(ODataQueryOptions<V1FeedPackage> options)
7184 {
7285 return BadRequest ( "Invalid OrderBy parameter" ) ;
7386 }
74-
87+
7588 var queryable = GetAll ( )
7689 . Where ( p => ! p . IsPrerelease && p . PackageStatusKey == PackageStatus . Available )
7790 . Where ( SemVerLevelKey . IsUnknownPredicate ( ) )
@@ -82,14 +95,6 @@ public IHttpActionResult Get(ODataQueryOptions<V1FeedPackage> options)
8295 return TrackedQueryResult ( options , queryable , MaxPageSize , customQuery : true ) ;
8396 }
8497
85- // /api/v1/Packages/$count
86- [ HttpGet ]
87- [ CacheOutput ( NoCache = true ) ]
88- public IHttpActionResult GetCount ( ODataQueryOptions < V1FeedPackage > options )
89- {
90- return Get ( options ) . FormattedAsCountResult < V1FeedPackage > ( ) ;
91- }
92-
9398 // /api/v1/Packages(Id=,Version=)
9499 [ HttpGet ]
95100 [ ODataCacheOutput (
@@ -99,7 +104,7 @@ public IHttpActionResult GetCount(ODataQueryOptions<V1FeedPackage> options)
99104 ClientTimeSpan = ODataCacheConfiguration . DefaultGetByIdAndVersionCacheTimeInSeconds ) ]
100105 public async Task < IHttpActionResult > Get ( ODataQueryOptions < V1FeedPackage > options , string id , string version )
101106 {
102- var result = await GetCore (
107+ var result = await GetCoreAsync (
103108 options ,
104109 id ,
105110 version ,
@@ -118,12 +123,10 @@ public async Task<IHttpActionResult> Get(ODataQueryOptions<V1FeedPackage> option
118123 ClientTimeSpan = ODataCacheConfiguration . DefaultGetByIdAndVersionCacheTimeInSeconds ) ]
119124 public async Task < IHttpActionResult > FindPackagesById ( ODataQueryOptions < V1FeedPackage > options , [ FromODataUri ] string id )
120125 {
121- return await GetCore (
126+ return await FindPackagesByIdAsync (
122127 options ,
123128 id ,
124- version : null ,
125- return404NotFoundWhenNoResults : false ,
126- isNonHijackEnabled : _featureFlagService . IsODataV1FindPackagesByIdNonHijackedEnabled ( ) ) ;
129+ _featureFlagService . IsODataV1FindPackagesByIdNonHijackedEnabled ( ) ) ;
127130 }
128131
129132 // /api/v1/FindPackagesById()/$count?id=
@@ -132,13 +135,29 @@ public async Task<IHttpActionResult> FindPackagesById(ODataQueryOptions<V1FeedPa
132135 ODataCachedEndpoint . FindPackagesByIdCount ,
133136 serverTimeSpan : ODataCacheConfiguration . DefaultFindPackagesByIdCountCacheTimeInSeconds ,
134137 NoCache = true ) ]
135- public async Task < IHttpActionResult > FindPackagesByIdCount ( ODataQueryOptions < V1FeedPackage > options , [ FromODataUri ] string id )
138+ public async Task < IHttpActionResult > FindPackagesByIdCount ( ODataQueryOptions < V1FeedPackage > options , [ FromODataUri ] string id )
139+ {
140+ return ( await FindPackagesByIdAsync (
141+ options ,
142+ id ,
143+ _featureFlagService . IsODataV1FindPackagesByIdCountNonHijackedEnabled ( ) ) )
144+ . FormattedAsCountResult < V1FeedPackage > ( ) ;
145+ }
146+
147+ private async Task < IHttpActionResult > FindPackagesByIdAsync (
148+ ODataQueryOptions < V1FeedPackage > options ,
149+ string id ,
150+ bool isNonHijackEnabled )
136151 {
137- var result = await FindPackagesById ( options , id ) ;
138- return result . FormattedAsCountResult < V1FeedPackage > ( ) ;
152+ return await GetCoreAsync (
153+ options ,
154+ id ,
155+ version : null ,
156+ return404NotFoundWhenNoResults : false ,
157+ isNonHijackEnabled : isNonHijackEnabled ) ;
139158 }
140159
141- private async Task < IHttpActionResult > GetCore (
160+ private async Task < IHttpActionResult > GetCoreAsync (
142161 ODataQueryOptions < V1FeedPackage > options ,
143162 string id ,
144163 string version ,
@@ -253,6 +272,38 @@ public async Task<IHttpActionResult> Search(
253272 ODataQueryOptions < V1FeedPackage > options ,
254273 [ FromODataUri ] string searchTerm = "" ,
255274 [ FromODataUri ] string targetFramework = "" )
275+ {
276+ return await SearchAsync (
277+ options ,
278+ searchTerm ,
279+ targetFramework ,
280+ _featureFlagService . IsODataV1SearchNonHijackedEnabled ( ) ) ;
281+ }
282+
283+ // /api/v1/Search()/$count?searchTerm=&targetFramework=&includePrerelease=
284+ [ HttpGet ]
285+ [ ODataCacheOutput (
286+ ODataCachedEndpoint . Search ,
287+ serverTimeSpan : ODataCacheConfiguration . DefaultSearchCacheTimeInSeconds ,
288+ ClientTimeSpan = ODataCacheConfiguration . DefaultSearchCacheTimeInSeconds ) ]
289+ public async Task < IHttpActionResult > SearchCount (
290+ ODataQueryOptions < V1FeedPackage > options ,
291+ [ FromODataUri ] string searchTerm = "" ,
292+ [ FromODataUri ] string targetFramework = "" )
293+ {
294+ return ( await SearchAsync (
295+ options ,
296+ searchTerm ,
297+ targetFramework ,
298+ _featureFlagService . IsODataV1SearchCountNonHijackedEnabled ( ) ) )
299+ . FormattedAsCountResult < V1FeedPackage > ( ) ;
300+ }
301+
302+ private async Task < IHttpActionResult > SearchAsync (
303+ ODataQueryOptions < V1FeedPackage > options ,
304+ string searchTerm ,
305+ string targetFramework ,
306+ bool isNonHijackEnabled )
256307 {
257308 // Handle OData-style |-separated list of frameworks.
258309 string [ ] targetFrameworkList = ( targetFramework ?? "" ) . Split ( new [ ] { '\' ' , '|' } , StringSplitOptions . RemoveEmptyEntries ) ;
@@ -288,7 +339,7 @@ public async Task<IHttpActionResult> Search(
288339 packages ,
289340 searchTerm ,
290341 targetFramework ,
291- includePrerelease : false ,
342+ includePrerelease : false ,
292343 semVerLevel : null ) ;
293344
294345 // Packages provided by search service (even when not hijacked)
@@ -319,7 +370,7 @@ public async Task<IHttpActionResult> Search(
319370 customQuery = true ;
320371 }
321372
322- if ( ! _featureFlagService . IsODataV1SearchNonHijackedEnabled ( ) )
373+ if ( ! isNonHijackEnabled )
323374 {
324375 return BadRequest ( Strings . ODataParametersDisabled ) ;
325376 }
@@ -335,21 +386,6 @@ public async Task<IHttpActionResult> Search(
335386 return TrackedQueryResult ( options , queryable , MaxPageSize , customQuery ) ;
336387 }
337388
338- // /api/v1/Search()/$count?searchTerm=&targetFramework=&includePrerelease=
339- [ HttpGet ]
340- [ ODataCacheOutput (
341- ODataCachedEndpoint . Search ,
342- serverTimeSpan : ODataCacheConfiguration . DefaultSearchCacheTimeInSeconds ,
343- ClientTimeSpan = ODataCacheConfiguration . DefaultSearchCacheTimeInSeconds ) ]
344- public async Task < IHttpActionResult > SearchCount (
345- ODataQueryOptions < V1FeedPackage > options ,
346- [ FromODataUri ] string searchTerm = "" ,
347- [ FromODataUri ] string targetFramework = "" )
348- {
349- var searchResults = await Search ( options , searchTerm , targetFramework ) ;
350- return searchResults . FormattedAsCountResult < V1FeedPackage > ( ) ;
351- }
352-
353389 [ HttpGet ]
354390 [ CacheOutput ( NoCache = true ) ]
355391 public virtual HttpResponseMessage SimulateError ( [ FromUri ] string type = "Exception" )
0 commit comments