diff --git a/backend/api/Services/MissionRunService.cs b/backend/api/Services/MissionRunService.cs index 06db60280..37cb878a5 100644 --- a/backend/api/Services/MissionRunService.cs +++ b/backend/api/Services/MissionRunService.cs @@ -6,6 +6,7 @@ using Api.Database.Context; using Api.Database.Models; using Api.Services.Events; +using Api.Services.Models; using Api.Utilities; using Microsoft.EntityFrameworkCore; namespace Api.Services @@ -55,6 +56,8 @@ MissionStatus missionStatus public Task UpdateMissionRunProperty(string missionRunId, string propertyName, object? value); + public Task UpdateWithIsarInfo(string missionRunId, IsarMission isarMission); + public Task SetMissionRunToFailed(string missionRunId, string failureDescription); public Task UpdateCurrentRobotMissionToFailed(string robotId); @@ -642,5 +645,18 @@ public void DetachTracking(MissionRun missionRun) if (missionRun.Robot != null) robotService.DetachTracking(missionRun.Robot); context.Entry(missionRun).State = EntityState.Detached; } + + public async Task UpdateWithIsarInfo(string missionRunId, IsarMission isarMission) + { + var missionRun = await ReadById(missionRunId, readOnly: false) ?? throw new MissionRunNotFoundException($"Could not find mission run with ID {missionRunId}"); + + missionRun.IsarMissionId = isarMission.IsarMissionId; + foreach (var isarTask in isarMission.Tasks) + { + var task = missionRun.GetTaskByIsarId(isarTask.IsarTaskId); + task?.UpdateWithIsarInfo(isarTask); + } + return await Update(missionRun); + } } } diff --git a/backend/api/Services/MissionSchedulingService.cs b/backend/api/Services/MissionSchedulingService.cs index 47c97c578..6299a4299 100644 --- a/backend/api/Services/MissionSchedulingService.cs +++ b/backend/api/Services/MissionSchedulingService.cs @@ -149,15 +149,13 @@ or RobotNotAvailableException or MissionRunNotFoundException or IsarCommunicationException) { - const MissionStatus NewStatus = MissionStatus.Failed; logger.LogError( ex, "Mission run {MissionRunId} was not started successfully due to {ErrorMessage}", missionRun.Id, ex.Message ); - await missionRunService.UpdateMissionRunProperty(missionRun.Id, "Status", NewStatus); - await missionRunService.UpdateMissionRunProperty(missionRun.Id, "StatusReason", ex.Message); + await missionRunService.SetMissionRunToFailed(missionRun.Id, "Mission run {MissionRunId} was not started successfully due to {ErrorMessage}"); } } @@ -464,7 +462,7 @@ private async Task StartMissionRun(MissionRun queuedMissionRun) throw new IsarCommunicationException(ErrorMessage); } - missionRun.UpdateWithIsarInfo(isarMission); + await missionRunService.UpdateWithIsarInfo(missionRun.Id, isarMission); await missionRunService.UpdateMissionRunProperty(missionRun.Id, "Status", MissionStatus.Ongoing); robot.Status = RobotStatus.Busy;