Skip to content

feat: paginated active markets + three indexer event handlers - #1159

Merged
Ehonrie merged 5 commits into
Netwalls:mainfrom
proverbs31ziggo-a11y:feat/paginated-markets-and-indexer-handlers
Jul 27, 2026
Merged

feat: paginated active markets + three indexer event handlers#1159
Ehonrie merged 5 commits into
Netwalls:mainfrom
proverbs31ziggo-a11y:feat/paginated-markets-and-indexer-handlers

Conversation

@proverbs31ziggo-a11y

@proverbs31ziggo-a11y proverbs31ziggo-a11y commented Jul 26, 2026

Copy link
Copy Markdown
Contributor

Closes #1069
Closes #1070
Closes #1071
Closes #1072

Summary

This PR implements four backend features for the BOXMEOUT platform:

1. Paginated Active Markets (d04af0b)

Returns active markets from DB, paginated, most-recent-first.

  • Enforces a max pageSize of 100 via MAX_PAGE_SIZE constant
  • Returns total count alongside data for frontend pagination UI (PaginatedResult<T>)
  • Sorts by createdAt descending (most-recent-first)
  • Cleans up duplicate imports, consolidates on db client
  • Updates controller to use pageSize param and return PaginatedResult directly

2. Decode market_cancelled Events (c810b41)

Decodes market_cancelled events and sets market status to cancelled.

  • Registers MarketCancelled case in processLedger event routing
  • Implements handleMarketCancelledEvent to call updateMarketStatus(id, "Cancelled")
  • Covered by unit test with mock event payload

3. Decode winnings_claimed Events (b6b14f0)

Decodes winnings_claimed and refund_claimed events, marking BetModel.claimed = true.

  • Adds markBetClaimedByMarketAndBettor in bet.service.ts using atomic updateMany
  • Splits old handleWinnersClaimedEvent into separate handleWinningsClaimedEvent and handleRefundClaimedEvent
  • Matches the correct bet row via (marketId, bettor) from the event body
  • Includes comprehensive unit tests (50 tests pass across 2 test suites)

4. Decode resolution_disputed Events (4077ba8)

Decodes resolution_disputed events, sets market status to disputed.

  • Adds updateMarketStatus(id, "Disputed") call in handleDisputeEvent for DisputeRaised
  • Stores dispute reason in the Dispute table for admin review UI
  • Covered by unit tests verifying both dispute creation and status update

Files Changed

File Changes
backend/src/services/market.service.ts Paginated result, max pageSize, cleanup
backend/src/api/controllers/market.controller.ts Use pageSize + PaginatedResult
backend/src/services/bet.service.ts markBetClaimedByMarketAndBettor (atomic)
backend/src/services/indexer.service.ts MarketCancelled, WinningsClaimed, RefundClaimed, DisputeRaised handlers
backend/src/services/__tests__/indexer.service.test.ts Tests for all 4 event handlers
backend/src/services/indexer.service.test.ts Updated claim handler tests

Testing

All 50 tests pass across both test suites.

npx jest --runInBand --testPathPattern="indexer.service"
# Test Suites: 2 passed, 2 total
# Tests:       50 passed, 50 total

proverbs31ziggo-a11y and others added 5 commits July 26, 2026 12:33
- Enforce MAX_PAGE_SIZE (100) in getAllMarkets
- Return PaginatedResult with total count alongside data for frontend pagination UI
- Sort markets by createdAt descending (most-recent-first)
- Clean up duplicate imports and consolidate on db client
- Update controller to pass pageSize and return PaginatedResult directly
- Add MarketCancelled case to processLedger event routing
- Implement handleMarketCancelledEvent to update market status to Cancelled
- Covered by unit test with mock event payload
- Add markBetClaimedByMarketAndBettor in bet.service.ts using atomic updateMany
- Split handleWinnersClaimedEvent into handleWinningsClaimedEvent and handleRefundClaimedEvent
- Match correct bet row via (marketId, bettor) from event body
- Include comprehensive unit tests for all four event handlers:
  MarketCancelled, WinningsClaimed, RefundClaimed, and DisputeRaised
- Add marketService.updateMarketStatus call in DisputeRaised handler
- Set market status to Disputed when a dispute is raised
- Store dispute reason for admin review via Dispute table
- Covered by unit test with mock event payload
@Ehonrie
Ehonrie merged commit de7600c into Netwalls:main Jul 27, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant