Commit graph

1964 commits

Author SHA1 Message Date
senke
5e7e506fe3 test(commerce): add transfer tests — success, multi-seller, transfer-fails 2026-02-23 22:58:16 +01:00
senke
5835469ef2 test(seller): add MSW handler and story for transfers 2026-02-23 22:57:35 +01:00
senke
fdd750d772 feat(seller): add transfers history card to SellerDashboard 2026-02-23 22:57:28 +01:00
senke
b3c74428d8 feat(commerce): add GET /sell/transfers endpoint 2026-02-23 22:56:26 +01:00
senke
22ce89f3da feat(commerce): trigger seller transfers on payment succeeded 2026-02-23 22:56:01 +01:00
senke
6d1d861a52 feat(commerce): wire TransferService in marketplace and webhook routes 2026-02-23 22:55:39 +01:00
senke
31833c01f1 feat(commerce): add TransferService interface and WithTransferService option 2026-02-23 22:55:18 +01:00
senke
6a468e5ffb feat(commerce): add SellerTransfer model 2026-02-23 22:55:08 +01:00
senke
553bd87d85 feat(commerce): add 115_seller_transfers migration 2026-02-23 22:54:56 +01:00
senke
535e76adfe feat(commerce): add PLATFORM_FEE_RATE config (default 10%) 2026-02-23 22:54:50 +01:00
senke
c4110fded7 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
83ed4f315b chore(release): v0.602 — Payout, Dette Technique & Tests E2E
Some checks failed
Backend API CI / test-unit (push) Failing after 0s
Backend API CI / test-integration (push) Failing after 0s
Frontend CI / test (push) Failing after 0s
Storybook Audit / Build & audit Storybook (push) Failing after 0s
- 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
941f6e6f3e feat(seller): add seller_stripe_accounts migration and model 2026-02-23 22:11:11 +01:00
senke
ae81e171c7 feat(seller): add Stripe Connect config 2026-02-23 22:09:23 +01:00
senke
914139a7b1 refactor(api): extract error interceptor to interceptors/error.ts 2026-02-23 22:05:37 +01:00
senke
45e8522200 refactor(api): extract auth interceptor to interceptors/auth.ts 2026-02-23 22:01:11 +01:00
senke
cc9fbf4f24 feat(commerce): Hyperswitch LIVE_MODE configuration
Some checks failed
Backend API CI / test-unit (push) Failing after 0s
Backend API CI / test-integration (push) Failing after 0s
- 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
30bc31f3a6 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
c002e74031 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
0ff8a85684 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
cdc4bd82e6 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
7243f96314 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
706837be97 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
d6840eda76 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
fa7fc7031e 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
4b1509d8f0 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
aee1ec18e2 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
e64968e761 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
218b4b33d6 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
1ed7fe2ebb 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
279a10d317 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
0376bdcd16 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
senke
40883aebea docs(v0.502): Sprint 6 -- finalization, docs, and tag
- Update PROJECT_STATE.md: v0.502 delivered, next version v0.503
- Update CHANGELOG.md: comprehensive v0.502 entry (Added/Changed/Removed/Infrastructure)
- Create SMOKE_TEST_V0502.md: validation checklist for chat rewrite
- Create RETROSPECTIVE_V0502.md: retrospective with metrics and action items
- Archive V0_502_RELEASE_SCOPE.md to docs/archive/
- Create V0_503_RELEASE_SCOPE.md placeholder
- Update SCOPE_CONTROL.md and .cursorrules to reference v0.503
2026-02-22 20:51:55 +01:00
senke
02605b0405 test(chat): Sprint 5 -- unit tests, E2E tests, feature parity validation
- Add hub_test.go: register/unregister, join/leave room, broadcast, exclude sender,
  send to user, multiple clients same user (6 tests)
- Add handler_messages_test.go: send message, missing fields, edit ownership check,
  soft delete (4 tests)
- Add handler_realtime_test.go: typing broadcast, read receipts, reactions add/remove,
  delivered status (5 tests)
