using System; using System.IO; using System.Net; using System.Threading.Tasks; using API.Extensions; using API.Interfaces; using API.Services; using Microsoft.AspNetCore.Mvc; using Microsoft.Net.Http.Headers; namespace API.Controllers { /// /// Responsible for servicing up images stored in the DB /// public class ImageController : BaseApiController { private readonly IUnitOfWork _unitOfWork; /// public ImageController(IUnitOfWork unitOfWork) { _unitOfWork = unitOfWork; } /// /// 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) || !System.IO.File.Exists(path)) return BadRequest($"No cover image"); var format = Path.GetExtension(path).Replace(".", ""); Response.AddCacheHeader(path); return PhysicalFile(path, "image/" + format, 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) || !System.IO.File.Exists(path)) return BadRequest($"No cover image"); var format = Path.GetExtension(path).Replace(".", ""); Response.AddCacheHeader(path); return PhysicalFile(path, "image/" + format, 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) || !System.IO.File.Exists(path)) return BadRequest($"No cover image"); var format = Path.GetExtension(path).Replace(".", ""); Response.AddCacheHeader(path); return PhysicalFile(path, "image/" + format, 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) || !System.IO.File.Exists(path)) return BadRequest($"No cover image"); var format = Path.GetExtension(path).Replace(".", ""); Response.AddCacheHeader(path); return PhysicalFile(path, "image/" + format, Path.GetFileName(path)); } } }