Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
1 / 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\Search\Application\Service;
8
9defined('AMMONLY_APP') || exit('Direct script access is forbidden.');
10
11use App\Core\Engine\Domain\Model\PermissionContext;
12use App\Core\Search\Domain\Model\SearchQuery;
13use App\Core\Search\Domain\Model\SearchResultSet;
14use App\Core\Search\Domain\Model\SearchSettings;
15
16/**
17 * Global Search Application Service Contract.
18 *
19 * Coordinates multi-module search execution, RBAC filtering, and user search preferences.
20 *
21 * @package App\Core\Search\Application\Service
22 */
23interface GlobalSearchServiceInterface
24{
25    /**
26     * Executes global search query across accessible CRUD modules.
27     *
28     * @param SearchQuery       $query   Search query criteria.
29     * @param PermissionContext $context Actor security context.
30     * @return SearchResultSet Aggregated search results.
31     */
32    public function search(SearchQuery $query, PermissionContext $context): SearchResultSet;
33
34    /**
35     * Retrieves search settings for a user.
36     *
37     * @param int $userId Target user ID.
38     * @return SearchSettings Saved or default settings.
39     */
40    public function getSearchSettings(int $userId): SearchSettings;
41
42    /**
43     * Saves search settings for a user.
44     *
45     * @param int            $userId   Target user ID.
46     * @param SearchSettings $settings New settings.
47     */
48    public function saveSearchSettings(int $userId, SearchSettings $settings): void;
49
50    /**
51     * Retrieves all available CRUD modules and their searchable fields for user configuration.
52     *
53     * @param PermissionContext $context Actor security context.
54     * @return list<array<string, mixed>> List of modules with field descriptors.
55     */
56    public function getSearchableModules(PermissionContext $context): array;
57}