trypost/app/Http/Controllers/App/PostAiReviewController.php
Paulo Castellano 7854596579 refactor(posts): centralize post editing status checks with PostStatusGuard
- Replaced direct status checks in multiple controllers and actions with the PostStatusGuard utility, improving code readability and maintainability.
- Updated error messages to utilize a centralized method for consistency across the application.
- Removed the BrandImagePalette class, consolidating color resolution logic into the AiImageClient for better organization and type safety.
2026-05-21 19:27:19 -03:00

46 lines
1.5 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Http\Controllers\App;
use App\Ai\Agents\PostContentReviewer;
use App\Http\Requests\App\Ai\ReviewPostContentRequest;
use App\Models\Post;
use App\Services\Ai\RecordAiUsage;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\Gate;
use Symfony\Component\HttpFoundation\Response;
class PostAiReviewController extends Controller
{
public function review(ReviewPostContentRequest $request, Post $post): JsonResponse
{
$workspace = $request->user()->currentWorkspace;
$this->authorize('update', $post);
$gate = Gate::inspect('useAi', $workspace->account);
if ($gate->denied()) {
return response()->json(['message' => $gate->message()], Response::HTTP_PAYMENT_REQUIRED);
}
$agent = new PostContentReviewer(workspace: $workspace);
$result = $agent->prompt($request->string('content')->toString());
RecordAiUsage::recordText(
workspace: $workspace,
promptTokens: $result->usage->promptTokens,
completionTokens: $result->usage->completionTokens,
provider: (string) config('ai.default'),
model: (string) config('ai.default_text_model'),
userId: $request->user()->id,
postId: $post->id,
metadata: ['agent' => 'post_reviewer'],
);
return response()->json([
'suggestions' => data_get($result, 'suggestions', []),
]);
}
}