feat: add AI-powered finance and project risk analysis features with pgvector support for RAG embeddings
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
"use server";
|
||||
|
||||
import { createClient } from "@/lib/supabase/server";
|
||||
import { revalidatePath } from "next/cache";
|
||||
|
||||
function cleanText(value: FormDataEntryValue | null) {
|
||||
const text = typeof value === "string" ? value.trim() : "";
|
||||
return text.length > 0 ? text : null;
|
||||
}
|
||||
|
||||
export async function addClientActivity(clientId: string, formData: FormData) {
|
||||
const supabase = await createClient();
|
||||
const {
|
||||
data: { user },
|
||||
error: userError,
|
||||
} = await supabase.auth.getUser();
|
||||
|
||||
if (userError || !user) {
|
||||
throw new Error("Kullanıcı bulunamadı.");
|
||||
}
|
||||
|
||||
const title = cleanText(formData.get("title"));
|
||||
if (!title) {
|
||||
throw new Error("Aktivite başlığı zorunludur.");
|
||||
}
|
||||
|
||||
const { error } = await supabase.from("client_activities").insert({
|
||||
user_id: user.id,
|
||||
client_id: clientId,
|
||||
type: formData.get("type") as string || "note",
|
||||
title,
|
||||
content: cleanText(formData.get("content")),
|
||||
activity_date: formData.get("activity_date") as string || new Date().toISOString(),
|
||||
});
|
||||
|
||||
if (error) {
|
||||
throw new Error(`Aktivite eklenemedi: ${error.message}`);
|
||||
}
|
||||
|
||||
// Update client's last_contact_date
|
||||
await supabase
|
||||
.from("clients")
|
||||
.update({ last_contact_date: new Date().toISOString() })
|
||||
.eq("id", clientId)
|
||||
.eq("user_id", user.id);
|
||||
|
||||
revalidatePath(`/clients/${clientId}`);
|
||||
revalidatePath(`/clients`);
|
||||
}
|
||||
Reference in New Issue
Block a user