- Add e2e_chat_ws_test.go: auth valid, missing token, invalid token, ping/pong
- Add e2e_chat_messages_test.go: 2-client message flow, typing indicator
- Create CHAT_FEATURE_PARITY.md: 25-feature checklist (all OK or IMPROVED)
2026-02-22 20:49:32 +01:00
senke
1fb80d6c2f feat(chat): Sprint 4 -- Docker cleanup, frontend migration to Go WS
- Remove Rust chat-server from docker-compose.yml, staging.yml, prod.yml
- Remove VITE_WS_URL from docker frontend env vars (auto-derived from API_URL)
- Update env.ts: derive WS_URL from API_URL (/api/v1/ws) when not explicitly set
- Remove 127.0.0.1:8081 dev hack from useChat.ts
- Add missing types: EditMessage, DeleteMessage, FetchHistory, SearchMessages,
  SyncMessages, MessageEdited, MessageDeleted, SearchResults, SyncChunk
- Update MSW chat/token handler to return ws_url: /api/v1/ws
- Update .env.example and .env.storybook
2026-02-22 20:46:58 +01:00
senke
c7fb240dc3 feat(chat): Sprint 3 -- message handlers, real-time features, permissions
- Implement full MessageHandler dispatch with all 18 incoming message types
- Add handler_messages.go: SendMessage, EditMessage, DeleteMessage with ownership checks
- Add handler_rooms.go: JoinConversation, LeaveConversation
- Add handler_history.go: FetchHistory (cursor-based), SearchMessages (ILIKE), SyncMessages
- Add handler_realtime.go: Typing, MarkAsRead, Delivered, AddReaction, RemoveReaction
- Add handler_calls.go: WebRTC signaling relay (CallOffer/Answer/ICE/Hangup/Reject)
- Add PermissionService: CanRead/CanSend/CanJoin/CanModerate based on room_members
- Add RateLimiter: per-user per-action sliding window (in-memory)
- Wire all dependencies in router.go setupChatWebSocket
2026-02-22 20:43:44 +01:00
senke
e8d97741e4 feat(chat): Sprint 2 -- WebSocket hub, client, message types, route
- Create Hub with register/unregister/broadcast, room/user index
- Create Client with readPump/writePump goroutines, 30s ping keepalive
- Define all 18 incoming + 18 outgoing message types matching Rust protocol
- Add ValidateChatToken to ChatService for JWT validation
- Update WSUrl from /ws to /api/v1/ws
- Register GET /api/v1/ws endpoint in router
- Create ChatWebSocketHandler for WebSocket upgrade and auth
2026-02-22 20:41:39 +01:00
senke
4d4d07836c feat(chat): Sprint 1 -- migrations, models, repositories for chat rewrite
- Add migrations 109-112: read_receipts, delivered_status, message_reactions, messages extra columns
- Create ReadReceipt, DeliveredStatus, MessageReaction GORM models
- Update Message model with EditedAt, Status, IsPinned, Metadata fields
- Enrich ChatMessageRepository with cursor pagination, search, soft delete
- Create ReadReceiptRepository, DeliveredStatusRepository, ReactionRepository
- Create ChatPubSubService with Redis PubSub and in-memory fallback
2026-02-22 20:38:20 +01:00
senke
431ad133e2 docs(v0.502): plan d'implémentation Chat Server Rewrite (Rust → Go)
- Create ADR-002-chat-server.md: decision to rewrite Rust chat in Go
- Rewrite V0_502_RELEASE_SCOPE.md with 4 detailed lots (34 tasks)
- Create PLAN_V0_502_IMPLEMENTATION.md with 6 sprints and commit instructions
- Update .cursorrules scope reference for v0.502
2026-02-22 20:26:18 +01:00
senke
c416f51f25 docs(v0.501): Sprint 6 -- finalization and tag
- FIN-01: Add smoke test results (22/22 features pass)
- FIN-02: Update PROJECT_STATE.md for v0.501
- FIN-03: Update CHANGELOG.md with v0.501 entries
- FIN-04: Archive V0_501 scope, create V0_502 placeholder
- FIN-05: Add v0.501 retrospective
- FIN-06: Validate Go build passes
2026-02-22 18:45:07 +01:00
senke
43309327e6 feat(v0.501): Sprint 5 -- integration, tests, and cleanup
- INT-01: Add E2E streaming tests (upload -> HLS auth)
- INT-02: Add E2E cloud tests (CRUD auth, public gear)
- INT-03: Split track/handler.go into 4 focused sub-handlers
- INT-04: Create migration squash script + MIGRATIONS.md
- INT-05: Add Trivy container image scanning CI workflow
- INT-06: Replace production console.log with structured logger
2026-02-22 18:40:07 +01:00
senke
edde637c8e feat(v0.501): Sprint 4 -- Cloud frontend + Gear advanced
- C1-09: Create CloudPage with folder tree, file list, and /cloud route
- C1-10: Create CloudUploadModal with drag-and-drop and progress
- C1-11: Create CloudFilePreview mini player inline
- C1-12: Add Cloud stories (loading, empty, populated, quota full)
- G1-01: Add is_public toggle, public gear endpoint, GearShowcase
- G1-02: Add gear image upload endpoints, GearImageGallery component
- G1-03: Add gear search with ILIKE + SearchBar in toolbar
- G1-04: Add stories for GearShowcase and GearImageGallery
2026-02-22 18:30:49 +01:00
senke
ec4564fb37 feat(v0.501): Sprint 3 -- Cloud Storage MVP backend
- C1-01: Create CloudService with CRUD folders/files, quota, ownership
- C1-02: Create CloudHandler with 11 REST endpoints
- C1-03: Register cloud routes in Go router
- C1-04: Implement file streaming with HTTP Range support
- C1-05: Add publish cloud file as track endpoint
- C1-06: Add MSW mock handlers for cloud API
- C1-07: Auto-init 5GB storage quota on user registration
- C1-08: Add 12 unit tests for CloudService
2026-02-22 18:23:58 +01:00
senke
73533bea77 feat(v0.501): Sprint 2 -- HLS production-ready
- S1-01: Add multi-bitrate streaming profiles (128k, 256k, 320k)
- S1-02: Update master.m3u8 endpoint with 3-tier quality system
- S1-03: Integrate hls.js with ABR + useHLSPlayer hook
- S1-04: Add Cache-Control headers on HLS segments and manifests
- S1-05: Create WaveformService with async generation (FFmpeg + audiowaveform)
- S1-06: Add GET /tracks/:id/waveform endpoint with Redis cache
- S1-07: Create WaveformDisplay component with story
- S1-08: Add 4 Prometheus metrics for streaming monitoring
2026-02-22 18:16:37 +01:00
senke
89cc015e54 feat(v0.501): Sprint 1 -- infrastructure foundations
- Add MinIO S3-compatible storage to docker-compose (dev, staging, prod)
- Create migrations 103-108 (waveform_url, user_folders, user_files,
  user_storage_quotas, gear_items.is_public, gear_images)
