// app/[locale]/(dashboard)/[wsId]/tasks/actions.ts
'use server';
import { createClient } from '@tuturuuu/supabase/next/server';
import { revalidatePath } from 'next/cache';
import { redirect } from 'next/navigation';
import { z } from 'zod';
const createTaskSchema = z.object({
name: z.string().min(1).max(255),
description: z.string().optional(),
listId: z.string(),
});
export async function createTask(formData: FormData) {
const supabase = createClient();
// Check authentication
const {
data: { user },
} = await supabase.auth.getUser();
if (!user) {
throw new Error('Unauthorized');
}
// Validate input
const parsed = createTaskSchema.safeParse({
name: formData.get('name'),
description: formData.get('description'),
listId: formData.get('listId'),
});
if (!parsed.success) {
return { error: 'Invalid input' };
}
// Perform mutation
const { data, error } = await supabase
.from('workspace_tasks')
.insert({
name: parsed.data.name,
description: parsed.data.description,
list_id: parsed.data.listId,
created_by: user.id,
})
.select()
.single();
if (error) {
return { error: error.message };
}
// Revalidate cache
revalidatePath(`/[locale]/(dashboard)/[wsId]/tasks`);
return { success: true, task: data };
}
export async function deleteTask(taskId: string, wsId: string) {
const supabase = createClient();
const { error } = await supabase
.from('workspace_tasks')
.delete()
.eq('id', taskId);
if (error) {
return { error: error.message };
}
revalidatePath(`/[locale]/(dashboard)/${wsId}/tasks`);
redirect(`/${wsId}/tasks`);
}