Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/services/guardianship/follows.js

    r1e172f3 r2b4252c  
    8181    _r = {
    8282      ins: db.prepare(`INSERT OR IGNORE INTO ap_follow_reviews
    83         (id, guardian_slug, ward_uri, ward_inbox, follower_uri, follower_handle, follower_icon, follow_json,
    84          direction, target_uri, target_handle, created_at)
    85         VALUES (?,?,?,?,?,?,?,?,?,?,?, CURRENT_TIMESTAMP)`),
     83        (id, guardian_slug, ward_uri, ward_inbox, follower_uri, follower_handle, follower_icon, follow_json, created_at)
     84        VALUES (?,?,?,?,?,?,?,?, CURRENT_TIMESTAMP)`),
    8685      get: db.prepare('SELECT * FROM ap_follow_reviews WHERE guardian_slug = ? AND id = ?'),
    8786      bySlug: db.prepare("SELECT * FROM ap_follow_reviews WHERE guardian_slug = ? AND status = 'pending' ORDER BY created_at DESC"),
     
    9291}
    9392
    94 /**
    95  * De guardian-zijdige kopie van een gate-verzoek op een REMOTE ward.
    96  *
    97  * `direction` is niet cosmetisch (shaer-jdb). Bij een INKOMENDE is de follower
    98  * iemand anders en de ward het doel. Bij een UITGAANDE is de ward zelf de
    99  * follower en staat het doel in het Follow-object -- die werd hiervoor
    100  * opgeslagen als "deze ward wil deze ward volgen", met het doel weggegooid.
    101  */
    10293export function recordReview(guardianSlug, r) {
    103   const richting = r.direction === 'outgoing' ? 'outgoing' : 'incoming';
    104   rstmts().ins.run(r.id, guardianSlug, r.wardUri, r.wardInbox || null, r.follower, r.followerHandle || null,
    105     r.followerIcon || null, r.followJson || null, richting, r.target || null, r.targetHandle || null);
     94  rstmts().ins.run(r.id, guardianSlug, r.wardUri, r.wardInbox || null, r.follower, r.followerHandle || null, r.followerIcon || null, r.followJson || null);
    10695  return rstmts().get.get(guardianSlug, r.id);
    107 }
    108 
    109 /**
    110  * Een openstaande review als wachtrij-item, in dezelfde vorm die de clients al
    111  * lezen (offers en outgoing-follows doen het net zo).
    112  */
    113 export function reviewQueueItem(r, me, guardianCount) {
    114   // guardianCount blijft WEG als we hem niet kennen. Bij een remote ward wordt
    115   // de guardian-set op diens eigen server bijgehouden, en 0 sturen zou lezen als
    116   // "dit kind heeft geen guardians" -- het tegenovergestelde van onbekend.
    117   const stemmen = (() => {
    118     try { return db.prepare('SELECT guardian_uri, decision FROM ap_pending_follow_approvals WHERE follow_id = ?').all(r.id); }
    119     catch { return []; }
    120   })();
    121   const uitgaand = r.direction === 'outgoing';
    122   return {
    123     id: r.id,
    124     type: 'Follow',
    125     // Bij een uitgaande is de WARD de volger; bij een inkomende is dat de vreemde.
    126     actor: uitgaand ? r.ward_uri : r.follower_uri,
    127     object: uitgaand ? (r.target_uri || '') : r.ward_uri,
    128     'shaer:direction': uitgaand ? 'outgoing' : 'incoming',
    129     'shaer:ward': r.ward_uri,
    130     'shaer:target': uitgaand ? (r.target_uri || undefined) : undefined,
    131     'shaer:targetHandle': uitgaand ? (r.target_handle || undefined) : undefined,
    132     'shaer:follower': uitgaand ? undefined : r.follower_uri,
    133     'shaer:followerHandle': uitgaand ? undefined : (r.follower_handle || undefined),
    134     'shaer:quorum': 'all',
    135     'shaer:approvals': stemmen.filter((x) => x.decision === 'approve').length,
    136     'shaer:guardianCount': guardianCount || undefined,
    137     'shaer:myVote': stemmen.some((x) => x.guardian_uri === me),
    138     published: r.created_at,
    139   };
    140 }
    141 
    142 /** De openstaande reviews van een guardian, per richting. */
    143 export function listReviewsByDirection(guardianSlug, direction) {
    144   return listReviews(guardianSlug).filter((r) => (r.direction === 'outgoing' ? 'outgoing' : 'incoming') === direction);
    14596}
    14697export function getReview(guardianSlug, id) { return rstmts().get.get(guardianSlug, id); }
     
    151102  recordPending, getPending, listForWard, decide, remove,
    152103  recordReview, getReview, listReviews, removeReview,
    153   listReviewsByDirection, reviewQueueItem,
    154104};
Note: See TracChangeset for help on using the changeset viewer.