編集画面から値を直接変えられれば、店舗情報の反映は簡単になる。しかし誤った値を保存した後に以前の内容を探せなければ、管理者は更新を見張り続ける必要がある。利用者へ編集を開くには、入力道具に加えて変更を確認し戻す方法も必要だ。
GammaではOAuthログインと役割別の権限を導入し、要求内容をuserTicketへ保存するようにした。アカウントと提出内容を一緒に調べられる形にし、参加を広げる準備をする変更である。
PocketBase SDKで更新することで手作業は減ったが、誤った変更を復元する機能はなかった。例えば営業時間を間違えて入力した場合、現在値だけでは以前に何を送ったか分からない。この状態で編集者を増やせば確認も増える。
そこで、誰が提出し、どの値を送ったかを一緒に保存することにした。過去の要求を読めれば、問題発見後に内容を確認し、再適用する資料として使える。
OAuthは外部のログイン提供者を利用してアカウントを確認する方式である。文書編集ではログインを必須にし、最高管理者、管理者、会員の役割を区別した。本人を確認しただけで管理者作業まで認めるものではない。
更新は文書の項目別APIへ移した。APIは画面からサーバーへ変更を要求する窓口である。汎用PUTで直接上書きする経路を止め、要求者の確認と提出内容の保存を編集の経路へ組み込んだ。
編集APIが受け取るJSONをuserTicketへ保存する。JSONは提出した項目と値を表す形式だ。元の入力を残すことで、現在の文書と比べたり復元用の要求へ使ったりできる。
復元では過去のチケットの値を選び、新しい要求として同じ編集処理へ送る。元の記録は消さず、復元も新規提出として残す。特定文書の入力を再適用する機能であり、サーバー全体を過去へ戻すバックアップ復旧ではない。
チケット作成にはクールダウンを設ける。次の提出まで待機時間を置き、連続要求やスパムを制限する方法だ。写真、新規店舗、閉店の変更は、引き続き管理者の承認後に公開する。
作成者と提出値を探し、過去の要求を反映し直せるようになった。ただし保存対象はまだ生のJSONであり、検証と形式の統一は改善する必要がある。日常の訂正の使いやすさと、公開前の確認が必要な項目を分けて運用する予定だ。