UNPKG

create-sekiban-app

Version:

Create a new Sekiban application with Dapr

65 lines (54 loc) 1.97 kB
import { Router } from 'express'; import type { Router as ExpressRouter } from 'express'; import { DaprClient, ActorId, HttpMethod } from '@dapr/dapr'; import { config } from '../config/index.js'; import logger from '../utils/logger.js'; export const multiProjectorRoutes: ExpressRouter = Router(); // Get a multi-projection state multiProjectorRoutes.get('/multi-projections/:projectorType/:id', async (req, res, next) => { try { const { projectorType, id } = req.params; logger.info(`Getting multi-projection state for ${projectorType}/${id}`); const daprClient = new DaprClient({ daprHost: "127.0.0.1", daprPort: String(config.DAPR_HTTP_PORT) }); const actorId = new ActorId(`${projectorType}:${id}`); // Call the MultiProjectorActor's getProjectionAsync method using invoker const response = await daprClient.invoker.invoke( 'dapr-sample-api-multi-projector', // app-id `actors/MultiProjectorActor/${actorId.getId()}/method/getProjectionAsync`, HttpMethod.PUT, {} // empty body for GET-like operation ); res.json({ projectorType, id, state: response }); } catch (error) { logger.error('Error getting multi-projection:', error); next(error); } }); // Query multi-projections multiProjectorRoutes.post('/multi-projections/query', async (req, res, next) => { try { const { projectorType, query } = req.body; logger.info(`Querying multi-projections for ${projectorType}`); const daprClient = new DaprClient({ daprHost: "127.0.0.1", daprPort: String(config.DAPR_HTTP_PORT) }); // For queries, we might need a different approach // This is a placeholder for now res.json({ message: 'Multi-projection queries not yet implemented', projectorType, query }); } catch (error) { logger.error('Error querying multi-projections:', error); next(error); } });