diff --git a/src/Metrics/Metric.php b/src/Metrics/Metric.php index de8dd88..4173775 100644 --- a/src/Metrics/Metric.php +++ b/src/Metrics/Metric.php @@ -26,6 +26,8 @@ abstract class Metric protected bool $withGrowthRate = false; + protected ?string $dateColumn = null; + protected GrowthRateType $growthRateType = GrowthRateType::Percentage; /** @@ -111,9 +113,16 @@ public function getRanges(): array return $this->ranges; } + public function dateColumn(string $dateColumn): static + { + $this->dateColumn = $dateColumn; + + return $this; + } + protected function getDateColumn(): string { - return $this->query->getModel()->getCreatedAtColumn(); + return $this->dateColumn ?? $this->query->getModel()->getCreatedAtColumn(); } protected function resolveBetween(array $range): array diff --git a/tests/src/Value/CustomDateColumnTest.php b/tests/src/Value/CustomDateColumnTest.php new file mode 100644 index 0000000..1e450cf --- /dev/null +++ b/tests/src/Value/CustomDateColumnTest.php @@ -0,0 +1,35 @@ +create([ + 'email_verified_at' => Date::now()->subDays(2), + ]); + + User::factory()->create([ + 'email_verified_at' => Date::now()->subDays(10), + ]); + + User::factory()->create([ + 'email_verified_at' => Date::now()->subDays(20), + ]); + + User::factory()->create([ + 'email_verified_at' => null, + ]); + + $data = Value::make(User::class) + ->dateColumn('email_verified_at') + ->range(15) + ->count(); + + assertEquals(2, $data); +});