Commit graph

2137 commits

Author SHA1 Message Date
senke
cf7f5d54c2 feat(frontend): add admin transfer API functions in commerceService 2026-02-23 23:36:09 +01:00
senke
56f2e9f9c3 test(admin): add admin transfer handler tests 2026-02-23 23:35:11 +01:00
senke
7fed717c9b feat(routes): wire admin transfer endpoints in /admin group 2026-02-23 23:33:54 +01:00
senke
8375466af9 feat(admin): add admin transfer handler (GET list, POST retry) 2026-02-23 23:33:35 +01:00
senke
0211e44a09 test(marketplace): add transfer retry worker tests 2026-02-23 23:32:59 +01:00
senke
1b66260c22 feat(server): start TransferRetryWorker on boot (v0.701) 2026-02-23 23:32:23 +01:00
senke
fd357cb383 feat(marketplace): add TransferRetryWorker background goroutine 2026-02-23 23:32:03 +01:00
senke
ab12f5d1fe feat(monitoring): add transfer retry Prometheus metrics 2026-02-23 23:31:35 +01:00
senke
3261d0fb44 feat(config): add transfer retry configuration (v0.701) 2026-02-23 23:31:09 +01:00
senke
bdfda923ae feat(marketplace): add retry fields to SellerTransfer model 2026-02-23 23:30:51 +01:00
senke
db0f40815a feat(marketplace): add migration 116 — retry columns for seller_transfers 2026-02-23 23:30:41 +01:00
senke
430d090c0b docs: add v0.701 release scope, smoke test, and update references
Phase 7 kickoff — Retry Transfers, Admin Dashboard & Deep Health.
Absorbs v0.604 backlog. Updates SCOPE_CONTROL, PROJECT_STATE, .cursorrules.
2026-02-23 23:21:06 +01:00
senke
67648ee63f docs: add RETROSPECTIVE_V0603.md
chore(release): archive v0.603 scope, create v0.604 placeholder
2026-02-23 22:59:59 +01:00
senke
6f20e113f6 docs: update PROJECT_STATE, FEATURE_STATUS, CHANGELOG for v0.603 2026-02-23 22:59:38 +01:00
senke
13219ce550 chore(marketplace): go vet passes, no dead code 2026-02-23 22:59:18 +01:00
senke
c213d2217a docs(payout): update PAYOUT_MANUAL for v0.603 auto transfer 2026-02-23 22:59:07 +01:00
senke
4ea4774da2 chore(docs): archive obsolete pre-v0.501 docs 2026-02-23 22:58:53 +01:00
senke
f2c6cbd156 chore(backend): triage TODOs — 10 remaining, all actionable (scope met) 2026-02-23 22:58:29 +01:00
senke
31034f409c test(commerce): add transfer tests — success, multi-seller, transfer-fails 2026-02-23 22:58:16 +01:00
senke
eb80681add test(seller): add MSW handler and story for transfers 2026-02-23 22:57:35 +01:00
senke
81fccda396 feat(seller): add transfers history card to SellerDashboard 2026-02-23 22:57:28 +01:00
senke
c2d5073a6e feat(commerce): add GET /sell/transfers endpoint 2026-02-23 22:56:26 +01:00
senke
4a08a89dc5 feat(commerce): trigger seller transfers on payment succeeded 2026-02-23 22:56:01 +01:00
senke
51dd867bdf feat(commerce): wire TransferService in marketplace and webhook routes 2026-02-23 22:55:39 +01:00
senke
a0a36e9d3e feat(commerce): add TransferService interface and WithTransferService option 2026-02-23 22:55:18 +01:00
senke
e86c476d42 feat(commerce): add SellerTransfer model 2026-02-23 22:55:08 +01:00
senke
4b07957d1a feat(commerce): add 115_seller_transfers migration 2026-02-23 22:54:56 +01:00
senke
979658165c feat(commerce): add PLATFORM_FEE_RATE config (default 10%) 2026-02-23 22:54:50 +01:00
senke
dae4687ac3 docs(v0.603): scope, plan d'implémentation et smoke test
Define v0.603 release scope: automatic Stripe Connect transfers
after payment, configurable platform commission, technical debt
triage (210+ TODOs), and docs archival. Includes detailed
implementation plan (4 sprints, 19 commits) and smoke test checklist.
2026-02-23 22:48:04 +01:00
senke
b319b60396 chore(release): v0.602 — Payout, Dette Technique & Tests E2E
- Stripe Connect: onboarding, balance, SellerDashboardView
- Interceptors: auth.ts, error.ts extracted, facade
- Grafana: dashboards enriched (p50, top endpoints, 4xx, WS, commerce)
- E2E commerce: product->order->review->invoice
- SMOKE_TEST_V0602, RETROSPECTIVE_V0602, PAYOUT_MANUAL
- Archive V0_602 scope, V0_603 placeholder, SCOPE_CONTROL v0.603
- Fix sanitizer regex (Go no backreferences)
- Marketplace test schema: product_licenses, product_images, orders, licenses
2026-02-23 22:32:01 +01:00
senke
a5d2951ec5 feat(seller): add seller_stripe_accounts migration and model 2026-02-23 22:11:11 +01:00
senke
cb9b418286 feat(seller): add Stripe Connect config 2026-02-23 22:09:23 +01:00
senke
3e9bdb2076 refactor(api): extract error interceptor to interceptors/error.ts 2026-02-23 22:05:37 +01:00
senke
77067c20d6 refactor(api): extract auth interceptor to interceptors/auth.ts 2026-02-23 22:01:11 +01:00
senke
06e3de98b9 feat(commerce): Hyperswitch LIVE_MODE configuration
- config: HyperswitchLiveMode (HYPERSWITCH_LIVE_MODE)
- routes_marketplace: warn when production + LiveMode=false
- docker-compose.prod: HYPERSWITCH_LIVE_MODE env var
2026-02-23 19:56:52 +01:00
senke
109f451d19 feat(monitoring): add Alertmanager with Slack notifications
- config/alertmanager/alertmanager.yml: route, slack-default and null receivers
- config/prometheus.yml: alerting.alertmanagers -> alertmanager:9093
- docker-compose.prod.yml: alertmanager service (port 9093)
2026-02-23 19:54:55 +01:00
senke
686d53c78d feat(monitoring): add 3 Grafana dashboards (API, Chat, Commerce)
- api-overview.json: request rate, p95 latency, 5xx errors, DB pool
- chat-overview.json: WebSocket upgrade rate, chat API
- commerce-overview.json: marketplace/commerce/orders metrics
- system-overview.json: replaces veza-dashboard.json
2026-02-23 19:54:01 +01:00
senke
a6ae132179 feat(infra): blue-green deployment via HAProxy
- HAProxy: api/stream/web backends with blue+green servers (backup)
- docker-compose.prod: backend-api-blue/green, stream-server-blue/green, web-blue/green
- haproxy-blue.cfg, haproxy-green.cfg: config variants for active stack
- scripts/deploy-blue-green.sh: switch traffic via config copy + HUP reload
2026-02-23 19:52:19 +01:00
senke
9c098bf9c5 docs(v0.601): scope et plan d'implémentation
- V0_601_RELEASE_SCOPE.md: lots INF1, COM1, AUTH1, CLN1, QA1
- PLAN_V0_601_IMPLEMENTATION.md: 6 sprints, tâches détaillées, commits
- PROJECT_STATE.md: prochaine version v0.601
- FEATURE_STATUS.md: section Prévu en v0.601
- SCOPE_CONTROL.md: référence V0_601_RELEASE_SCOPE
2026-02-23 19:41:19 +01:00
senke
f929d415d6 fix(player): make PlayerBarGlass 100% responsive
- GlobalPlayer: responsive margins (left-2/right-2 on mobile, left-4/right-4 on sm+),
  bottom-4 on mobile, max-w-full min-w-0 to prevent overflow
