// 저장: version 증가 후 DB 업데이트
public function save(): ResponseInterface
{
$content = $this->request->getPost('content') ?? '';
$clientId = $this->request->getPost('client_id') ?? '';
$doc = db_connect()->table('sync_docs')->limit(1)->get()->getRowArray();
db_connect()->table('sync_docs')->where('id', $doc['id'])->update([
'content' => $content,
'version' => (int) $doc['version'] + 1,
'client_id' => $clientId,
'updated_at' => date('Y-m-d H:i:s'),
]);
return $this->response->setJSON(['version' => $doc['version'] + 1]);
}
// SSE 스트림: version 변경 시 전체 내용 push
public function stream(): void
{
header('Content-Type: text/event-stream; charset=UTF-8');
$lastVersion = (int) ($this->request->getServer('HTTP_LAST_EVENT_ID') ?? 0);
for ($i = 0; $i < 120; $i++) {
if (connection_aborted()) break;
$doc = $this->getDoc();
if ((int) $doc['version'] > $lastVersion) {
$lastVersion = (int) $doc['version'];
echo "id: {$lastVersion}\n";
echo "event: update\n";
echo 'data: ' . json_encode($doc) . "\n\n";
flush();
}
sleep(2);
}
}