| @@ -1,4 +1,4 @@ | ||
| 1 | 1 | <?php |
| 2 | 2 | namespace Upress\EzCache\Rest; |
| 3 | 3 | |
| 4 | 4 | use Exception; |
| @@ -13,9 +13,41 @@ | ||
| 13 | 13 | } catch( Exception $ex) { |
| 14 | 14 | return wp_send_json_error( [ 'error' => $ex->getMessage() ] ); |
| 15 | 15 | } |
| 16 | 16 | |
| 17 | - return wp_send_json_success( $stats ); | |
| 17 | + // Restructure flat stats into nested format expected by Vue frontend | |
| 18 | + $structured_stats = [ | |
| 19 | + 'desktop' => [ | |
| 20 | + 'count' => $stats['desktop_count'] ?? 0, | |
| 21 | + 'size' => $stats['desktop_size'] ?? 0, | |
| 22 | + ], | |
| 23 | + 'mobile' => [ | |
| 24 | + 'count' => $stats['mobile_count'] ?? 0, | |
| 25 | + 'size' => $stats['mobile_size'] ?? 0, | |
| 26 | + ], | |
| 27 | + 'expired' => [ | |
| 28 | + 'count' => ( $stats['desktop_expired_count'] ?? 0 ) + ( $stats['mobile_expired_count'] ?? 0 ), | |
| 29 | + 'size' => ( $stats['desktop_expired_size'] ?? 0 ) + ( $stats['mobile_expired_size'] ?? 0 ), | |
| 30 | + ], | |
| 31 | + 'js' => [ | |
| 32 | + 'count' => $stats['js_count'] ?? 0, | |
| 33 | + 'size' => $stats['js_size'] ?? 0, | |
| 34 | + ], | |
| 35 | + 'css' => [ | |
| 36 | + 'count' => $stats['css_count'] ?? 0, | |
| 37 | + 'size' => $stats['css_size'] ?? 0, | |
| 38 | + ], | |
| 39 | + 'webp' => [ | |
| 40 | + 'count' => $stats['webp_images'] ?? 0, | |
| 41 | + 'size' => $stats['webp_size'] ?? 0, | |
| 42 | + 'original_size' => $stats['webp_original_size'] ?? 0, | |
| 43 | + ], | |
| 44 | + ]; | |
| 45 | + | |
| 46 | + return wp_send_json_success( [ | |
| 47 | + 'stats' => $structured_stats, | |
| 48 | + 'notices' => [], | |
| 49 | + ] ); | |
| 18 | 50 | } |
| 19 | 51 | |
| 20 | 52 | /** |
| 21 | 53 | * @param WP_REST_Request $request |