File: //proc/self/root/var/www/html/api.aianced.com/app/Http/Controllers/Api/AnalyzeController.php
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Http\Requests\AnalyzeRequest;
use App\Models\AnalysisLog;
use App\Services\AiAnalysisService;
use Illuminate\Support\Facades\Log;
class AnalyzeController extends Controller
{
public function __construct(private AiAnalysisService $ai) {}
/**
* POST /api/v1/analyze
* Rate limited: 3 requests per IP per 12 hours (defined in routes/api.php)
*/
public function analyze(AnalyzeRequest $request): \Illuminate\Http\JsonResponse
{
$ideaText = $request->validated('ideaText');
try {
$summary = $this->ai->analyze($ideaText);
// Spam — log it and reject without lead form
if (($summary['quality'] ?? null) === 'spam') {
AnalysisLog::create([
'ip_address' => $request->ip(),
'idea_snippet' => mb_substr($ideaText, 0, 200),
'success' => false,
'failure_reason' => 'spam',
]);
return response()->json([
'success' => false,
'quality' => 'spam',
'message' => 'This does not appear to be a valid product idea.',
], 422);
}
AnalysisLog::create([
'ip_address' => $request->ip(),
'idea_snippet' => mb_substr($ideaText, 0, 200),
'product_type' => $summary['productType'] ?? null,
'business_model' => $summary['businessModel'] ?? null,
'success' => true,
]);
return response()->json([
'success' => true,
'summary' => $summary,
]);
} catch (\Exception $e) {
Log::error('Analyze failed', [
'ip' => $request->ip(),
'error' => $e->getMessage(),
]);
AnalysisLog::create([
'ip_address' => $request->ip(),
'idea_snippet' => mb_substr($ideaText, 0, 200),
'success' => false,
'failure_reason' => mb_substr($e->getMessage(), 0, 120),
]);
return response()->json([
'success' => false,
'message' => 'Analysis failed. Please try again shortly.',
], 500);
}
}
}