feat(tracks): add ReleaseType and TrackNumber to track metadata model and CMS edit form
This commit is contained in:
@@ -7,6 +7,7 @@ using DeepDrftContent.FileDatabase.Models;
|
||||
using DeepDrftContent.Processors;
|
||||
using DeepDrftData;
|
||||
using DeepDrftModels.DTOs;
|
||||
using DeepDrftModels.Enums;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
|
||||
namespace DeepDrftAPI.Controllers;
|
||||
@@ -187,6 +188,8 @@ public class TrackController : ControllerBase
|
||||
[FromForm] string? releaseDate,
|
||||
[FromForm] string? originalFileName,
|
||||
[FromForm] long createdByUserId,
|
||||
[FromForm] string? releaseType,
|
||||
[FromForm] int? trackNumber,
|
||||
CancellationToken cancellationToken)
|
||||
{
|
||||
_logger.LogInformation("UploadTrack called: trackName={TrackName}, artist={Artist}, fileName={FileName}, size={Size}",
|
||||
@@ -222,6 +225,22 @@ public class TrackController : ControllerBase
|
||||
parsedReleaseDate = parsed;
|
||||
}
|
||||
|
||||
// Default to Single for null/unparseable release type; default track number to a valid 1-based value.
|
||||
ReleaseType parsedReleaseType;
|
||||
if (!string.IsNullOrWhiteSpace(releaseType)
|
||||
&& Enum.TryParse<ReleaseType>(releaseType, ignoreCase: true, out var rt)
|
||||
&& Enum.IsDefined(rt))
|
||||
{
|
||||
parsedReleaseType = rt;
|
||||
}
|
||||
else
|
||||
{
|
||||
parsedReleaseType = ReleaseType.Single;
|
||||
if (!string.IsNullOrWhiteSpace(releaseType))
|
||||
_logger.LogWarning("UploadTrack: unrecognised releaseType value '{Value}', defaulting to Single", releaseType);
|
||||
}
|
||||
var resolvedTrackNumber = trackNumber is > 0 ? trackNumber.Value : 1;
|
||||
|
||||
// AudioProcessor.ProcessWavFileAsync requires a path ending in .wav and reads from disk.
|
||||
// Path.GetTempFileName() yields .tmp, which fails that check — generate our own .wav path.
|
||||
var tempPath = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString("N") + ".wav");
|
||||
@@ -245,6 +264,8 @@ public class TrackController : ControllerBase
|
||||
parsedReleaseDate,
|
||||
createdByUserId,
|
||||
string.IsNullOrWhiteSpace(originalFileName) ? null : originalFileName,
|
||||
parsedReleaseType,
|
||||
resolvedTrackNumber,
|
||||
cancellationToken);
|
||||
|
||||
if (!result.Success || result.Value is null)
|
||||
@@ -339,6 +360,9 @@ public class TrackController : ControllerBase
|
||||
return NotFound();
|
||||
}
|
||||
|
||||
if (request.TrackNumber is <= 0)
|
||||
return BadRequest("trackNumber must be a positive integer when provided.");
|
||||
|
||||
var track = lookup.Value;
|
||||
track.TrackName = request.TrackName;
|
||||
track.Artist = request.Artist;
|
||||
@@ -350,6 +374,13 @@ public class TrackController : ControllerBase
|
||||
if (request.ImagePath is not null)
|
||||
track.ImagePath = string.IsNullOrEmpty(request.ImagePath) ? null : request.ImagePath;
|
||||
|
||||
// ReleaseType / TrackNumber are non-null on the entity; null in the request means "no change".
|
||||
if (request.ReleaseType is not null)
|
||||
track.ReleaseType = request.ReleaseType.Value;
|
||||
|
||||
if (request.TrackNumber is > 0)
|
||||
track.TrackNumber = request.TrackNumber.Value;
|
||||
|
||||
var update = await _sqlTrackService.Update(track);
|
||||
if (!update.Success)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user