all()); // Validate required fields if (empty($recipeDto->slug)) { return response()->json([ 'success' => false, 'message' => 'Recipe slug is required', ], 422); } // Ingest the recipe $recipe = $this->ingestService->ingest($recipeDto); return response()->json([ 'success' => true, 'message' => 'Recipe ingested successfully', 'data' => [ 'id' => $recipe->id, 'slug' => $recipe->slug, 'title' => $recipe->title, ], ], 200); } catch (Throwable $e) { Log::error('Recipe ingestion failed', [ 'error' => $e->getMessage(), 'trace' => $e->getTraceAsString(), 'data' => $request->all(), ]); return response()->json([ 'success' => false, 'message' => 'Failed to ingest recipe: ' . $e->getMessage(), ], 500); } } /** * Ingest multiple recipes in batch * * @param Request $request * @return JsonResponse */ public function batchIngest(Request $request): JsonResponse { try { $recipes = $request->input('recipes', []); if (empty($recipes) || !is_array($recipes)) { return response()->json([ 'success' => false, 'message' => 'Invalid recipes data. Expected array of recipes.', ], 422); } $results = [ 'success' => 0, 'failed' => 0, 'errors' => [], ]; foreach ($recipes as $index => $recipeData) { try { $recipeDto = RecipeDto::fromArray($recipeData); if (empty($recipeDto->slug)) { $results['failed']++; $results['errors'][] = [ 'index' => $index, 'error' => 'Recipe slug is required', ]; continue; } $this->ingestService->ingest($recipeDto); $results['success']++; } catch (Throwable $e) { $results['failed']++; $results['errors'][] = [ 'index' => $index, 'slug' => $recipeData['slug'] ?? 'unknown', 'error' => $e->getMessage(), ]; Log::error('Batch recipe ingestion failed for item', [ 'index' => $index, 'error' => $e->getMessage(), 'data' => $recipeData, ]); } } return response()->json([ 'success' => $results['failed'] === 0, 'message' => "Processed {$results['success']} recipes successfully, {$results['failed']} failed", 'data' => $results, ], $results['failed'] > 0 ? 207 : 200); } catch (Throwable $e) { Log::error('Batch recipe ingestion failed', [ 'error' => $e->getMessage(), 'trace' => $e->getTraceAsString(), ]); return response()->json([ 'success' => false, 'message' => 'Failed to process batch: ' . $e->getMessage(), ], 500); } } }