EditinfoHandler.php 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. <?php
  2. namespace App\Module\AppGame\Handler\User;
  3. use App\Module\AppGame\Handler\BaseHandler;
  4. use App\Module\User\Models\UserInfo;
  5. use App\Module\User\Services\UserService;
  6. use Google\Protobuf\Internal\Message;
  7. use Illuminate\Support\Facades\DB;
  8. use Illuminate\Support\Facades\Log;
  9. use Uraus\Kku\Request\RequestUserEditInfo;
  10. use Uraus\Kku\Response\ResponseUserEditinfo;
  11. use UCore\Exception\LogicException;
  12. /**
  13. * 处理用户修改资料请求
  14. */
  15. class EditinfoHandler extends BaseHandler
  16. {
  17. /**
  18. * 是否需要登录
  19. * @var bool
  20. */
  21. protected bool $need_login = true;
  22. /**
  23. * 处理修改用户资料请求
  24. *
  25. * @param RequestUserEditinfo $data 修改用户资料请求数据
  26. * @return ResponseUserEditinfo 修改用户资料响应
  27. */
  28. public function handle(Message $data): Message
  29. {
  30. // 创建响应对象
  31. $response = new ResponseUserEditinfo();
  32. try {
  33. // 获取请求参数
  34. $avatar = $data->getAvatar();
  35. $nickname = $data->getNickname();
  36. // 验证参数
  37. if (empty($nickname)) {
  38. throw new LogicException('昵称不能为空');
  39. }
  40. // 验证昵称长度
  41. if (mb_strlen($nickname) > 20) {
  42. throw new LogicException('昵称长度不能超过20个字符');
  43. }
  44. // 开始事务
  45. DB::beginTransaction();
  46. try {
  47. // 获取用户信息
  48. $userInfo = UserInfo::where('user_id', $this->user_id)->first();
  49. if (!$userInfo) {
  50. // 如果用户信息不存在,创建一个新的
  51. $userInfo = new UserInfo();
  52. $userInfo->user_id = $this->user_id;
  53. }
  54. // 更新用户信息
  55. $userInfo->nickname = $nickname;
  56. // 只有当头像ID不为0时才更新头像
  57. if ($avatar > 0) {
  58. $userInfo->avatar = $avatar;
  59. }
  60. // 保存用户信息
  61. $userInfo->save();
  62. // 提交事务
  63. DB::commit();
  64. // 记录日志
  65. Log::info('用户修改资料成功', [
  66. 'user_id' => $this->user_id,
  67. 'nickname' => $nickname,
  68. 'avatar' => $avatar
  69. ]);
  70. } catch (\Exception $e) {
  71. // 回滚事务
  72. DB::rollBack();
  73. throw $e;
  74. }
  75. } catch (LogicException $e) {
  76. // 业务逻辑异常
  77. $this->response->setCode($e->getCode() ?: 400);
  78. $this->response->setMessage($e->getMessage());
  79. Log::warning('用户修改资料失败: ' . $e->getMessage(), [
  80. 'user_id' => $this->user_id,
  81. 'code' => $e->getCode(),
  82. 'message' => $e->getMessage()
  83. ]);
  84. } catch (\Exception $e) {
  85. // 系统异常
  86. $this->response->setCode(500);
  87. $this->response->setMessage('系统错误,请稍后再试');
  88. Log::error('用户修改资料异常: ' . $e->getMessage(), [
  89. 'user_id' => $this->user_id,
  90. 'exception' => $e
  91. ]);
  92. }
  93. return $response;
  94. }
  95. }