115 lines
3.5 KiB
C#

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<ClustersController> _logger;
private readonly AppSettings _appSettings;
public ClustersController(
ILogger<ClustersController> logger,
IOptions<AppSettings> 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<MeasuringEvent>();
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);
}
}