diff --git a/API/Controllers/JobController.cs b/API/Controllers/JobController.cs index a469c12..260cc53 100644 --- a/API/Controllers/JobController.cs +++ b/API/Controllers/JobController.cs @@ -189,6 +189,39 @@ public class JobController(PgsqlContext context) : Controller } } + /// + /// Modify Job with ID + /// + /// Job-ID + /// Fields to modify, set to null to keep previous value + /// Job modified + /// Malformed request + /// Job with ID not found + /// Internal Error + [HttpPatch("{id}/")] + [ProducesResponseType(Status202Accepted)] + [ProducesResponseType(Status400BadRequest)] + [ProducesResponseType(Status404NotFound)] + [ProducesResponseType(Status500InternalServerError)] + public IActionResult ModifyJob(string id, [FromBody]ModifyJobRecord modifyJobRecord) + { + try + { + Job? ret = context.Jobs.Find(id); + if(ret is null) + return NotFound(); + + ret.RecurrenceMs = modifyJobRecord.RecurrenceMs ?? ret.RecurrenceMs; + + context.SaveChanges(); + return new AcceptedResult(ret.JobId, ret); + } + catch (Exception e) + { + return StatusCode(500, e.Message); + } + } + /// /// Starts the Job with the requested ID /// @@ -198,10 +231,10 @@ public class JobController(PgsqlContext context) : Controller /// Job was already running /// Internal Error [HttpPost("{id}/Start")] - [ProducesResponseType(Status202Accepted)] - [ProducesResponseType(Status404NotFound)] - [ProducesResponseType(Status409Conflict)] - [ProducesResponseType(Status500InternalServerError)] + [ProducesResponseType(Status202Accepted)] + [ProducesResponseType(Status404NotFound)] + [ProducesResponseType(Status409Conflict)] + [ProducesResponseType(Status500InternalServerError)] public IActionResult StartJob(string id) { Job? ret = context.Jobs.Find(id); @@ -230,13 +263,14 @@ public class JobController(PgsqlContext context) : Controller /// Job was not running /// Internal Error /// NOT IMPLEMENTED - [ProducesResponseType(Status202Accepted)] - [ProducesResponseType(Status404NotFound)] - [ProducesResponseType(Status409Conflict)] - [ProducesResponseType(Status500InternalServerError)] + [ProducesResponseType(Status202Accepted)] + [ProducesResponseType(Status404NotFound)] + [ProducesResponseType(Status409Conflict)] + [ProducesResponseType(Status500InternalServerError)] [HttpPost("{id}/Stop")] public IActionResult StopJob(string id) { - return NotFound(new ProblemResponse("Not implemented")); //TODO + throw new NotImplementedException(); + return NotFound(new ProblemResponse("Not implemented")); } } \ No newline at end of file diff --git a/API/ModifyJobRecord.cs b/API/ModifyJobRecord.cs new file mode 100644 index 0000000..4c9a476 --- /dev/null +++ b/API/ModifyJobRecord.cs @@ -0,0 +1,3 @@ +namespace API; + +public record ModifyJobRecord(ulong? RecurrenceMs); \ No newline at end of file