source: Klonkt/scripts/backfill-post-types.mjs@ 7e53594

main
Last change on this file since 7e53594 was d7e72b8, checked in by Robin <roboburr@…>, 5 weeks ago

Audio is geen keuze meer: Album en Playlist staan in de balk (shaer-cyg)

De posttype-balk had post/foto/video/audio. Audio verdwijnt als keuze -- alles
wat muziek is landt voortaan op album of playlist, en dat maakt de keuze
betekenisvol in plaats van cosmetisch. Album en Playlist delen het muziekpaneel,
want het verschil zit in de playlist en niet in wat je uploadt.

De knop Audio blijft alleen staan zolang een post nog type=audio IS. Anders zou
het openen van een oude post hem stilzwijgend van type veranderen, en dat is
precies het soort verlies dat niemand ziet gebeuren.

De lijst van geldige types stond op DRIE plaatsen los van elkaar: twee keer in
routes/posts.js en een keer in routes/types.js. Dat viel niet op zolang ze
gelijk waren, maar het faalt stil: kent het opslaan 'playlist' niet, dan wordt
de post zonder melding een gewone post en is de keuze verdwenen in plaats van
geweigerd. Nu een lijst, in config/post-types.js, die ook de editor voedt.

En de migratie: scripts/backfill-post-types.mjs zet bestaande audio-posts om via
postMusicType. Proefdraai is de standaard, --doen schrijft. Wat de afleiding
niet tot album of playlist maakt blijft met rust en wordt apart gemeld -- die
verdienen een blik en geen gok.

Co-Authored-By: Claude Opus 5 <noreply@…>

  • Property mode set to 100644
File size: 2.5 KB
Line 
1#!/usr/bin/env node
2/**
3 * Zet bestaande type=audio posts om naar album of playlist. (shaer-cyg)
4 *
5 * Audio is geen keuze meer: alles wat muziek is landt op album of playlist. Wat
6 * er al staat moet daar dus heen, en dat is een migratie en geen hernoeming --
7 * welke van de twee het wordt hangt af van wat er IN de post zit. Die afleiding
8 * staat in music/postMusicType en wordt hier alleen toegepast.
9 *
10 * node scripts/backfill-post-types.mjs # laat zien wat er zou gebeuren
11 * node scripts/backfill-post-types.mjs --doen # en voert het uit
12 *
13 * Idempotent: kijkt alleen naar type='audio', dus een tweede run doet niets.
14 * Posts waar de afleiding geen album of playlist van maakt (twee collecties,
15 * een onvindbare playlist, of helemaal geen muziek meer) blijven met rust
16 * gelaten en worden apart gemeld -- die verdienen een blik en geen gok.
17 */
18import db from '../src/config/database.js';
19import { postMusicType } from '../src/services/music/index.js';
20
21const DOEN = process.argv.includes('--doen');
22
23const posts = db.prepare(`
24 SELECT p.id, p.site_id, p.slug, p.title, p.content, s.slug AS site_slug
25 FROM posts p JOIN sites s ON s.id = p.site_id
26 WHERE p.type = 'audio'
27 ORDER BY p.created_at
28`).all();
29
30console.log(`[backfill-post-types] ${posts.length} post(s) met type=audio${DOEN ? '' : ' (proefdraai — geef --doen om te schrijven)'}`);
31
32const update = db.prepare('UPDATE posts SET type = ? WHERE id = ?');
33const telling = { album: 0, playlist: 0 };
34const overgeslagen = [];
35
36for (const p of posts) {
37 const r = postMusicType(p.content, p.site_id);
38 const naam = `${p.site_slug}/${p.slug}`;
39
40 if (!r || (r.type !== 'album' && r.type !== 'playlist')) {
41 const reden = !r ? 'geen muziek meer in de post'
42 : r.onbekend?.length ? `playlist niet gevonden: ${r.onbekend.join(', ')}`
43 : `${r.collecties?.length ?? 0} collecties — de post blijft een post`;
44 overgeslagen.push({ naam, reden });
45 continue;
46 }
47
48 telling[r.type]++;
49 const bonus = r.bonus?.length ? `, ${r.bonus.length} bonus-track(s)` : '';
50 console.log(` ${r.type.padEnd(8)} ${naam}${bonus}`);
51 if (DOEN) update.run(r.type, p.id);
52}
53
54console.log(`\n album: ${telling.album}`);
55console.log(` playlist: ${telling.playlist}`);
56
57if (overgeslagen.length) {
58 console.log(`\n overgeslagen (${overgeslagen.length}) — deze blijven type=audio:`);
59 for (const o of overgeslagen) console.log(` ${o.naam}: ${o.reden}`);
60}
61
62if (!DOEN && (telling.album || telling.playlist)) {
63 console.log('\nNiets geschreven. Draai opnieuw met --doen als dit klopt.');
64}
Note: See TracBrowser for help on using the repository browser.