Skip to content

Commit 8dae561

Browse files
committed
Make it easier to edit missions
1 parent 9549a49 commit 8dae561

7 files changed

Lines changed: 40 additions & 53 deletions

File tree

backend/api.test/Controllers/InspectionAreaControllerTests.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -121,9 +121,8 @@ public async Task CheckThatMissionDefinitionIsCreatedInInspectionAreaUponCreatio
121121
Description = "Test description",
122122
},
123123
};
124-
var missionQuery = new MissionQuery
124+
var missionQuery = new CreateMissionQuery
125125
{
126-
RobotId = robot.Id,
127126
InstallationCode = installation.InstallationCode,
128127
Name = testName,
129128
Tasks = tasks,
@@ -247,9 +246,8 @@ public async Task CreateMissionDefinitionOutsideInspectionAreaPolygonFails()
247246
RobotPose = new Pose(11, 11, 11, 0, 0, 0, 1), // Position outside polygon
248247
},
249248
};
250-
var missionQuery = new MissionQuery
249+
var missionQuery = new CreateMissionQuery
251250
{
252-
RobotId = robot.Id,
253251
InstallationCode = installation.InstallationCode,
254252
Name = "TestMission",
255253
Tasks = tasks,

backend/api.test/Controllers/MissionSchedulingControllerTests.cs

Lines changed: 0 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -451,37 +451,5 @@ public async Task CheckThatMissionFailsIfRobotIsNotInSameInspectionAreaAsMission
451451
// Act
452452
Assert.Equal(HttpStatusCode.BadRequest, scheduleMissionResponse.StatusCode);
453453
}
454-
455-
private static MissionQuery CreateDefaultMissionQuery(
456-
string robotId,
457-
string installationCode
458-
)
459-
{
460-
return new MissionQuery
461-
{
462-
RobotId = robotId,
463-
InstallationCode = installationCode,
464-
Name = "TestMission",
465-
Tasks =
466-
[
467-
new TaskQuery
468-
{
469-
TagId = "test",
470-
TargetPosition = new Position(),
471-
SensorType = SensorType.Image,
472-
AnalysisTypes = [AnalysisType.Fencilla],
473-
RobotPose = new Pose(11, 11, 11, 0, 0, 0, 1),
474-
},
475-
new TaskQuery
476-
{
477-
RobotPose = new Pose(1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f),
478-
TagId = "test",
479-
TargetPosition = new Position(),
480-
SensorType = SensorType.Image,
481-
AnalysisTypes = [AnalysisType.Fencilla],
482-
},
483-
],
484-
};
485-
}
486454
}
487455
}

