Files
CurrenciCombo/orchestrator/src/services/deadLetterQueue.ts
defiQUG 14dfd3c9bf docs: Enhance development setup documentation and update environment variable validation
- Added a new section in CURRENT_STATUS.md detailing prerequisites and quick start instructions for development setup.
- Updated environment variable validation to include defaults for missing variables in env.ts.
- Improved error handling in errorHandler.ts for better validation feedback.
- Made various code adjustments across services to ensure robustness and clarity.
2025-11-05 19:00:46 -08:00

63 lines
1.6 KiB
TypeScript

import { query } from "../db/postgres";
interface DeadLetterMessage {
messageId: string;
originalQueue: string;
payload: any;
error: string;
retryCount: number;
createdAt: string;
}
/**
* Add message to dead letter queue
*/
export async function addToDLQ(
queue: string,
payload: any,
error: string
): Promise<void> {
const messageId = `dlq-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
await query(
`INSERT INTO dead_letter_queue (message_id, queue, payload, error, retry_count, created_at)
VALUES ($1, $2, $3, $4, $5, $6)`,
[messageId, queue, JSON.stringify(payload), error, 0, new Date().toISOString()]
);
}
/**
* Get messages from DLQ for retry
*/
export async function getDLQMessages(queue: string, limit = 10): Promise<DeadLetterMessage[]> {
const result = await query<any>(
`SELECT * FROM dead_letter_queue
WHERE queue = $1 AND retry_count < 3
ORDER BY created_at ASC
LIMIT $2`,
[queue, limit]
);
return result.map((row: any) => ({
messageId: row.message_id,
originalQueue: row.queue,
payload: typeof row.payload === "string" ? JSON.parse(row.payload) : row.payload,
error: row.error,
retryCount: row.retry_count,
createdAt: row.created_at ? (row.created_at instanceof Date ? row.created_at.toISOString() : String(row.created_at)) : new Date().toISOString(),
}));
}
/**
* Increment retry count
*/
export async function incrementRetryCount(messageId: string): Promise<void> {
await query(
`UPDATE dead_letter_queue
SET retry_count = retry_count + 1, updated_at = CURRENT_TIMESTAMP
WHERE message_id = $1`,
[messageId]
);
}