2
0

ChatMessageController.php 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Http\Requests\StoreChatMessageRequest;
  4. use App\Http\Requests\UpdateChatMessageRequest;
  5. use App\Http\Resources\ChatMessageResource;
  6. use App\Models\ChatMessage;
  7. use Illuminate\Http\Request;
  8. use Illuminate\Http\Response;
  9. use Illuminate\Support\Str;
  10. class ChatMessageController extends Controller
  11. {
  12. /**
  13. * Display a listing of the resource.
  14. *
  15. * @return Response
  16. */
  17. public function index(Request $request)
  18. {
  19. //
  20. $query = ChatMessage::where('chat_id', $request->input('chat'));
  21. $total = $query->count();
  22. $messages = $query->orderBy('id')->paginate($request->input('limit', 500));
  23. return $this->ok([
  24. 'data' => ChatMessageResource::collection($messages),
  25. 'total' => $total,
  26. ]);
  27. }
  28. /**
  29. * Store a newly created resource in storage.
  30. *
  31. * @return Response
  32. */
  33. public function store(StoreChatMessageRequest $request)
  34. {
  35. $messagesData = $request->validated()['messages'];
  36. $chatId = $request->validated()['chat_id'];
  37. $created = [];
  38. foreach ($messagesData as $key => $data) {
  39. $data['chat_id'] = $chatId;
  40. $data['uid'] = (string) Str::uuid();
  41. // 如果是新消息且没有指定session_id,创建新的session
  42. if (empty($data['session_id']) && empty($data['parent_id'])) {
  43. $data['session_id'] = (string) Str::uuid();
  44. }
  45. // 如果有parent_id但没有session_id,继承父消息的session_id
  46. elseif (empty($data['session_id']) && ! empty($data['parent_id'])) {
  47. $parent = ChatMessage::where('uid', $data['parent_id'])->first();
  48. if ($parent) {
  49. $data['session_id'] = $parent->session_id;
  50. }
  51. }
  52. $created[] = ChatMessage::create($data);
  53. }
  54. return $this->ok([
  55. 'data' => ChatMessageResource::collection($created),
  56. 'total' => count($created),
  57. ]);
  58. }
  59. /**
  60. * Display the specified resource.
  61. *
  62. * @return Response
  63. */
  64. public function show(ChatMessage $chatMessage)
  65. {
  66. return $this->ok(new ChatMessageResource($chatMessage));
  67. }
  68. /**
  69. * Update the specified resource in storage.
  70. *
  71. * @return Response
  72. */
  73. public function update(UpdateChatMessageRequest $request, ChatMessage $chatMessage)
  74. {
  75. //
  76. }
  77. /**
  78. * Remove the specified resource from storage.
  79. *
  80. * @return Response
  81. */
  82. public function destroy(ChatMessage $chatMessage)
  83. {
  84. //
  85. }
  86. }