namespace DevicesRestApi.Controllers; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Options; using DevicesRestApi.Helpers; [ApiController] [Route("[controller]")] public class ClustersController : ControllerBase { private ClusterConfigurationFile? _clusterConfigurationFile; private readonly ILogger _logger; private readonly AppSettings _appSettings; public ClustersController( ILogger logger, IOptions appSettings ) { _logger = logger; _appSettings = appSettings.Value; } [HttpGet] [Route("~/clusters/{clusterName}/schedules")] public IActionResult GetClusterSchedules(string clusterName) { _clusterConfigurationFile = null; try { _clusterConfigurationFile = new ClusterConfigurationFile(clusterName, _appSettings); } catch (ArgumentException e) { _logger.LogError($"Something went wrong: {e}"); return new BadRequest(e.Message); } if (!_clusterConfigurationFile.DirectoryExists()) { _logger.LogError($"Cluster not found: {_clusterConfigurationFile.GetDirectoryPath()}"); return new NotFound("Cluster not found"); } var filePath = _clusterConfigurationFile.GetFilePath(); if (!_clusterConfigurationFile.FileExists()) { _logger.LogError($"Configuration file not found: {filePath}"); return new NotFound("Configuration file not found"); } var schedule = new List(); using (StreamReader reader = new StreamReader(filePath)) { string line; while ((line = reader.ReadLine()) != null) { var s = line.Split(','); schedule.Add( new MeasuringEvent() { Day = (MeasuringDay)int.Parse(s[0]), Time = s[1] } ); } } return new Ok( new{ name = clusterName, schedule = schedule, } ); } [HttpPost] [Route("~/clusters/{clusterName}/schedules")] public IActionResult UpdateClusterSchedules(string clusterName, UpdateScheduleRequest request) { var message = "Cluster updated"; _clusterConfigurationFile = null; try { _clusterConfigurationFile = new ClusterConfigurationFile(clusterName, _appSettings); } catch (ArgumentException e) { _logger.LogError($"Something went wrong: {e}"); return new BadRequest(e.Message); } if (!_clusterConfigurationFile.FileExists()) { _clusterConfigurationFile.Create(); message = "Cluster created"; } if (request.Schedule?.Count > 0) { var filePath = _clusterConfigurationFile.GetFilePath(); using (StreamWriter writer = new StreamWriter(filePath)) { foreach ( var e in request.Schedule.OrderBy(s => s.Day).ThenBy( s => TimeSpan.Parse(s.Time) ) ) { var time = TimeSpan.Parse(e.Time); writer.WriteLine($"{(int)e.Day},{time.ToString(@"hh\:mm")}"); writer.Flush(); } } } return new Ok(message); } }