using back.ApiService.context; using back.ApiService.models; using back.DTO; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; namespace back.controllers; [Route("api/[controller]")] [ApiController] public class PhotosController(PhotoContext photoContext) : ControllerBase { private readonly PhotoContext _photoContext = photoContext; // GET: api/ [HttpGet] public async Task>> Get([FromQuery] int page = 1, [FromQuery] int pageSize = 20) { if (page < 1) page = 1; if (pageSize < 1) pageSize = 20; var totalItems = await _photoContext.Photos.CountAsync(); var photos = await _photoContext.Photos .OrderByDescending(p => p.CreatedAt) .Skip((page - 1) * pageSize) .Take(pageSize) .ToListAsync(); Response.Headers.Append("X-Total-Count", totalItems.ToString()); return Ok(photos); } // GET api//5 [HttpGet("{id}/{res}")] public async Task Get(Guid id, string res = "low") { var photo = await _photoContext.Photos.FindAsync(id); if (photo == null) return NotFound(); string? filePath = res.ToLower() switch { "low" => photo.LowResUrl, "mid" => photo.MidResUrl, "high" => photo.HighResUrl, _ => null }; if (filePath == null || !System.IO.File.Exists(Path.Combine(Constants.Data, filePath))) return NotFound(); var fileBytes = await System.IO.File.ReadAllBytesAsync(Path.Combine(Constants.Data, filePath)); var contentType = "image/jpeg"; // Cambia si usas otro formato return File(fileBytes, contentType); } // POST api/ [HttpPost] public async Task Post([FromForm] PhotoFormModel form) { try { if (form.Image == null || form.Image.Length == 0) return BadRequest("No image uploaded."); var photo = PhotoBuilder.Build( form.Title, form.Description, form.Tags?.Split(',', StringSplitOptions.RemoveEmptyEntries).ToList(), form.People?.Split(',', StringSplitOptions.RemoveEmptyEntries).ToList(), form.Image ); // Guarda la información en la base de datos _photoContext.Photos.Add(photo); await _photoContext.SaveChangesAsync(); return Created(); } catch { return BadRequest(); } } //// PUT api//5 //[HttpPut("{id}")] //public async Task Put(Guid id, [FromBody] Photo photo) //{ // if (id != photo.Id) // return BadRequest(); // _photoContext.Entry(photo).State = EntityState.Modified; // await _photoContext.SaveChangesAsync(); // return NoContent(); //} // DELETE api//5 [HttpDelete("{id}")] public async Task Delete(Guid id) { var photo = await _photoContext.Photos.FindAsync(id); if (photo == null) return NotFound(); _photoContext.Photos.Remove(photo); await _photoContext.SaveChangesAsync(); return NoContent(); } }