using ChatbotApi.Data.Models; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Caching.Memory; namespace ChatbotApi.Controllers { [Authorize] [Route("api/[controller]")] [ApiController] public class SystemPromptsController : ControllerBase { private readonly AppContexto _context; private readonly IMemoryCache _cache; private const string CacheKey = "ActiveSystemPrompts"; public SystemPromptsController(AppContexto context, IMemoryCache cache) { _context = context; _cache = cache; } // GET: api/SystemPrompts [HttpGet] public async Task>> GetSystemPrompts() { return await _context.SystemPrompts.OrderByDescending(p => p.CreatedAt).ToListAsync(); } // GET: api/SystemPrompts/5 [HttpGet("{id}")] public async Task> GetSystemPrompt(int id) { var systemPrompt = await _context.SystemPrompts.FindAsync(id); if (systemPrompt == null) { return NotFound(); } return systemPrompt; } // PUT: api/SystemPrompts/5 [HttpPut("{id}")] public async Task PutSystemPrompt(int id, SystemPrompt systemPrompt) { if (id != systemPrompt.Id) { return BadRequest(); } systemPrompt.UpdatedAt = DateTime.UtcNow; _context.Entry(systemPrompt).State = EntityState.Modified; try { await _context.SaveChangesAsync(); _cache.Remove(CacheKey); // Invalidar caché } catch (DbUpdateConcurrencyException) { if (!SystemPromptExists(id)) { return NotFound(); } else { throw; } } return NoContent(); } // POST: api/SystemPrompts [HttpPost] public async Task> PostSystemPrompt(SystemPrompt systemPrompt) { systemPrompt.CreatedAt = DateTime.UtcNow; systemPrompt.UpdatedAt = DateTime.UtcNow; _context.SystemPrompts.Add(systemPrompt); await _context.SaveChangesAsync(); _cache.Remove(CacheKey); // Invalidar caché return CreatedAtAction("GetSystemPrompt", new { id = systemPrompt.Id }, systemPrompt); } // DELETE: api/SystemPrompts/5 [HttpDelete("{id}")] public async Task DeleteSystemPrompt(int id) { var systemPrompt = await _context.SystemPrompts.FindAsync(id); if (systemPrompt == null) { return NotFound(); } _context.SystemPrompts.Remove(systemPrompt); await _context.SaveChangesAsync(); _cache.Remove(CacheKey); // Invalidar caché return NoContent(); } // POST: api/SystemPrompts/ToggleActive/5 [HttpPost("ToggleActive/{id}")] public async Task ToggleActive(int id) { var systemPrompt = await _context.SystemPrompts.FindAsync(id); if (systemPrompt == null) { return NotFound(); } systemPrompt.IsActive = !systemPrompt.IsActive; systemPrompt.UpdatedAt = DateTime.UtcNow; await _context.SaveChangesAsync(); _cache.Remove(CacheKey); // Invalidar caché return Ok(new { IsActive = systemPrompt.IsActive }); } private bool SystemPromptExists(int id) { return _context.SystemPrompts.Any(e => e.Id == id); } } }