cd700dc758
DeepDrftWeb.Services → DeepDrftData; DeepDrftContent.Services → DeepDrftContent.Data. TrackEntity:BaseEntity, TrackRepository:Repository<>, TrackManager:Manager<>+ITrackService. Drops DeepDrftModels PagingParameters/PagedResult in favour of Models.Common.* from BlazorBlocks. InitialCreate migration captures full schema including is_deleted index.
60 lines
1.9 KiB
C#
60 lines
1.9 KiB
C#
using System.ComponentModel.DataAnnotations;
|
|
using DeepDrftData;
|
|
using DeepDrftModels.Entities;
|
|
using Microsoft.AspNetCore.Authorization;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using NetBlocks.Models;
|
|
|
|
namespace DeepDrftWeb.Controllers;
|
|
|
|
[ApiController]
|
|
[Authorize(Roles = "Admin")]
|
|
[Route("api/cms/track")]
|
|
public class CmsEditController : ControllerBase
|
|
{
|
|
private readonly ITrackService _trackService;
|
|
|
|
public CmsEditController(ITrackService trackService)
|
|
{
|
|
_trackService = trackService;
|
|
}
|
|
|
|
// Metadata-only update. EntryKey is immutable in Wave 1 — audio replacement
|
|
// is a separate Wave 2 operation that touches the vault.
|
|
[HttpPut("{id:int}")]
|
|
public async Task<ActionResult<ApiResultDto<TrackEntity>>> Update(int id, [FromBody] CmsTrackUpdateRequest request)
|
|
{
|
|
var existing = await _trackService.GetById(id);
|
|
if (!existing.Success)
|
|
{
|
|
var failure = ApiResult<TrackEntity>.CreateFailResult(existing.GetMessage());
|
|
return StatusCode(500, new ApiResultDto<TrackEntity>(failure));
|
|
}
|
|
|
|
if (existing.Value is null)
|
|
{
|
|
return NotFound();
|
|
}
|
|
|
|
var track = existing.Value;
|
|
track.TrackName = request.TrackName;
|
|
track.Artist = request.Artist;
|
|
track.Album = request.Album;
|
|
track.Genre = request.Genre;
|
|
track.ReleaseDate = request.ReleaseDate;
|
|
|
|
var updated = await _trackService.Update(track);
|
|
var apiResult = ApiResult<TrackEntity>.From(updated);
|
|
var dto = new ApiResultDto<TrackEntity>(apiResult);
|
|
|
|
return updated.Success ? Ok(dto) : StatusCode(500, dto);
|
|
}
|
|
}
|
|
|
|
public record CmsTrackUpdateRequest(
|
|
[Required, MaxLength(200)] string TrackName,
|
|
[Required, MaxLength(200)] string Artist,
|
|
[MaxLength(200)] string? Album,
|
|
[MaxLength(100)] string? Genre,
|
|
DateOnly? ReleaseDate);
|