1: <?php
2:
3: declare(strict_types=1);
4:
5: namespace LaravelUi5\OData\Service\Resolver;
6:
7: use LaravelUi5\OData\Driver\Sql\SqlEntitySetResolver;
8: use LaravelUi5\OData\Service\Contracts\EntitySetResolverInterface;
9: use LaravelUi5\OData\Service\Contracts\EntitySetSourceInterface;
10: use LaravelUi5\OData\Service\Contracts\ResolverBindingInterface;
11:
12: /**
13: * Serializable binding for an EntitySetSource-backed entity set.
14: *
15: * Stores the source class-string and resolves it from the Laravel container
16: * at runtime, so dependencies (tenant context, user, etc.) are injected.
17: * The source provides the base query with implicit filters; OData query
18: * options are applied on top by SqlEntitySetResolver.
19: */
20: final readonly class SqlSourceBinding implements ResolverBindingInterface
21: {
22: /**
23: * @param class-string<EntitySetSourceInterface> $sourceClass
24: */
25: public function __construct(public string $sourceClass) {}
26:
27: public function createResolver(): EntitySetResolverInterface
28: {
29: return new SqlEntitySetResolver(app($this->sourceClass));
30: }
31: }
32: