feat: stripe

This commit is contained in:
2026-05-27 10:15:21 +02:00
parent 79e020ffe3
commit a99d027771
29 changed files with 1160 additions and 4 deletions
@@ -7,6 +7,7 @@ use App\Enums\AiUsageType;
use App\Enums\IngredientUnit;
use App\Enums\MealPostType;
use App\Http\Requests\MealImageAnalysisRequest;
use App\Services\AiCreditService;
use App\Services\AiUsageRecorder;
use Illuminate\Contracts\Support\Arrayable;
use Illuminate\Http\JsonResponse;
@@ -17,11 +18,25 @@ use Throwable;
class MealImageAnalysisController extends Controller
{
public function store(MealImageAnalysisRequest $request, AiUsageRecorder $aiUsageRecorder): JsonResponse
public function store(
MealImageAnalysisRequest $request,
AiCreditService $aiCredits,
AiUsageRecorder $aiUsageRecorder,
): JsonResponse
{
$user = $request->user();
$image = $request->file('image');
$input = $this->analysisInput($image);
if (! $aiCredits->consume($user)) {
return response()->json([
'message' => __('api.meal_image_analysis.insufficient_credits'),
'credits' => [
'balance' => $user->ai_credits_balance,
],
], 402);
}
try {
$response = MealImageAnalyzer::make()->prompt(
$this->prompt(),
@@ -31,8 +46,10 @@ class MealImageAnalysisController extends Controller
} catch (Throwable $exception) {
report($exception);
$aiCredits->refund($user);
$aiUsageRecorder->failed(
user: $request->user(),
user: $user,
type: AiUsageType::MEAL_IMAGE_ANALYSIS,
exception: $exception,
input: $input,
@@ -50,7 +67,7 @@ class MealImageAnalysisController extends Controller
);
$aiUsageRecorder->success(
user: $request->user(),
user: $user,
type: AiUsageType::MEAL_IMAGE_ANALYSIS,
input: $input,
output: $draft,
@@ -63,6 +80,9 @@ class MealImageAnalysisController extends Controller
return response()->json([
'data' => $draft,
'credits' => [
'balance' => $user->fresh()->ai_credits_balance,
],
]);
}