backend/api/Controllers/MissionDefinitionController.cs

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ [FromRoute] string installationCode
159159
[ProducesResponseType(StatusCodes.Status409Conflict)]
160160
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
161161
public async Task<ActionResult<MissionDefinition>> Create(
162-
[FromBody] MissionQuery customMissionQuery
162+
[FromBody] CreateMissionQuery customMissionQuery
163163
)
164164
{
165165
customMissionQuery = Sanitize.SanitizeUserInput(customMissionQuery);
@@ -216,7 +216,7 @@ [FromBody] MissionQuery customMissionQuery
216216
/// <response code="200"> The mission definition was successfully updated </response>
217217
/// <response code="400"> The mission definition data is invalid </response>
218218
/// <response code="404"> There was no mission definition with the given ID in the database </response>
219-
[HttpPut]
219+
[HttpPatch]
220220
[Authorize(Roles = Role.User)]
221221
[Route("{id}")]
222222
[ProducesResponseType(typeof(MissionDefinitionResponse), StatusCodes.Status200OK)]
@@ -235,24 +235,31 @@ [FromBody] UpdateMissionDefinitionQuery missionDefinitionQuery
235235
logger.LogInformation("Updating mission definition with id '{Id}'", id);
236236

237237
if (!ModelState.IsValid)
238-
{
239238
return BadRequest("Invalid data.");
240-
}
241239

242240
var missionDefinition = await missionDefinitionService.ReadById(id, readOnly: false);
243241
if (missionDefinition == null)
244-
{
245242
return NotFound($"Could not find mission definition with id '{id}'");
246-
}
247243

248-
if (missionDefinitionQuery.Name == null)
244+
if (missionDefinitionQuery.Name != null)
245+
missionDefinition.Name = missionDefinitionQuery.Name;
246+
247+
if (missionDefinitionQuery.Comment != null)
248+
missionDefinition.Comment = missionDefinitionQuery.Comment;
249+
250+
if (missionDefinitionQuery.InspectionFrequency != null)
251+
missionDefinition.InspectionFrequency = missionDefinitionQuery.InspectionFrequency;
252+
253+
if (missionDefinitionQuery.Tasks != null)
249254
{
250-
return BadRequest("Name cannot be null.");
255+
missionDefinition.Tasks =
256+
[
257+
.. missionDefinitionQuery.Tasks.Select(
258+
(taskQuery, index) => new TaskDefinition(taskQuery, index + 1)
259+
),
260+
];
251261
}
252262

253-
missionDefinition.Name = missionDefinitionQuery.Name;
254-
missionDefinition.Comment = missionDefinitionQuery.Comment;
255-
missionDefinition.InspectionFrequency = missionDefinitionQuery.InspectionFrequency;
256263
if (missionDefinitionQuery.SchedulingTimesCETperWeek != null)
257264
{
258265
var schedulingTimesCETperWeek = missionDefinitionQuery

backend/api/Controllers/Models/CustomMissionQuery.cs

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,22 @@ namespace Api.Controllers.Models
55
{
66
public struct TaskQuery
77
{
8+
#nullable disable
9+
public TaskQuery() { }
10+
11+
#nullable enable
12+
public TaskQuery(TaskDefinition def)
13+
{
14+
TagId = def.TagId;
15+
Description = def.Description;
16+
RobotPose = def.RobotPose;
17+
TargetPosition = def.TargetPosition;
18+
ZoomDescription = def.ZoomDescription;
19+
SensorType = def.SensorType;
20+
AnalysisTypes = def.AnalysisTypes;
21+
VideoDuration = def.VideoDuration;
22+
}
23+
824
public string? TagId { get; set; }
925

1026
public string? Description { get; set; }
@@ -22,10 +38,8 @@ public struct TaskQuery
2238
public float? VideoDuration { get; set; }
2339
}
2440

25-
public struct MissionQuery
41+
public struct CreateMissionQuery
2642
{
27-
public string RobotId { get; set; }
28-
2943
public string InstallationCode { get; set; }
3044

3145
public string Name { get; set; }

backend/api/Controllers/Models/UpdateMissionDefinitionQuery.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ public struct UpdateMissionDefinitionQuery
2424
/// Will be unchanged if null. Use an empty list to remove all scheduled times.
2525
/// </summary>
2626
public IList<TimeAndDayQuery>? SchedulingTimesCETperWeek { get; set; }
27+
28+
public IList<TaskQuery>? Tasks { get; set; }
2729
}
2830

2931
public struct TimeAndDayQuery

backend/api/Database/Context/InitDb.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -527,7 +527,6 @@ public static void PopulateDb(FlotillaDbContext context)
527527
taskDefinitions[1],
528528
taskDefinitions[2],
529529
];
530-
context.AddRange(taskDefinitions);
531530
context.AddRange(missionDefinitions);
532531
context.AddRange(missionRuns);
533532
context.AddRange(accessRoles);

backend/api/Utilities/SanitizeInput.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,8 @@ public static ScheduledMissionQuery SanitizeUserInput(ScheduledMissionQuery inpu
2424
return inputQuery;
2525
}
2626

27-
public static MissionQuery SanitizeUserInput(MissionQuery inputQuery)
27+
public static CreateMissionQuery SanitizeUserInput(CreateMissionQuery inputQuery)
2828
{
29-
inputQuery.RobotId = SanitizeUserInput(inputQuery.RobotId);
3029
inputQuery.InstallationCode = SanitizeUserInput(inputQuery.InstallationCode);
3130
inputQuery.Name = SanitizeUserInput(inputQuery.Name);
3231

0 commit comments

Comments
 (0)