using Pilz.Jobs; using Pilz.Net.Api.Entities; using Pilz.Net.Extensions; namespace Pilz.Net.Api.Server; public class JobsHandler(IApiServer server) { [ApiMessageHandler("/jobs", "GET")] public virtual ApiResult GetAll() { return server.Jobs.Jobs.Select(ToClient).ToItemsResult(); } [ApiMessageHandler("/jobs/{name}", "GET")] public virtual ApiResult Get(string name) { if (server.Jobs.Jobs.FirstOrDefault(n => n.Name == name) is not Job job) return ApiResult.BadRequest(); return ToClient(job).ToItemResult(); } [ApiMessageHandler("/jobs/{name}", "POST")] public virtual ApiResult Execute(string name) { if (server.Jobs.Jobs.FirstOrDefault(n => n.Name == name) is not Job job) return ApiResult.BadRequest(); var now = DateTime.Now; job.Execute(new(server.Jobs)); job.LastExecution = now; return ApiResult.Ok(); } protected virtual JobInfo ToClient(Job job) { return new JobInfo { Name = job.Name, Interval = job.Interval, LastExecution = job.LastExecution, }; } }