diff --git a/app/Http/Controllers/Api/DialogController.php b/app/Http/Controllers/Api/DialogController.php index 26fca4037..51004964b 100755 --- a/app/Http/Controllers/Api/DialogController.php +++ b/app/Http/Controllers/Api/DialogController.php @@ -2439,8 +2439,8 @@ class DialogController extends AbstractController if ($msg) { $doneUserIds = WebSocketDialogMsgTodo::whereMsgId($msg->id) ->whereNotNull('done_at') - ->orderBy('done_at') - ->orderBy('id') + ->orderByDesc('done_at') + ->orderByDesc('id') ->pluck('userid') ->toArray(); // diff --git a/database/migrations/2025_12_19_000001_reverse_done_userids_in_todo_done_msgs.php b/database/migrations/2025_12_19_000001_reverse_done_userids_in_todo_done_msgs.php new file mode 100644 index 000000000..6eb7bd840 --- /dev/null +++ b/database/migrations/2025_12_19_000001_reverse_done_userids_in_todo_done_msgs.php @@ -0,0 +1,61 @@ +reverseDoneUserids('2025-12-19 00:00:00'); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + $this->reverseDoneUserids('2025-12-19 00:00:00'); + } + + private function reverseDoneUserids(string $after) + { + DB::table('web_socket_dialog_msgs') + ->select(['id', 'msg']) + ->where('type', 'todo') + ->where('created_at', '>', $after) + ->orderBy('id') + ->chunkById(200, function ($rows) { + foreach ($rows as $row) { + $msg = Base::json2array($row->msg); + if (empty($msg) || !is_array($msg)) { + continue; + } + if (($msg['action'] ?? '') !== 'done') { + continue; + } + $data = $msg['data'] ?? null; + if (!is_array($data)) { + continue; + } + $doneUserids = $data['done_userids'] ?? null; + if (!is_array($doneUserids) || count($doneUserids) < 2) { + continue; + } + $data['done_userids'] = array_reverse($doneUserids); + $msg['data'] = $data; + DB::table('web_socket_dialog_msgs') + ->where('id', $row->id) + ->update(['msg' => Base::array2json($msg)]); + } + }); + } +}