Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 1
n/a
0 / 0
CRAP
n/a
0 / 0
1<?php
2
3declare(strict_types=1);
4
5/** @license For full copyright and license information, please see the LICENSE.md file. */
6
7namespace App\Core\Engine\Domain\DataSource;
8
9defined('AMMONLY_APP') || exit('Direct script access is forbidden.');
10
11use App\Core\Engine\Domain\Model\ModuleMetadata;
12use App\Core\Engine\Domain\Model\PermissionContext;
13use App\Core\Grid\GridRequest;
14use App\Core\Grid\GridResult;
15
16/**
17 * Dynamic Data Provider Interface.
18 *
19 * Contract for non-table/virtual modules providing DataGrid datasets
20 * with in-memory or programmatic filtering, sorting, and pagination.
21 *
22 * @package App\Core\Engine\Domain\DataSource
23 */
24interface DynamicDataProviderInterface
25{
26    /**
27     * Checks if this data provider supports the specified module.
28     *
29     * @param string $moduleName Machine name of the module.
30     * @return bool True if provider handles the module.
31     */
32    public function supports(string $moduleName): bool;
33
34    /**
35     * Fetches paginated, filtered, and sorted GridResult for the dynamic module.
36     *
37     * @param ModuleMetadata    $module   Target dynamic module metadata.
38     * @param GridRequest       $request  Sort, pagination, and filter parameters.
39     * @param PermissionContext $context  Current user security context.
40     * @param int|null          $filterId Optional filter ID.
41     * @return GridResult Calculated DataGrid result.
42     */
43    public function fetchList(
44        ModuleMetadata    $module,
45        GridRequest       $request,
46        PermissionContext $context,
47        ?int              $filterId = null
48    ): GridResult;
49
50    /**
51     * Fetches faceted filter options for dynamic module columns.
52     *
53     * @param ModuleMetadata    $module  Target dynamic module metadata.
54     * @param PermissionContext $context Current user security context.
55     * @return array<string, array<int, array{id: int|string, label: string}>> Faceted options map.
56     */
57    public function fetchFacetedFilterOptions(
58        ModuleMetadata    $module,
59        PermissionContext $context
60    ): array;
61}