senke
|
bab3f38c4a
|
feat(marketplace): add license revoked_at migration
|
2026-02-22 16:18:01 +01:00 |
|
senke
|
51373b653f
|
feat(hyperswitch): add CreateRefund to client
|
2026-02-22 16:17:54 +01:00 |
|
senke
|
166acc6069
|
chore(backend): add PDF library for invoices
feat(marketplace): add invoice generation service and download endpoint
|
2026-02-22 16:11:42 +01:00 |
|
senke
|
c6611c3d8f
|
feat(marketplace): add avg_rating and review_count to Product
|
2026-02-22 16:07:06 +01:00 |
|
senke
|
85daf595a8
|
feat(marketplace): add create and list reviews endpoints
|
2026-02-22 16:06:18 +01:00 |
|
senke
|
d6d49dbfc3
|
feat(marketplace): add ProductReview model and service
|
2026-02-22 16:05:16 +01:00 |
|
senke
|
5ac4c3988a
|
fix(checkout): handle cancelled status in Hyperswitch webhook
|
2026-02-22 14:42:57 +01:00 |
|
senke
|
5233a5b7f2
|
feat(checkout): add order_id to Hyperswitch return URL
|
2026-02-22 14:40:13 +01:00 |
|
senke
|
0adc212719
|
feat(seller): add GET /sell/stats/evolution, top-products, sales, SalesEvolutionChart, real commerceService
|
2026-02-22 14:21:21 +01:00 |
|
senke
|
1fef428ce0
|
feat(marketplace): add migration 098 product_licenses, ProductLicense model, GET /licenses/mine
|
2026-02-22 14:16:24 +01:00 |
|
senke
|
31a27e4724
|
feat(marketplace): add playable preview and image gallery to ProductDetailView
|
2026-02-22 14:14:38 +01:00 |
|
senke
|
a8549add70
|
feat(marketplace): add rich text description with sanitization
|
2026-02-22 14:14:27 +01:00 |
|
senke
|
d292270d4e
|
feat(marketplace): add bpm, musical_key, category filters to ListProducts
|
2026-02-22 14:08:41 +01:00 |
|
senke
|
aec22b596c
|
feat(marketplace): add product images management endpoint
|
2026-02-22 14:08:13 +01:00 |
|
senke
|
c6f094a3d5
|
feat(marketplace): add POST /products/:id/preview for audio preview upload
|
2026-02-22 14:07:30 +01:00 |
|
senke
|
f6c02afbf8
|
feat(marketplace): accept bpm, musical_key, category in CreateProduct and UpdateProduct
|
2026-02-22 14:06:20 +01:00 |
|
senke
|
8de3dcdc27
|
feat(marketplace): add ProductPreview, ProductImage models and Product enrichment fields
|
2026-02-22 14:05:37 +01:00 |
|
senke
|
49bb633fc6
|
feat(presence): P2.1 rich presence, P2.2 invisible mode
Backend:
- UserPresence: track_id, track_title, invisible
- UpdatePresenceFull, GetPresenceForViewer (invisible hides for others)
- PUT /users/me/presence
- Migration 094 rich presence columns
Frontend:
- presenceService.updatePresence
- usePresenceSync: sync currentTrack to presence
- PresenceBadge: statusMessage tooltip
- PresenceInvisibleToggle in PrivacySettings
- MSW: PUT /users/me/presence
|
2026-02-21 16:47:09 +01:00 |
|
senke
|
49e3122e78
|
feat(notifications): N1.1-N1.3 Web Push subscription, send on events, preferences
- N1.1: POST /notifications/push/subscribe, PushService, migration 090
- N1.2: Send Web Push on follow/like/comment/message via CreateNotification
- N1.3: GET/PUT /notifications/preferences, migration 093
- Shared NotificationService with PushService for profile, track, comment handlers
- Fix MockSocialService GetGlobalFeed, GetTrendingHashtags for tests
|
2026-02-21 16:41:39 +01:00 |
|
senke
|
d2a55b405e
|
feat(groups): S2 frontend - request join, invite, roles, my groups, MSW handlers
|
2026-02-21 05:51:29 +01:00 |
|
senke
|
7ca8d14283
|
feat(groups): S2.1-S2.5 request join, invite, roles, feed groups, my groups
|
2026-02-21 05:48:59 +01:00 |
|
senke
|
28e6642fa6
|
feat(social): GET /social/explore, explore tab, feed filters all/following/groups (S1.5, S1.6)
|
2026-02-21 05:31:12 +01:00 |
|
senke
|
b572863847
|
feat(social): feed pagination with cursor (S1.4)
|
2026-02-21 05:28:19 +01:00 |
|
senke
|
79feb220f4
|
feat(social): connect feed to social API, enrich with actor/track, FeedItem supports posts (S1.1-S1.3)
|
2026-02-21 05:26:52 +01:00 |
|
senke
|
182b28011f
|
feat(presence): PresenceService and GET /users/:id/presence (P1.2)
|
2026-02-21 05:22:43 +01:00 |
|
senke
|
4d37311b79
|
feat(presence): migration 088 user_presence (P1.1)
|
2026-02-21 05:22:33 +01:00 |
|
senke
|
ba24507b1f
|
feat(queue): add queue session API (create, get, delete, add/remove items)
|
2026-02-20 18:41:12 +01:00 |
|
senke
|
8884efdb75
|
feat(queue): add queue_sessions and shared_queue_items models
|
2026-02-20 18:39:33 +01:00 |
|
senke
|
802a54245e
|
feat(search): add boolean operators AND, OR, NOT, exact phrase
|
2026-02-20 18:38:34 +01:00 |
|
senke
|
d4f1d08518
|
feat(search): add phonetic/fuzzy search via pg_trgm
|
2026-02-20 18:36:07 +01:00 |
|
senke
|
7e171f1c1e
|
feat(social): cache trending hashtags in Redis
|
2026-02-20 18:33:17 +01:00 |
|
senke
|
ae50f6956a
|
feat(social): add GET /social/trending endpoint
|
2026-02-20 18:32:16 +01:00 |
|
senke
|
ede3546f4b
|
feat(release): v0.202 — Lots G, H, F, C, D
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
- Lot G: Recherche avancée (musical_key, tri pertinence, autocomplete, facettes, historique)
- Lot H: Analytics créateur (stats, charts, completion rate, export CSV/JSON)
- Lot F: Seller dashboard (GET /sell/stats, liste produits)
- Lot C: Player (crossfade, gapless preload, PiP)
- Lot D2: Autoplay (GET /tracks/recommendations, section À écouter ensuite)
Backend: GetRecommendations handler, route /tracks/recommendations
Frontend: PlayerQueue recommendations, fix TS errors (GlobalPlayer, AnalyticsViewKpiGrid, etc.)
Docs: FEATURE_STATUS, PROJECT_STATE, CHANGELOG, SCOPE_CONTROL
|
2026-02-20 18:16:17 +01:00 |
|
senke
|
590cede6c2
|
feat(seller): connect products list to marketplace API (F2)
|
2026-02-20 17:02:54 +01:00 |
|
senke
|
7caf082078
|
feat(seller): add GET /sell/stats and connect dashboard (F1)
|
2026-02-20 17:02:13 +01:00 |
|
senke
|
363b092f3e
|
feat(analytics): add creator export CSV/JSON (H4)
|
2026-02-20 17:00:36 +01:00 |
|
senke
|
d81695c27c
|
feat(analytics): add creator charts endpoint and UI (H2)
|
2026-02-20 16:59:25 +01:00 |
|
senke
|
ecbc2389d8
|
feat(analytics): add creator stats endpoint and UI (H1)
|
2026-02-20 16:57:58 +01:00 |
|
senke
|
aeb941d41a
|
feat(search): add autocomplete suggestions endpoint and UI (G3)
|
2026-02-20 16:54:17 +01:00 |
|
senke
|
124f0006f1
|
feat(search): add relevance sort option (G2)
|
2026-02-20 16:50:49 +01:00 |
|
senke
|
b042da9575
|
feat(search): add musical_key filter and wire tags filter (G1)
|
2026-02-20 16:50:30 +01:00 |
|
senke
|
1977183718
|
feat(tracks): add suggested tags endpoint and UI (E4)
- Migration 085: tracks.tags TEXT[]
- Track model: Tags pq.StringArray
- GET /tracks/suggested-tags?genre=X&bpm=Y (static suggestions by genre)
- UpdateTrack: support tags
- TrackMetadataEditModal: tags chips + suggestions dropdown
- TrackDetailPageInfo: display tags
- getSuggestedTags, UpdateTrackParams.tags
- MSW: suggested-tags handler, tags in mock track
|
2026-02-20 15:38:51 +01:00 |
|
senke
|
6b80089706
|
feat(tracks): add lyrics model and endpoints (E3)
- Migration 084: track_lyrics table
- TrackLyrics model, GetLyrics, CreateOrUpdateLyrics in TrackService
- GET /tracks/:id/lyrics, PUT /tracks/:id/lyrics (owner only)
- Frontend: TrackLyricsSection with show/hide toggle, Lyrics tab
- trackService: getLyrics, updateLyrics
- MSW: handlers for lyrics
|
2026-02-20 15:36:28 +01:00 |
|
senke
|
1620819afd
|
feat(tracks): add BPM field to model and CRUD (E1)
- Backend: BPM and MusicalKey in Track model, UpdateTrack handler
- track_search_service: enable BPM filter (min_bpm, max_bpm)
- Frontend: Track type, UpdateTrackParams, display in TrackDetailPageInfo
- TrackMetadataEditModal: BPM input, edit flow for track creator
- MSW: bpm, musical_key in mock track, correct response envelope
|
2026-02-20 15:34:00 +01:00 |
|
senke
|
b33c9d3cca
|
feat(profile): add profile privacy toggle (B3)
- Backend: is_public in Profile, UpdateProfile; strip SocialLinks for private
- Settings: ProfileVisibilityCard toggle in Privacy tab
- UserProfilePage: show 'Profil privé' when viewing private profile
|
2026-02-20 15:10:02 +01:00 |
|
senke
|
9be0e6e14f
|
feat(profile): add profile banner (B1)
|
2026-02-20 14:56:25 +01:00 |
|
senke
|
d626e9c533
|
feat(auth): enrich sessions page with history and revoke (A4)
|
2026-02-20 14:52:20 +01:00 |
|
senke
|
6bac68b679
|
feat(auth): add OAuth Spotify provider (A1)
|
2026-02-20 14:48:08 +01:00 |
|
senke
|
286be8ba1d
|
chore(v0.102): consolidate remaining changes — docs, frontend, backend
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
- docs: SCOPE_CONTROL, CONTRIBUTING, README, .github templates
- frontend: DeveloperDashboardView, Player components, MSW handlers, auth, reactQuerySync
- backend: playback_analytics, playlist_service, testutils, integration README
Excluded (artifacts): .auth, playwright-report, test-results, storybook_audit_detailed.json
|
2026-02-20 13:02:12 +01:00 |
|
senke
|
32348bebce
|
feat(developer): add API keys backend (Lot C)
- Migration 082: api_keys table (user_id, name, prefix, hashed_key, scopes, last_used_at, expires_at)
- APIKey model, APIKeyService (Create, List, Delete, ValidateAPIKey)
- APIKeyHandler: GET/POST/DELETE /api/v1/developer/api-keys
- AuthMiddleware: X-API-Key and Bearer vza_* accepted as alternative to JWT
- CSRF: skip for API key auth (stateless)
- Key format: vza_ prefix, SHA-256 hashed storage
|
2026-02-20 00:18:36 +01:00 |
|