Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 14 additions & 2 deletions backend/api/Controllers/Models/MissionDefinitionResponse.cs
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,13 @@ public MissionDefinitionResponse(MissionDefinition missionDefinition)
InstallationCode = missionDefinition.InstallationCode;
Comment = missionDefinition.Comment;
InspectionFrequency = missionDefinition.InspectionFrequency;
AutoScheduleFrequency = missionDefinition.AutoScheduleFrequency;
AutoScheduleFrequency =
(
missionDefinition.AutoScheduleFrequency is not null
&& missionDefinition.AutoScheduleFrequency.HasValidValue()
)
? missionDefinition.AutoScheduleFrequency
: null;
InspectionArea =
missionDefinition.InspectionArea != null
? new InspectionAreaResponse(missionDefinition.InspectionArea)
Expand Down Expand Up @@ -87,7 +93,13 @@ MissionDefinition missionDefinition
public TimeSpan? InspectionFrequency { get; } = missionDefinition.InspectionFrequency;

[JsonPropertyName("autoScheduleFrequency")]
public AutoScheduleFrequency? AutoScheduleFrequency { get; set; }
public AutoScheduleFrequency? AutoScheduleFrequency { get; } =
(
missionDefinition.AutoScheduleFrequency is not null
&& missionDefinition.AutoScheduleFrequency.HasValidValue()
)
? missionDefinition.AutoScheduleFrequency
: null;

[JsonPropertyName("lastSuccessfulRun")]
public virtual MissionRun? LastSuccessfulRun { get; } = missionDefinition.LastSuccessfulRun;
Expand Down
1 change: 1 addition & 0 deletions backend/api/Database/Context/FlotillaDbContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ protected override void OnModelCreating(ModelBuilder modelBuilder)
.Property(m => m.InspectionFrequency)
.HasConversion(new TimeSpanToTicksConverter());

modelBuilder.Entity<MissionDefinition>().OwnsOne(m => m.AutoScheduleFrequency);
modelBuilder
.Entity<MissionDefinition>()
.OwnsOne(m => m.Map)
Expand Down
9 changes: 7 additions & 2 deletions backend/api/Database/Models/AutoScheduleFrequency.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,15 @@ public class AutoScheduleFrequency
{
[Required]
// In local time
public IList<TimeOnly> TimesOfDay { get; set; }
public IList<TimeOnly> TimesOfDay { get; set; } = new List<TimeOnly>();

[Required]
public IList<DayOfWeek> DaysOfWeek { get; set; }
public IList<DayOfWeek> DaysOfWeek { get; set; } = new List<DayOfWeek>();

public bool HasValidValue()
{
return TimesOfDay.Count != 0 && DaysOfWeek.Count != 0;
}

public void ValidateAutoScheduleFrequency()
{
Expand Down
8 changes: 7 additions & 1 deletion backend/api/Services/MissionDefinitionService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,9 @@ public async Task<MissionDefinition> Update(MissionDefinition missionDefinition)
context.Entry(missionDefinition.InspectionArea).State = EntityState.Unchanged;
}

// Owned optional properties are not nullable
missionDefinition.AutoScheduleFrequency ??= new AutoScheduleFrequency();

var entry = context.Update(missionDefinition);
await ApplyDatabaseUpdate(missionDefinition.InspectionArea?.Installation);
_ = signalRService.SendMessageAsync(
Expand Down Expand Up @@ -238,7 +241,10 @@ private IQueryable<MissionDefinition> GetMissionDefinitionsWithSubModels(
{
var accessibleInstallationCodes = accessRoleService.GetAllowedInstallationCodes();
var query = context
.MissionDefinitions.Include(missionDefinition => missionDefinition.InspectionArea)
.MissionDefinitions.Include(missionDefinition =>
missionDefinition.AutoScheduleFrequency
)
.Include(missionDefinition => missionDefinition.InspectionArea)
.ThenInclude(inspectionArea => inspectionArea!.Plant)
.ThenInclude(plant => plant.Installation)
.Include(missionDefinition => missionDefinition.InspectionArea)
Expand Down