Commit Graph

19 Commits

Author SHA1 Message Date
daniel-c-harvey 898fcfaa04 feat(cms): retire legacy single-track forms; route single-track edit into BatchEdit (8.M) 2026-06-14 11:53:06 -04:00
daniel-c-harvey 8b62915083 Make release Medium writable via upload + meta-edit; resolve detail-page track by releaseId not album title 2026-06-13 11:34:45 -04:00
daniel-c-harvey 2f47efeb46 CMS Phase 9 Wave 3: Release Archive tab, medium selector, Session/Mix browsers
Renames Genre tab to Release Archive with switch-free medium card group
(Enum.GetValues-driven). Adds MediumFields single dispatch + CutFields/SessionFields/
MixFields per-medium sections embedded by all five upload/edit forms. BatchUpload
enforces single-track invariant for Session/Mix. Adds CmsSessionBrowser (hero-image
upload) and CmsMixBrowser (waveform status + per-row Generate trigger).
ICmsReleaseService/CmsReleaseService wraps api/release endpoints.
Note: medium selector is forward-compat only — API write path pending.
2026-06-12 23:07:15 -04:00
daniel-c-harvey 0448711082 fix: CMS image proxy + partial unique index for soft-deleted releases 2026-06-12 06:27:34 -04:00
daniel-c-harvey f02974b3c2 fix: refresh stale browse cache on track edits and allow deleting empty releases
- Add CmsTrackBrowserViewModel.Invalidate(); called from TrackEdit/BatchEdit on save or delete so album/genre cache is invalidated and re-fetches on next mode switch
- CmsAlbumBrowser now handles 0-track releases: confirm dialog + DeleteReleaseAsync instead of early return; partial-failure path also fires OnReleasesChanged to trigger cache invalidation
- TrackList.OnAlbumsChanged now calls VM.Invalidate() so genres stay fresh after any album delete
- UnifiedTrackService.DeleteAsync cascades release soft-delete when last live track is removed (non-fatal; logs on failure)
- New DELETE api/track/release/{id} endpoint (ApiKeyAuthorize) for direct release soft-delete
- EF migration SoftDeleteOrphanedReleases backfills existing orphaned release rows via raw SQL (data-only, no schema change)
2026-06-11 17:56:18 -04:00
daniel-c-harvey f767d288c5 feat: normalize release-cardinal fields out of track into a Release entity (Phase 8 §8.0) 2026-06-11 12:51:21 -04:00
daniel-c-harvey d47a5e00af feat(tracks): add ReleaseType and TrackNumber to track metadata model and CMS edit form 2026-06-10 21:36:00 -04:00
daniel-c-harvey c4dc382bd7 fix: client-side image type guard and deselect affordance on TrackEdit 2026-06-07 16:41:02 -04:00
daniel-c-harvey 5703ac2752 feat: CMS cover-art upload on track edit page 2026-06-07 16:33:53 -04:00
Daniel Harvey 4351302a25 Flip ITrackService/TrackManager to DTO output; TrackConverter is the sole entity<->DTO path across all consumers 2026-05-25 11:35:04 -04:00
Daniel Harvey 98b2c8d744 Manager Cleanup 2026-05-25 10:17:21 -04:00
Daniel Harvey d9e4052e39 fix: review remediation — _busy finally block, TrackNotFoundMessage const, null-safe error log 2026-05-25 09:11:15 -04:00
Daniel Harvey f404602536 refactor: make DeepDrftContent sole authority over track SQL + vault; Manager goes HTTP-only 2026-05-25 08:46:09 -04:00
Daniel Harvey 72c33d9940 CMS -> API refactor part 1 2026-05-25 04:04:59 -04:00
Daniel Harvey 7f99479cae fix(manager): review remediation — DeleteTrackAsync dead code, TrackEdit Id long, dead @using 2026-05-24 21:14:26 -04:00
Daniel Harvey 428359b241 refactor(manager): replace internal CMS HTTP layer with direct CmsTrackService calls 2026-05-24 20:46:22 -04:00
Daniel Harvey e73b3c3218 chore(manager): upgrade AuthBlocks to 10.3.33; migrate ITokenService → IAuthSession, SystemRoleConstants, hoist usings to _Imports 2026-05-22 23:33:25 -04:00
Daniel Harvey 710705415a move DeleteTrackDialog to Shared/, drop redundant usings 2026-05-21 20:44:32 -04:00
Daniel Harvey ce1cbccad5 inline DeepDrftCms RCL into DeepDrftManager and delete the project 2026-05-21 20:36:00 -04:00