115 lines
3.5 KiB
C#
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);
|
|
}
|
|
}
|