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 context = new JobContext(server.Jobs); job.LastExecution = DateTime.Now; job.Execute(context); if (context.HasError) return ApiResult.InternalServerError(); return job.ToItemResult(); } protected virtual JobInfo ToClient(Job job) { return new JobInfo { Name = job.Name, Interval = job.Interval, LastExecution = job.LastExecution, }; } }