- Inner flex: smaller gaps (gap-1.5 sm:gap-2 md:gap-3), reduced padding (px-2 sm:px-3 md:px-4),
  overflow-hidden to contain content
- PlayerBarTrackInfo: min-w-0 for shrink, smaller cover (w-9 on mobile, w-10 sm, w-11 md)
- PlayerBarRight: min-w-0, smaller gaps, hide PiP on <md, hide Like on <sm,
  hide volume divider on <sm, responsive volume slider width
- Hide PlaybackSpeedControl and time display on <sm to save space
2026-02-23 19:37:28 +01:00
senke
3824487a32 fix(auth): skip state invalidation on logout response
invalidateStateAfterMutation was triggered on POST /auth/logout 200,
causing invalidateQueries for ['user','me'] and refetch of getMe().
That refetch fails (500) since session is already invalidated.
Skip invalidation for /auth/logout - cleanup is handled in auth service.
2026-02-23 10:00:54 +01:00
senke
c498cc2f11 fix(auth): sign out - await logout and use full page redirect
- useSidebarNavigation: was not awaiting logout(), so navigate ran before
  store was updated; LoginPage then saw isAuthenticated=true and
  redirected back to dashboard
- Both Sidebar and Header: use window.location.href instead of
  navigate() for logout redirect to ensure clean state (clears any
  stale React/Query cache, forces fresh load)
