< Summary

Information
Class: LGDXRobotCloud.Data.DbContexts.LgdxContext
Assembly: LGDXRobotCloud.Data
File(s): /builds/yukaitung/lgdxrobot2-cloud/LGDXRobotCloud.Data/DbContexts/LgdxContext.cs
Line coverage
0%
Covered lines: 1
Uncovered lines: 183
Coverable lines: 184
Total lines: 217
Line coverage: 0.5%
Branch coverage
0%
Covered branches: 0
Total branches: 2
Branch coverage: 0%
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%210%
get_AutoTasks()100%210%
get_AutoTasksDetail()100%210%
get_Flows()100%210%
get_FlowDetails()100%210%
get_Progresses()100%210%
get_Triggers()100%210%
get_TriggerRetries()100%210%
get_Realms()100%210%
get_Robots()100%210%
get_RobotCertificates()100%210%
get_RobotChassisInfos()100%210%
get_RobotSystemInfos()100%210%
get_Waypoints()100%210%
ConfigureConventions(...)100%210%
OnModelCreating(...)0%620%

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
 19public class LgdxContext(DbContextOptions<LgdxContext> options) : IdentityDbContext<LgdxUser, LgdxRole, string>(options)
 10{
 11  // Administration
 012  public virtual DbSet<ApiKey> ApiKeys { get; set; }
 13
 14  // Automation
 015  public virtual DbSet<AutoTask> AutoTasks { get; set; }
 016  public virtual DbSet<AutoTaskDetail> AutoTasksDetail { get; set; }
 017  public virtual DbSet<Flow> Flows { get; set; }
 018  public virtual DbSet<FlowDetail> FlowDetails { get; set; }
 019  public virtual DbSet<Progress> Progresses { get; set; }
 020  public virtual DbSet<Trigger> Triggers { get; set; }
 021  public virtual DbSet<TriggerRetry> TriggerRetries { get; set; }
 22
 23  // Navigation
 024  public virtual DbSet<Realm> Realms { get; set; }
 025  public virtual DbSet<Robot> Robots { get; set; }
 026  public virtual DbSet<RobotCertificate> RobotCertificates { get; set; }
 027  public virtual DbSet<RobotChassisInfo> RobotChassisInfos { get; set; }
 028  public virtual DbSet<RobotSystemInfo> RobotSystemInfos { get; set; }
 029  public virtual DbSet<Waypoint> Waypoints { get; set; }
 30
 31  protected override void ConfigureConventions(ModelConfigurationBuilder configurationBuilder)
 032  {
 033    configurationBuilder
 034      .Properties<DateTime>()
 035      .HaveConversion(typeof(UtcValueConverter));
 036  }
 37
 38  protected override void OnModelCreating(ModelBuilder modelBuilder)
 039  {
 040    foreach (var relationship in modelBuilder.Model.GetEntityTypes().SelectMany(e => e.GetForeignKeys()))
 041    {
 042      relationship.DeleteBehavior = DeleteBehavior.Restrict;
 043    }
 44
 45    // Automation.AutoTasks
 046    modelBuilder.Entity<AutoTask>()
 047      .HasMany(e => e.AutoTaskDetails)
 048      .WithOne(e => e.AutoTask)
 049      .HasForeignKey(e => e.AutoTaskId)
 050      .OnDelete(DeleteBehavior.Cascade)
 051      .IsRequired();
 052    modelBuilder.Entity<AutoTask>()
 053      .HasOne(e => e.Realm)
 054      .WithMany()
 055      .OnDelete(DeleteBehavior.Cascade)
 056      .IsRequired();
 057    modelBuilder.Entity<AutoTask>()
 058      .HasOne(e => e.AssignedRobot)
 059      .WithMany(e => e.AssignedTasks)
 060      .HasForeignKey(e => e.AssignedRobotId)
 061      .IsRequired(false)
 062      .OnDelete(DeleteBehavior.SetNull);
 063    modelBuilder.Entity<AutoTask>()
 064      .HasOne(e => e.Flow)
 065      .WithMany()
 066      .HasForeignKey(e => e.FlowId)
 067      .IsRequired(false)
 068      .OnDelete(DeleteBehavior.SetNull);
 069    modelBuilder.Entity<AutoTaskDetail>()
 070      .HasOne(e => e.Waypoint)
 071      .WithMany()
 072      .HasForeignKey(e => e.WaypointId)
 073      .OnDelete(DeleteBehavior.SetNull)
 074      .IsRequired(false);
 75    // Automation.FlowDetails
 076    modelBuilder.Entity<Flow>()
 077      .HasMany(e => e.FlowDetails)
 078      .WithOne(e => e.Flow)
 079      .HasForeignKey(e => e.FlowId)
 080      .OnDelete(DeleteBehavior.Cascade)
 081      .IsRequired();
 82    // Automation.TriggerRetries
 083    modelBuilder.Entity<TriggerRetry>()
 084      .HasOne(e => e.Trigger)
 085      .WithMany()
 086      .HasForeignKey(e => e.TriggerId)
 087      .IsRequired(true)
 088      .OnDelete(DeleteBehavior.Cascade);
 089    modelBuilder.Entity<TriggerRetry>()
 090      .HasOne(e => e.AutoTask)
 091      .WithMany()
 092      .HasForeignKey(e => e.AutoTaskId)
 093      .IsRequired(true)
 094      .OnDelete(DeleteBehavior.Cascade);
 95    // Automation.Triggers
 096    modelBuilder.Entity<Trigger>()
 097      .HasOne(e => e.ApiKey)
 098      .WithMany()
 099      .HasForeignKey(e => e.ApiKeyId)
 0100      .IsRequired(false)
 0101      .OnDelete(DeleteBehavior.SetNull);
 102
 103    // Navigation.Robots
 0104    modelBuilder.Entity<Robot>()
 0105      .HasOne(e => e.RobotSystemInfo)
 0106      .WithOne(e => e.Robot)
 0107      .HasForeignKey<RobotSystemInfo>(e => e.RobotId)
 0108      .IsRequired(false)
 0109      .OnDelete(DeleteBehavior.Cascade);
 0110    modelBuilder.Entity<Robot>()
 0111      .HasOne(e => e.RobotChassisInfo)
 0112      .WithOne(e => e.Robot)
 0113      .HasForeignKey<RobotChassisInfo>(e => e.RobotId)
 0114      .IsRequired(false)
 0115      .OnDelete(DeleteBehavior.Cascade);
 0116    modelBuilder.Entity<Robot>()
 0117      .HasOne(e => e.RobotCertificate)
 0118      .WithOne(e => e.Robot)
 0119      .HasForeignKey<RobotCertificate>(e => e.RobotId)
 0120      .IsRequired()
 0121      .OnDelete(DeleteBehavior.Cascade);
 122
 0123    modelBuilder.Entity<Realm>().HasData(
 0124      new Realm
 0125      {
 0126        Id = 1,
 0127        Name = "First Realm",
 0128        Description = "Please update this realm",
 0129        Image = [],
 0130        Resolution = 0,
 0131        OriginX = 0,
 0132        OriginY = 0,
 0133        OriginRotation = 0,
 0134      }
 0135    );
 136
 0137    modelBuilder.Entity<Progress>().HasData(
 0138      new Progress
 0139      {
 0140        Id = (int)ProgressState.Template,
 0141        Name = "Template",
 0142        System = true,
 0143        Reserved = true
 0144      },
 0145      new Progress
 0146      {
 0147        Id = (int)ProgressState.Waiting,
 0148        Name = "Waiting",
 0149        System = true,
 0150        Reserved = true
 0151      },
 0152      new Progress
 0153      {
 0154        Id = (int)ProgressState.Completed,
 0155        Name = "Completed",
 0156        System = true,
 0157        Reserved = true
 0158      },
 0159      new Progress
 0160      {
 0161        Id = (int)ProgressState.Aborted,
 0162        Name = "Aborted",
 0163        System = true,
 0164        Reserved = true
 0165      },
 0166      new Progress
 0167      {
 0168        Id = (int)ProgressState.Starting,
 0169        Name = "Starting",
 0170        System = true
 0171      },
 0172      new Progress
 0173      {
 0174        Id = (int)ProgressState.Loading,
 0175        Name = "Loading",
 0176        System = true
 0177      },
 0178      new Progress
 0179      {
 0180        Id = (int)ProgressState.PreMoving,
 0181        Name = "PreMoving",
 0182        System = true
 0183      },
 0184      new Progress
 0185      {
 0186        Id = (int)ProgressState.Moving,
 0187        Name = "Moving",
 0188        System = true
 0189      },
 0190      new Progress
 0191      {
 0192        Id = (int)ProgressState.Unloading,
 0193        Name = "Unloading",
 0194        System = true
 0195      },
 0196      new Progress
 0197      {
 0198        Id = (int)ProgressState.Completing,
 0199        Name = "Completing",
 0200        System = true
 0201      },
 0202      new Progress
 0203      {
 0204        Id = (int)ProgressState.Reserved,
 0205        Name = "Reserved",
 0206        System = true,
 0207        Reserved = true
 0208      }
 0209    );
 0210    base.OnModelCreating(modelBuilder);
 0211  }
 212}
 213
 214class UtcValueConverter : ValueConverter<DateTime, DateTime>
 215{
 216  public UtcValueConverter() : base(v => v, v => DateTime.SpecifyKind(v, DateTimeKind.Utc)) {}
 217}