feat(ai-edits): add output storage backfill flow and coverage
This commit is contained in:
@@ -6,6 +6,7 @@ use App\Models\AiEditOutput;
|
||||
use App\Models\AiEditRequest;
|
||||
use App\Models\AiProviderRun;
|
||||
use App\Services\AiEditing\AiEditingRuntimeConfig;
|
||||
use App\Services\AiEditing\AiEditOutputStorageService;
|
||||
use App\Services\AiEditing\AiImageProviderManager;
|
||||
use App\Services\AiEditing\AiObservabilityService;
|
||||
use App\Services\AiEditing\AiProviderResult;
|
||||
@@ -51,6 +52,7 @@ class ProcessAiEditRequest implements ShouldQueue
|
||||
AiAbuseEscalationService $abuseEscalation,
|
||||
AiObservabilityService $observability,
|
||||
AiStatusNotificationService $statusNotifications,
|
||||
AiEditOutputStorageService $outputStorage,
|
||||
AiEditingRuntimeConfig $runtimeConfig,
|
||||
AiUsageLedgerService $usageLedger
|
||||
): void {
|
||||
@@ -90,6 +92,7 @@ class ProcessAiEditRequest implements ShouldQueue
|
||||
$abuseEscalation,
|
||||
$observability,
|
||||
$statusNotifications,
|
||||
$outputStorage,
|
||||
$runtimeConfig,
|
||||
$usageLedger
|
||||
);
|
||||
@@ -160,6 +163,7 @@ class ProcessAiEditRequest implements ShouldQueue
|
||||
AiAbuseEscalationService $abuseEscalation,
|
||||
AiObservabilityService $observability,
|
||||
AiStatusNotificationService $statusNotifications,
|
||||
AiEditOutputStorageService $outputStorage,
|
||||
AiEditingRuntimeConfig $runtimeConfig,
|
||||
AiUsageLedgerService $usageLedger
|
||||
): void {
|
||||
@@ -200,23 +204,33 @@ class ProcessAiEditRequest implements ShouldQueue
|
||||
return;
|
||||
}
|
||||
|
||||
DB::transaction(function () use ($request, $result): void {
|
||||
DB::transaction(function () use ($request, $result, $outputStorage): void {
|
||||
foreach ($result->outputs as $output) {
|
||||
$persistedOutput = $outputStorage->persist($request, is_array($output) ? $output : []);
|
||||
AiEditOutput::query()->updateOrCreate(
|
||||
[
|
||||
'request_id' => $request->id,
|
||||
'provider_asset_id' => (string) Arr::get($output, 'provider_asset_id', ''),
|
||||
'provider_asset_id' => (string) Arr::get($persistedOutput, 'provider_asset_id', ''),
|
||||
],
|
||||
[
|
||||
'provider_url' => Arr::get($output, 'provider_url'),
|
||||
'mime_type' => Arr::get($output, 'mime_type'),
|
||||
'width' => Arr::get($output, 'width'),
|
||||
'height' => Arr::get($output, 'height'),
|
||||
'storage_disk' => Arr::get($persistedOutput, 'storage_disk'),
|
||||
'storage_path' => Arr::get($persistedOutput, 'storage_path'),
|
||||
'provider_url' => Arr::get($persistedOutput, 'provider_url'),
|
||||
'mime_type' => Arr::get($persistedOutput, 'mime_type'),
|
||||
'width' => Arr::get($persistedOutput, 'width'),
|
||||
'height' => Arr::get($persistedOutput, 'height'),
|
||||
'bytes' => Arr::get($persistedOutput, 'bytes'),
|
||||
'checksum' => Arr::get($persistedOutput, 'checksum'),
|
||||
'is_primary' => true,
|
||||
'safety_state' => 'passed',
|
||||
'safety_reasons' => [],
|
||||
'generated_at' => now(),
|
||||
'metadata' => ['provider' => $request->provider],
|
||||
'metadata' => array_merge(
|
||||
['provider' => $request->provider],
|
||||
is_array(Arr::get($persistedOutput, 'metadata'))
|
||||
? Arr::get($persistedOutput, 'metadata')
|
||||
: []
|
||||
),
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user