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

2 participants