fix(onboarding): do not skip db settings if agent is connected but no databases found

This commit is contained in:
Théo LAGACHE
2026-06-19 14:51:17 +02:00
parent 50f7fb17e8
commit b0abc71ee6
5 changed files with 39 additions and 11 deletions
+10
View File
@@ -2,8 +2,18 @@ import {getOrganization} from "@/lib/auth/auth";
import {db} from "@/db";
import {and, eq} from "drizzle-orm";
import * as drizzleDb from "@/db";
import {project} from "@/db/schema/06_project";
export async function getOrganizationProject(organizationId: string) {
return db.query.project.findFirst({
where: eq(project.organizationId, organizationId),
with: {
databases: true
}
});
}
export const getOrganizationProjectDatabases = async ({organizationSlug, projectId}: {
organizationSlug: string, projectId: string
}) => {
+3 -3
View File
@@ -60,9 +60,9 @@ export const OnboardingShell = () => {
prevId = "storage";
}
} else if (currentStepId === "finish") {
const databases =
(state.context.flowData.databases as unknown[]) || [];
if (databases.length === 0) {
const agents = (state.context.flowData.agents as any[]) || [];
const isAgentConnected = agents.some((a) => a.connected);
if (!isAgentConnected) {
prevId = "project-create";
}
}
+19 -4
View File
@@ -93,6 +93,9 @@ export async function resolveOnboardingState(): Promise<ResolvedOnboardingState>
id: a.id,
name: a.name,
edgeKey: await generateEdgeKey(getServerUrl(), a.id),
connected: a.lastContact
? Date.now() - new Date(a.lastContact).getTime() < 60_000
: false,
}))
);
@@ -120,7 +123,7 @@ export async function resolveOnboardingState(): Promise<ResolvedOnboardingState>
id: project.id,
name: project.name,
description: "",
databaseIds: [],
databaseIds: (project as any).databases?.map((db: any) => db.id) ?? [],
},
}
: {}),
@@ -131,10 +134,22 @@ export async function resolveOnboardingState(): Promise<ResolvedOnboardingState>
meta.resumeStepId = "agent-create";
return { stepId: "agent-create", flowData: fullData };
}
if (databases.length === 0) {
meta.resumeStepId = "db-settings";
return { stepId: "db-settings", flowData: fullData };
const firstAgent = agents[0];
const agentConnected = firstAgent?.lastContact
? Date.now() - new Date(firstAgent.lastContact).getTime() < 60_000
: false;
if (agentConnected && (project as any).databases?.length === 0) {
meta.resumeStepId = "project-create";
return { stepId: "project-create", flowData: fullData };
}
if (!agentConnected) {
meta.resumeStepId = "finish";
return { stepId: "finish", flowData: fullData };
}
meta.resumeStepId = "finish";
return { stepId: "finish", flowData: fullData };
}
+6 -4
View File
@@ -119,12 +119,14 @@ export const onboardingSteps: OnboardingStep[] = [
component: StepProjectCreate,
isSkippable: true,
skipToStep: (ctx: any) => {
const databases = (ctx.flowData?.databases as unknown[]) || [];
return databases.length === 0 ? "finish" : "db-settings";
const agents = (ctx.flowData?.agents as any[]) || [];
const isAgentConnected = agents.some((a) => a.connected);
return !isAgentConnected ? "finish" : "db-settings";
},
nextStep: (ctx: any) => {
const databases = (ctx.flowData?.databases as unknown[]) || [];
return databases.length === 0 ? "finish" : "db-settings";
const agents = (ctx.flowData?.agents as any[]) || [];
const isAgentConnected = agents.some((a) => a.connected);
return !isAgentConnected ? "finish" : "db-settings";
},
},
{
+1
View File
@@ -51,6 +51,7 @@ export type OnboardingAgent = {
id: string;
name: string;
edgeKey?: string;
connected?: boolean;
notifierId?: string;
storageId?: string;
};