using System; using Microsoft.EntityFrameworkCore; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using SpaceRace.Shared; namespace Server; public class SpaceRaceDbContext : DbContext { public DbSet Laps { get; set; } public DbSet PbDTO { get; set; } public SpaceRaceDbContext(DbContextOptions options) : base(options) {} protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); new SpaceRaceInitialiser(modelBuilder).Seed(); modelBuilder.Entity() .HasNoKey() .ToTable(null as string); } } [Index(nameof(UserId), nameof(Map), IsUnique = true)] [Index(nameof(Map))] public class Lap { [Key, DatabaseGenerated(DatabaseGeneratedOption.None)] public Guid Id { get; set; } public Guid UserId { get; set; } [Required] public DateTimeOffset Created { get; set; } [Required] public double Time { get; set; } [Required] public List Sectors { get; set; } [Required] [MaxLength(128)] public string Map { get; set; } } class SpaceRaceInitialiser { private readonly ModelBuilder modelBuilder; public SpaceRaceInitialiser(ModelBuilder modelBuilder) { this.modelBuilder = modelBuilder; } public void Seed() { modelBuilder.Entity().HasData( new Lap { Created = DateTimeOffset.UtcNow, Id = Guid.NewGuid(), UserId = new Guid("11111111-1111-1111-1111-111111111111"), Time = 128f, Sectors = new List { 64f, 24f, 24f }, Map = "sr_testtrack", }, new Lap { Created = DateTimeOffset.UtcNow, Id = Guid.NewGuid(), UserId = new Guid("22222222-2222-2222-2222-222222222222"), Time = 256f, Sectors = new List { 64f, 64f, 128f }, Map = "sr_junglism", }, new Lap { Created = DateTimeOffset.UtcNow, Id = Guid.NewGuid(), UserId = new Guid("33333333-3333-3333-3333-333333333333"), Time = 256f, Sectors = new List { 64f, 64f, 128f }, Map = "sr_silverstorage", } ); } }