EditinfoHandler.php 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  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. *
  20. * @var bool
  21. */
  22. protected bool $need_login = true;
  23. /**
  24. * 处理修改用户资料请求
  25. *
  26. * @param RequestUserEditinfo $data 修改用户资料请求数据
  27. * @return ResponseUserEditinfo 修改用户资料响应
  28. */
  29. public function handle(Message $data): Message
  30. {
  31. // 创建响应对象
  32. $response = new ResponseUserEditinfo();
  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. return $response;
  76. }
  77. }