diff --git a/resources/js/components/UI/Bar.vue b/resources/js/components/UI/Bar.vue index 73dfe9e0..7d6f737d 100644 --- a/resources/js/components/UI/Bar.vue +++ b/resources/js/components/UI/Bar.vue @@ -1,7 +1,7 @@ diff --git a/src/App/Users/Resources/UserStorageResource.php b/src/App/Users/Resources/UserStorageResource.php index de2886f0..08204d11 100644 --- a/src/App/Users/Resources/UserStorageResource.php +++ b/src/App/Users/Resources/UserStorageResource.php @@ -1,7 +1,10 @@ $this->usedCapacity / 1000000000, - 'fixed' => $this->limitations->max_storage_amount, - default => $this->limitations->max_storage_amount, + 'fixed' => $this->limitations->max_storage_amount, + default => $this->limitations->max_storage_amount, }; return [ 'data' => [ - 'id' => (string) $this->id, + 'id' => (string)$this->id, 'type' => 'storage', 'attributes' => [ 'used' => Metric::bytes($this->usedCapacity)->format(), 'capacity' => format_gigabytes($totalCapacity), - 'percentage' => (float) get_storage_percentage($this->usedCapacity, $totalCapacity), + 'percentage' => (float)get_storage_percentage($this->usedCapacity, $totalCapacity), ], 'meta' => [ 'traffic' => [ @@ -44,23 +47,23 @@ class UserStorageResource extends JsonResource ], 'images' => [ 'used' => Metric::bytes($images)->format(), - 'percentage' => (float) get_storage_percentage($images, $totalCapacity), + 'percentage' => (float)get_storage_percentage($images, $totalCapacity), ], 'audios' => [ 'used' => Metric::bytes($audios)->format(), - 'percentage' => (float) get_storage_percentage($audios, $totalCapacity), + 'percentage' => (float)get_storage_percentage($audios, $totalCapacity), ], 'videos' => [ 'used' => Metric::bytes($videos)->format(), - 'percentage' => (float) get_storage_percentage($videos, $totalCapacity), + 'percentage' => (float)get_storage_percentage($videos, $totalCapacity), ], 'documents' => [ 'used' => Metric::bytes($documents)->format(), - 'percentage' => (float) get_storage_percentage($documents, $totalCapacity), + 'percentage' => (float)get_storage_percentage($documents, $totalCapacity), ], 'others' => [ 'used' => Metric::bytes($others)->format(), - 'percentage' => (float) get_storage_percentage($others, $totalCapacity), + 'percentage' => (float)get_storage_percentage($others, $totalCapacity), ], ], ], @@ -130,18 +133,26 @@ class UserStorageResource extends JsonResource ->where('user_id', $this->id) ->where('created_at', '>', $period) ->orderBy('created_at') - ->get(); + ->get(['upload', 'download', 'created_at']) + ->each(fn($record) => $record->created_at = format_date($record->created_at, 'd. M. Y')) + ->keyBy('created_at'); - $upload = $trafficRecords->map(fn ($record) => [ - 'created_at' => format_date($record->created_at, 'd. M. '), - 'percentage' => $uploadMax !== 0 ? round(($record->upload / $uploadMax) * 100, 2) : 0, + $mappedTrafficRecords = mapTrafficRecords($trafficRecords); + + $upload = $mappedTrafficRecords->map(fn($record) => [ + 'created_at' => $record->created_at, 'amount' => Metric::bytes($record->upload)->format(), + 'percentage' => $uploadMax !== 0 + ? round(($record->upload / $uploadMax) * 100, 2) + : 0, ]); - $download = $trafficRecords->map(fn ($record) => [ - 'created_at' => format_date($record->created_at, 'd. M. '), - 'percentage' => $downloadMax !== 0 ? round(($record->download / $downloadMax) * 100, 2) : 0, + $download = $mappedTrafficRecords->map(fn($record) => [ + 'created_at' => $record->created_at, 'amount' => Metric::bytes($record->download)->format(), + 'percentage' => $downloadMax !== 0 + ? round(($record->download / $downloadMax) * 100, 2) + : 0, ]); return [$downloadTotal, $uploadTotal, $upload, $download]; diff --git a/src/Domain/Admin/Controllers/Dashboard/GetDashboardDataController.php b/src/Domain/Admin/Controllers/Dashboard/GetDashboardDataController.php index 738dae54..893e4ef1 100644 --- a/src/Domain/Admin/Controllers/Dashboard/GetDashboardDataController.php +++ b/src/Domain/Admin/Controllers/Dashboard/GetDashboardDataController.php @@ -52,7 +52,7 @@ class GetDashboardDataController extends Controller { // Set period range for data retrieval $period = now() - ->subDays(44) + ->subDays(45) ->endOfDay(); // Get bandwidth data @@ -64,16 +64,20 @@ class GetDashboardDataController extends Controller DB::raw('sum(upload) as upload') ) ->groupBy('created_at') - ->get(); + ->get(['upload', 'download', 'created_at']) + ->each(fn($record) => $record->created_at = format_date($record->created_at, 'd. M. Y')) + ->keyBy('created_at'); - $upload = $trafficRecords->map(fn ($record) => [ - 'created_at' => format_date($record->created_at, 'd. M. '), + $mappedTrafficRecords = mapTrafficRecords($trafficRecords); + + $upload = $mappedTrafficRecords->map(fn ($record) => [ + 'created_at' => $record->created_at, 'percentage' => intval($trafficRecords->max('upload')) !== 0 ? round(($record->upload / $trafficRecords->max('upload')) * 100, 2) : 0, 'amount' => Metric::bytes($record->upload)->format(), ]); - $download = $trafficRecords->map(fn ($record) => [ - 'created_at' => format_date($record->created_at, 'd. M. '), + $download = $mappedTrafficRecords->map(fn ($record) => [ + 'created_at' => $record->created_at, 'percentage' => intval($trafficRecords->max('download')) !== 0 ? round(($record->download / $trafficRecords->max('download')) * 100, 2) : 0, 'amount' => Metric::bytes($record->download)->format(), ]); diff --git a/src/Support/helpers.php b/src/Support/helpers.php index 53a2b246..3b18ed56 100644 --- a/src/Support/helpers.php +++ b/src/Support/helpers.php @@ -648,6 +648,33 @@ if (! function_exists('getThumbnailFileList')) { } } +if (! function_exists('mapTrafficRecords')) { + /** + * Map missing dates + */ + function mapTrafficRecords(Collection $trafficRecords): Collection + { + $records = collect(); + + foreach (range(44, 0) as $day) { + $day = now()->subDays($day)->translatedFormat('d. M. Y'); + + if (optional($trafficRecords)[$day]) { + $records->push($trafficRecords[$day]); + } else { + $record = new Collection(); + + $record->upload = 0; + $record->download = 0; + $record->created_at = $day; + + $records->add($record); + } + } + return $records; + } +} + if (! function_exists('map_language_translations')) { /** * It map language translations as language key and language value