- Add Go models: UserFile, UserFolder, StorageQuota, GearImage
- Add WaveformURL to Track model, IsPublic + GearImages to GearItem model
2026-02-22 18:10:25 +01:00
senke
03d9517f2c docs: add v0.404 CHANGELOG and retrospective
FIN-05 + FIN-06: Complete CHANGELOG for v0.404 with all security,
infrastructure, code quality, documentation, testing, and integration
changes. Retrospective includes pre/post scores (4.2 -> 6.6/10).
2026-02-22 17:57:49 +01:00
senke
5cb85773ab docs: archive V0_404_RELEASE_SCOPE.md (completed)
FIN-04: Moved scope document to docs/archive/ with completion header.
2026-02-22 17:56:59 +01:00
senke
59d92366c9 docs: update SCOPE_CONTROL.md and cursorrules to reference v0.501
FIN-03: Active scope now points to V0_501_RELEASE_SCOPE.md.
Updated .cursorrules scope from v0.402 to v0.501.
2026-02-22 17:56:55 +01:00
senke
f944abd336 docs: update PROJECT_STATE.md to reflect v0.404 stabilization
FIN-02: Updated version to v0.404, added security score improvements
(5->7/10), infrastructure readiness, code quality metrics, and
updated next version target to v0.501.
2026-02-22 17:56:51 +01:00
senke
f25cc115b2 test(rust): add 51 unit tests across chat and stream servers
Some checks failed
Chat Server CI / test (push) Failing after 0s
Stream Server CI / test (push) Failing after 0s
INT-05: 26 tests in chat-server (config, error, permissions, rate
limiter, logging, utils) and 25 tests in stream-server (config,
error, auth, HLS, signature, utils). All test pure logic.
2026-02-22 17:55:27 +01:00