Files
neta/app/(dashboard)/chat/actions.ts
T

61 lines
2.2 KiB
TypeScript

"use server";
import { getSqliteConnection } from "@/server/db/client";
import { ContentTranslationService, getContentFallbackLocale } from "@/server/i18n/content";
import { resolveFreelancerLocale } from "@/server/i18n/resolver";
import { requireFreelancerBackend } from "@/server/web/freelancer";
export async function listChatSessionsAction() {
const { context, actor, service } = await requireFreelancerBackend();
const locale = await resolveFreelancerLocale(context);
const content = new ContentTranslationService(getSqliteConnection().db);
const localization = content.getLocalizationContext(actor);
const sessions = service.listChatSessions(actor);
const translations = content.listBatch("chat_session", sessions.map((session) => session.id));
return sessions.map((session) => {
const resolved = content.resolveEntity("chat_session", session, {
locale: locale.locale,
fallbackLocale: getContentFallbackLocale(locale.locale, localization),
defaultLocale: localization.defaultLocale,
translations: translations.get(session.id) ?? [],
});
return {
id: session.id,
title: resolved.title,
created_at: session.createdAt.toISOString(),
};
});
}
export async function listChatMessagesAction(sessionId: string) {
const { actor, service } = await requireFreelancerBackend();
return service.listChatMessages(actor, sessionId).map((message) => ({
id: message.id,
role: message.role,
content: message.content,
source_locale: message.sourceLocale,
}));
}
export async function createChatSessionAction(title: string) {
const { context, actor, service } = await requireFreelancerBackend();
const locale = await resolveFreelancerLocale(context);
const session = service.createChatSession(actor, { title });
const content = new ContentTranslationService(getSqliteConnection().db);
content.upsertEntityTranslations("chat_session", session.id, {
[locale.locale]: { title },
});
return {
id: session.id,
title: session.title,
created_at: session.createdAt.toISOString(),
};
}
export async function deleteChatSessionAction(sessionId: string) {
const { actor, service } = await requireFreelancerBackend();
service.deleteChatSession(actor, sessionId);
}