feat(history): add energy price history feature

This commit is contained in:
2026-08-02 11:29:58 +02:00
parent 1511de31a8
commit f70f3ab054
20 changed files with 262 additions and 52 deletions
@@ -2,12 +2,13 @@
namespace App\Features\Dashboard\Controllers;
use App\Features\Dashboard\Data\DashboardData;
use App\Features\Dashboard\Services\DashboardService;
use App\Http\Controllers\Controller;
class DashboardController extends Controller
{
public function index(DashboardService $dashboardService)
public function index(DashboardService $dashboardService): DashboardData
{
return $dashboardService->getDashboardData();
}
@@ -2,6 +2,8 @@
namespace App\Features\Dashboard\Data;
use App\Data\ElectricityData;
use App\Data\GasData;
use Spatie\LaravelData\Data;
class DashboardData extends Data
@@ -1,26 +0,0 @@
<?php
namespace App\Features\Dashboard\Data;
use Carbon\Carbon;
use Spatie\LaravelData\Attributes\MapInputName;
use Spatie\LaravelData\Data;
use Spatie\LaravelData\Mappers\SnakeCaseMapper;
#[MapInputName(SnakeCaseMapper::class)]
class ElectricityData extends Data
{
public function __construct(
public Carbon $startDate,
public Carbon $endDate,
public string $period,
public ?int $marketPrice,
public ?float $totalPriceTaxIncluded,
public ?int $priceInclHandlingVat,
public ?int $priceTaxWithVat,
public ?string $pricingProfile,
public ?int $carbonFootprintInGram,
public ?int $sustainabilityScore,
public Carbon $startDateDatetime,
) {}
}
-23
View File
@@ -1,23 +0,0 @@
<?php
namespace App\Features\Dashboard\Data;
use Carbon\Carbon;
use Spatie\LaravelData\Attributes\MapInputName;
use Spatie\LaravelData\Data;
use Spatie\LaravelData\Mappers\SnakeCaseMapper;
#[MapInputName(SnakeCaseMapper::class)]
class GasData extends Data
{
public function __construct(
public Carbon $startDate,
public Carbon $endDate,
public string $period,
public int $marketPrice,
public float $totalPriceTaxIncluded,
public int $priceInclHandlingVat,
public int $priceTaxWithVat,
public Carbon $startDateDatetime,
) {}
}
@@ -0,0 +1,23 @@
<?php
namespace App\Features\History\Controllers;
use App\Features\History\Data\HistoryData;
use App\Features\History\Requests\HistoryRequest;
use App\Features\History\Services\HistoryService;
use App\Http\Controllers\Controller;
use Carbon\Carbon;
class HistoryController extends Controller
{
public function index(HistoryRequest $request, HistoryService $historyService): HistoryData
{
$date = Carbon::now();
if ($request->date) {
$date = $request->date;
}
return $historyService->getHistoryData($date);
}
}
+20
View File
@@ -0,0 +1,20 @@
<?php
namespace App\Features\History\Data;
use App\Data\ElectricityData;
use App\Data\GasData;
use Illuminate\Support\Collection;
use Spatie\LaravelData\Data;
class HistoryData extends Data
{
/**
* @property Collection<ElectricityData> $electricity
* @property Collection<GasData> $gas
*/
public function __construct(
public Collection $electricity,
public Collection $gas,
) {}
}
@@ -0,0 +1,13 @@
<?php
namespace App\Features\History\Requests;
use Carbon\Carbon;
use Spatie\LaravelData\Data;
class HistoryRequest extends Data
{
public function __construct(
public ?Carbon $date
) {}
}
@@ -0,0 +1,24 @@
<?php
namespace App\Features\History\Services;
use App\Contracts\PriceRepository;
use App\Data\ElectricityData;
use App\Data\GasData;
use App\Features\History\Data\HistoryData;
use Carbon\Carbon;
class HistoryService
{
public function __construct(
public PriceRepository $repository
) {}
public function getHistoryData(Carbon $date): HistoryData
{
$electricity = ElectricityData::collect($this->repository->retrieveElectricityForDate($date));
$gas = GasData::collect($this->repository->retrieveGasForDate($date));
return new HistoryData($electricity, $gas);
}
}