EatHandler.php 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. <?php
  2. namespace App\Module\AppGame\Handler\Pet;
  3. use App\Module\AppGame\Handler\BaseHandler;
  4. use App\Module\AppGame\Validations\PetEatValidation;
  5. use App\Module\Pet\Services\PetService;
  6. use Google\Protobuf\Internal\Message;
  7. use Illuminate\Support\Facades\DB;
  8. use Illuminate\Support\Facades\Log;
  9. use UCore\Helper\Logger;
  10. use Uraus\Kku\Request\RequestPetEat;
  11. use Uraus\Kku\Response\ResponsePetEat;
  12. /**
  13. * 处理宠物喂食请求
  14. */
  15. class EatHandler extends BaseHandler
  16. {
  17. /**
  18. * 是否需要登录
  19. *
  20. * @var bool
  21. */
  22. protected bool $need_login = true;
  23. /**
  24. * 处理宠物喂食请求
  25. *
  26. * @param RequestPetEat $data 宠物喂食请求数据
  27. * @return ResponsePetEat 宠物喂食响应
  28. */
  29. public function handle(Message $data): Message
  30. {
  31. // 创建验证对象
  32. $validation = PetEatValidation::makeByProrobufUser($data);
  33. // 验证请求数据
  34. $validation->validated();
  35. // 验证完成
  36. // 获取请求参数
  37. $petId = $validation->getSafe('petId');
  38. $itemId = $validation->getSafe('itemId');
  39. $num = $validation->getSafe('num');
  40. $userId = $this->user_id;
  41. // 创建响应对象
  42. $response = new ResponsePetEat();
  43. try {
  44. // 开启数据库事务
  45. DB::beginTransaction();
  46. // 调用宠物服务进行喂养
  47. $feedResult = PetService::feedPet($userId, $petId, $itemId, $num);
  48. // 不需要设置响应,默认成功的响应
  49. // 提交事务
  50. DB::commit();
  51. } catch (\Exception $e) {
  52. // 回滚事务
  53. DB::rollBack();
  54. // 记录错误日志
  55. Logger::error('宠物喂养失败', [
  56. 'user_id' => $userId,
  57. 'pet_id' => $petId,
  58. 'item_id' => $itemId,
  59. 'num' => $num,
  60. 'error' => $e->getMessage()
  61. ]);
  62. throw $e;
  63. }
  64. return $response;
  65. }
  66. }