From 1e54b4ca10b734be50f6f2eafa7c3e3a9a203031 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Thu, 7 Aug 2025 03:17:42 +0000
Subject: [PATCH] Add SerialController with GET /api/serial/ports endpoint
Co-authored-by: ekinnee <1707617+ekinnee@users.noreply.github.com>
---
Server/Controllers/SerialController.cs | 59 ++++++++++++++++++++++++++
1 file changed, 59 insertions(+)
create mode 100644 Server/Controllers/SerialController.cs
diff --git a/Server/Controllers/SerialController.cs b/Server/Controllers/SerialController.cs
new file mode 100644
index 0000000..640dbd1
--- /dev/null
+++ b/Server/Controllers/SerialController.cs
@@ -0,0 +1,59 @@
+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
+ });
+ }
+ }
+ }
+}
\ No newline at end of file