summaryrefslogtreecommitdiff
path: root/src/marlin.web/Controllers/Api/InstanceGrpcService.cs
diff options
context:
space:
mode:
authorMelodi <62381002+Melodi17@users.noreply.github.com>2026-10-27 23:04:59 +1000
committerMelodi <62381002+Melodi17@users.noreply.github.com>2026-10-27 23:04:59 +1000
commitecd5f5d13936dd097b12766cb95a568ad5b073a9 (patch)
treef360b08e656a98faca4f2b9f10dc44602e6ca289 /src/marlin.web/Controllers/Api/InstanceGrpcService.cs
parent88ee626cb3686dc176cd7911b073c4e65fa54d34 (diff)
feat: lots of stuff
Diffstat (limited to 'src/marlin.web/Controllers/Api/InstanceGrpcService.cs')
-rw-r--r--src/marlin.web/Controllers/Api/InstanceGrpcService.cs54
1 files changed, 54 insertions, 0 deletions
diff --git a/src/marlin.web/Controllers/Api/InstanceGrpcService.cs b/src/marlin.web/Controllers/Api/InstanceGrpcService.cs
new file mode 100644
index 0000000..fb0af5a
--- /dev/null
+++ b/src/marlin.web/Controllers/Api/InstanceGrpcService.cs
@@ -0,0 +1,54 @@
+namespace marlin.web.Controllers.Api;
+
+using core.contracts;
+using core.models;
+using core.models.plan;
+using Data;
+using Grpc.Core;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.EntityFrameworkCore;
+using Models;
+using ProtoBuf.Grpc;
+using Util;
+
+[Authorize(Policy = "JobScoped")]
+public class InstanceGrpcService(ApplicationDbContext dbContext) : IInstanceService
+{
+ public async Task SendLogEvent(LogEventRequest request, CallContext context = default)
+ {
+ var user = context.ServerCallContext!.GetHttpContext().User;
+ var jobId = user.RequireJobId();
+
+ dbContext.Logs.Add(new LogEventRecord
+ {
+ At = request.At,
+ Message = request.Message,
+ Error = request.Error,
+ StepId = request.StepId,
+ JobId = jobId
+ });
+
+ await dbContext.SaveChangesAsync(context.CancellationToken);
+ }
+
+ public async Task SendStatusUpdate(StatusUpdateRequest request, CallContext context = default)
+ {
+ var user = context.ServerCallContext!.GetHttpContext().User;
+ var jobId = user.RequireJobId();
+
+ var job = await dbContext.Jobs
+ .FirstAsync(x => x.Id == jobId, context.CancellationToken);
+
+ job.Status = request.Status;
+
+ dbContext.JobStatusUpdates.Add(new JobStatusUpdate
+ {
+ At = DateTime.UtcNow,
+ Status = request.Status,
+ Job = job
+ });
+
+ await dbContext.SaveChangesAsync(context.CancellationToken);
+ }
+}