Files
Pilz/Pilz.Net/Api/Server/JobsHandler.cs
2025-11-21 10:42:55 +01:00

49 lines
1.3 KiB
C#

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,
};
}
}