LogDataHandler.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. <?php
  2. namespace App\Module\AppGame\Handler\User;
  3. use App\Module\AppGame\Handler\BaseHandler;
  4. use App\Module\Game\Services\UserLogService;
  5. use Google\Protobuf\Internal\Message;
  6. use Illuminate\Support\Facades\Log;
  7. use Uraus\Kku\Common\ResponsePage;
  8. use Uraus\Kku\Request\RequestUserLogData;
  9. use Uraus\Kku\Response\ResponseUserLogdata;
  10. use Uraus\Kku\Response\UserLog;
  11. /**
  12. * 处理用户日志数据请求
  13. */
  14. class LogDataHandler extends BaseHandler
  15. {
  16. /**
  17. * 是否需要登录
  18. * @var bool
  19. */
  20. protected bool $need_login = true;
  21. /**
  22. * 处理用户日志数据请求
  23. *
  24. * @param RequestUserLogData $data 用户日志数据请求数据
  25. * @return ResponseUserLogdata 用户日志数据响应
  26. */
  27. public function handle(Message $data): Message
  28. {
  29. try {
  30. // 创建响应对象
  31. $response = new ResponseUserLogdata();
  32. // 获取分页参数
  33. $page = 1;
  34. $pageSize = 20;
  35. if ($data->hasPage()) {
  36. $pageInfo = $data->getPage();
  37. $page = $pageInfo->getPage() ?: 1;
  38. $pageSize = $pageInfo->getPerPage() ?: 20;
  39. // 限制每页最大数量
  40. if ($pageSize > 100) {
  41. $pageSize = 100;
  42. }
  43. }
  44. // 获取用户日志列表
  45. $logs = UserLogService::getUserLogs($this->user_id, $page, $pageSize);
  46. // 创建分页响应
  47. $responsePage = new ResponsePage();
  48. $responsePage->setCurrentPage($logs->currentPage());
  49. $responsePage->setPerPage($logs->perPage());
  50. $responsePage->setTotal($logs->total());
  51. $responsePage->setHasMore($logs->hasMorePages());
  52. $responsePage->setLastPage($logs->lastPage());
  53. // 设置分页信息
  54. $response->setPage($responsePage);
  55. // 转换日志数据为protobuf格式
  56. $userLogs = [];
  57. foreach ($logs->items() as $logItem) {
  58. $userLog = new UserLog();
  59. $userLog->setMsg($logItem->message);
  60. $userLog->setTime($logItem->time); // 使用模型中定义的time访问器
  61. $userLogs[] = $userLog;
  62. }
  63. // 设置日志列表
  64. $response->setLogs($userLogs);
  65. // 记录成功日志
  66. Log::info('用户日志查询成功', [
  67. 'user_id' => $this->user_id,
  68. 'page' => $page,
  69. 'page_size' => $pageSize,
  70. 'total' => $logs->total(),
  71. 'logs_count' => count($userLogs)
  72. ]);
  73. return $response;
  74. } catch (\Exception $e) {
  75. Log::error('用户日志查询失败', [
  76. 'user_id' => $this->user_id,
  77. 'error' => $e->getMessage(),
  78. 'trace' => $e->getTraceAsString()
  79. ]);
  80. // 返回空的响应
  81. $response = new ResponseUserLogdata();
  82. // 创建空的分页信息
  83. $responsePage = new ResponsePage();
  84. $responsePage->setPage(1);
  85. $responsePage->setPageSize(20);
  86. $responsePage->setTotal(0);
  87. $responsePage->setTotalPage(0);
  88. $responsePage->setHasMore(false);
  89. $response->setPage($responsePage);
  90. $response->setLogs([]);
  91. return $response;
  92. }
  93. }
  94. }