Files
nutriscan/app/actions.ts
T
2024-11-28 12:37:47 -03:00

113 lines
3.0 KiB
TypeScript

'use server'
import prisma from "@/lib/prisma";
import { revalidatePath } from 'next/cache';
export async function verificarLista(id: string, criar: boolean = false) {
try {
let lista = await prisma.lista.findUnique({
where: { id }
});
if (!lista && criar) {
lista = await prisma.lista.create({
data: { id }
});
}
return {
success: true,
exists: !!lista,
lista
};
} catch (error) {
console.error('Erro ao verificar lista:', error);
return { success: false, error: 'Erro ao processar solicitação' };
}
}
export async function criarItens(formData: FormData, listaId: string) {
try {
const produto = formData.get('produtoNome') as string;
const qtd = Number(formData.get('produtoQuantidade'));
const tipo = formData.get('produtoTipo') as string;
if (!produto || !qtd || !tipo) {
throw new Error('Todos os campos são obrigatórios');
}
const novoProduto = await prisma.produtos.create({
data: {
nome: produto,
qtd: qtd,
tipoUN: tipo,
listaId
}
});
revalidatePath(`/lista/${listaId}`);
return { success: true, data: novoProduto };
} catch (error) {
console.error('Erro ao criar produto:', error);
return { success: false, error: 'Erro ao criar produto' };
}
}
export async function listarProdutos(listaId: string) {
try {
const produtos = await prisma.produtos.findMany({
where: { listaId },
orderBy: {
id: 'desc'
}
});
return produtos;
} catch (error) {
console.error('Erro ao buscar produtos:', error);
return [];
}
}
export async function deletarProduto(id: number, listaId: string) {
try {
await prisma.produtos.delete({
where: {
id: id,
listaId: listaId
}
});
revalidatePath(`/lista/${listaId}`);
return { success: true, message: 'Produto removido com sucesso' };
} catch (error) {
console.error('Erro ao deletar produto:', error);
return { success: false, error: 'Erro ao remover produto' };
}
}
export async function toggleComprado(id: number, listaId: string) {
try {
const produto = await prisma.produtos.findUnique({
where: { id }
});
if (!produto) {
throw new Error('Produto não encontrado');
}
await prisma.produtos.update({
where: {
id,
listaId: listaId
},
data: {
comprado: !produto.comprado
}
});
revalidatePath(`/lista/${listaId}`);
return { success: true };
} catch (error) {
console.error('Erro ao atualizar status:', error);
return { success: false };
}
}