ShiftScheduler/Server/Controllers/ConfigurationController.cs
Copilot 7d8e40b9cf
Add Configuration UI for Transport and Shift Settings with Import/Export (#27)
* Initial plan

* Complete configuration UI implementation with working dialog, API endpoints, and file import/export

Co-authored-by: clayschaad <11883505+clayschaad@users.noreply.github.com>

* Refactor to inject IConfigurationService directly instead of using factory singletons

Co-authored-by: clayschaad <11883505+clayschaad@users.noreply.github.com>

* Remove redundant ShiftService and use IConfigurationService directly

Co-authored-by: clayschaad <11883505+clayschaad@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: clayschaad <11883505+clayschaad@users.noreply.github.com>
2025-08-26 17:17:09 +02:00

73 lines
No EOL
2.2 KiB
C#

using Microsoft.AspNetCore.Mvc;
using ShiftScheduler.Services;
using ShiftScheduler.Shared;
using System.Text;
namespace ShiftScheduler.Server.Controllers
{
[ApiController]
[Route("api/[controller]")]
public class ConfigurationController : ControllerBase
{
private readonly IConfigurationService _configurationService;
public ConfigurationController(IConfigurationService configurationService)
{
_configurationService = configurationService;
}
[HttpGet]
public IActionResult GetConfiguration()
{
return Ok(_configurationService.GetConfiguration());
}
[HttpPut]
public IActionResult UpdateConfiguration([FromBody] ApplicationConfiguration configuration)
{
try
{
_configurationService.UpdateConfiguration(configuration);
return Ok();
}
catch (Exception ex)
{
return BadRequest($"Failed to update configuration: {ex.Message}");
}
}
[HttpGet("export")]
public async Task<IActionResult> ExportConfiguration()
{
try
{
var json = await _configurationService.ExportConfigurationAsync();
var bytes = Encoding.UTF8.GetBytes(json);
return File(bytes, "application/json", "ShiftScheduler-Configuration.json");
}
catch (Exception ex)
{
return BadRequest($"Failed to export configuration: {ex.Message}");
}
}
[HttpPost("import")]
public async Task<IActionResult> ImportConfiguration([FromBody] ImportConfigurationRequest request)
{
try
{
await _configurationService.ImportConfigurationAsync(request.JsonContent);
return Ok();
}
catch (Exception ex)
{
return BadRequest($"Failed to import configuration: {ex.Message}");
}
}
}
public class ImportConfigurationRequest
{
public string JsonContent { get; set; } = string.Empty;
}
}