Ignore:
Timestamp:
08/06/2026 09:10:41 AM (5 weeks ago)
Author:
Claude (agent) <aiclaude@…>
Branches:
main
Children:
68a4d1b
Parents:
0e27e54
git-author:
Robin <roboburr@…> (08/06/2026 09:10:40 AM)
git-committer:
Claude (agent) <aiclaude@…> (08/06/2026 09:10:41 AM)
Message:

Eén leespad voor reacties (shaer-9e9 fase 2)

De tussentabel is nu ook voor LEZEN de bron. getReaction(slug, uri) vervangt
getMyReactions en getTimelineReaction, die dezelfde vraag beantwoordden uit twee
verschillende bronnen -- de reden dat een like in de Krant en dezelfde like op de
interact-pagina een andere knopstand konden tonen.

Vijf lezers omgezet: de interact-pagina en zijn twee toggles, en de twee toggles
in de Krant. Plus de C2S-tijdlijn, waar shaer:liked en shaer:boosted niet meer
uit de afgeleide kolom komen. Die laatste gaat via getReactionsFor: één query
voor de hele pagina, want per rij vragen zou een consistentiebug hebben geruild
voor een N+1.

Mag alleen ná scripts/backfill-reactions.mjs. Een reactie van vóór fase 1 staat
alleen in de kolom en is voor getReaction onzichtbaar -- stil, want een
ontbrekende rij is geen fout. Er staat nu een test die precies dat vastlegt, zodat
de volgorde-eis uitvoerbaar is en niet alleen opgeschreven.

Robin heeft bevestigd dat de likes van 09:01 via de KRANT gingen, dus het
schrijven van fase 1 is op de webroute bewezen -- dat was de poort voor deze
stap, want anders zou de knop daar nu stuk gaan in plaats van scheef te lopen.

Suite 430/430.

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/services/ActivityPubService.js

    r0e27e54 r14f7cb2  
    34293429 * werk voor fase 2, mét datamigratie.
    34303430 */
     3431/**
     3432 * Wat heb IK met dit object gedaan? Leest de tussentabel, de bron van waarheid
     3433 * sinds shaer-9e9 fase 2. Vervangt getMyReactions en getTimelineReaction, die
     3434 * dezelfde vraag beantwoordden uit twee verschillende bronnen.
     3435 */
     3436export function getReaction(slug, uri) {
     3437  try {
     3438    const rows = (slug && uri)
     3439      ? db.prepare('SELECT kind FROM ap_my_reactions WHERE site_slug = ? AND target_uri = ?').all(slug, uri)
     3440      : [];
     3441    return { liked: rows.some((r) => r.kind === 'like'), boosted: rows.some((r) => r.kind === 'boost') };
     3442  } catch { return { liked: false, boosted: false }; }
     3443}
     3444
     3445/**
     3446 * Dezelfde vraag voor een hele pagina in EEN query. De C2S-tijdlijn zet
     3447 * shaer:liked op elke post; per rij vragen zou dat een N+1 maken, en dan had je
     3448 * een consistentiebug geruild voor een traagheidsbug.
     3449 */
     3450export function getReactionsFor(slug, uris) {
     3451  const out = new Map();
     3452  const list = [...new Set((uris || []).filter(Boolean))].slice(0, 500);
     3453  if (!slug || !list.length) return out;
     3454  try {
     3455    const rows = db.prepare(
     3456      `SELECT target_uri, kind FROM ap_my_reactions
     3457        WHERE site_slug = ? AND target_uri IN (${list.map(() => '?').join(',')})`,
     3458    ).all(slug, ...list);
     3459    for (const r of rows) {
     3460      const cur = out.get(r.target_uri) || { liked: false, boosted: false };
     3461      if (r.kind === 'like') cur.liked = true;
     3462      if (r.kind === 'boost') cur.boosted = true;
     3463      out.set(r.target_uri, cur);
     3464    }
     3465  } catch { /* leeg = niets gereageerd, en dat is een veilige uitkomst */ }
     3466  return out;
     3467}
     3468
    34313469export function setReaction(slug, uri, kind, on, opts = {}) {
    34323470  if (!slug || !uri || (kind !== 'like' && kind !== 'boost')) return;
     
    48094847  gateOutgoingFollow, performApprovedFollow,
    48104848  parseOwnPoll, pollTally, ownPollView, deliverPollUpdate, maybeCrawlThread, sendReport, localMentionSlugs,
    4811   autoBoostCount, boostedCount, markBoosted, unmarkBoosted, markLiked, unmarkLiked, setReaction, getTimelineReaction, upsertBoostedNote, getCirkelPosts, getCirkelMembers, selfHealTimeline,
     4849  autoBoostCount, boostedCount, markBoosted, unmarkBoosted, markLiked, unmarkLiked, setReaction, getReaction, getReactionsFor, getTimelineReaction, upsertBoostedNote, getCirkelPosts, getCirkelMembers, selfHealTimeline,
    48124850  getNotifications, listBlocks, isBlockedAny, blockTarget, unblock,
    48134851  deliverWithRetry, enqueueDelivery, processDeliveryQueue, startDeliveryWorker,
Note: See TracChangeset for help on using the changeset viewer.