UserListHandler.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. <?php
  2. namespace App\Module\OpenAPI\Handlers\User;
  3. use App\Module\OpenAPI\Handlers\BaseHandler;
  4. use App\Module\OpenAPI\Services\ScopeService;
  5. use App\Module\OpenAPI\Enums\SCOPE_TYPE;
  6. use Illuminate\Http\JsonResponse;
  7. /**
  8. * 用户列表Handler
  9. *
  10. * 处理获取用户列表的业务逻辑
  11. */
  12. class UserListHandler extends BaseHandler
  13. {
  14. public function __construct(ScopeService $scopeService)
  15. {
  16. parent::__construct($scopeService);
  17. }
  18. /**
  19. * 获取所需的权限范围
  20. *
  21. * @return SCOPE_TYPE[]
  22. */
  23. public function getRequiredScopes(): array
  24. {
  25. return [SCOPE_TYPE::USER_READ];
  26. }
  27. /**
  28. * 处理获取用户列表请求
  29. *
  30. * @param array $data 请求数据
  31. * @param array $context 上下文信息
  32. * @return JsonResponse
  33. */
  34. protected function process(array $data, array $context = []): JsonResponse
  35. {
  36. // 验证请求参数
  37. $validationErrors = $this->validateData($data, [
  38. 'page' => 'integer|min:1',
  39. 'per_page' => 'integer|min:1|max:100',
  40. 'search' => 'string|max:100',
  41. 'status' => 'string|in:active,inactive,banned',
  42. ]);
  43. if ($validationErrors) {
  44. return $this->errorResponse('参数验证失败', $validationErrors, 422);
  45. }
  46. // 获取分页参数
  47. $page = $data['page'] ?? 1;
  48. $perPage = $data['per_page'] ?? 20;
  49. $search = $data['search'] ?? '';
  50. $status = $data['status'] ?? '';
  51. // 调用User模块服务获取用户列表
  52. $userList = $this->getUserList($page, $perPage, $search, $status);
  53. // 记录操作日志
  54. $this->logAction('user.list.get', [
  55. 'page' => $page,
  56. 'per_page' => $perPage,
  57. 'search' => $search,
  58. 'status' => $status,
  59. ], $context);
  60. return $this->successResponse('获取用户列表成功', $userList);
  61. }
  62. /**
  63. * 获取用户列表
  64. *
  65. * 这里应该调用User模块的实际服务
  66. *
  67. * @param int $page
  68. * @param int $perPage
  69. * @param string $search
  70. * @param string $status
  71. * @return array
  72. */
  73. protected function getUserList(int $page, int $perPage, string $search, string $status): array
  74. {
  75. // TODO: 这里应该调用User模块的服务
  76. // 例如: return app(UserService::class)->getUserList($page, $perPage, $search, $status);
  77. // 暂时返回示例数据,等待与User模块集成
  78. $users = [];
  79. $total = 1000; // 假设总用户数
  80. // 生成示例用户数据
  81. for ($i = 1; $i <= $perPage; $i++) {
  82. $userId = ($page - 1) * $perPage + $i;
  83. if ($userId > $total) break;
  84. $users[] = [
  85. 'id' => $userId,
  86. 'username' => "user{$userId}",
  87. 'nickname' => "用户{$userId}",
  88. 'email' => "user{$userId}@example.com",
  89. 'avatar' => "https://example.com/avatar/{$userId}.jpg",
  90. 'level' => rand(1, 100),
  91. 'status' => $status ?: ['active', 'inactive'][rand(0, 1)],
  92. 'created_at' => now()->subDays(rand(1, 365))->toISOString(),
  93. 'last_login_at' => now()->subHours(rand(1, 24))->toISOString(),
  94. ];
  95. }
  96. return [
  97. 'users' => $users,
  98. 'pagination' => [
  99. 'current_page' => $page,
  100. 'per_page' => $perPage,
  101. 'total' => $total,
  102. 'last_page' => ceil($total / $perPage),
  103. 'from' => ($page - 1) * $perPage + 1,
  104. 'to' => min($page * $perPage, $total),
  105. ],
  106. 'filters' => [
  107. 'search' => $search,
  108. 'status' => $status,
  109. ],
  110. ];
  111. }
  112. }