senke
|
f25956e9e2
|
feat(marketplace): add rich text description with sanitization
|
2026-02-22 14:14:27 +01:00 |
|
senke
|
f4fff1126f
|
feat(marketplace): add bpm, musical_key, category filters to ListProducts
|
2026-02-22 14:08:41 +01:00 |
|
senke
|
8ecd66786d
|
feat(marketplace): add product images management endpoint
|
2026-02-22 14:08:13 +01:00 |
|
senke
|
8e68ca3be0
|
feat(marketplace): add POST /products/:id/preview for audio preview upload
|
2026-02-22 14:07:30 +01:00 |
|
senke
|
7a68e3ced2
|
feat(marketplace): accept bpm, musical_key, category in CreateProduct and UpdateProduct
|
2026-02-22 14:06:20 +01:00 |
|
senke
|
ef0a928ab4
|
feat(marketplace): add ProductPreview, ProductImage models and Product enrichment fields
|
2026-02-22 14:05:37 +01:00 |
|
senke
|
0a00da931e
|
feat(marketplace): add migrations 095-097 for products enrichment, previews, images
|
2026-02-22 14:05:19 +01:00 |
|
senke
|
8f4f445dcb
|
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
|
51af2d073f
|
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
|
ed5e395900
|
feat(groups): S2 frontend - request join, invite, roles, my groups, MSW handlers
|
2026-02-21 05:51:29 +01:00 |
|
senke
|
2bc8c36b79
|
feat(groups): S2.1-S2.5 request join, invite, roles, feed groups, my groups
|
2026-02-21 05:48:59 +01:00 |
|
senke
|
6a8252a351
|
chore(migrations): add 069, 089, 090, 091 for v0.302
|
2026-02-21 05:47:14 +01:00 |
|
senke
|
d8be2c0164
|
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
|
7e106cc096
|
feat(social): feed pagination with cursor (S1.4)
|
2026-02-21 05:28:19 +01:00 |
|
senke
|
2fc102e46b
|
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
|
ade1a7d2a6
|
feat(presence): PresenceService and GET /users/:id/presence (P1.2)
|
2026-02-21 05:22:43 +01:00 |
|
senke
|
4a2ba9f404
|
feat(presence): migration 088 user_presence (P1.1)
|
2026-02-21 05:22:33 +01:00 |
|
senke
|
5c79b8fafe
|
feat(queue): add queue session API (create, get, delete, add/remove items)
|
2026-02-20 18:41:12 +01:00 |
|
senke
|
92d25164e9
|
feat(queue): add queue_sessions and shared_queue_items models
|
2026-02-20 18:39:33 +01:00 |
|
senke
|
d54945d84e
|
feat(search): add boolean operators AND, OR, NOT, exact phrase
|
2026-02-20 18:38:34 +01:00 |
|
senke
|
b209a8dc96
|
feat(search): add phonetic/fuzzy search via pg_trgm
|
2026-02-20 18:36:07 +01:00 |
|
senke
|
6b71c6b6b8
|
feat(search): add pg_trgm extension for fuzzy search
|
2026-02-20 18:34:50 +01:00 |
|
senke
|
544ffd140a
|
feat(social): cache trending hashtags in Redis
|
2026-02-20 18:33:17 +01:00 |
|
senke
|
3ad7d39128
|
feat(social): add GET /social/trending endpoint
|
2026-02-20 18:32:16 +01:00 |
|
senke
|
b5fe6e8fd1
|
feat(release): v0.202 — Lots G, H, F, C, D
- 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
|
b8693ca07f
|
feat(seller): connect products list to marketplace API (F2)
|
2026-02-20 17:02:54 +01:00 |
|
senke
|
ea29927d2a
|
feat(seller): add GET /sell/stats and connect dashboard (F1)
|
2026-02-20 17:02:13 +01:00 |
|
senke
|
b887110214
|
feat(analytics): add creator export CSV/JSON (H4)
|
2026-02-20 17:00:36 +01:00 |
|
senke
|
d9fee2684b
|
feat(analytics): add creator charts endpoint and UI (H2)
|
2026-02-20 16:59:25 +01:00 |
|
senke
|
9ca90e6096
|
feat(analytics): add creator stats endpoint and UI (H1)
|
2026-02-20 16:57:58 +01:00 |
|
senke
|
ef320888f6
|
feat(search): add autocomplete suggestions endpoint and UI (G3)
|
2026-02-20 16:54:17 +01:00 |
|
senke
|
7eb1e0d945
|
feat(search): add relevance sort option (G2)
|
2026-02-20 16:50:49 +01:00 |
|
senke
|
458e88472b
|
feat(search): add musical_key filter and wire tags filter (G1)
|
2026-02-20 16:50:30 +01:00 |
|
senke
|
002b8f2ec2
|
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
|
79f552212f
|
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
|
265f9fa86c
|
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
|
efd09e0c11
|
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
|
ef00e165e9
|
feat(profile): add profile banner (B1)
|
2026-02-20 14:56:25 +01:00 |
|
senke
|
99f60ebbaa
|
feat(auth): enrich sessions page with history and revoke (A4)
|
2026-02-20 14:52:20 +01:00 |
|
senke
|
6a1686aad8
|
feat(auth): add OAuth Spotify provider (A1)
|
2026-02-20 14:48:08 +01:00 |
|
senke
|
134b8979c0
|
chore(v0.102): consolidate remaining changes — docs, frontend, backend
- 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
|
bdea490c21
|
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 |
|
senke
|
331905c05a
|
feat(queue): add backend queue API with CRUD operations
|
2026-02-19 23:44:44 +01:00 |
|
senke
|
c73effcf88
|
chore(docs): add v0.101 diagnostic baseline
- Add V0_101_DIAGNOSTIC_BASELINE.md with initial diagnostic results
- Fix eslint: remove storybook plugin dep, add dist_verification to ignores
- Fix .storybook/preview.tsx: remove unused React, use object shorthand
|
2026-02-19 16:08:05 +01:00 |
|
senke
|
b9a929607b
|
fix(tests): parse RespondSuccess envelope in GetUploadStats test
|
2026-02-19 14:04:47 +01:00 |
|
senke
|
2d6b872051
|
fix(tests): correct UpdateProfile assertion in user_service_test
|
2026-02-19 14:03:28 +01:00 |
|
senke
|
6a499ae11b
|
fix(backend): resolve failing tests for v0.101
- config: isolate TestLoad/TestLoad_DefaultValues from env (APP_DOMAIN, DB_HOST, REDIS_URL)
- handlers: fix TestLogin_InvalidCredentials (401 not 403), TestLogout_Success, TestGetMe_Success (inject auth middleware), TestResendVerification_Success (unverify user)
|
2026-02-19 11:29:30 +01:00 |
|
senke
|
a4220bf110
|
chore(infra): add ClamAV to docker-compose for v0.101
|
2026-02-18 12:03:14 +01:00 |
|
senke
|
f56ca7bfd9
|
Merge branch 'production-ready-fixes-10504759203042880560' into main
|
2026-02-17 16:45:16 +01:00 |
|
senke
|
e11984898d
|
chore: consolidate CI, E2E, backend and frontend updates
- CI: workflows updates (cd, ci), remove playwright.yml
- E2E: global-setup, auth/playlists/profile specs
- Remove playwright-report and test-results artifacts from tracking
- Backend: auth, handlers, services, workers, migrations
- Frontend: components, features, vite config
- Add e2e-results.json to gitignore
- Docs: REMEDIATION_PROGRESS, audit archive
- Rust: chat-server, stream-server updates
|
2026-02-17 16:43:21 +01:00 |
|