diff --git a/DeepDrftCms/Pages/Tracks/TrackNew.razor b/DeepDrftCms/Pages/Tracks/TrackNew.razor index 1f5c864..11f38a4 100644 --- a/DeepDrftCms/Pages/Tracks/TrackNew.razor +++ b/DeepDrftCms/Pages/Tracks/TrackNew.razor @@ -155,8 +155,8 @@ } catch (Exception ex) { - Logger.LogError(ex, "CMS upload failed"); - _errorMessage = $"Upload failed: {ex.Message}"; + Logger.LogError(ex, "Upload failed in TrackNew"); + _errorMessage = "Upload failed. Please try again."; } finally { diff --git a/DeepDrftContent/Controllers/TrackController.cs b/DeepDrftContent/Controllers/TrackController.cs index 767af0e..2bb7d59 100644 --- a/DeepDrftContent/Controllers/TrackController.cs +++ b/DeepDrftContent/Controllers/TrackController.cs @@ -138,7 +138,8 @@ public class TrackController : ControllerBase [FromForm] string? artist, [FromForm] string? album, [FromForm] string? genre, - [FromForm] string? releaseDate) + [FromForm] string? releaseDate, + CancellationToken cancellationToken) { _logger.LogInformation("UploadTrack called: trackName={TrackName}, artist={Artist}, size={Size}", trackName, artist, wav?.Length); @@ -184,7 +185,7 @@ public class TrackController : ControllerBase bufferSize: 81920, useAsync: true)) await using (var uploadStream = wav.OpenReadStream()) { - await uploadStream.CopyToAsync(tempStream); + await uploadStream.CopyToAsync(tempStream, cancellationToken); } var entity = await _trackService.AddTrackFromWavAsync( diff --git a/DeepDrftWeb/Controllers/CmsUploadController.cs b/DeepDrftWeb/Controllers/CmsUploadController.cs index 20fb571..2bc617f 100644 --- a/DeepDrftWeb/Controllers/CmsUploadController.cs +++ b/DeepDrftWeb/Controllers/CmsUploadController.cs @@ -67,10 +67,10 @@ public class CmsUploadController : ControllerBase return BadRequest("artist is required"); } - var apiKey = _configuration["ContentApi:ApiKey"]; + var apiKey = _configuration["DeepDrftContent:ApiKey"]; if (string.IsNullOrWhiteSpace(apiKey)) { - _logger.LogError("ContentApi:ApiKey is not configured"); + _logger.LogError("DeepDrftContent:ApiKey is not configured"); return StatusCode(500, "Content API key is not configured"); } @@ -118,8 +118,16 @@ public class CmsUploadController : ControllerBase if (!response.IsSuccessStatusCode) { var body = await response.Content.ReadAsStringAsync(cancellationToken); - _logger.LogWarning("Content API rejected upload: {Status} {Body}", (int)response.StatusCode, body); - return StatusCode((int)response.StatusCode, body); + var statusCode = (int)response.StatusCode; + if (statusCode >= 500) + { + _logger.LogError("Content API returned {Status} for upload of {TrackName}: {Body}", statusCode, trackName, body); + return StatusCode(statusCode, "Upload failed on the content server. Please try again."); + } + + // 4xx: body is user-friendly validation text from DeepDrftContent — relay as-is. + _logger.LogWarning("Content API rejected upload: {Status} {Body}", statusCode, body); + return StatusCode(statusCode, body); } TrackEntity? unpersisted; diff --git a/DeepDrftWeb/appsettings.json b/DeepDrftWeb/appsettings.json index 113f28f..6b30219 100644 --- a/DeepDrftWeb/appsettings.json +++ b/DeepDrftWeb/appsettings.json @@ -12,7 +12,7 @@ "ApiUrls": { "ContentApi": "http://localhost:12777/" }, - "ContentApi": { + "DeepDrftContent": { "ApiKey": "REPLACE_IN_ENV" }, "ForwardedHeaders": {