create-sekiban-app
Version:
Create a new Sekiban application with Dapr
65 lines (54 loc) • 1.97 kB
text/typescript
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);
}
});