1
1
//! `/v5/campaign` routes
2
2
use crate :: {
3
+ application:: Qs ,
3
4
db:: {
4
5
accounting:: { get_accounting, Side } ,
5
6
campaign:: {
@@ -21,8 +22,10 @@ use hyper::{Body, Request, Response};
21
22
use primitives:: {
22
23
campaign_validator:: Validator ,
23
24
sentry:: {
24
- campaign_create:: CreateCampaign , campaign_list:: CampaignListQuery ,
25
- campaign_modify:: ModifyCampaign , SuccessResponse ,
25
+ campaign_create:: CreateCampaign ,
26
+ campaign_list:: { CampaignListQuery , CampaignListResponse } ,
27
+ campaign_modify:: ModifyCampaign ,
28
+ SuccessResponse ,
26
29
} ,
27
30
spender:: Spendable ,
28
31
Address , Campaign , CampaignId , ChainOf , Channel , ChannelId , Deposit , UnifiedNum ,
@@ -425,6 +428,29 @@ where
425
428
Ok ( success_response ( serde_json:: to_string ( & campaign) ?) )
426
429
}
427
430
431
+ /// GET `/v5/campaign/list`
432
+ pub async fn campaign_list_axum < C : Locked + ' static > (
433
+ Extension ( app) : Extension < Arc < Application < C > > > ,
434
+ Qs ( query) : Qs < CampaignListQuery > ,
435
+ ) -> Result < Json < CampaignListResponse > , ResponseError > {
436
+ let limit = app. config . campaigns_find_limit ;
437
+ let skip = query
438
+ . page
439
+ . checked_mul ( limit. into ( ) )
440
+ . ok_or_else ( || ResponseError :: BadRequest ( "Page and/or limit is too large" . into ( ) ) ) ?;
441
+ let list_response = list_campaigns (
442
+ & app. pool ,
443
+ skip,
444
+ limit,
445
+ query. creator ,
446
+ query. validator ,
447
+ & query. active_to_ge ,
448
+ )
449
+ . await ?;
450
+
451
+ Ok ( Json ( list_response) )
452
+ }
453
+
428
454
/// GET `/v5/campaign/list`
429
455
pub async fn campaign_list < C : Locked + ' static > (
430
456
req : Request < Body > ,
@@ -1294,7 +1320,7 @@ mod test {
1294
1320
use primitives:: {
1295
1321
campaign:: validators:: Validators ,
1296
1322
config:: GANACHE_CONFIG ,
1297
- sentry:: campaign_list:: { CampaignListResponse , ValidatorParam } ,
1323
+ sentry:: campaign_list:: ValidatorParam ,
1298
1324
test_util:: {
1299
1325
CREATOR , DUMMY_CAMPAIGN , DUMMY_VALIDATOR_FOLLOWER , DUMMY_VALIDATOR_LEADER , FOLLOWER ,
1300
1326
GUARDIAN , IDS , LEADER , LEADER_2 , PUBLISHER_2 ,
@@ -1668,18 +1694,12 @@ mod test {
1668
1694
}
1669
1695
}
1670
1696
1671
- async fn res_to_campaign_list_response ( res : Response < Body > ) -> CampaignListResponse {
1672
- let json = hyper:: body:: to_bytes ( res. into_body ( ) )
1673
- . await
1674
- . expect ( "Should get json" ) ;
1675
-
1676
- serde_json:: from_slice ( & json) . expect ( "Should deserialize CampaignListResponse" )
1677
- }
1678
-
1679
1697
#[ tokio:: test]
1680
1698
async fn test_campaign_list ( ) {
1681
- let mut app = setup_dummy_app ( ) . await ;
1682
- app. config . campaigns_find_limit = 2 ;
1699
+ let mut app_guard = setup_dummy_app ( ) . await ;
1700
+ app_guard. config . campaigns_find_limit = 2 ;
1701
+ let app = Extension ( Arc :: new ( app_guard. app . clone ( ) ) ) ;
1702
+
1683
1703
// Setting up new leader and a channel and campaign which use it on Ganache #1337
1684
1704
let dummy_leader_2 = ValidatorDesc {
1685
1705
id : IDS [ & LEADER_2 ] ,
@@ -1797,14 +1817,6 @@ mod test {
1797
1817
. await
1798
1818
. expect ( "Should insert dummy campaign" ) ;
1799
1819
1800
- let build_request = |query : CampaignListQuery | {
1801
- let query = serde_qs:: to_string ( & query) . expect ( "should parse query" ) ;
1802
- Request :: builder ( )
1803
- . uri ( format ! ( "http://127.0.0.1/v5/campaign/list?{}" , query) )
1804
- . body ( Body :: empty ( ) )
1805
- . expect ( "Should build Request" )
1806
- } ;
1807
-
1808
1820
// Test for dummy leader
1809
1821
{
1810
1822
let query = CampaignListQuery {
@@ -1813,10 +1825,11 @@ mod test {
1813
1825
creator : None ,
1814
1826
validator : Some ( ValidatorParam :: Leader ( DUMMY_VALIDATOR_LEADER . id ) ) ,
1815
1827
} ;
1816
- let res = campaign_list ( build_request ( query) , & app)
1828
+
1829
+ let res = campaign_list_axum ( app. clone ( ) , Qs ( query) )
1817
1830
. await
1818
- . expect ( "should get campaigns" ) ;
1819
- let res = res_to_campaign_list_response ( res ) . await ;
1831
+ . expect ( "should get campaigns" )
1832
+ . 0 ;
1820
1833
1821
1834
assert_eq ! (
1822
1835
res. campaigns,
@@ -1831,10 +1844,10 @@ mod test {
1831
1844
creator : None ,
1832
1845
validator : Some ( ValidatorParam :: Leader ( DUMMY_VALIDATOR_LEADER . id ) ) ,
1833
1846
} ;
1834
- let res = campaign_list ( build_request ( query ) , & app )
1847
+ let res = campaign_list_axum ( app . clone ( ) , Qs ( query ) )
1835
1848
. await
1836
- . expect ( "should get campaigns" ) ;
1837
- let res = res_to_campaign_list_response ( res ) . await ;
1849
+ . expect ( "should get campaigns" )
1850
+ . 0 ;
1838
1851
1839
1852
assert_eq ! (
1840
1853
res. campaigns,
@@ -1854,10 +1867,10 @@ mod test {
1854
1867
creator : None ,
1855
1868
validator : Some ( ValidatorParam :: Validator ( DUMMY_VALIDATOR_FOLLOWER . id ) ) ,
1856
1869
} ;
1857
- let res = campaign_list ( build_request ( query ) , & app )
1870
+ let res = campaign_list_axum ( app . clone ( ) , Qs ( query ) )
1858
1871
. await
1859
- . expect ( "should get campaigns" ) ;
1860
- let res = res_to_campaign_list_response ( res ) . await ;
1872
+ . expect ( "should get campaigns" )
1873
+ . 0 ;
1861
1874
1862
1875
assert_eq ! (
1863
1876
res. campaigns,
@@ -1872,10 +1885,10 @@ mod test {
1872
1885
creator : None ,
1873
1886
validator : Some ( ValidatorParam :: Validator ( DUMMY_VALIDATOR_FOLLOWER . id ) ) ,
1874
1887
} ;
1875
- let res = campaign_list ( build_request ( query ) , & app )
1888
+ let res = campaign_list_axum ( app . clone ( ) , Qs ( query ) )
1876
1889
. await
1877
- . expect ( "should get campaigns" ) ;
1878
- let res = res_to_campaign_list_response ( res ) . await ;
1890
+ . expect ( "should get campaigns" )
1891
+ . 0 ;
1879
1892
1880
1893
assert_eq ! (
1881
1894
res. campaigns,
@@ -1895,10 +1908,10 @@ mod test {
1895
1908
creator : None ,
1896
1909
validator : Some ( ValidatorParam :: Leader ( dummy_leader_2. id ) ) ,
1897
1910
} ;
1898
- let res = campaign_list ( build_request ( query ) , & app )
1911
+ let res = campaign_list_axum ( app . clone ( ) , Qs ( query ) )
1899
1912
. await
1900
- . expect ( "should get campaigns" ) ;
1901
- let res = res_to_campaign_list_response ( res ) . await ;
1913
+ . expect ( "should get campaigns" )
1914
+ . 0 ;
1902
1915
1903
1916
assert_eq ! (
1904
1917
res. campaigns,
@@ -1919,10 +1932,10 @@ mod test {
1919
1932
creator : None ,
1920
1933
validator : Some ( ValidatorParam :: Validator ( dummy_follower_2. id ) ) ,
1921
1934
} ;
1922
- let res = campaign_list ( build_request ( query ) , & app )
1935
+ let res = campaign_list_axum ( app . clone ( ) , Qs ( query ) )
1923
1936
. await
1924
- . expect ( "should get campaigns" ) ;
1925
- let res = res_to_campaign_list_response ( res ) . await ;
1937
+ . expect ( "should get campaigns" )
1938
+ . 0 ;
1926
1939
1927
1940
assert_eq ! (
1928
1941
res. campaigns,
@@ -1943,10 +1956,10 @@ mod test {
1943
1956
creator : Some ( * PUBLISHER_2 ) ,
1944
1957
validator : None ,
1945
1958
} ;
1946
- let res = campaign_list ( build_request ( query ) , & app )
1959
+ let res = campaign_list_axum ( app . clone ( ) , Qs ( query ) )
1947
1960
. await
1948
- . expect ( "should get campaigns" ) ;
1949
- let res = res_to_campaign_list_response ( res ) . await ;
1961
+ . expect ( "should get campaigns" )
1962
+ . 0 ;
1950
1963
1951
1964
assert_eq ! (
1952
1965
res. campaigns,
@@ -1964,10 +1977,10 @@ mod test {
1964
1977
creator : None ,
1965
1978
validator : None ,
1966
1979
} ;
1967
- let res = campaign_list ( build_request ( query ) , & app )
1980
+ let res = campaign_list_axum ( app . clone ( ) , Qs ( query ) )
1968
1981
. await
1969
- . expect ( "should get campaigns" ) ;
1970
- let res = res_to_campaign_list_response ( res ) . await ;
1982
+ . expect ( "should get campaigns" )
1983
+ . 0 ;
1971
1984
1972
1985
assert_eq ! (
1973
1986
res. campaigns,
0 commit comments