Onboarding: emoji-first flow with shape/color selection, user preferences, language setup (9 locales), and bot creation with avatarValue persistence. executor.ts: split 4928→4159 lines into 8 modules (completion, computer, effects, model, utils, tools, attachments, types). pi-runtime.ts: split 1726→561 lines into 2 modules (model-config, tool-utils). E2E: new onboarding-emoji-first tests + updated completeOnboarding helper.
109 lines
2.7 KiB
TypeScript
109 lines
2.7 KiB
TypeScript
import { createDb } from "./src/client";
|
|
import { randomUUID } from "node:crypto";
|
|
|
|
process.env.DATABASE_URL = "postgres://rakazo:rakazodev@127.0.0.1:5433/rakazo";
|
|
const { prisma: db } = createDb(process.env.DATABASE_URL, { applicationName: "setup-user" });
|
|
|
|
const user = await db.user.findUnique({
|
|
where: { email: "ingo.wagner1303@gmail.com" },
|
|
select: { id: true, name: true },
|
|
});
|
|
|
|
if (!user) {
|
|
console.log("User nicht gefunden!");
|
|
await db.$disconnect();
|
|
process.exit(1);
|
|
}
|
|
|
|
console.log("User:", user);
|
|
|
|
// Step 1: Get or create Organization
|
|
let org = await db.organization.findUnique({ where: { slug: "ingo-workspace" } });
|
|
if (!org) {
|
|
org = await db.organization.create({
|
|
data: {
|
|
id: randomUUID(),
|
|
name: "Ingo's Workspace",
|
|
slug: "ingo-workspace",
|
|
createdAt: new Date(),
|
|
},
|
|
select: { id: true, name: true, slug: true },
|
|
});
|
|
console.log("Organization created:", org);
|
|
} else {
|
|
console.log("Organization exists:", org);
|
|
}
|
|
|
|
// Step 2: Get or create Organization Member
|
|
let member = await db.member.findUnique({
|
|
where: {
|
|
organizationId_userId: { organizationId: org.id, userId: user.id },
|
|
},
|
|
});
|
|
if (!member) {
|
|
member = await db.member.create({
|
|
data: {
|
|
id: randomUUID(),
|
|
userId: user.id,
|
|
organizationId: org.id,
|
|
role: "owner",
|
|
createdAt: new Date(),
|
|
},
|
|
});
|
|
console.log("Organization member created");
|
|
} else {
|
|
console.log("Organization member exists");
|
|
}
|
|
|
|
// Step 3: Get or create default Space
|
|
let space = await db.space.findFirst({
|
|
where: { organizationId: org.id, isDefault: true },
|
|
});
|
|
if (!space) {
|
|
space = await db.space.create({
|
|
data: {
|
|
id: randomUUID(),
|
|
name: "Mein Space",
|
|
isDefault: true,
|
|
createdByUserId: user.id,
|
|
organizationId: org.id,
|
|
},
|
|
select: { id: true, name: true },
|
|
});
|
|
console.log("Space created:", space);
|
|
} else {
|
|
console.log("Space exists:", space);
|
|
}
|
|
|
|
// Step 4: Get or create space member
|
|
const existingMember = await db.spaceMember.findUnique({
|
|
where: {
|
|
spaceId_userId: { spaceId: space.id, userId: user.id },
|
|
},
|
|
});
|
|
if (!existingMember) {
|
|
await db.spaceMember.create({
|
|
data: {
|
|
id: randomUUID(),
|
|
spaceId: space.id,
|
|
organizationId: org.id,
|
|
userId: user.id,
|
|
role: "owner",
|
|
createdAt: new Date(),
|
|
},
|
|
});
|
|
console.log("Space member created");
|
|
} else {
|
|
console.log("Space member exists");
|
|
}
|
|
|
|
// Verify
|
|
const finalSpaces = await db.space.findMany({
|
|
where: { organization: { members: { some: { userId: user.id } } } },
|
|
select: { id: true, name: true, isDefault: true },
|
|
});
|
|
console.log("\nUser spaces:", JSON.stringify(finalSpaces, null, 2));
|
|
|
|
await db.$disconnect();
|
|
console.log("\nDone!");
|