HEX
Server: LiteSpeed
System: Linux s1049.use1.mysecurecloudhost.com 4.18.0-477.27.2.lve.el8.x86_64 #1 SMP Wed Oct 11 12:32:56 UTC 2023 x86_64
User: xedaptot (3356)
PHP: 8.3.31
Disabled: NONE
Upload Files
File: /home/xedaptot/be.naniguide.com/app/Http/Controllers/Refactor/DashboardController.php
<?php

namespace App\Http\Controllers\Refactor;

use App\Http\Controllers\Controller;
use App\Jobs\RefreshCacheableJob;
use App\Library\Cache\AppCache;
use App\Services\Customer\DashboardService;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;

class DashboardController extends Controller
{
    private const ALLOWED_DAYS = [7, 30, 90];
    private const DEFAULT_DAYS = 7;

    public function index(Request $request)
    {
        $customer = $request->user()->customer;
        $service = new DashboardService($customer);

        $quota = $service->getQuotaUsage();
        $bannerContext = $service->getBannerContext();
        $emailMetrics = $service->getEmailMetrics();
        $sendingTrend = $service->getSendingTrend(7);
        $campaignPerformance = $service->getCampaignPerformance(self::DEFAULT_DAYS);
        $campaignPerformanceComputedAt = AppCache::for($customer->local())
            ->lastUpdatedAt('SentByDay_' . self::DEFAULT_DAYS);
        $topCampaigns = $service->getTopCampaigns(5);
        $topCountries = $service->getTopCountries(5);
        $recentCampaigns = $service->getRecentCampaigns(5);
        $activityLogs = $service->getActivityLogs(10);
        $setupChecklist = $service->getSetupChecklist();
        $subscriberBreakdown = $service->getSubscriberBreakdown();
        $currentTimezone = $customer->getTimezone();
        $dashboardComputedAt = $service->getDashboardComputedAt();

        return view('refactor.pages.dashboard_v2', compact(
            'customer',
            'quota',
            'bannerContext',
            'emailMetrics',
            'sendingTrend',
            'campaignPerformance',
            'campaignPerformanceComputedAt',
            'topCampaigns',
            'topCountries',
            'recentCampaigns',
            'activityLogs',
            'setupChecklist',
            'subscriberBreakdown',
            'currentTimezone',
            'dashboardComputedAt'
        ));
    }

    public function chartData(Request $request): JsonResponse
    {
        $days = $this->resolveDays($request);
        $customer = $request->user()->customer;

        $service = new DashboardService($customer);
        $data = $service->getCampaignPerformance($days);
        $computedAt = AppCache::for($customer->local())->lastUpdatedAt('SentByDay_' . $days);

        return response()->json([
            'data' => $data,
            'computed_at' => $computedAt ? $customer->formatDateTime($computedAt, 'datetime_full') : null,
            'computed_at_relative' => $computedAt?->diffForHumans(),
            'computed_at_iso' => $computedAt?->toIso8601String(),
        ]);
    }

    public function refreshChart(Request $request): JsonResponse
    {
        $customer = $request->user()->customer;
        $lc = $customer->local();

        if ($request->has('days')) {
            $days = $this->resolveDays($request);
            RefreshCacheableJob::dispatch($lc, 'SentByDay_' . $days);
        } else {
            RefreshCacheableJob::dispatchAll($lc);
        }

        return response()->json([
            'message' => trans('refactor/dashboard_v2.performance.refresh_dispatched'),
        ], 202);
    }

    private function resolveDays(Request $request): int
    {
        $days = (int) $request->input('days', self::DEFAULT_DAYS);

        return in_array($days, self::ALLOWED_DAYS, true) ? $days : self::DEFAULT_DAYS;
    }
}