diff options
| author | Ken D'Ambrosio <ken@jots.org> | 2026-06-08 22:39:58 +0000 |
|---|---|---|
| committer | Ken D'Ambrosio <ken@jots.org> | 2026-06-08 22:39:58 +0000 |
| commit | cf1385bbd6d88a8db9f615512564e150c85a0b5f (patch) | |
| tree | 371bc4b8aea8dd6f4fa2771c12a68ce7fca14eae /app.rb | |
| parent | 7f6325fe213ed46ff5479ffd34b0e212426d48f2 (diff) | |
Add face and cluster deletion to people admin
On the cluster detail page: "Remove face" option in each face's move
dropdown removes it from the cluster entirely; "Delete cluster" button
(red, with confirmation) removes the whole cluster from people.json.
Moving the last face out of a cluster also auto-deletes it.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Diffstat (limited to 'app.rb')
| -rw-r--r-- | app.rb | 15 |
1 files changed, 14 insertions, 1 deletions
@@ -939,7 +939,9 @@ post '/admin/people/:uuid/move' do halt 404 unless member people[src]['members'].delete(member) - if to == 'new' + if to == 'remove' + # just drop it — already deleted from src above + elsif to == 'new' new_uid = SecureRandom.uuid people[new_uid] = { 'name' => nil, 'slug' => nil, 'members' => [member] } else @@ -947,12 +949,23 @@ post '/admin/people/:uuid/move' do people[to]['members'] << member end + people.delete(src) if people[src] && people[src]['members'].empty? data['people'] = people atomic_write(PEOPLE_PATH, JSON.pretty_generate(data)) people[src] ? redirect("/admin/people/#{src}") : redirect('/admin/people') end +post '/admin/people/:uuid/delete' do + require_admin! + data = load_people_data + people = data['people'] || {} + people.delete(params[:uuid]) + data['people'] = people + atomic_write(PEOPLE_PATH, JSON.pretty_generate(data)) + redirect '/admin/people' +end + post '/admin/people/:uuid/merge' do require_admin! src = params[:uuid] |
