import { redirect } from "@tanstack/react-router" import { createServerFn } from "@tanstack/react-start" import { getSupabaseServerClient } from "@/integrations/supabase/supabase" import { loginFormSchema, signupFormSchema } from "../validation/user" export const getUser = createServerFn().handler(async () => { const supabase = getSupabaseServerClient() const { data, error } = await supabase.auth.getUser() if (error || !data.user) { return { error: true, message: error?.message ?? "Unknown error" } } return { user: { id: data.user.id, email: data.user.email, name: data.user.user_metadata.name || "" }, error: false } }) export const loginUser = createServerFn({ method: "POST" }) .validator(loginFormSchema) .handler(async ({ data }) => { const supabase = getSupabaseServerClient() const login = await supabase.auth.signInWithPassword({ email: data.email, password: data.password }) if (login.error) { return { error: true, message: login.error.message } } return { error: false } }) export const logoutUser = createServerFn().handler(async () => { const supabase = getSupabaseServerClient() const { error } = await supabase.auth.signOut() if (error) { return { error: true, message: error.message } } throw redirect({ to: "/", viewTransition: true, replace: true }) }) export const signupUser = createServerFn({ method: "POST" }) .validator(signupFormSchema) .handler(async ({ data }) => { const supabase = getSupabaseServerClient() const { error } = await supabase.auth.signUp({ email: data.email, password: data.password }) if (error) { return { error: true, message: error.message } } throw redirect({ href: data.redirectUrl || "/" }) })