Files
wehub-resource-sync 221778fa98
rowboat / apps/x Vitest suites (push) Has been cancelled
rowboat / apps/x Electron package smoke test (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:33:34 +08:00

218 lines
7.2 KiB
TypeScript

'use server';
import { z } from 'zod';
import { DataSourceDoc } from "@/src/entities/models/data-source-doc";
import { DataSource } from "@/src/entities/models/data-source";
import { container } from "@/di/container";
import { IFetchDataSourceController } from "@/src/interface-adapters/controllers/data-sources/fetch-data-source.controller";
import { authCheck } from "./auth.actions";
import { IListDataSourcesController } from "@/src/interface-adapters/controllers/data-sources/list-data-sources.controller";
import { ICreateDataSourceController } from "@/src/interface-adapters/controllers/data-sources/create-data-source.controller";
import { IRecrawlWebDataSourceController } from "@/src/interface-adapters/controllers/data-sources/recrawl-web-data-source.controller";
import { IDeleteDataSourceController } from "@/src/interface-adapters/controllers/data-sources/delete-data-source.controller";
import { IToggleDataSourceController } from "@/src/interface-adapters/controllers/data-sources/toggle-data-source.controller";
import { IAddDocsToDataSourceController } from "@/src/interface-adapters/controllers/data-sources/add-docs-to-data-source.controller";
import { IListDocsInDataSourceController } from "@/src/interface-adapters/controllers/data-sources/list-docs-in-data-source.controller";
import { IDeleteDocFromDataSourceController } from "@/src/interface-adapters/controllers/data-sources/delete-doc-from-data-source.controller";
import { IGetDownloadUrlForFileController } from "@/src/interface-adapters/controllers/data-sources/get-download-url-for-file.controller";
import { IGetUploadUrlsForFilesController } from "@/src/interface-adapters/controllers/data-sources/get-upload-urls-for-files.controller";
import { IUpdateDataSourceController } from "@/src/interface-adapters/controllers/data-sources/update-data-source.controller";
const fetchDataSourceController = container.resolve<IFetchDataSourceController>("fetchDataSourceController");
const listDataSourcesController = container.resolve<IListDataSourcesController>("listDataSourcesController");
const createDataSourceController = container.resolve<ICreateDataSourceController>("createDataSourceController");
const recrawlWebDataSourceController = container.resolve<IRecrawlWebDataSourceController>("recrawlWebDataSourceController");
const deleteDataSourceController = container.resolve<IDeleteDataSourceController>("deleteDataSourceController");
const toggleDataSourceController = container.resolve<IToggleDataSourceController>("toggleDataSourceController");
const addDocsToDataSourceController = container.resolve<IAddDocsToDataSourceController>("addDocsToDataSourceController");
const listDocsInDataSourceController = container.resolve<IListDocsInDataSourceController>("listDocsInDataSourceController");
const deleteDocFromDataSourceController = container.resolve<IDeleteDocFromDataSourceController>("deleteDocFromDataSourceController");
const getDownloadUrlForFileController = container.resolve<IGetDownloadUrlForFileController>("getDownloadUrlForFileController");
const getUploadUrlsForFilesController = container.resolve<IGetUploadUrlsForFilesController>("getUploadUrlsForFilesController");
const updateDataSourceController = container.resolve<IUpdateDataSourceController>("updateDataSourceController");
export async function getDataSource(sourceId: string): Promise<z.infer<typeof DataSource>> {
const user = await authCheck();
return await fetchDataSourceController.execute({
caller: 'user',
userId: user.id,
sourceId,
});
}
export async function listDataSources(projectId: string): Promise<z.infer<typeof DataSource>[]> {
const user = await authCheck();
return await listDataSourcesController.execute({
caller: 'user',
userId: user.id,
projectId,
});
}
export async function createDataSource({
projectId,
name,
description,
data,
status = 'pending',
}: {
projectId: string,
name: string,
description?: string,
data: z.infer<typeof DataSource>['data'],
status?: 'pending' | 'ready',
}): Promise<z.infer<typeof DataSource>> {
const user = await authCheck();
return await createDataSourceController.execute({
caller: 'user',
userId: user.id,
data: {
projectId,
name,
description: description || '',
status,
data,
},
});
}
export async function recrawlWebDataSource(sourceId: string) {
const user = await authCheck();
return await recrawlWebDataSourceController.execute({
caller: 'user',
userId: user.id,
sourceId,
});
}
export async function deleteDataSource(sourceId: string) {
const user = await authCheck();
return await deleteDataSourceController.execute({
caller: 'user',
userId: user.id,
sourceId,
});
}
export async function toggleDataSource(sourceId: string, active: boolean) {
const user = await authCheck();
return await toggleDataSourceController.execute({
caller: 'user',
userId: user.id,
sourceId,
active,
});
}
export async function addDocsToDataSource({
sourceId,
docData,
}: {
sourceId: string,
docData: {
name: string,
data: z.infer<typeof DataSourceDoc>['data']
}[]
}): Promise<void> {
const user = await authCheck();
return await addDocsToDataSourceController.execute({
caller: 'user',
userId: user.id,
sourceId,
docs: docData,
});
}
export async function listDocsInDataSource({
sourceId,
page = 1,
limit = 10,
}: {
sourceId: string,
page?: number,
limit?: number,
}): Promise<{
files: z.infer<typeof DataSourceDoc>[],
total: number
}> {
const user = await authCheck();
const docs = await listDocsInDataSourceController.execute({
caller: 'user',
userId: user.id,
sourceId,
});
return {
files: docs,
total: docs.length,
};
}
export async function deleteDocFromDataSource({
docId,
}: {
docId: string,
}): Promise<void> {
const user = await authCheck();
return await deleteDocFromDataSourceController.execute({
caller: 'user',
userId: user.id,
docId,
});
}
export async function getDownloadUrlForFile(
fileId: string
): Promise<string> {
const user = await authCheck();
return await getDownloadUrlForFileController.execute({
caller: 'user',
userId: user.id,
fileId,
});
}
export async function getUploadUrlsForFilesDataSource(
sourceId: string,
files: { name: string; type: string; size: number }[]
): Promise<{
fileId: string,
uploadUrl: string,
path: string,
}[]> {
const user = await authCheck();
return await getUploadUrlsForFilesController.execute({
caller: 'user',
userId: user.id,
sourceId,
files,
});
}
export async function updateDataSource({
sourceId,
description,
}: {
sourceId: string,
description: string,
}) {
const user = await authCheck();
return await updateDataSourceController.execute({
caller: 'user',
userId: user.id,
sourceId,
data: {
description,
},
});
}