60 lines
1.5 KiB
TypeScript
60 lines
1.5 KiB
TypeScript
import { ipcMain } from "electron";
|
|
import { db } from "../../db";
|
|
import { messages, apps, chats } from "../../db/schema";
|
|
import { eq } from "drizzle-orm";
|
|
import { getDyadAppPath } from "../../paths/paths";
|
|
import { executeAddDependency } from "../processors/executeAddDependency";
|
|
|
|
export function registerDependencyHandlers() {
|
|
ipcMain.handle(
|
|
"chat:add-dep",
|
|
async (
|
|
_event,
|
|
{ chatId, packages }: { chatId: number; packages: string[] },
|
|
) => {
|
|
// Find the message from the database
|
|
const foundMessages = await db.query.messages.findMany({
|
|
where: eq(messages.chatId, chatId),
|
|
});
|
|
|
|
// Find the chat first
|
|
const chat = await db.query.chats.findFirst({
|
|
where: eq(chats.id, chatId),
|
|
});
|
|
|
|
if (!chat) {
|
|
throw new Error(`Chat ${chatId} not found`);
|
|
}
|
|
|
|
// Get the app using the appId from the chat
|
|
const app = await db.query.apps.findFirst({
|
|
where: eq(apps.id, chat.appId),
|
|
});
|
|
|
|
if (!app) {
|
|
throw new Error(`App for chat ${chatId} not found`);
|
|
}
|
|
|
|
const message = [...foundMessages]
|
|
.reverse()
|
|
.find((m) =>
|
|
m.content.includes(
|
|
`<dyad-add-dependency packages="${packages.join(" ")}">`,
|
|
),
|
|
);
|
|
|
|
if (!message) {
|
|
throw new Error(
|
|
`Message with packages ${packages.join(", ")} not found`,
|
|
);
|
|
}
|
|
|
|
executeAddDependency({
|
|
packages,
|
|
message,
|
|
appPath: getDyadAppPath(app.path),
|
|
});
|
|
},
|
|
);
|
|
}
|