feat(cms): replace track audio in edit form, gate last-track delete
Swap a track's audio by EntryKey (metadata/release/position preserved, waveform regenerated); hide per-track remove on a release's sole persisted track so it can only be replaced or release-deleted.
This commit is contained in:
@@ -51,6 +51,24 @@ public interface ICmsTrackService
|
||||
/// </summary>
|
||||
Task<Result> DeleteTrackAsync(long id, CancellationToken ct = default);
|
||||
|
||||
/// <summary>
|
||||
/// Replace an existing track's audio via <c>POST api/track/{id}/replace-audio</c>. Swaps only the
|
||||
/// vault bytes and regenerates the track's waveform data server-side; the track id, vault key,
|
||||
/// release membership, position, and metadata are preserved. Uses the dedicated upload client and
|
||||
/// the same two-phase (idle / response-wait) cancellation as <see cref="UploadTrackAsync"/>, since
|
||||
/// a WAV replace is a large-body upload. <paramref name="contentLength"/> sets Content-Length and is
|
||||
/// the denominator for <paramref name="progress"/>; each progress tick resets the idle heartbeat.
|
||||
/// Maps a 404 to a "Track not found." failure.
|
||||
/// </summary>
|
||||
Task<Result> ReplaceTrackAudioAsync(
|
||||
long id,
|
||||
Stream wavStream,
|
||||
long contentLength,
|
||||
string fileName,
|
||||
string contentType,
|
||||
IProgress<long>? progress = null,
|
||||
CancellationToken ct = default);
|
||||
|
||||
/// <summary>
|
||||
/// Soft-delete a release record via DELETE api/track/release/{id}. Use when a release
|
||||
/// has no live tracks and needs to be removed from the albums browser.
|
||||
|
||||
Reference in New Issue
Block a user