Initial boilerplate scaffold for continuum-backend
Bun + ElysiaJS control plane: Drizzle/Postgres schema (printers, farms, print_jobs, pgvector frame_embeddings), R2 presigned URLs, Redis Streams frame ingestion queue, REST routes, and the /ws/edge/v1 edge-gateway WebSocket uplink.
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
import Redis from "ioredis";
|
||||
|
||||
export const redis = new Redis(process.env.REDIS_URL ?? "redis://localhost:6379", {
|
||||
maxRetriesPerRequest: 3,
|
||||
});
|
||||
|
||||
export const CAMERA_FRAMES_STREAM = "stream:camera_frames";
|
||||
|
||||
export interface FrameIngestionTask {
|
||||
farmId: string;
|
||||
printerId: string;
|
||||
printJobId: string | null;
|
||||
r2ObjectKey: string;
|
||||
capturedAt: string;
|
||||
}
|
||||
|
||||
/** Pushes a frame-ingestion task for continuum-ai-worker to pick up via XREADGROUP. */
|
||||
export async function enqueueFrameIngestion(task: FrameIngestionTask): Promise<string> {
|
||||
return redis.xadd(
|
||||
CAMERA_FRAMES_STREAM,
|
||||
"*",
|
||||
"farmId",
|
||||
task.farmId,
|
||||
"printerId",
|
||||
task.printerId,
|
||||
"printJobId",
|
||||
task.printJobId ?? "",
|
||||
"r2ObjectKey",
|
||||
task.r2ObjectKey,
|
||||
"capturedAt",
|
||||
task.capturedAt,
|
||||
) as Promise<string>;
|
||||
}
|
||||
Reference in New Issue
Block a user