From 0631e2fb95081aa6889f28f1b75fc0e3fd9a6cb2 Mon Sep 17 00:00:00 2001 From: Andrey Dolgolev Date: Thu, 12 Aug 2021 16:39:26 +0300 Subject: [PATCH 1/3] Fix issues. 1) issue with enpty value in filter 2) issue with empty value in ethrium transaction request Add 1) Add urlencoding and replace null to 0 for timestamps 2) Add sorting by timestamps --- backend/moonstream/actions.py | 13 +++++--- backend/moonstream/routes/streams.py | 8 ++--- frontend/src/components/EntriesNavigation.js | 34 +++++++++++--------- frontend/src/components/SubscriptionsList.js | 2 +- frontend/src/core/hooks/useStream.js | 1 + frontend/src/core/services/stream.service.js | 8 ++--- 6 files changed, 36 insertions(+), 30 deletions(-) diff --git a/backend/moonstream/actions.py b/backend/moonstream/actions.py index c6cd028d..0b459577 100644 --- a/backend/moonstream/actions.py +++ b/backend/moonstream/actions.py @@ -84,6 +84,8 @@ async def get_transaction_in_blocks( .filter(filters) ) + ethereum_transactions = ethereum_transactions_in_subscriptions + # If not start_time and end_time not present # Get latest transaction if boundaries.end_time == 0: @@ -92,10 +94,11 @@ async def get_transaction_in_blocks( text("timestamp desc") ).limit(1) ).one_or_none() - boundaries.end_time = ethereum_transaction_start_point[-1] - boundaries.start_time = ( - ethereum_transaction_start_point[-1] - DEFAULT_STREAM_TIMEINTERVAL - ) + if ethereum_transaction_start_point: + boundaries.end_time = ethereum_transaction_start_point[-1] + boundaries.start_time = ( + ethereum_transaction_start_point[-1] - DEFAULT_STREAM_TIMEINTERVAL + ) if boundaries.start_time != 0 and boundaries.end_time != 0: if boundaries.start_time > boundaries.end_time: @@ -105,7 +108,7 @@ async def get_transaction_in_blocks( ) if boundaries.end_time: - ethereum_transactions = ethereum_transactions_in_subscriptions.filter( + ethereum_transactions = ethereum_transactions.filter( include_or_not_lower( EthereumBlock.timestamp, boundaries.include_end, boundaries.end_time ) diff --git a/backend/moonstream/routes/streams.py b/backend/moonstream/routes/streams.py index 579154ca..e60e65d5 100644 --- a/backend/moonstream/routes/streams.py +++ b/backend/moonstream/routes/streams.py @@ -60,10 +60,10 @@ app.add_middleware(BroodAuthMiddleware, whitelist=whitelist_paths) async def search_transactions( request: Request, q: str = Query(""), - start_time: Optional[int] = Query(0), # Optional[int] = Query(0), # - end_time: Optional[int] = Query(0), # Optional[int] = Query(0), # - include_start: bool = Query(False), - include_end: bool = Query(False), + start_time: Optional[int] = Query(0), + end_time: Optional[int] = Query(0), + include_start: Optional[bool] = Query(False), + include_end: Optional[bool] = Query(False), db_session: Session = Depends(db.yield_db_session), ): diff --git a/frontend/src/components/EntriesNavigation.js b/frontend/src/components/EntriesNavigation.js index f08df544..334996d4 100644 --- a/frontend/src/components/EntriesNavigation.js +++ b/frontend/src/components/EntriesNavigation.js @@ -80,8 +80,8 @@ const EntriesNavigation = () => { const loadMoreButtonRef = useRef(null); const [streamBoundary, setStreamBoundary] = useState({ - start_time: null, - end_time: null, + start_time: 0, + end_time: 0, include_start: false, include_end: true, next_event_time: null, @@ -192,7 +192,7 @@ const EntriesNavigation = () => { useEffect(() => { if ( subscriptionsCache.data?.subscriptions[0]?.id && - newFilterState[0].value === null + newFilterState[0]?.value === null ) { setFilterProps(0, { value: subscriptionsCache?.data?.subscriptions[0]?.address, @@ -514,8 +514,8 @@ const EntriesNavigation = () => { onClick={() => { remove(); setStreamBoundary({ - start_time: null, - end_time: null, + start_time: 0, + end_time: 0, include_start: false, include_end: true, next_event_time: null, @@ -556,17 +556,19 @@ const EntriesNavigation = () => { "" // some strange behaivior without else condition return 0 wich can see on frontend page )} - {entries.map((entry, idx) => ( - - ))} - {streamBoundary.previous_event_time || isFetching ? ( + {entries + ?.sort((a, b) => b.timestamp - a.timestamp) + .map((entry, idx) => ( + + ))} + {streamBoundary.previous_event_time && !isFetching ? (
) : ( - "" +
+ {!isFetching ? ( + "Тransactions not found. You can subscribe to more addresses in Subscriptions menu." + ) : ( + + )} +
)} - {streamBoundary.previous_event_time && isLoading && ( + {streamBoundary.previous_event_time && isLoading ? (
+ ) : ( + "" )} diff --git a/frontend/src/core/services/stream.service.js b/frontend/src/core/services/stream.service.js index 6a2f5855..60995a25 100644 --- a/frontend/src/core/services/stream.service.js +++ b/frontend/src/core/services/stream.service.js @@ -9,15 +9,32 @@ export const getStream = ({ end_time, include_start, include_end, -}) => - http({ +}) => { + let params = {}; + + if (searchTerm) { + params.q = encodeURIComponent(searchTerm); + } + + if (start_time) { + params.start_time = encodeURIComponent(start_time); + } + + if (end_time) { + params.end_time = encodeURIComponent(end_time); + } + + if (include_start) { + params.include_start = encodeURIComponent(true); + } + + if (include_end) { + params.include_end = encodeURIComponent(true); + } + + return http({ method: "GET", url: `${API}/streams/`, - params: { - q: searchTerm, - start_time: encodeURIComponent(start_time), - end_time: encodeURIComponent(end_time), - include_start: encodeURIComponent(include_start), - include_end: encodeURIComponent(include_end), - }, + params: params, }); +};