core/apps/webapp/app/services/ingestionLogs.server.ts
2025-09-15 12:05:04 +05:30

125 lines
2.5 KiB
TypeScript

import { prisma } from "~/db.server";
export async function getIngestionLogs(
userId: string,
page: number = 1,
limit: number = 10,
) {
const user = await prisma.user.findUnique({
where: {
id: userId,
},
include: {
Workspace: true,
},
});
const skip = (page - 1) * limit;
const [ingestionLogs, total] = await Promise.all([
prisma.ingestionQueue.findMany({
where: {
workspaceId: user?.Workspace?.id,
},
skip,
take: limit,
orderBy: {
createdAt: "desc",
},
}),
prisma.ingestionQueue.count({
where: {
workspaceId: user?.Workspace?.id,
},
}),
]);
return {
ingestionLogs,
pagination: {
total,
pages: Math.ceil(total / limit),
currentPage: page,
limit,
},
};
}
export const getIngestionQueue = async (id: string) => {
return await prisma.ingestionQueue.findUnique({
where: {
id,
},
});
};
export const getIngestionQueueForFrontend = async (id: string) => {
// Fetch the specific log by logId
const log = await prisma.ingestionQueue.findUnique({
where: { id: id },
select: {
id: true,
createdAt: true,
processedAt: true,
status: true,
error: true,
type: true,
output: true,
data: true,
activity: {
select: {
text: true,
sourceURL: true,
integrationAccount: {
select: {
integrationDefinition: {
select: {
name: true,
slug: true,
},
},
},
},
},
},
},
});
if (!log) {
throw new Response("Log not found", { status: 404 });
}
// Format the response
const integrationDef =
log.activity?.integrationAccount?.integrationDefinition;
const logData = log.data as any;
const formattedLog = {
id: log.id,
source: integrationDef?.name || logData?.source || "Unknown",
ingestText:
log.activity?.text ||
logData?.episodeBody ||
logData?.text ||
"No content",
time: log.createdAt,
processedAt: log.processedAt,
episodeUUID: (log.output as any)?.episodeUuid,
status: log.status,
error: log.error,
sourceURL: log.activity?.sourceURL,
integrationSlug: integrationDef?.slug,
data: log.data,
};
return formattedLog;
};
export const deleteIngestionQueue = async (id: string) => {
return await prisma.ingestionQueue.delete({
where: {
id,
},
});
};