< Summary

Information
Class: LGDXRobotCloud.Data.DbContexts.LgdxContext
Assembly: LGDXRobotCloud.Data
File(s): /builds/yukaitung/lgdxrobot2-cloud/LGDXRobotCloud.Data/DbContexts/LgdxContext.cs
Line coverage
100%
Covered lines: 192
Uncovered lines: 0
Coverable lines: 192
Total lines: 225
Line coverage: 100%
Branch coverage
100%
Covered branches: 2
Total branches: 2
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
get_ApiKeys()100%11100%
get_AutoTasks()100%11100%
get_AutoTasksDetail()100%11100%
get_AutoTasksJourney()100%11100%
get_Flows()100%11100%
get_FlowDetails()100%11100%
get_Progresses()100%11100%
get_Triggers()100%11100%
get_TriggerRetries()100%11100%
get_Realms()100%11100%
get_Robots()100%11100%
get_RobotCertificates()100%11100%
get_RobotChassisInfos()100%11100%
get_RobotSystemInfos()100%11100%
get_Waypoints()100%11100%
get_WaypointTraffics()100%11100%
ConfigureConventions(...)100%11100%
OnModelCreating(...)100%22100%

File(s)

/builds/yukaitung/lgdxrobot2-cloud/LGDXRobotCloud.Data/DbContexts/LgdxContext.cs

