DashboardController.php 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. <?php
  2. namespace App\Controllers\Api;
  3. use CodeIgniter\RESTful\ResourceController;
  4. use CodeIgniter\API\ResponseTrait;
  5. class DashboardController extends ResourceController
  6. {
  7. use ResponseTrait;
  8. /**
  9. * 대시보드 통계 조회
  10. */
  11. public function getStats()
  12. {
  13. try {
  14. $db = \Config\Database::connect();
  15. // 팝업 개수
  16. $popupCount = 0;
  17. if ($db->tableExists('popups')) {
  18. $popupCount = $db->table('popups')->countAllResults();
  19. }
  20. // 지점 개수
  21. $branchCount = 0;
  22. if ($db->tableExists('branches')) {
  23. $branchCount = $db->table('branches')->countAllResults();
  24. }
  25. // 직원 개수 (영업사원 + 어드바이저)
  26. $salesCount = 0;
  27. if ($db->tableExists('sales_staff')) {
  28. $salesCount = $db->table('sales_staff')->countAllResults();
  29. }
  30. $advisorCount = 0;
  31. if ($db->tableExists('advisors')) {
  32. $advisorCount = $db->table('advisors')->countAllResults();
  33. }
  34. $employeeCount = $salesCount + $advisorCount;
  35. // 브로셔 요청 개수
  36. $brochureCount = 0;
  37. if ($db->tableExists('brochure_requests')) {
  38. $brochureCount = $db->table('brochure_requests')->countAllResults();
  39. }
  40. $stats = [
  41. 'popups' => $popupCount,
  42. 'branches' => $branchCount,
  43. 'employees' => $employeeCount,
  44. 'brochures' => $brochureCount
  45. ];
  46. return $this->respond([
  47. 'success' => true,
  48. 'data' => $stats
  49. ]);
  50. } catch (\Exception $e) {
  51. log_message('error', 'Dashboard stats error: ' . $e->getMessage());
  52. log_message('error', 'Stack trace: ' . $e->getTraceAsString());
  53. return $this->respond([
  54. 'success' => false,
  55. 'message' => '통계 조회 중 오류가 발생했습니다.',
  56. 'error' => $e->getMessage(),
  57. 'trace' => ENVIRONMENT === 'development' ? $e->getTraceAsString() : null
  58. ], 500);
  59. }
  60. }
  61. }