feat: add Station, StationPrice, StationPriceCurrent, StationPriceArchive models and factories

This commit is contained in:
Ovidiu U
2026-04-03 18:46:53 +01:00
parent ec3a2bf848
commit 7f153fb08d
7 changed files with 258 additions and 0 deletions

View File

@@ -0,0 +1,50 @@
<?php
namespace Database\Factories;
use App\Models\Station;
use Illuminate\Database\Eloquent\Factories\Factory;
/** @extends Factory<Station> */
class StationFactory extends Factory
{
public function definition(): array
{
$trading = $this->faker->company();
return [
'node_id' => hash('sha256', $this->faker->unique()->uuid()),
'trading_name' => $trading,
'brand_name' => $trading,
'is_same_trading_and_brand' => true,
'is_supermarket' => false,
'is_motorway_service_station' => false,
'is_supermarket_service_station' => false,
'temporary_closure' => false,
'permanent_closure' => false,
'permanent_closure_date' => null,
'public_phone_number' => null,
'address_line_1' => $this->faker->streetAddress(),
'address_line_2' => null,
'city' => $this->faker->city(),
'county' => null,
'country' => 'England',
'postcode' => strtoupper($this->faker->postcode()),
'lat' => $this->faker->latitude(49.9, 60.9),
'lng' => $this->faker->longitude(-8.2, 1.8),
'amenities' => [],
'opening_times' => null,
'fuel_types' => ['E10', 'E5'],
'last_seen_at' => now(),
];
}
public function supermarket(): static
{
return $this->state([
'trading_name' => 'Tesco',
'brand_name' => 'Tesco',
'is_supermarket' => true,
]);
}
}

View File

@@ -0,0 +1,24 @@
<?php
namespace Database\Factories;
use App\Enums\FuelType;
use App\Models\Station;
use App\Models\StationPriceCurrent;
use Illuminate\Database\Eloquent\Factories\Factory;
/** @extends Factory<StationPriceCurrent> */
class StationPriceCurrentFactory extends Factory
{
public function definition(): array
{
return [
'station_id' => Station::factory(),
'fuel_type' => FuelType::E10,
'price_pence' => $this->faker->numberBetween(12000, 18000),
'price_effective_at' => now()->subHour(),
'price_reported_at' => now()->subMinutes(30),
'recorded_at' => now(),
];
}
}

View File

@@ -0,0 +1,24 @@
<?php
namespace Database\Factories;
use App\Enums\FuelType;
use App\Models\Station;
use App\Models\StationPrice;
use Illuminate\Database\Eloquent\Factories\Factory;
/** @extends Factory<StationPrice> */
class StationPriceFactory extends Factory
{
public function definition(): array
{
return [
'station_id' => Station::factory(),
'fuel_type' => FuelType::E10,
'price_pence' => $this->faker->numberBetween(12000, 18000),
'price_effective_at' => now()->subDays($this->faker->numberBetween(1, 30)),
'price_reported_at' => now()->subDays($this->faker->numberBetween(1, 30)),
'recorded_at' => now(),
];
}
}