ExecutionDuration.php
- Pfad:
src/Domain/ValueObject/ExecutionDuration.php - Namespace: Domain\ValueObject
- Zeilen: 102 | Größe: 2,580 Bytes
- Geändert: 2025-12-27 15:38:51 | Gescannt: 2025-12-31 10:22:15
Code Hygiene Score: 96
- Dependencies: 100 (25%)
- LOC: 100 (20%)
- Methods: 80 (20%)
- Secrets: 100 (15%)
- Classes: 100 (10%)
- Magic Numbers: 100 (10%)
Keine Issues gefunden.
Dependencies 3
- constructor DateTimeImmutable
- use Domain\Constants
- use InvalidArgumentException
Klassen 1
-
ExecutionDurationclass Zeile 12
Funktionen 12
-
__construct()private Zeile 17 -
start()public Zeile 27 -
completed()public Zeile 32 -
now()public Zeile 37 -
complete()public Zeile 42 -
completeNow()public Zeile 47 -
requestedAt()public Zeile 52 -
respondedAt()public Zeile 57 -
durationMs()public Zeile 62 -
isCompleted()public Zeile 73 -
format()public Zeile 78 -
toArray()Zeile 93
Verwendet von 3
- TaskResult.php constructor
- TaskResult.php use
- TaskResultBuilder.php use
Versionen 3
-
v3
2025-12-27 15:38 | claude-code-hook | modified
Claude Code Pre-Hook Backup vor Edit-Operation -
v2
2025-12-27 15:38 | claude-code-hook | modified
Claude Code Pre-Hook Backup vor Edit-Operation -
v1
2025-12-27 15:38 | claude-code-hook | modified
Claude Code Pre-Hook Backup vor Edit-Operation
Code
<?php
declare(strict_types=1);
namespace Domain\ValueObject;
// @responsibility: Immutables Value Object für Ausführungsdauer mit Zeitstempeln
use Domain\Constants;
use InvalidArgumentException;
final class ExecutionDuration
{
private \DateTimeImmutable $requestedAt;
private ?\DateTimeImmutable $respondedAt;
private function __construct(\DateTimeImmutable $requestedAt, ?\DateTimeImmutable $respondedAt)
{
if ($respondedAt !== null && $respondedAt < $requestedAt) {
throw new InvalidArgumentException('Response timestamp cannot be before request timestamp');
}
$this->requestedAt = $requestedAt;
$this->respondedAt = $respondedAt;
}
public static function start(\DateTimeImmutable $requestedAt): self
{
return new self($requestedAt, null);
}
public static function completed(\DateTimeImmutable $requestedAt, \DateTimeImmutable $respondedAt): self
{
return new self($requestedAt, $respondedAt);
}
public static function now(): self
{
return new self(new \DateTimeImmutable(), null);
}
public function complete(\DateTimeImmutable $respondedAt): self
{
return new self($this->requestedAt, $respondedAt);
}
public function completeNow(): self
{
return new self($this->requestedAt, new \DateTimeImmutable());
}
public function requestedAt(): \DateTimeImmutable
{
return $this->requestedAt;
}
public function respondedAt(): ?\DateTimeImmutable
{
return $this->respondedAt;
}
public function durationMs(): ?int
{
if ($this->respondedAt === null) {
return null;
}
$diff = $this->respondedAt->getTimestamp() - $this->requestedAt->getTimestamp();
return $diff * Constants::MS_PER_SECOND;
}
public function isCompleted(): bool
{
return $this->respondedAt !== null;
}
public function format(): string
{
$duration = $this->durationMs();
if ($duration === null) {
return 'In progress';
}
if ($duration < Constants::MS_PER_SECOND) {
return "{$duration}ms";
}
return sprintf('%.2fs', $duration / Constants::MS_PER_SECOND);
}
public function toArray(): array
{
return [
'requested_at' => $this->requestedAt->format('Y-m-d H:i:s.u'),
'responded_at' => $this->respondedAt?->format('Y-m-d H:i:s.u'),
'duration_ms' => $this->durationMs(),
];
}
}