diff --git a/src/Tgstation.Server.Api/Routes.cs b/src/Tgstation.Server.Api/Routes.cs
index 16bd1494c5..da1bfc9bd9 100644
--- a/src/Tgstation.Server.Api/Routes.cs
+++ b/src/Tgstation.Server.Api/Routes.cs
@@ -54,7 +54,7 @@ namespace Tgstation.Server.Api
public const string InstanceUser = Root + nameof(Models.InstanceUser);
///
- /// The controller
+ /// The controller
///
public const string Chat = Root + "Chat";
@@ -63,6 +63,11 @@ namespace Tgstation.Server.Api
///
public const string DreamMaker = Root + nameof(Models.DreamMaker);
+ ///
+ /// The controller
+ ///
+ public const string Jobs = Root + nameof(Models.Job);
+
///
/// Apply an postfix to a
///
diff --git a/src/Tgstation.Server.Client/Components/DreamDaemonClient.cs b/src/Tgstation.Server.Client/Components/DreamDaemonClient.cs
index 810590d809..d776c09f69 100644
--- a/src/Tgstation.Server.Client/Components/DreamDaemonClient.cs
+++ b/src/Tgstation.Server.Client/Components/DreamDaemonClient.cs
@@ -36,7 +36,7 @@ namespace Tgstation.Server.Client.Components
public Task Start(CancellationToken cancellationToken) => apiClient.Create(Routes.DreamDaemon, instance.Id, cancellationToken);
///
- public Task Read(CancellationToken cancellationToken) => apiClient.Read(Routes.DreamDaemon, cancellationToken);
+ public Task Read(CancellationToken cancellationToken) => apiClient.Read(Routes.DreamDaemon, instance.Id, cancellationToken);
///
public Task Update(DreamDaemon dreamDaemon, CancellationToken cancellationToken) => apiClient.Update(Routes.DreamDaemon, dreamDaemon, instance.Id, cancellationToken);
diff --git a/src/Tgstation.Server.Client/Components/InstanceClient.cs b/src/Tgstation.Server.Client/Components/InstanceClient.cs
index 3d961eb701..2bf76eca71 100644
--- a/src/Tgstation.Server.Client/Components/InstanceClient.cs
+++ b/src/Tgstation.Server.Client/Components/InstanceClient.cs
@@ -31,7 +31,7 @@ namespace Tgstation.Server.Client.Components
public IDreamMakerClient DreamMaker { get; }
///
- public IJobsClient Jobs => throw new NotImplementedException();
+ public IJobsClient Jobs { get; }
///
/// The for the
@@ -55,6 +55,7 @@ namespace Tgstation.Server.Client.Components
Users = new InstanceUserClient(apiClient, instance);
ChatBots = new ChatBotsClient(apiClient, instance);
DreamMaker = new DreamMakerClient(apiClient, instance);
+ Jobs = new JobsClient(apiClient, instance);
}
}
}
\ No newline at end of file
diff --git a/src/Tgstation.Server.Client/Components/JobsClient.cs b/src/Tgstation.Server.Client/Components/JobsClient.cs
new file mode 100644
index 0000000000..283a36a35d
--- /dev/null
+++ b/src/Tgstation.Server.Client/Components/JobsClient.cs
@@ -0,0 +1,42 @@
+using System;
+using System.Collections.Generic;
+using System.Threading;
+using System.Threading.Tasks;
+using Tgstation.Server.Api;
+using Tgstation.Server.Api.Models;
+
+namespace Tgstation.Server.Client.Components
+{
+ ///
+ sealed class JobsClient : IJobsClient
+ {
+ ///
+ /// The for the
+ ///
+ readonly IApiClient apiClient;
+ ///
+ /// The for the
+ ///
+ readonly Instance instance;
+
+ ///
+ /// Construct a
+ ///
+ /// The value of
+ /// The value of
+ public JobsClient(IApiClient apiClient, Instance instance)
+ {
+ this.apiClient = apiClient ?? throw new ArgumentNullException(nameof(apiClient));
+ this.instance = instance ?? throw new ArgumentNullException(nameof(instance));
+ }
+
+ ///
+ public Task Cancel(Job job, CancellationToken cancellationToken) => apiClient.Delete(Routes.SetID(Routes.Jobs, job.Id), instance.Id, cancellationToken);
+
+ ///
+ public Task> List(CancellationToken cancellationToken) => apiClient.Read>(Routes.List(Routes.Jobs), instance.Id, cancellationToken);
+
+ ///
+ public Task Read(Job job, CancellationToken cancellationToken) => apiClient.Read(Routes.SetID(Routes.Jobs, job.Id), instance.Id, cancellationToken);
+ }
+}
\ No newline at end of file
diff --git a/src/Tgstation.Server.Client/Components/RepositoryClient.cs b/src/Tgstation.Server.Client/Components/RepositoryClient.cs
index 8bc25dff55..7b52a0cc1c 100644
--- a/src/Tgstation.Server.Client/Components/RepositoryClient.cs
+++ b/src/Tgstation.Server.Client/Components/RepositoryClient.cs
@@ -32,7 +32,7 @@ namespace Tgstation.Server.Client.Components
public Task Delete(CancellationToken cancellationToken) => apiClient.Delete(Routes.Repository, instance.Id, cancellationToken);
///
- public Task Read(CancellationToken cancellationToken) => apiClient.Read(Routes.Repository, cancellationToken);
+ public Task Read(CancellationToken cancellationToken) => apiClient.Read(Routes.Repository, instance.Id, cancellationToken);
///
public Task Update(Repository repository, CancellationToken cancellationToken) => apiClient.Update(Routes.Repository, repository, instance.Id, cancellationToken);
diff --git a/src/Tgstation.Server.Host/Controllers/JobController.cs b/src/Tgstation.Server.Host/Controllers/JobController.cs
index b946cbe94c..b48033ef4e 100644
--- a/src/Tgstation.Server.Host/Controllers/JobController.cs
+++ b/src/Tgstation.Server.Host/Controllers/JobController.cs
@@ -6,6 +6,7 @@ using System.Linq;
using System.Net;
using System.Threading;
using System.Threading.Tasks;
+using Tgstation.Server.Api;
using Tgstation.Server.Host.Core;
using Tgstation.Server.Host.Models;
using Tgstation.Server.Host.Security;
@@ -15,7 +16,7 @@ namespace Tgstation.Server.Host.Controllers
///
/// for s
///
- [Route("/" + nameof(Job))]
+ [Route(Routes.Jobs)]
public sealed class JobController : ModelController
{
///