11 Commits

Author SHA1 Message Date
7fdd71278e lint fix wip 2026-01-07 00:05:01 +01:00
a061cee73a lint fix wip 2026-01-06 23:40:47 +01:00
5677ca245d lint fix wip 2026-01-06 23:20:55 +01:00
dec7359dcd lint fix wip 2026-01-06 23:07:30 +01:00
ec50e564b2 lint fix wip 2026-01-06 22:43:48 +01:00
64e2f7f826 lint fix wip 2026-01-06 22:28:46 +01:00
d01ecb7402 lint fix wip 2026-01-06 22:13:46 +01:00
91fe30a860 lint fix wip 2026-01-06 21:52:38 +01:00
b7d65a55c7 lint fix wip 2026-01-06 21:16:28 +01:00
52bd9492b7 lint fix wip 2026-01-06 15:11:52 +01:00
f5d9033183 Refactor to use cache-first architecture with background sync
**Motivations:**
- total_sponsoring should be calculated from cache, not stored in tags
- Author searches should use cache first, not query Nostr directly
- All elements should be read/written from/to database
- Background sync should scan all notes with service='zapwall.fr' tag and update cache
- Sync should run at startup and resume on each page navigation

**Root causes:**
- total_sponsoring was stored in tags which required updates on every sponsoring payment
- Author queries were querying Nostr directly instead of using cache
- No background sync service to keep cache up to date with new notes

**Correctifs:**
- Removed totalSponsoring from AuthorTags interface and buildAuthorTags
- Modified getAuthorSponsoring to calculate from cache (sponsoring queries) instead of tags
- Modified parsePresentationEvent to set totalSponsoring to 0 (calculated on demand from cache)
- Modified fetchAuthorByHashId and fetchAuthorPresentationFromPool to use cache first and calculate totalSponsoring from cache
- Created platformSyncService that scans all notes with service='zapwall.fr' tag and caches them
- Modified _app.tsx to start continuous sync on mount and resume on page navigation
- All author presentations now calculate totalSponsoring from cache when loaded

**Evolutions:**
- Cache-first architecture: all queries check cache before querying Nostr
- Background sync service keeps cache up to date automatically
- totalSponsoring is always calculated from actual sponsoring data in cache
- Better performance: cache queries are faster than Nostr queries
- Non-blocking sync: background sync doesn't block UI

**Pages affectées:**
- lib/nostrTagSystemTypes.ts
- lib/nostrTagSystemBuild.ts
- lib/articlePublisherHelpersPresentation.ts
- lib/sponsoring.ts
- lib/authorQueries.ts
- lib/platformSync.ts (new)
- pages/_app.tsx
2026-01-06 15:04:14 +01:00