feat: implement AI styling foundation and billing scope rework
Some checks failed
linter / quality (push) Has been cancelled
tests / ci (push) Has been cancelled
tests / ui (push) Has been cancelled

This commit is contained in:
Codex Agent
2026-02-06 20:01:58 +01:00
parent df00deb0df
commit 36bed12ff9
80 changed files with 8944 additions and 49 deletions

View File

@@ -3,6 +3,8 @@
namespace App\Http\Resources\Tenant;
use App\Models\WatermarkSetting;
use App\Services\AiEditing\AiStylingEntitlementService;
use App\Services\AiEditing\EventAiEditingPolicyService;
use App\Services\Packages\PackageLimitEvaluator;
use App\Support\TenantMemberPermissions;
use App\Support\WatermarkConfigResolver;
@@ -49,6 +51,8 @@ class EventResource extends JsonResource
if ($eventPackage) {
$limitEvaluator = app()->make(PackageLimitEvaluator::class);
}
$aiStylingEntitlement = app()->make(AiStylingEntitlementService::class)->resolveForEvent($this->resource);
$aiEditingPolicy = app()->make(EventAiEditingPolicyService::class)->resolve($this->resource);
$settings['watermark_removal_allowed'] = WatermarkConfigResolver::determineRemovalAllowed($this->resource);
@@ -96,11 +100,22 @@ class EventResource extends JsonResource
'expires_at' => $eventPackage->gallery_expires_at?->toIso8601String(),
'branding_allowed' => (bool) optional($eventPackage->package)->branding_allowed,
'watermark_allowed' => (bool) optional($eventPackage->package)->watermark_allowed,
'features' => optional($eventPackage->package)->features ?? [],
] : null,
'limits' => $eventPackage && $limitEvaluator
? $limitEvaluator->summarizeEventPackage($eventPackage, $this->resolveTasksUsed())
: null,
'addons' => $eventPackage ? $this->formatAddons($eventPackage) : [],
'capabilities' => [
'ai_styling' => (bool) $aiStylingEntitlement['allowed'],
'ai_styling_granted_by' => $aiStylingEntitlement['granted_by'],
'ai_styling_required_feature' => $aiStylingEntitlement['required_feature'],
'ai_styling_addon_keys' => $aiStylingEntitlement['addon_keys'],
'ai_styling_event_enabled' => (bool) $aiEditingPolicy['enabled'],
'ai_styling_allow_custom_prompt' => (bool) $aiEditingPolicy['allow_custom_prompt'],
'ai_styling_allowed_style_keys' => $aiEditingPolicy['allowed_style_keys'],
'ai_styling_policy_message' => $aiEditingPolicy['policy_message'],
],
'member_permissions' => $memberPermissions,
];
}