Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
CRAP
100.00% covered (success)
100.00%
1 / 1
MailSearchCriteriaDto
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
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\Modules\Mail\Domain\Model;
8
9defined('AMMONLY_APP') || exit('Direct script access is forbidden.');
10
11/**
12 * Mail Search and Filtering Criteria Data Transfer Object.
13 *
14 * Encapsulates search tokens, server-side flag filters, and sorting preferences.
15 *
16 * @package App\Modules\Mail\Domain\Model
17 */
18final readonly class MailSearchCriteriaDto
19{
20    /**
21     * MailSearchCriteriaDto constructor.
22     *
23     * @param string      $folder             Target mailbox folder (e.g. 'INBOX').
24     * @param string|null $query              Full-text search query string.
25     * @param string|null $from               Sender filter token.
26     * @param string|null $subject            Subject filter token.
27     * @param bool        $isUnreadOnly       Filter to unread messages only.
28     * @param bool        $isFlaggedOnly      Filter to flagged/starred messages only.
29     * @param bool        $hasAttachmentsOnly Filter to messages with attachments.
30     * @param string      $sortField          Sort field ('date', 'from', 'subject', 'size').
31     * @param string      $sortDirection      Sort direction ('asc', 'desc').
32     * @param string|null $sinceDate          RFC 3501 IMAP search date string (e.g. '10-Sep-2026').
33     */
34    public function __construct(
35        public string $folder = 'INBOX',
36        public ?string $query = null,
37        public ?string $from = null,
38        public ?string $subject = null,
39        public bool $isUnreadOnly = false,
40        public bool $isFlaggedOnly = false,
41        public bool $hasAttachmentsOnly = false,
42        public string $sortField = 'date',
43        public string $sortDirection = 'desc',
44        public ?string $sinceDate = null
45    ) {
46    }
47}