using MareSynchronos.API.Routes; using MareSynchronosStaticFilesServer.Services; using MareSynchronosStaticFilesServer.Utils; using Microsoft.AspNetCore.Mvc; namespace MareSynchronosStaticFilesServer.Controllers; [Route(MareFiles.Cache)] public class CacheController : ControllerBase { private readonly RequestFileStreamResultFactory _requestFileStreamResultFactory; private readonly CachedFileProvider _cachedFileProvider; private readonly RequestQueueService _requestQueue; public CacheController(ILogger logger, RequestFileStreamResultFactory requestFileStreamResultFactory, CachedFileProvider cachedFileProvider, RequestQueueService requestQueue) : base(logger) { _requestFileStreamResultFactory = requestFileStreamResultFactory; _cachedFileProvider = cachedFileProvider; _requestQueue = requestQueue; } [HttpGet(MareFiles.Cache_Get)] public async Task GetFile(Guid requestId) { _logger.LogDebug($"GetFile:{MareUser}:{requestId}"); if (!_requestQueue.IsActiveProcessing(requestId, MareUser, out var request)) return BadRequest(); _requestQueue.ActivateRequest(requestId); var fs = await _cachedFileProvider.GetAndDownloadFileStream(request.FileId); if (fs == null) { _requestQueue.FinishRequest(requestId); return NotFound(); } return _requestFileStreamResultFactory.Create(requestId, fs); } }