Changeset 0c2228a in Klonkt for src/routes/admin-users.js
- Timestamp:
- 06/14/2026 05:10:16 PM (3 months ago)
- Branches:
- main
- Children:
- 7963a6e
- Parents:
- 05a6ca0
- File:
-
- 1 edited
-
src/routes/admin-users.js (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
src/routes/admin-users.js
r05a6ca0 r0c2228a 98 98 } 99 99 100 const owned = db.prepare(` 101 SELECT 102 (SELECT COUNT(*) FROM posts WHERE author_id = ?) AS posts, 103 (SELECT COUNT(*) FROM sites WHERE owner_id = ?) AS sites 104 `).get(userId, userId); 100 // Cascade-verwijderen: de sites van deze user (+ posts/playlists/audio/leden/ 101 // comments daaronder), z'n eigen content elders, en daarna de user zelf. 102 // Atomisch in een transactie — faalt er een FK, dan rolt alles terug. 103 const del = db.transaction(() => { 104 const sites = db.prepare('SELECT id FROM sites WHERE owner_id = ?').all(userId).map((s) => s.id); 105 for (const sid of sites) { 106 db.prepare('DELETE FROM comments WHERE post_id IN (SELECT id FROM posts WHERE site_id = ?)').run(sid); 107 db.prepare('DELETE FROM posts WHERE site_id = ?').run(sid); 108 db.prepare('DELETE FROM playlists WHERE site_id = ?').run(sid); 109 db.prepare('DELETE FROM audio_tracks WHERE site_id = ?').run(sid); 110 db.prepare('DELETE FROM site_members WHERE site_id = ?').run(sid); 111 db.prepare('DELETE FROM sites WHERE id = ?').run(sid); 112 } 113 // Eigen content op andere sites + losse koppelingen. 114 db.prepare('DELETE FROM comments WHERE post_id IN (SELECT id FROM posts WHERE author_id = ?)').run(userId); 115 db.prepare('DELETE FROM posts WHERE author_id = ?').run(userId); 116 db.prepare('DELETE FROM comments WHERE author_id = ?').run(userId); 117 db.prepare('DELETE FROM site_members WHERE user_id = ?').run(userId); 118 db.prepare('DELETE FROM users WHERE id = ?').run(userId); 119 }); 105 120 106 if (owned.posts > 0 || owned.sites > 0) { 107 return res.redirect('/admin/users?error=' + encodeURIComponent( 108 `Cannot delete: user owns ${owned.sites} site(s) and ${owned.posts} post(s). Reassign or delete those first.` 109 )); 121 try { 122 del(); 123 } catch (e) { 124 console.error('[admin/users delete]', e.message); 125 return res.redirect('/admin/users?error=' + encodeURIComponent('Verwijderen mislukt (mogelijk gekoppelde data).')); 110 126 } 111 127 112 // Clean up dangling references 113 db.prepare('DELETE FROM site_members WHERE user_id = ?').run(userId); 114 db.prepare('DELETE FROM comments WHERE author_id = ?').run(userId); 115 db.prepare('DELETE FROM users WHERE id = ?').run(userId); 116 117 res.redirect('/admin/users?success=' + encodeURIComponent('User deleted: ' + target.username)); 128 res.redirect('/admin/users?success=' + encodeURIComponent('Gebruiker verwijderd: ' + target.username)); 118 129 }); 119 130
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)