// eprintServer/Controllers/FaqController.cs (No changes needed) using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using eprintServer.Services; using eprintServer.Requests; using eprintServer.Responses; namespace eprintServer.Controllers; [ApiController] [Route("api/v1/cms/faqs")] [Authorize(Roles = "ADMIN,SUB_ADMIN")] public class FaqController : ControllerBase { private readonly FaqService _faqService; public FaqController(FaqService faqService) { _faqService = faqService; } [HttpGet] public async Task>> GetFaqs() { var faqs = await _faqService.GetAllFaqsAsync(); var response = faqs .Select(FaqResponse.FromEntity) .ToList(); return Ok(response); } [HttpGet("get-by-id/{faqId:int}")] public async Task> GetFaqById(int faqId) { var faq = await _faqService.GetFaqByIdAsync(faqId); if (faq == null) { return NotFound($"FAQ with ID {faqId} not found."); } return Ok(FaqResponse.FromEntity(faq)); } [HttpGet("get-faqs-paginated")] public async Task>> GetFaqsPaginated( [FromQuery] int page = 0, [FromQuery] int size = 5 ) { var pagedFaqs = await _faqService.GetFaqsPaginatedAsync(page, size); var responseItems = pagedFaqs.Items .Select(FaqResponse.FromEntity) .ToList(); var pagedResponse = new PagedResult( responseItems, pagedFaqs.TotalCount, pagedFaqs.CurrentPage, pagedFaqs.PageSize ); return Ok(pagedResponse); } [HttpPost] public async Task> CreateFaq([FromBody] CreateFaqRequest request) { var faq = await _faqService.CreateFaqAsync(request); return CreatedAtAction(nameof(GetFaqs), FaqResponse.FromEntity(faq)); } [HttpPut("{faqId:int}")] public async Task> UpdateFaq(int faqId, [FromBody] UpdateFaqRequest request) { var updatedFaq = await _faqService.UpdateFaqAsync(faqId, request); if (updatedFaq == null) { return NotFound($"FAQ with ID {faqId} not found."); } return Ok(FaqResponse.FromEntity(updatedFaq)); } [HttpDelete("{faqId:int}")] public async Task DeleteFaq(int faqId) { var deleted = await _faqService.DeleteFaqAsync(faqId); if (!deleted) { return NotFound($"FAQ with ID {faqId} not found."); } return NoContent(); } [HttpPatch("{faqId:int}/status")] public async Task> ToggleFaqStatus(int faqId, [FromBody] ToggleFaqStatusRequest request) { var toggledFaq = await _faqService.ToggleFaqStatusAsync(faqId, request.Active); if (toggledFaq == null) { return NotFound($"FAQ with ID {faqId} not found."); } return Ok(FaqResponse.FromEntity(toggledFaq)); } }