Changeset 7e474f7 in Klonkt for src/services/MigrationService.js
- Timestamp:
- 08/14/2026 03:12:04 AM (4 weeks ago)
- Branches:
- main
- Children:
- bfadc15
- Parents:
- 47f1183
- File:
-
- 1 edited
-
src/services/MigrationService.js (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/services/MigrationService.js
r47f1183 r7e474f7 36 36 import crypto from 'crypto'; 37 37 import db from '../config/database.js'; 38 import { AP_CONTEXT, actorId, pagedCollection } from './ap-core.js';38 import { AP_CONTEXT, actorId, pagedCollection, PAGINA_GROOTTE } from './ap-core.js'; 39 39 40 40 // ── Vertaaltabel ────────────────────────────────────────────────── … … 66 66 * de URIs van je fan-only posts opsomt is een lek, ook zonder de inhoud. 67 67 */ 68 export function migrationItems(slug, { alles = false } = {}) {68 export function migrationItems(slug, { alles = false, limit = null, offset = 0 } = {}) { 69 69 try { 70 // IN SQL pagineren, niet in geheugen. Dit is een PUBLIEK endpoint dat 71 // derden volgens FEP-1580 juist herhaaldelijk ophalen tot migrationComplete 72 // waar is. Alles laden om er twintig te tonen is dan geen inefficientie 73 // maar een hefboom: bij honderdduizend berichten bouwt elke poll 74 // honderdduizend objecten die meteen de prullenbak in gaan. 70 75 const sql = `SELECT origin, target, source_actor FROM ap_migration 71 WHERE slug = ?${alles ? '' : ' AND is_public = 1'} ORDER BY id DESC`; 72 return db.prepare(sql).all(slug); 76 WHERE slug = ?${alles ? '' : ' AND is_public = 1'} 77 ORDER BY id DESC${limit ? ' LIMIT ? OFFSET ?' : ''}`; 78 return limit ? db.prepare(sql).all(slug, limit, offset) : db.prepare(sql).all(slug); 73 79 } catch { return []; } 74 80 } … … 151 157 const me = actorId(base, site.slug); 152 158 const id = `${me}/migration`; 153 const rows = migrationItems(site.slug, { alles }); 159 const totaal = migrationCount(site.slug, { alles }); 160 // Zonder pagina: alleen de omslag met eerste/laatste en de telling. Zo hoeft 161 // de kale collectie geen enkele rij aan te raken, en dat is precies wat een 162 // consument als eerste opvraagt. 163 const nr = page ? Math.max(1, Math.floor(Number(page)) || 1) : false; 164 const rows = nr ? migrationItems(site.slug, { alles, limit: PAGINA_GROOTTE, offset: (nr - 1) * PAGINA_GROOTTE }) : []; 154 165 const items = rows.map((r) => ({ 155 166 type: 'Move', … … 159 170 })); 160 171 return pagedCollection(id, items, { 161 page, 172 page: nr, 173 totalItems: totaal, 174 alGesneden: true, 162 175 extra: { 163 176 attributedTo: me,
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)