#LineLine coverage
 1using LGDXRobotCloud.Data.Entities;
 2using LGDXRobotCloud.Utilities.Enums;
 3using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
 4using Microsoft.EntityFrameworkCore;
 5using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
 6
 7namespace LGDXRobotCloud.Data.DbContexts;
 8
 5249public class LgdxContext(DbContextOptions<LgdxContext> options) : IdentityDbContext<LgdxUser, LgdxRole, string>(options)
 10{
 11  // Administration
 26212  public virtual DbSet<ApiKey> ApiKeys { get; set; }
 13
 14  // Automation
 26215  public virtual DbSet<AutoTask> AutoTasks { get; set; }
 26216  public virtual DbSet<AutoTaskDetail> AutoTasksDetail { get; set; }
 26217  public virtual DbSet<AutoTaskJourney> AutoTasksJourney { get; set; }
 26218  public virtual DbSet<Flow> Flows { get; set; }
 26219  public virtual DbSet<FlowDetail> FlowDetails { get; set; }
 26220  public virtual DbSet<Progress> Progresses { get; set; }
 26221  public virtual DbSet<Trigger> Triggers { get; set; }
 26222  public virtual DbSet<TriggerRetry> TriggerRetries { get; set; }
 23
 24  // Navigation
 26225  public virtual DbSet<Realm> Realms { get; set; }
 26226  public virtual DbSet<Robot> Robots { get; set; }
 26227  public virtual DbSet<RobotCertificate> RobotCertificates { get; set; }
 26228  public virtual DbSet<RobotChassisInfo> RobotChassisInfos { get; set; }
 26229  public virtual DbSet<RobotSystemInfo> RobotSystemInfos { get; set; }
 26230  public virtual DbSet<Waypoint> Waypoints { get; set; }
 26231  public virtual DbSet<WaypointTraffic> WaypointTraffics { get; set; }
 32
 33  protected override void ConfigureConventions(ModelConfigurationBuilder configurationBuilder)
 134  {
 135    configurationBuilder
 136      .Properties<DateTime>()
 137      .HaveConversion(typeof(UtcValueConverter));
 138  }
 39
 40  protected override void OnModelCreating(ModelBuilder modelBuilder)
 141  {
 7042    foreach (var relationship in modelBuilder.Model.GetEntityTypes().SelectMany(e => e.GetForeignKeys()))
 2243    {
 2244      relationship.DeleteBehavior = DeleteBehavior.Restrict;
 2245    }
 46
 47    // Automation.AutoTasks
 148    modelBuilder.Entity<AutoTask>()
 149      .HasMany(e => e.AutoTaskDetails)
 150      .WithOne(e => e.AutoTask)
 151      .HasForeignKey(e => e.AutoTaskId)
 152      .OnDelete(DeleteBehavior.Cascade)
 153      .IsRequired();
 154    modelBuilder.Entity<AutoTask>()
 155      .HasOne(e => e.Realm)
 156      .WithMany()
 157      .OnDelete(DeleteBehavior.Cascade)
 158      .IsRequired();
 159    modelBuilder.Entity<AutoTask>()
 160      .HasOne(e => e.AssignedRobot)
 161      .WithMany(e => e.AssignedTasks)
 162      .HasForeignKey(e => e.AssignedRobotId)
 163      .IsRequired(false)
 164      .OnDelete(DeleteBehavior.SetNull);
 165    modelBuilder.Entity<AutoTask>()
 166      .HasOne(e => e.Flow)
 167      .WithMany()
 168      .HasForeignKey(e => e.FlowId)
 169      .IsRequired(false)
 170      .OnDelete(DeleteBehavior.SetNull);
 171    modelBuilder.Entity<AutoTaskDetail>()
 172      .HasOne(e => e.Waypoint)
 173      .WithMany()
 174      .HasForeignKey(e => e.WaypointId)
 175      .OnDelete(DeleteBehavior.SetNull)
 176      .IsRequired(false);
 177    modelBuilder.Entity<AutoTaskJourney>()
 178      .HasOne(e => e.CurrentProgress)
 179      .WithMany()
 180      .HasForeignKey(e => e.CurrentProgressId)
 181      .OnDelete(DeleteBehavior.SetNull)
 182      .IsRequired(false);
 83    // Automation.FlowDetails
 184    modelBuilder.Entity<Flow>()
 185      .HasMany(e => e.FlowDetails)
 186      .WithOne(e => e.Flow)
 187      .HasForeignKey(e => e.FlowId)
 188      .OnDelete(DeleteBehavior.Cascade)
 189      .IsRequired();
 90    // Automation.TriggerRetries
 191    modelBuilder.Entity<TriggerRetry>()
 192      .HasOne(e => e.Trigger)
 193      .WithMany()
 194      .HasForeignKey(e => e.TriggerId)
 195      .IsRequired(true)
 196      .OnDelete(DeleteBehavior.Cascade);
 197    modelBuilder.Entity<TriggerRetry>()
 198      .HasOne(e => e.AutoTask)
 199      .WithMany()
 1100      .HasForeignKey(e => e.AutoTaskId)
 1101      .IsRequired(true)
 1102      .OnDelete(DeleteBehavior.Cascade);
 103    // Automation.Triggers
 1104    modelBuilder.Entity<Trigger>()
 1105      .HasOne(e => e.ApiKey)
 1106      .WithMany()
 1107      .HasForeignKey(e => e.ApiKeyId)
 1108      .IsRequired(false)
 1109      .OnDelete(DeleteBehavior.SetNull);
 110
 111    // Navigation.Robots
 1112    modelBuilder.Entity<Robot>()
 1113      .HasOne(e => e.RobotSystemInfo)
 1114      .WithOne(e => e.Robot)
 1115      .HasForeignKey<RobotSystemInfo>(e => e.RobotId)
 1116      .IsRequired(false)
 1117      .OnDelete(DeleteBehavior.Cascade);
 1118    modelBuilder.Entity<Robot>()
 1119      .HasOne(e => e.RobotChassisInfo)
 1120      .WithOne(e => e.Robot)
 1121      .HasForeignKey<RobotChassisInfo>(e => e.RobotId)
 1122      .IsRequired(false)
 1123      .OnDelete(DeleteBehavior.Cascade);
 1124    modelBuilder.Entity<Robot>()
 1125      .HasOne(e => e.RobotCertificate)
 1126      .WithOne(e => e.Robot)
 1127      .HasForeignKey<RobotCertificate>(e => e.RobotId)
 1128      .IsRequired()
 1129      .OnDelete(DeleteBehavior.Cascade);
 130
 1131    modelBuilder.Entity<Realm>().HasData(
 1132      new Realm
 1133      {
 1134        Id = 1,
 1135        Name = "First Realm",
 1136        Description = "Please update this realm",
 1137        Image = [],
 1138        Resolution = 0,
 1139        OriginX = 0,
 1140        OriginY = 0,
 1141        OriginRotation = 0,
 1142      }
 1143    );
 144
 1145    modelBuilder.Entity<Progress>().HasData(
 1146      new Progress
 1147      {
 1148        Id = (int)ProgressState.Template,
 1149        Name = "Template",
 1150        System = true,
 1151        Reserved = true
 1152      },
 1153      new Progress
 1154      {
 1155        Id = (int)ProgressState.Waiting,
 1156        Name = "Waiting",
 1157        System = true,
 1158        Reserved = true
 1159      },
 1160      new Progress
 1161      {
 1162        Id = (int)ProgressState.Completed,
 1163        Name = "Completed",
 1164        System = true,
 1165        Reserved = true
 1166      },
 1167      new Progress
 1168      {
 1169        Id = (int)ProgressState.Aborted,
 1170        Name = "Aborted",
 1171        System = true,
 1172        Reserved = true
 1173      },
 1174      new Progress
 1175      {
 1176        Id = (int)ProgressState.Starting,
 1177        Name = "Starting",
 1178        System = true
 1179      },
 1180      new Progress
 1181      {
 1182        Id = (int)ProgressState.Loading,
 1183        Name = "Loading",
 1184        System = true
 1185      },
 1186      new Progress
 1187      {
 1188        Id = (int)ProgressState.PreMoving,
 1189        Name = "PreMoving",
 1190        System = true
 1191      },
 1192      new Progress
 1193      {
 1194        Id = (int)ProgressState.Moving,
 1195        Name = "Moving",
 1196        System = true
 1197      },
 1198      new Progress
 1199      {
 1200        Id = (int)ProgressState.Unloading,
 1201        Name = "Unloading",
 1202        System = true
 1203      },
 1204      new Progress
 1205      {
 1206        Id = (int)ProgressState.Completing,
 1207        Name = "Completing",
 1208        System = true
 1209      },
 1210      new Progress
 1211      {
 1212        Id = (int)ProgressState.Reserved,
 1213        Name = "Reserved",
 1214        System = true,
 1215        Reserved = true
 1216      }
 1217    );
 1218    base.OnModelCreating(modelBuilder);
 1219  }
 220}
 221
 222class UtcValueConverter : ValueConverter<DateTime, DateTime>
 223{
 224  public UtcValueConverter() : base(v => v, v => DateTime.SpecifyKind(v, DateTimeKind.Utc)) {}
 225}