BarChartController.php 2,14 ko
Newer Older
Hajar RAHMOUNI's avatar
Hajar RAHMOUNI a validé
<?php

namespace App\Controller;

use App\Dto\BarChartInput;
use App\Service\BarChartService;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;

class BarChartController extends AbstractController
{
    private BarChartService $chartService;

    public function __construct(BarChartService $chartService)
    {
        $this->chartService = $chartService;
    }

   /* #[Route('/sales/bar-chart/{startDate}/{endDate}/{granularity}', name: 'get_sales_for_bar_chart', requirements: [
        'startDate' => '\d{4}-\d{2}-\d{2}', // Matches YYYY-MM-DD
        'endDate' => '\d{4}-\d{2}-\d{2}',   // Matches YYYY-MM-DD
        'granularity' => 'day|month|year',   // Matches day, month, or year
    ])]*/
    public function getChartData(Request $request): JsonResponse
    {
        // Utilisez la méthode getContent directement pour obtenir le contenu JSON
        $requestData = json_decode($request->getContent(), true);

        // Vérifiez si les clés correctes sont présentes
        if (!isset($requestData['startDate'], $requestData['endDate'], $requestData['granularity'])) {
            // Retournez une réponse d'erreur appropriée si des données sont manquantes
            return $this->json(['error' => 'Invalid request data. Make sure to provide startDate, endDate, and granularity.'], 400);
        }

        // Validate and transform the input data into a BarChartInput object.
        $input = new BarChartInput();
        $input->start = $requestData['startDate'];
        $input->end = $requestData['endDate'];
        $input->granularity = $requestData['granularity'];

        // Call the service to get the chart data.
        $chartData = $this->chartService->getBarChartData($input);

        // Transform the results into the desired output format.
        $output = [];
        foreach ($chartData as $data) {
            $output[] = [
                'date' => $data->date,
                'occurrences' => $data->occurrences,
            ];
        }
        return $this->json($output);
    }

}