95 lines
No EOL
2.8 KiB
TypeScript
95 lines
No EOL
2.8 KiB
TypeScript
import { Hono } from 'hono';
|
|
import { getLogger } from '@stock-bot/logger';
|
|
import type { IServiceContainer } from '@stock-bot/handlers';
|
|
|
|
const logger = getLogger('sync-routes');
|
|
|
|
export function createSyncRoutes(container: IServiceContainer) {
|
|
const sync = new Hono();
|
|
|
|
// Manual sync trigger endpoints
|
|
sync.post('/symbols', async c => {
|
|
try {
|
|
const queueManager = container.queue;
|
|
if (!queueManager) {
|
|
return c.json({ success: false, error: 'Queue manager not available' }, 503);
|
|
}
|
|
|
|
const symbolsQueue = queueManager.getQueue('symbols');
|
|
|
|
const job = await symbolsQueue.addJob('sync-qm-symbols', {
|
|
handler: 'symbols',
|
|
operation: 'sync-qm-symbols',
|
|
payload: {},
|
|
});
|
|
|
|
return c.json({ success: true, jobId: job.id, message: 'QM symbols sync job queued' });
|
|
} catch (error) {
|
|
logger.error('Failed to queue symbol sync job', { error });
|
|
return c.json(
|
|
{ success: false, error: error instanceof Error ? error.message : 'Unknown error' },
|
|
500
|
|
);
|
|
}
|
|
});
|
|
|
|
sync.post('/exchanges', async c => {
|
|
try {
|
|
const queueManager = container.queue;
|
|
if (!queueManager) {
|
|
return c.json({ success: false, error: 'Queue manager not available' }, 503);
|
|
}
|
|
|
|
const exchangesQueue = queueManager.getQueue('exchanges');
|
|
|
|
const job = await exchangesQueue.addJob('sync-qm-exchanges', {
|
|
handler: 'exchanges',
|
|
operation: 'sync-qm-exchanges',
|
|
payload: {},
|
|
});
|
|
|
|
return c.json({ success: true, jobId: job.id, message: 'QM exchanges sync job queued' });
|
|
} catch (error) {
|
|
logger.error('Failed to queue exchange sync job', { error });
|
|
return c.json(
|
|
{ success: false, error: error instanceof Error ? error.message : 'Unknown error' },
|
|
500
|
|
);
|
|
}
|
|
});
|
|
|
|
sync.post('/symbols/:provider', async c => {
|
|
try {
|
|
const provider = c.req.param('provider');
|
|
const queueManager = container.queue;
|
|
if (!queueManager) {
|
|
return c.json({ success: false, error: 'Queue manager not available' }, 503);
|
|
}
|
|
|
|
const symbolsQueue = queueManager.getQueue('symbols');
|
|
|
|
const job = await symbolsQueue.addJob('sync-symbols-from-provider', {
|
|
handler: 'symbols',
|
|
operation: 'sync-symbols-from-provider',
|
|
payload: { provider },
|
|
});
|
|
|
|
return c.json({
|
|
success: true,
|
|
jobId: job.id,
|
|
message: `${provider} symbols sync job queued`,
|
|
});
|
|
} catch (error) {
|
|
logger.error('Failed to queue provider symbol sync job', { error });
|
|
return c.json(
|
|
{ success: false, error: error instanceof Error ? error.message : 'Unknown error' },
|
|
500
|
|
);
|
|
}
|
|
});
|
|
|
|
return sync;
|
|
}
|
|
|
|
// Legacy export for backward compatibility
|
|
export const syncRoutes = createSyncRoutes({} as IServiceContainer); |