11import { FeedsState } from './feedState'
2- import { PaginatedFeedsObject , FeedInfo , ConfigByFullName } from '../../types'
2+ import {
3+ PaginatedFeedsObject ,
4+ FeedInfo ,
5+ ConfigByFullName ,
6+ Network ,
7+ FeedsFilters ,
8+ } from '../../types'
9+ import { Configuration } from '../web3Middleware/Configuration'
310
411export class FeedRepository {
512 feedsState : FeedsState
6- // TODO: replace string with Network
13+ dataFeeds : Record < string , Record < Network , Array < FeedInfo > > >
714 dataFeedsByNetwork : Record < string , Array < FeedInfo > >
815 configByFullName : ConfigByFullName
916
@@ -15,15 +22,43 @@ export class FeedRepository {
1522 initialize ( ) {
1623 const feeds = this . feedsState . listFeeds ( )
1724
25+ this . dataFeeds = feeds . reduce (
26+ (
27+ acc : Record < string , Record < Network , Array < FeedInfo > > > ,
28+ feedInfo : FeedInfo ,
29+ ) => {
30+ let value
31+ const isPairKeyPresent : boolean = ! ! acc [ feedInfo . name ]
32+ const isNetworkAndPairKeyPresent : boolean =
33+ isPairKeyPresent && ! ! acc [ feedInfo . name ] [ feedInfo . network ]
34+ if ( isNetworkAndPairKeyPresent ) {
35+ value = [ ...acc [ feedInfo . name ] [ feedInfo . network ] , feedInfo ]
36+ } else {
37+ value = [ feedInfo ]
38+ }
39+ return {
40+ ...acc ,
41+ [ feedInfo . name ] : {
42+ ...acc [ feedInfo . name ] ,
43+ [ feedInfo . network ] : value ,
44+ } ,
45+ }
46+ } ,
47+ { } ,
48+ )
49+
1850 this . dataFeedsByNetwork = feeds . reduce (
19- ( acc : Record < string , Array < FeedInfo > > , feedInfo : FeedInfo ) => ( {
20- ...acc ,
21- [ feedInfo . network ] : acc [ feedInfo . network ]
22- ? [ ...acc [ feedInfo . network ] , feedInfo ]
23- : [ feedInfo ] ,
24- } ) ,
51+ ( acc : Record < string , Array < FeedInfo > > , feedInfo : FeedInfo ) => {
52+ return {
53+ ...acc ,
54+ [ feedInfo . network ] : acc [ feedInfo . network ]
55+ ? [ ...acc [ feedInfo . network ] , feedInfo ]
56+ : [ feedInfo ] ,
57+ }
58+ } ,
2559 { } ,
2660 )
61+
2762 this . configByFullName = feeds . reduce (
2863 ( acc , feedInfo ) => ( {
2964 ...acc ,
@@ -43,19 +78,65 @@ export class FeedRepository {
4378 . find ( ( feed ) => feed . feedFullName === feedFullName )
4479 }
4580
46- async getFeedsByNetwork (
47- // starts in 1
48- network : string ,
49- ) : Promise < PaginatedFeedsObject > {
50- let feeds : Array < FeedInfo >
81+ async getFilteredFeeds ( {
82+ network,
83+ pair,
84+ mainnet,
85+ } : FeedsFilters ) : Promise < PaginatedFeedsObject > {
86+ let feeds : Array < FeedInfo > = [ ]
5187 if ( network === 'all' ) {
52- feeds = Object . values ( this . dataFeedsByNetwork ) . flat ( )
88+ feeds = this . feedsState . listFeeds ( )
89+ } else {
90+ if ( network && pair ) {
91+ feeds = this . dataFeeds [ pair ] [ network ]
92+ } else if ( network ) {
93+ feeds = this . dataFeedsByNetwork [ network ]
94+ } else if ( pair ) {
95+ feeds = Object . values ( this . dataFeeds [ pair ] ) . flat ( )
96+ }
97+ }
98+ console . log ( 'data feeds FLAT' , this . dataFeedsByNetwork [ network ] )
99+ console . log ( `network::${ network } pair::${ pair } mainnet::${ mainnet } ` )
100+ return this . getPaginatedFeedsByNet ( feeds , mainnet )
101+ }
102+
103+ getPaginatedFeedsByNet ( feeds : FeedInfo [ ] , mainnet : boolean | null ) {
104+ if ( mainnet === null ) {
105+ return {
106+ feeds : feeds || [ ] ,
107+ total : feeds ? feeds . length : 0 ,
108+ }
109+ }
110+ if ( mainnet ) {
111+ return this . getMainnetFeeds ( feeds )
53112 } else {
54- feeds = this . dataFeedsByNetwork [ network ]
113+ return this . getTestnetFeeds ( feeds )
55114 }
115+ }
116+
117+ getConfigurationFromNetwork ( network : Network ) {
118+ return this . feedsState . getConfiguration ( ) . getNetworkConfiguration ( network )
119+ }
120+
121+ getTestnetFeeds ( feeds : Array < FeedInfo > ) : PaginatedFeedsObject {
122+ const filteredFeeds : FeedInfo [ ] =
123+ feeds ?. filter (
124+ ( feed ) => ! this . getConfigurationFromNetwork ( feed . network ) . mainnet ,
125+ ) ?? [ ]
56126 return {
57- feeds : feeds || [ ] ,
58- total : feeds ? feeds . length : 0 ,
127+ feeds : filteredFeeds ,
128+ total : filteredFeeds . length ,
129+ }
130+ }
131+
132+ getMainnetFeeds ( feeds : Array < FeedInfo > ) : PaginatedFeedsObject {
133+ const filteredFeeds : FeedInfo [ ] =
134+ feeds ?. filter (
135+ ( feed ) => this . getConfigurationFromNetwork ( feed . network ) . mainnet ,
136+ ) ?? [ ]
137+ return {
138+ feeds : filteredFeeds ,
139+ total : filteredFeeds . length ,
59140 }
60141 }
61142
@@ -98,4 +179,9 @@ export class FeedRepository {
98179 this . feedsState . setV2Feeds ( v2Feeds )
99180 this . initialize ( )
100181 }
182+
183+ setConfiguration ( configuration : Configuration ) {
184+ this . feedsState . setConfiguration ( configuration )
185+ this . initialize ( )
186+ }
101187}
0 commit comments