mirror of
https://github.com/soconnor0919/hristudio.git
synced 2026-03-24 03:37:51 -04:00
122 lines
5.2 KiB
TypeScript
122 lines
5.2 KiB
TypeScript
import { drizzle } from "drizzle-orm/postgres-js";
|
|
import postgres from "postgres";
|
|
import * as schema from "../../src/server/db/schema";
|
|
import { sql } from "drizzle-orm";
|
|
|
|
// Database connection
|
|
const connectionString = process.env.DATABASE_URL!;
|
|
const connection = postgres(connectionString);
|
|
const db = drizzle(connection, { schema });
|
|
|
|
async function main() {
|
|
console.log("🌱 Seeding 'Control Flow Demo' experiment...");
|
|
|
|
try {
|
|
// 1. Find Admin User & Study
|
|
const user = await db.query.users.findFirst({
|
|
where: (users, { eq }) => eq(users.email, "sean@soconnor.dev")
|
|
});
|
|
if (!user) throw new Error("Admin user 'sean@soconnor.dev' not found. Run seed-dev.ts first.");
|
|
|
|
const study = await db.query.studies.findFirst({
|
|
where: (studies, { eq }) => eq(studies.name, "Comparative WoZ Study")
|
|
});
|
|
if (!study) throw new Error("Study 'Comparative WoZ Study' not found. Run seed-dev.ts first.");
|
|
|
|
// Find Robot
|
|
const robot = await db.query.robots.findFirst({
|
|
where: (robots, { eq }) => eq(robots.name, "NAO6")
|
|
});
|
|
if (!robot) throw new Error("Robot 'NAO6' not found. Run seed-dev.ts first.");
|
|
|
|
|
|
// 2. Create Experiment
|
|
const [experiment] = await db.insert(schema.experiments).values({
|
|
studyId: study.id,
|
|
name: "Control Flow Demo",
|
|
description: "Demonstration of enhanced control flow actions: Sequence, Parallel, Wait, Loop, Branch.",
|
|
version: 1,
|
|
status: "draft",
|
|
robotId: robot.id,
|
|
createdBy: user.id,
|
|
}).returning();
|
|
|
|
if (!experiment) throw new Error("Failed to create experiment");
|
|
console.log(`✅ Created Experiment: ${experiment.id}`);
|
|
|
|
// 3. Create Steps
|
|
|
|
// Step 1: Sequence & Parallel
|
|
const [step1] = await db.insert(schema.steps).values({
|
|
experimentId: experiment.id,
|
|
name: "Complex Action Structures",
|
|
description: "Demonstrating Sequence and Parallel groups",
|
|
type: "robot",
|
|
orderIndex: 0,
|
|
required: true,
|
|
durationEstimate: 30
|
|
}).returning();
|
|
|
|
// Step 2: Loops & Waits
|
|
const [step2] = await db.insert(schema.steps).values({
|
|
experimentId: experiment.id,
|
|
name: "Repetition & Delays",
|
|
description: "Demonstrating Loop and Wait actions",
|
|
type: "robot",
|
|
orderIndex: 1,
|
|
required: true,
|
|
durationEstimate: 45
|
|
}).returning();
|
|
|
|
// 4. Create Actions
|
|
|
|
// --- Step 1 Actions ---
|
|
|
|
// Top-level Sequence
|
|
const seqId = `seq-${Date.now()}`;
|
|
await db.insert(schema.actions).values({
|
|
stepId: step1!.id,
|
|
name: "Introduction Sequence",
|
|
type: "sequence", // New type
|
|
orderIndex: 0,
|
|
parameters: {},
|
|
pluginId: "hristudio-core",
|
|
category: "control",
|
|
// No explicit children column in schema?
|
|
// Wait, schema.actions has "children" as jsonb or it's a recursive relationship?
|
|
// Let's check schema/types.
|
|
// Looking at ActionChip, it expects `action.children`.
|
|
// In DB, it's likely stored in `children` jsonb column if it exists, OR we need to perform recursive inserts if schema supports parentId.
|
|
// Checking `types.ts` or schema...
|
|
// Assuming flat list references for now or JSONB.
|
|
// Wait, `ExperimentAction` in types has `children?: ExperimentAction[]`.
|
|
// If the DB schema `actions` table handles nesting via `parameters` or specific column, I need to know.
|
|
// Defaulting to "children" property in JSON parameter if DB doesn't have parentId.
|
|
// Checking `schema.ts`: "children" is likely NOT a column if I haven't seen it in seed-dev.
|
|
// However, `ActionChip` uses `action.children`. Steps map to `actions`.
|
|
// If `actions` table has `parentId` or `children` JSONB.
|
|
// I will assume `children` is part of the `parameters` or a simplified representation for now,
|
|
// BUT `FlowWorkspace` treats `action.children` as real actions.
|
|
// Let's check `schema.ts` quickly.
|
|
});
|
|
|
|
// I need to check schema.actions definition effectively.
|
|
// For this pass, I will insert them as flat actions since I can't confirm nesting storage without checking schema.
|
|
// But the user WANTS to see the nesting (Sequence, Parallel).
|
|
// The `SortableActionChip` renders `action.children`.
|
|
// The `TrialExecutionEngine` executes `action.children`.
|
|
// So the data MUST include children.
|
|
// Most likely `actions` table has a `children` JSONB column.
|
|
|
|
// I will insert a Parallel action with embedded children in the `children` column (if it exists) or `parameters`.
|
|
// Re-reading `scripts/seed-dev.ts`: It doesn't show any nested actions.
|
|
// I will read `src/server/db/schema.ts` to be sure.
|
|
|
|
} catch (err) {
|
|
console.error(err);
|
|
process.exit(1);
|
|
}
|
|
}
|
|
|
|
// I'll write the file AFTER checking schema to ensure I structure the nested actions correctly.
|