dateRange = $dateRange ?? new DateRange(); $this->page = $page; $this->itemsPerPage = $this->determineItemsPerPage($itemsPerPage); } private function determineItemsPerPage(?int $itemsPerPage): int { if ($itemsPerPage !== null && $itemsPerPage < 0) { return self::ALL_ITEMS; } return $itemsPerPage ?? self::ALL_ITEMS; } public static function fromRawData(array $query): self { return new self( new DateRange(parseDateFromQuery($query, 'startDate'), parseDateFromQuery($query, 'endDate')), (int) ($query['page'] ?? 1), isset($query['itemsPerPage']) ? (int) $query['itemsPerPage'] : null, ); } public function getDateRange(): DateRange { return $this->dateRange; } public function getPage(): int { return $this->page; } public function getItemsPerPage(): int { return $this->itemsPerPage; } }