2026-02-23 09:57:22 +01:00
senke
fe05567c85 fix(auth): restore login and logout flow
- Clear React Query user cache on logout (auth.ts + logoutLocal in authStore)
  to prevent stale user data in Header/useUser after disconnect
- Fix LoginPage redirect: user was removed from persist (Action 4.1.1.5),
  so parsed.state?.user was always undefined and redirect never triggered.
  Use isAuthenticated directly as source of truth.
- Close Header user menu on logout for cleaner UX
2026-02-23 09:54:05 +01:00
senke
5fa183ed36 fix(web): add missing LazyCloud export in lazy-component index
LazyComponent.tsx and routeConfig.tsx import LazyCloud from the
lazy-component module, but it was not re-exported in index.ts.
This caused: 'The requested module does not provide an export
named LazyCloud' at runtime.
2026-02-23 09:43:16 +01:00
senke
d08f00d8da docs(v0.503): finalization, documentation, changelog, tag
- Update FEATURE_STATUS.md: HLS Streaming -> Opérationnel (v0.503)
- Update PROJECT_STATE.md: v0.503 delivered, next version v0.601
- Add CHANGELOG.md v0.503 entry with all changes
- Create SMOKE_TEST_V0503.md validation checklist
- Create RETROSPECTIVE_V0503.md
- Archive V0_503_RELEASE_SCOPE.md to docs/archive/
- Create V0_601_RELEASE_SCOPE.md placeholder
- Update SCOPE_CONTROL.md references to v0.601
- Update .cursorrules scope to v0.601
2026-02-22 21:28:46 +01:00
senke
611bb3bf2a feat(player): integrate HLS streaming with ABR quality switching
- Connect useHLSPlayer hook to useAudioPlayerLifecycle for automatic
  HLS activation when feature flag and browser support are available
- Wire quality selector to HLS level switching via hlsPlayer.setQuality
- Expose isHLSActive and hlsLevels from lifecycle hook for UI components
- Create MSW handlers for HLS endpoints (info, status, master/quality
  playlists) for Storybook and testing
- Enable VITE_FEATURE_HLS_STREAMING in .env.storybook
2026-02-22 21:24:40 +01:00
senke
8f6a6b0b13 feat(streaming): wire HLS pipeline end-to-end with serving routes
- Add HLSEnabled and HLSStorageDir to backend config (HLS_STREAMING env)
- Register HLS serving routes (master.m3u8, quality playlist, segments)
  behind HLSEnabled feature flag on existing track routes
- Add GetHLSStatus and TriggerHLSTranscode methods to StreamService
  for stream server communication
- Update docker-compose (dev, staging, prod) with HLS env vars and
  shared hls-data volume between backend and stream-server
- Stream callback already correctly updates stream_manifest_url
2026-02-22 21:20:35 +01:00
senke
d3e3ba9b33 feat(chat): Redis rate limiter, persistent presence, PostgreSQL full-text search
- Rewrite chat rate limiter with Redis sliding window (sorted sets) and
  automatic in-memory fallback when Redis is unavailable
- Add ChatPresenceService with Redis-backed online/offline/heartbeat
  tracking (2min TTL), integrated into Hub register/unregister
- Add migration 113: tsvector column with GIN index and auto-update
  trigger on messages table for full-text search
- Update Search repository method to use ts_rank ordering instead of ILIKE
- Wire Redis client into chat WebSocket setup in router.go
- Add comprehensive tests: rate limiter, presence, 100-user concurrent benchmark
2026-02-22 21:17:51 +01:00
senke
05d02386dc chore(cleanup): remove veza-chat-server directory and all operational references
Chat functionality is now fully handled by the Go backend (since v0.502).
Remove the deprecated Rust chat server and all its references from:
- CI/CD workflows (ci.yml, cd.yml, rust-ci.yml, chat-ci.yml)
- Monitoring & proxy config (prometheus, caddy, haproxy)
- Incus deployment scripts and documentation
- Monorepo config (package.json, dependabot, GH templates)
2026-02-22 21:13:00 +01:00
senke
19841357f8 docs(v0.503): plan d'implémentation Stream Server E2E + Chat Hardening + Cleanup
- V0_503_RELEASE_SCOPE.md: scope complet (4 lots SS1/CH1/CL1/QA1)
- PLAN_V0_503_IMPLEMENTATION.md: plan détaillé 5 sprints, 39 tâches
- SCOPE_CONTROL.md: références mises à jour v0.502 → v0.503
- PROJECT_STATE.md: prochaine version v0.503, stack technique corrigée
- FEATURE_STATUS.md: chat Go opérationnel, HLS en intégration v0.503
- .cursorrules: scope autorisé v0.503 (SS1, CH1, CL1, QA1)
2026-02-22 21:01:46 +01:00