diff --git a/backend/src/controllers/stream.controller.ts b/backend/src/controllers/stream.controller.ts index ca4759f5..c4c03ad5 100644 --- a/backend/src/controllers/stream.controller.ts +++ b/backend/src/controllers/stream.controller.ts @@ -284,7 +284,7 @@ export const getStreamEvents = async (req: Request, res: Response) => { const [events, total] = await Promise.all([ prisma.streamEvent.findMany({ where: whereClause, - orderBy: { createdAt: order }, + orderBy: { timestamp: order }, take: limit, ...(cursor ? { cursor: { id: cursor }, skip: 1 } diff --git a/backend/src/routes/v1/stream.routes.ts b/backend/src/routes/v1/stream.routes.ts index 5a1307fa..d5453535 100644 --- a/backend/src/routes/v1/stream.routes.ts +++ b/backend/src/routes/v1/stream.routes.ts @@ -77,6 +77,84 @@ router.get('/:streamId', getStream); * tags: * - Streams * summary: Get stream events + * description: Retrieve events for a specific stream with pagination, filtering, and sorting. + * parameters: + * - in: path + * name: streamId + * required: true + * schema: + * type: integer + * description: On-chain stream ID + * - in: query + * name: limit + * schema: + * type: integer + * default: 50 + * minimum: 1 + * maximum: 500 + * description: Number of events to return per page (default: 50, max: 500) + * - in: query + * name: offset + * schema: + * type: integer + * default: 0 + * minimum: 0 + * description: Number of events to skip (default: 0) + * - in: query + * name: eventType + * schema: + * type: string + * enum: [CREATED, TOPPED_UP, WITHDRAWN, CANCELLED, COMPLETED, PAUSED, RESUMED, FEE_COLLECTED] + * description: Filter events by type + * - in: query + * name: order + * schema: + * type: string + * enum: [asc, desc] + * default: desc + * description: Sort order by timestamp (default: desc) + * responses: + * 200: + * description: Stream events retrieved successfully + * content: + * application/json: + * schema: + * type: object + * properties: + * data: + * type: array + * items: + * type: object + * properties: + * id: + * type: integer + * streamId: + * type: integer + * eventType: + * type: string + * transactionHash: + * type: string + * ledgerSequence: + * type: integer + * timestamp: + * type: integer + * metadata: + * type: string + * createdAt: + * type: string + * format: date-time + * total: + * type: integer + * description: Total number of events matching the filter + * hasMore: + * type: boolean + * description: Whether there are more events available + * 400: + * description: Invalid request parameters + * 404: + * description: Stream not found + * 500: + * description: Internal server error */ router.get('/:streamId/events', getStreamEvents);