< Summary

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

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor()100%11100%

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
 9public class LgdxContext(DbContextOptions<LgdxContext> options) : IdentityDbContext<LgdxUser, LgdxRole, string>(options)
 10{
 11  // Administration
 12  public virtual DbSet<ApiKey> ApiKeys { get; set; }
 13
 14  // Automation
 15  public virtual DbSet<AutoTask> AutoTasks { get; set; }
 16  public virtual DbSet<AutoTaskDetail> AutoTasksDetail { get; set; }
 17  public virtual DbSet<AutoTaskJourney> AutoTasksJourney { get; set; }
 18  public virtual DbSet<Flow> Flows { get; set; }
 19  public virtual DbSet<FlowDetail> FlowDetails { get; set; }
 20  public virtual DbSet<Progress> Progresses { get; set; }
 21  public virtual DbSet<Trigger> Triggers { get; set; }
 22  public virtual DbSet<TriggerRetry> TriggerRetries { get; set; }
 23
 24  // Navigation
 25  public virtual DbSet<Realm> Realms { get; set; }
 26  public virtual DbSet<Robot> Robots { get; set; }
 27  public virtual DbSet<RobotCertificate> RobotCertificates { get; set; }
 28  public virtual DbSet<RobotChassisInfo> RobotChassisInfos { get; set; }
 29  public virtual DbSet<RobotSystemInfo> RobotSystemInfos { get; set; }
 30  public virtual DbSet<Waypoint> Waypoints { get; set; }
 31
 32  protected override void ConfigureConventions(ModelConfigurationBuilder configurationBuilder)
 33  {
 34    configurationBuilder
 35      .Properties<DateTime>()
 36      .HaveConversion(typeof(UtcValueConverter));
 37  }
 38
 39  protected override void OnModelCreating(ModelBuilder modelBuilder)
 40  {
 41    foreach (var relationship in modelBuilder.Model.GetEntityTypes().SelectMany(e => e.GetForeignKeys()))
 42    {
 43      relationship.DeleteBehavior = DeleteBehavior.Restrict;
 44    }
 45
 46    // Automation.AutoTasks
 47    modelBuilder.Entity<AutoTask>()
 48      .HasMany(e => e.AutoTaskDetails)
 49      .WithOne(e => e.AutoTask)
 50      .HasForeignKey(e => e.AutoTaskId)
 51      .OnDelete(DeleteBehavior.Cascade)
 52      .IsRequired();
 53    modelBuilder.Entity<AutoTask>()
 54      .HasOne(e => e.Realm)
 55      .WithMany()
 56      .OnDelete(DeleteBehavior.Cascade)
 57      .IsRequired();
 58    modelBuilder.Entity<AutoTask>()
 59      .HasOne(e => e.AssignedRobot)
 60      .WithMany(e => e.AssignedTasks)
 61      .HasForeignKey(e => e.AssignedRobotId)
 62      .IsRequired(false)
 63      .OnDelete(DeleteBehavior.SetNull);
 64    modelBuilder.Entity<AutoTask>()
 65      .HasOne(e => e.Flow)
 66      .WithMany()
 67      .HasForeignKey(e => e.FlowId)
 68      .IsRequired(false)
 69      .OnDelete(DeleteBehavior.SetNull);
 70    modelBuilder.Entity<AutoTaskDetail>()
 71      .HasOne(e => e.Waypoint)
 72      .WithMany()
 73      .HasForeignKey(e => e.WaypointId)
 74      .OnDelete(DeleteBehavior.SetNull)
 75      .IsRequired(false);
 76    modelBuilder.Entity<AutoTaskJourney>()
 77      .HasOne(e => e.CurrentProgress)
 78      .WithMany()
 79      .HasForeignKey(e => e.CurrentProgressId)
 80      .OnDelete(DeleteBehavior.SetNull)
 81      .IsRequired(false);
 82    // Automation.FlowDetails
 83    modelBuilder.Entity<Flow>()
 84      .HasMany(e => e.FlowDetails)
 85      .WithOne(e => e.Flow)
 86      .HasForeignKey(e => e.FlowId)
 87      .OnDelete(DeleteBehavior.Cascade)
 88      .IsRequired();
 89    // Automation.TriggerRetries
 90    modelBuilder.Entity<TriggerRetry>()
 91      .HasOne(e => e.Trigger)
 92      .WithMany()
 93      .HasForeignKey(e => e.TriggerId)
 94      .IsRequired(true)
 95      .OnDelete(DeleteBehavior.Cascade);
 96    modelBuilder.Entity<TriggerRetry>()
 97      .HasOne(e => e.AutoTask)
 98      .WithMany()
 99      .HasForeignKey(e => e.AutoTaskId)
 100      .IsRequired(true)
 101      .OnDelete(DeleteBehavior.Cascade);
 102    // Automation.Triggers
 103    modelBuilder.Entity<Trigger>()
 104      .HasOne(e => e.ApiKey)
 105      .WithMany()
 106      .HasForeignKey(e => e.ApiKeyId)
 107      .IsRequired(false)
 108      .OnDelete(DeleteBehavior.SetNull);
 109
 110    // Navigation.Robots
 111    modelBuilder.Entity<Robot>()
 112      .HasOne(e => e.RobotSystemInfo)
 113      .WithOne(e => e.Robot)
 114      .HasForeignKey<RobotSystemInfo>(e => e.RobotId)
 115      .IsRequired(false)
 116      .OnDelete(DeleteBehavior.Cascade);
 117    modelBuilder.Entity<Robot>()
 118      .HasOne(e => e.RobotChassisInfo)
 119      .WithOne(e => e.Robot)
 120      .HasForeignKey<RobotChassisInfo>(e => e.RobotId)
 121      .IsRequired(false)
 122      .OnDelete(DeleteBehavior.Cascade);
 123    modelBuilder.Entity<Robot>()
 124      .HasOne(e => e.RobotCertificate)
 125      .WithOne(e => e.Robot)
 126      .HasForeignKey<RobotCertificate>(e => e.RobotId)
 127      .IsRequired()
 128      .OnDelete(DeleteBehavior.Cascade);
 129
 130    modelBuilder.Entity<Realm>().HasData(
 131      new Realm
 132      {
 133        Id = 1,
 134        Name = "First Realm",
 135        Description = "Please update this realm",
 136        Image = [],
 137        Resolution = 0,
 138        OriginX = 0,
 139        OriginY = 0,
 140        OriginRotation = 0,
 141      }
 142    );
 143
 144    modelBuilder.Entity<Progress>().HasData(
 145      new Progress
 146      {
 147        Id = (int)ProgressState.Template,
 148        Name = "Template",
 149        System = true,
 150        Reserved = true
 151      },
 152      new Progress
 153      {
 154        Id = (int)ProgressState.Waiting,
 155        Name = "Waiting",
 156        System = true,
 157        Reserved = true
 158      },
 159      new Progress
 160      {
 161        Id = (int)ProgressState.Completed,
 162        Name = "Completed",
 163        System = true,
 164        Reserved = true
 165      },
 166      new Progress
 167      {
 168        Id = (int)ProgressState.Aborted,
 169        Name = "Aborted",
 170        System = true,
 171        Reserved = true
 172      },
 173      new Progress
 174      {
 175        Id = (int)ProgressState.Starting,
 176        Name = "Starting",
 177        System = true
 178      },
 179      new Progress
 180      {
 181        Id = (int)ProgressState.Loading,
 182        Name = "Loading",
 183        System = true
 184      },
 185      new Progress
 186      {
 187        Id = (int)ProgressState.PreMoving,
 188        Name = "PreMoving",
 189        System = true
 190      },
 191      new Progress
 192      {
 193        Id = (int)ProgressState.Moving,
 194        Name = "Moving",
 195        System = true
 196      },
 197      new Progress
 198      {
 199        Id = (int)ProgressState.Unloading,
 200        Name = "Unloading",
 201        System = true
 202      },
 203      new Progress
 204      {
 205        Id = (int)ProgressState.Completing,
 206        Name = "Completing",
 207        System = true
 208      },
 209      new Progress
 210      {
 211        Id = (int)ProgressState.Reserved,
 212        Name = "Reserved",
 213        System = true,
 214        Reserved = true
 215      }
 216    );
 217    base.OnModelCreating(modelBuilder);
 218  }
 219}
 220
 221class UtcValueConverter : ValueConverter<DateTime, DateTime>
 222{
 12223  public UtcValueConverter() : base(v => v, v => DateTime.SpecifyKind(v, DateTimeKind.Utc)) {}
 224}

Methods/Properties

.ctor()