using Microsoft.AspNetCore.Mvc; using Server.Models; using Server.Services; namespace Server.Controllers { /// /// Controller for serial port management operations /// [ApiController] [Route("api/[controller]")] [Produces("application/json")] public class SerialController : ControllerBase { private readonly ISerialCommunicationService _serialService; private readonly ILogger _logger; public SerialController(ISerialCommunicationService serialService, ILogger logger) { _serialService = serialService ?? throw new ArgumentNullException(nameof(serialService)); _logger = logger ?? throw new ArgumentNullException(nameof(logger)); } /// /// Gets all available serial ports on the server /// /// JSON array of available serial port names /// Returns the list of available serial ports /// Internal server error [HttpGet("ports")] [ProducesResponseType(typeof(PortListResponse), StatusCodes.Status200OK)] [ProducesResponseType(typeof(ErrorResponse), StatusCodes.Status500InternalServerError)] public ActionResult GetPorts() { try { _logger.LogInformation("Getting available serial ports"); var ports = _serialService.GetAvailablePorts(); var response = new PortListResponse { Ports = ports }; _logger.LogInformation("Found {PortCount} available ports", response.Count); return Ok(response); } catch (Exception ex) { _logger.LogError(ex, "Error getting available ports"); return StatusCode(500, new ErrorResponse { Error = "Internal server error while getting ports", Details = ex.Message }); } } } }