7f78545a02
Content API: - Enabling CORS for access from Blazor app Web Server: - Content API URL environment config - Web Audio API JS Interop layer in TypeScript - HttpClient configs Web Client: - Audio Tack player controls - Audio Player example page - Audio Interop Service Layer - Named HttpClients
35 lines
1.2 KiB
C#
35 lines
1.2 KiB
C#
using DeepDrftContent.Constants;
|
|
using DeepDrftContent.FileDatabase.Models;
|
|
using DeepDrftContent.Middleware;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
|
|
namespace DeepDrftContent.Controllers;
|
|
|
|
[ApiController]
|
|
[Route("api/[controller]")]
|
|
public class TrackController : ControllerBase
|
|
{
|
|
private readonly FileDatabase.Services.FileDatabase _fileDatabase;
|
|
|
|
public TrackController(FileDatabase.Services.FileDatabase fileDatabase)
|
|
{
|
|
_fileDatabase = fileDatabase;
|
|
}
|
|
|
|
[HttpGet("{trackId}")]
|
|
public async Task<ActionResult> GetTrack(string trackId)
|
|
{
|
|
var file = await _fileDatabase.LoadResourceAsync<AudioBinary>(VaultConstants.Tracks, trackId);
|
|
if (file == null) { return NotFound(); }
|
|
return File(file.Buffer, MimeTypeExtensions.GetMimeType(file.Extension));
|
|
}
|
|
|
|
[ApiKeyAuthorize]
|
|
[HttpPut("{trackId}")]
|
|
public async Task<ActionResult> PutTrack([FromQuery] string trackId, [FromBody] AudioBinaryDto track)
|
|
{
|
|
var audioBinary = AudioBinary.From(track);
|
|
var success = await _fileDatabase.RegisterResourceAsync(VaultConstants.Tracks, trackId, audioBinary);
|
|
return success ? Ok() : BadRequest("Failed to store audio track");
|
|
}
|
|
} |