Worked extension examples
These developer-facing recipes are kept beside the package contract. Replace the example values with the site-specific records and data objects used by the calling workflow.
<?phpdeclare(strict_types=1);final class ExampleImageDoctorImplementation implements \Capell\MediaAI\Contracts\ImageDoctor{ public function doctor(\Capell\Core\Models\Media $media, \Capell\MediaAI\Data\ImageDoctorRequest $request): \Capell\MediaAI\Data\ImageDoctorResult { throw new LogicException('Implement this package contract for the calling site.'); }}
app()->bind(\Capell\MediaAI\Contracts\ImageDoctor::class, ExampleImageDoctorImplementation::class);<?phpdeclare(strict_types=1);final class ExampleWebsiteMediaAcquisitionProviderImplementation implements \Capell\MediaAI\Contracts\WebsiteMediaAcquisitionProvider{ public function available(): bool { throw new LogicException('Implement this package contract for the calling site.'); } public function acquire(\Capell\MediaAI\Data\WebsiteMediaRequestData $request, \Capell\AIOrchestrator\Data\Ai\ProviderCallAuthorizationData $authorization, \DateTimeImmutable $now): \Capell\MediaAI\Data\WebsiteMediaProviderResponseData { throw new LogicException('Implement this package contract for the calling site.'); }}
app()->bind(\Capell\MediaAI\Contracts\WebsiteMediaAcquisitionProvider::class, ExampleWebsiteMediaAcquisitionProviderImplementation::class);<?phpdeclare(strict_types=1);final class ExampleWebsiteMediaAssetRepositoryImplementation implements \Capell\MediaAI\Contracts\WebsiteMediaAssetRepository{ public function available(?\DateTimeImmutable $now = null): bool { throw new LogicException('Implement this package contract for the calling site.'); } public function persist(\Capell\MediaAI\Data\WebsiteMediaRequestData $request, \Capell\AIOrchestrator\Data\Ai\ProviderCallAuthorizationData $authorization, \Capell\AIOrchestrator\Data\Ai\ProviderExecutionResultData $execution, \Capell\MediaAI\Data\WebsiteMediaAssetCandidateData $asset, \DateTimeImmutable $now): \Capell\MediaAI\Data\WebsiteMediaAssetReceiptData { throw new LogicException('Implement this package contract for the calling site.'); } public function verify(\Capell\MediaAI\Data\WebsiteMediaAssetReceiptData $receipt, \DateTimeImmutable $now): bool { throw new LogicException('Implement this package contract for the calling site.'); } public function load(string $receiptReference, \Capell\MediaAI\Data\WebsiteMediaRequestData $request, \Capell\AIOrchestrator\Data\Ai\ProviderCallAuthorizationData $authorization, \Capell\MediaAI\Contracts\WebsiteMediaProviderAttestationVerifier $attestationVerifier, \DateTimeImmutable $now): ?\Capell\MediaAI\Data\WebsiteMediaAssetReceiptData { throw new LogicException('Implement this package contract for the calling site.'); }}
app()->bind(\Capell\MediaAI\Contracts\WebsiteMediaAssetRepository::class, ExampleWebsiteMediaAssetRepositoryImplementation::class);<?phpdeclare(strict_types=1);final class ExampleWebsiteMediaProviderAttestationVerifierImplementation implements \Capell\MediaAI\Contracts\WebsiteMediaProviderAttestationVerifier{ public function verify(\Capell\MediaAI\Data\WebsiteMediaRequestData $request, \Capell\AIOrchestrator\Data\Ai\ProviderCallAuthorizationData $authorization, \Capell\MediaAI\Data\WebsiteMediaAssetCandidateData|\Capell\MediaAI\Data\WebsiteMediaAssetEvidenceData $asset, \DateTimeImmutable $now): bool { throw new LogicException('Implement this package contract for the calling site.'); }}
app()->bind(\Capell\MediaAI\Contracts\WebsiteMediaProviderAttestationVerifier::class, ExampleWebsiteMediaProviderAttestationVerifierImplementation::class);