'use server'; import { getAuthHeaders } from '../../lib/auth-headers'; const API_BASE = process.env.NEXT_PUBLIC_API_URL_INTERNAL || 'http://recipe-api:8080'; export async function createProductAction(name: string) { try { const authHeaders = await getAuthHeaders(); console.log('[createProductAction] Creating product with name:', name); console.log('[createProductAction] Auth headers:', authHeaders ? 'YES' : 'NO'); const res = await fetch(`${API_BASE}/api/products`, { method: 'POST', headers: { 'Content-Type': 'application/json', ...authHeaders }, body: JSON.stringify({ name }), }); if (!res.ok) { const e = await res.json().catch(() => ({})); throw new Error(e.message ?? `HTTP ${res.status}`); } const product = await res.json(); console.log('[createProductAction] Response:', product); // Explicitly convert to plain object to ensure serializability const result = JSON.parse(JSON.stringify({ id: product.id, name: product.name, canonicalName: product.canonicalName ?? null, })); console.log('[createProductAction] Returning:', result); return result; } catch (err) { console.error('[createProductAction] Error:', err); throw err; } } export async function updateProductCategoryAction(productId: number, categoryId: number) { try { const authHeaders = await getAuthHeaders(); const res = await fetch(`${API_BASE}/api/products/${productId}`, { method: 'PATCH', headers: { 'Content-Type': 'application/json', ...authHeaders }, body: JSON.stringify({ categoryId }), }); if (!res.ok) { const e = await res.json().catch(() => ({})); throw new Error(e.message ?? `HTTP ${res.status}`); } const product = await res.json(); // Explicitly convert to plain object to ensure serializability const result = JSON.parse(JSON.stringify({ id: product.id, name: product.name, canonicalName: product.canonicalName ?? null, categoryId: product.categoryId ?? null, })); return result; } catch (err) { console.error('[updateProductCategoryAction] Error:', err); throw err; } }