HEX
Server: Apache/2.4.58 (Ubuntu)
System: Linux ip-172-26-0-120 6.17.0-1009-aws #9~24.04.2-Ubuntu SMP Fri Mar 6 23:50:29 UTC 2026 x86_64
User: ubuntu (1000)
PHP: 8.3.6
Disabled: NONE
Upload Files
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);
        }
    }
}