using System.IO; using System.Threading.Tasks; using API.Data; using API.Extensions; using API.Services; using Microsoft.AspNetCore.Mvc; namespace API.Controllers { /// /// Responsible for servicing up images stored in the DB /// public class ImageController : BaseApiController { private readonly IUnitOfWork _unitOfWork; private readonly IDirectoryService _directoryService; /// public ImageController(IUnitOfWork unitOfWork, IDirectoryService directoryService) { _unitOfWork = unitOfWork; _directoryService = directoryService; } /// /// Returns cover image for Chapter /// /// /// [HttpGet("chapter-cover")] public async Task GetChapterCoverImage(int chapterId) { var path = Path.Join(_directoryService.CoverImageDirectory, await _unitOfWork.ChapterRepository.GetChapterCoverImageAsync(chapterId)); if (string.IsNullOrEmpty(path) || !_directoryService.FileSystem.File.Exists(path)) return BadRequest($"No cover image"); var format = _directoryService.FileSystem.Path.GetExtension(path).Replace(".", ""); Response.AddCacheHeader(path); return PhysicalFile(path, "image/" + format, _directoryService.FileSystem.Path.GetFileName(path)); } /// /// Returns cover image for Volume /// /// /// [HttpGet("volume-cover")] public async Task GetVolumeCoverImage(int volumeId) { var path = Path.Join(_directoryService.CoverImageDirectory, await _unitOfWork.VolumeRepository.GetVolumeCoverImageAsync(volumeId)); if (string.IsNullOrEmpty(path) || !_directoryService.FileSystem.File.Exists(path)) return BadRequest($"No cover image"); var format = _directoryService.FileSystem.Path.GetExtension(path).Replace(".", ""); Response.AddCacheHeader(path); return PhysicalFile(path, "image/" + format, _directoryService.FileSystem.Path.GetFileName(path)); } /// /// Returns cover image for Series /// /// Id of Series /// [HttpGet("series-cover")] public async Task GetSeriesCoverImage(int seriesId) { var path = Path.Join(_directoryService.CoverImageDirectory, await _unitOfWork.SeriesRepository.GetSeriesCoverImageAsync(seriesId)); if (string.IsNullOrEmpty(path) || !_directoryService.FileSystem.File.Exists(path)) return BadRequest($"No cover image"); var format = _directoryService.FileSystem.Path.GetExtension(path).Replace(".", ""); Response.AddCacheHeader(path); return PhysicalFile(path, "image/" + format, _directoryService.FileSystem.Path.GetFileName(path)); } /// /// Returns cover image for Collection Tag /// /// /// [HttpGet("collection-cover")] public async Task GetCollectionCoverImage(int collectionTagId) { var path = Path.Join(_directoryService.CoverImageDirectory, await _unitOfWork.CollectionTagRepository.GetCoverImageAsync(collectionTagId)); if (string.IsNullOrEmpty(path) || !_directoryService.FileSystem.File.Exists(path)) return BadRequest($"No cover image"); var format = _directoryService.FileSystem.Path.GetExtension(path).Replace(".", ""); Response.AddCacheHeader(path); return PhysicalFile(path, "image/" + format, _directoryService.FileSystem.Path.GetFileName(path)); } } }