From c66c6654c51a32fa78974d2085d2e532d640db2b Mon Sep 17 00:00:00 2001 From: ntr Date: Tue, 29 Aug 2023 20:18:34 +1000 Subject: [PATCH] add sectors to laps table --- .../Migrations/20230829062456_Beginninging.cs | 79 ------------------- ...=> 20230829101729_InitSectors.Designer.cs} | 29 ++++--- .../Migrations/20230829101729_InitSectors.cs | 62 +++++++++++++++ .../SpaceRaceDbContextModelSnapshot.cs | 25 ++++-- Server/Models/SpaceRaceShared.cs | 16 ++-- Server/Repositories/SpaceRaceDbContext.cs | 37 +++++---- docker-compose.yaml | 26 +++--- 7 files changed, 143 insertions(+), 131 deletions(-) delete mode 100644 Server/Migrations/20230829062456_Beginninging.cs rename Server/Migrations/{20230829062456_Beginninging.Designer.cs => 20230829101729_InitSectors.Designer.cs} (75%) create mode 100644 Server/Migrations/20230829101729_InitSectors.cs diff --git a/Server/Migrations/20230829062456_Beginninging.cs b/Server/Migrations/20230829062456_Beginninging.cs deleted file mode 100644 index ca2e502..0000000 --- a/Server/Migrations/20230829062456_Beginninging.cs +++ /dev/null @@ -1,79 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -#pragma warning disable CA1814 // Prefer jagged arrays over multidimensional - -namespace Server.Migrations -{ - /// - public partial class Beginninging : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "Laps", - columns: table => new - { - Id = table.Column(type: "uuid", nullable: false), - Created = table.Column(type: "timestamp with time zone", nullable: false), - UserId = table.Column(type: "uuid", nullable: false), - Time = table.Column(type: "double precision", nullable: false), - Map = table.Column(type: "text", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Laps", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "PbDTO", - columns: table => new - { - Id = table.Column(type: "uuid", nullable: false), - UserId = table.Column(type: "uuid", nullable: false), - Created = table.Column(type: "timestamp with time zone", nullable: false), - Time = table.Column(type: "double precision", nullable: false), - Map = table.Column(type: "text", nullable: true), - Completions = table.Column(type: "integer", nullable: false), - Position = table.Column(type: "integer", nullable: false) - }, - constraints: table => - { - }); - - migrationBuilder.InsertData( - table: "Laps", - columns: new[] { "Id", "Created", "Map", "Time", "UserId" }, - values: new object[,] - { - { new Guid("42ee5177-d287-4ea1-91ed-ddd1d596e81f"), new DateTimeOffset(new DateTime(2023, 8, 29, 6, 24, 56, 272, DateTimeKind.Unspecified).AddTicks(1375), new TimeSpan(0, 0, 0, 0, 0)), "sr_TestTrack", 128.0, new Guid("11111111-1111-1111-1111-111111111111") }, - { new Guid("69002b76-54e2-455f-99aa-2fdb7f11c130"), new DateTimeOffset(new DateTime(2023, 8, 29, 6, 24, 56, 272, DateTimeKind.Unspecified).AddTicks(1471), new TimeSpan(0, 0, 0, 0, 0)), "sr_TestTrack", 148.0, new Guid("33333333-3333-3333-3333-333333333333") }, - { new Guid("81eb5dcb-1dd4-483b-993e-e73e1b95c5ff"), new DateTimeOffset(new DateTime(2023, 8, 29, 6, 24, 56, 272, DateTimeKind.Unspecified).AddTicks(1459), new TimeSpan(0, 0, 0, 0, 0)), "sr_TestTrack", 132.0, new Guid("22222222-2222-2222-2222-222222222222") } - }); - - migrationBuilder.CreateIndex( - name: "IX_Laps_Map", - table: "Laps", - column: "Map"); - - migrationBuilder.CreateIndex( - name: "IX_Laps_UserId_Map", - table: "Laps", - columns: new[] { "UserId", "Map" }, - unique: true); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "Laps"); - - migrationBuilder.DropTable( - name: "PbDTO"); - } - } -} diff --git a/Server/Migrations/20230829062456_Beginninging.Designer.cs b/Server/Migrations/20230829101729_InitSectors.Designer.cs similarity index 75% rename from Server/Migrations/20230829062456_Beginninging.Designer.cs rename to Server/Migrations/20230829101729_InitSectors.Designer.cs index dc1aaac..337bbca 100644 --- a/Server/Migrations/20230829062456_Beginninging.Designer.cs +++ b/Server/Migrations/20230829101729_InitSectors.Designer.cs @@ -1,5 +1,6 @@ // using System; +using System.Collections.Generic; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Migrations; @@ -12,8 +13,8 @@ using Server; namespace Server.Migrations { [DbContext(typeof(SpaceRaceDbContext))] - [Migration("20230829062456_Beginninging")] - partial class Beginninging + [Migration("20230829101729_InitSectors")] + partial class InitSectors { /// protected override void BuildTargetModel(ModelBuilder modelBuilder) @@ -38,6 +39,10 @@ namespace Server.Migrations .IsRequired() .HasColumnType("text"); + b.Property>("Sectors") + .IsRequired() + .HasColumnType("double precision[]"); + b.Property("Time") .HasColumnType("double precision"); @@ -56,25 +61,28 @@ namespace Server.Migrations b.HasData( new { - Id = new Guid("42ee5177-d287-4ea1-91ed-ddd1d596e81f"), - Created = new DateTimeOffset(new DateTime(2023, 8, 29, 6, 24, 56, 272, DateTimeKind.Unspecified).AddTicks(1375), new TimeSpan(0, 0, 0, 0, 0)), + Id = new Guid("589bfb11-59c1-4f7e-beef-973c301b8e08"), + Created = new DateTimeOffset(new DateTime(2023, 8, 29, 10, 17, 29, 656, DateTimeKind.Unspecified).AddTicks(467), new TimeSpan(0, 0, 0, 0, 0)), Map = "sr_TestTrack", + Sectors = new List { 64.0, 24.0, 24.0 }, Time = 128.0, UserId = new Guid("11111111-1111-1111-1111-111111111111") }, new { - Id = new Guid("81eb5dcb-1dd4-483b-993e-e73e1b95c5ff"), - Created = new DateTimeOffset(new DateTime(2023, 8, 29, 6, 24, 56, 272, DateTimeKind.Unspecified).AddTicks(1459), new TimeSpan(0, 0, 0, 0, 0)), + Id = new Guid("67bda0f2-ecf8-4521-ba21-08d252d9ce59"), + Created = new DateTimeOffset(new DateTime(2023, 8, 29, 10, 17, 29, 656, DateTimeKind.Unspecified).AddTicks(723), new TimeSpan(0, 0, 0, 0, 0)), Map = "sr_TestTrack", + Sectors = new List { 64.0, 38.0, 24.0 }, Time = 132.0, UserId = new Guid("22222222-2222-2222-2222-222222222222") }, new { - Id = new Guid("69002b76-54e2-455f-99aa-2fdb7f11c130"), - Created = new DateTimeOffset(new DateTime(2023, 8, 29, 6, 24, 56, 272, DateTimeKind.Unspecified).AddTicks(1471), new TimeSpan(0, 0, 0, 0, 0)), + Id = new Guid("678183de-9df4-4d98-9807-f288b54a7f3a"), + Created = new DateTimeOffset(new DateTime(2023, 8, 29, 10, 17, 29, 656, DateTimeKind.Unspecified).AddTicks(745), new TimeSpan(0, 0, 0, 0, 0)), Map = "sr_TestTrack", + Sectors = new List { 64.0, 64.0, 24.0 }, Time = 148.0, UserId = new Guid("33333333-3333-3333-3333-333333333333") }); @@ -97,13 +105,16 @@ namespace Server.Migrations b.Property("Position") .HasColumnType("integer"); + b.Property>("Sectors") + .HasColumnType("double precision[]"); + b.Property("Time") .HasColumnType("double precision"); b.Property("UserId") .HasColumnType("uuid"); - b.ToTable("PbDTO"); + b.ToTable((string)null); b.ToSqlQuery("WITH ranked AS (\n SELECT *, rank() OVER (ORDER BY \"Time\" ASC) AS \"Position\", COUNT(\"Id\") OVER () AS \"Completions\"\n FROM \"Laps\"\n)\n\nSELECT * FROM ranked"); }); diff --git a/Server/Migrations/20230829101729_InitSectors.cs b/Server/Migrations/20230829101729_InitSectors.cs new file mode 100644 index 0000000..4cbd042 --- /dev/null +++ b/Server/Migrations/20230829101729_InitSectors.cs @@ -0,0 +1,62 @@ +using System; +using System.Collections.Generic; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +#pragma warning disable CA1814 // Prefer jagged arrays over multidimensional + +namespace Server.Migrations +{ + /// + public partial class InitSectors : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "Laps", + columns: table => new + { + Id = table.Column(type: "uuid", nullable: false), + UserId = table.Column(type: "uuid", nullable: false), + Created = table.Column(type: "timestamp with time zone", nullable: false), + Time = table.Column(type: "double precision", nullable: false), + Sectors = table.Column>(type: "double precision[]", nullable: false), + Map = table.Column(type: "text", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Laps", x => x.Id); + }); + + migrationBuilder.InsertData( + table: "Laps", + columns: new[] { "Id", "Created", "Map", "Sectors", "Time", "UserId" }, + values: new object[,] + { + { new Guid("589bfb11-59c1-4f7e-beef-973c301b8e08"), new DateTimeOffset(new DateTime(2023, 8, 29, 10, 17, 29, 656, DateTimeKind.Unspecified).AddTicks(467), new TimeSpan(0, 0, 0, 0, 0)), "sr_TestTrack", new List { 64.0, 24.0, 24.0 }, 128.0, new Guid("11111111-1111-1111-1111-111111111111") }, + { new Guid("678183de-9df4-4d98-9807-f288b54a7f3a"), new DateTimeOffset(new DateTime(2023, 8, 29, 10, 17, 29, 656, DateTimeKind.Unspecified).AddTicks(745), new TimeSpan(0, 0, 0, 0, 0)), "sr_TestTrack", new List { 64.0, 64.0, 24.0 }, 148.0, new Guid("33333333-3333-3333-3333-333333333333") }, + { new Guid("67bda0f2-ecf8-4521-ba21-08d252d9ce59"), new DateTimeOffset(new DateTime(2023, 8, 29, 10, 17, 29, 656, DateTimeKind.Unspecified).AddTicks(723), new TimeSpan(0, 0, 0, 0, 0)), "sr_TestTrack", new List { 64.0, 38.0, 24.0 }, 132.0, new Guid("22222222-2222-2222-2222-222222222222") } + }); + + migrationBuilder.CreateIndex( + name: "IX_Laps_Map", + table: "Laps", + column: "Map"); + + migrationBuilder.CreateIndex( + name: "IX_Laps_UserId_Map", + table: "Laps", + columns: new[] { "UserId", "Map" }, + unique: true); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "Laps"); + } + } +} diff --git a/Server/Migrations/SpaceRaceDbContextModelSnapshot.cs b/Server/Migrations/SpaceRaceDbContextModelSnapshot.cs index d6b723a..ca2d311 100644 --- a/Server/Migrations/SpaceRaceDbContextModelSnapshot.cs +++ b/Server/Migrations/SpaceRaceDbContextModelSnapshot.cs @@ -1,5 +1,6 @@ // using System; +using System.Collections.Generic; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; @@ -35,6 +36,10 @@ namespace Server.Migrations .IsRequired() .HasColumnType("text"); + b.Property>("Sectors") + .IsRequired() + .HasColumnType("double precision[]"); + b.Property("Time") .HasColumnType("double precision"); @@ -53,25 +58,28 @@ namespace Server.Migrations b.HasData( new { - Id = new Guid("42ee5177-d287-4ea1-91ed-ddd1d596e81f"), - Created = new DateTimeOffset(new DateTime(2023, 8, 29, 6, 24, 56, 272, DateTimeKind.Unspecified).AddTicks(1375), new TimeSpan(0, 0, 0, 0, 0)), + Id = new Guid("589bfb11-59c1-4f7e-beef-973c301b8e08"), + Created = new DateTimeOffset(new DateTime(2023, 8, 29, 10, 17, 29, 656, DateTimeKind.Unspecified).AddTicks(467), new TimeSpan(0, 0, 0, 0, 0)), Map = "sr_TestTrack", + Sectors = new List { 64.0, 24.0, 24.0 }, Time = 128.0, UserId = new Guid("11111111-1111-1111-1111-111111111111") }, new { - Id = new Guid("81eb5dcb-1dd4-483b-993e-e73e1b95c5ff"), - Created = new DateTimeOffset(new DateTime(2023, 8, 29, 6, 24, 56, 272, DateTimeKind.Unspecified).AddTicks(1459), new TimeSpan(0, 0, 0, 0, 0)), + Id = new Guid("67bda0f2-ecf8-4521-ba21-08d252d9ce59"), + Created = new DateTimeOffset(new DateTime(2023, 8, 29, 10, 17, 29, 656, DateTimeKind.Unspecified).AddTicks(723), new TimeSpan(0, 0, 0, 0, 0)), Map = "sr_TestTrack", + Sectors = new List { 64.0, 38.0, 24.0 }, Time = 132.0, UserId = new Guid("22222222-2222-2222-2222-222222222222") }, new { - Id = new Guid("69002b76-54e2-455f-99aa-2fdb7f11c130"), - Created = new DateTimeOffset(new DateTime(2023, 8, 29, 6, 24, 56, 272, DateTimeKind.Unspecified).AddTicks(1471), new TimeSpan(0, 0, 0, 0, 0)), + Id = new Guid("678183de-9df4-4d98-9807-f288b54a7f3a"), + Created = new DateTimeOffset(new DateTime(2023, 8, 29, 10, 17, 29, 656, DateTimeKind.Unspecified).AddTicks(745), new TimeSpan(0, 0, 0, 0, 0)), Map = "sr_TestTrack", + Sectors = new List { 64.0, 64.0, 24.0 }, Time = 148.0, UserId = new Guid("33333333-3333-3333-3333-333333333333") }); @@ -94,13 +102,16 @@ namespace Server.Migrations b.Property("Position") .HasColumnType("integer"); + b.Property>("Sectors") + .HasColumnType("double precision[]"); + b.Property("Time") .HasColumnType("double precision"); b.Property("UserId") .HasColumnType("uuid"); - b.ToTable("PbDTO"); + b.ToTable((string)null); b.ToSqlQuery("WITH ranked AS (\n SELECT *, rank() OVER (ORDER BY \"Time\" ASC) AS \"Position\", COUNT(\"Id\") OVER () AS \"Completions\"\n FROM \"Laps\"\n)\n\nSELECT * FROM ranked"); }); diff --git a/Server/Models/SpaceRaceShared.cs b/Server/Models/SpaceRaceShared.cs index 66f4be6..b8fe253 100644 --- a/Server/Models/SpaceRaceShared.cs +++ b/Server/Models/SpaceRaceShared.cs @@ -7,15 +7,17 @@ namespace SpaceRace.Shared { public Guid UserId { get; set; } public string Map { get; set; } public double Time { get; set; } + public List Sectors { get; set; } } public class PbDTO { - public Guid Id { get; set; } - public Guid UserId { get; set; } - public DateTimeOffset Created { get; set; } - public double Time { get; set; } - public string Map { get; set; } - public int Completions { get; set; } - public int Position { get; set; } + public Guid Id { get; set; } + public Guid UserId { get; set; } + public DateTimeOffset Created { get; set; } + public double Time { get; set; } + public List Sectors { get; set; } + public string Map { get; set; } + public int Completions { get; set; } + public int Position { get; set; } } } diff --git a/Server/Repositories/SpaceRaceDbContext.cs b/Server/Repositories/SpaceRaceDbContext.cs index 450fdef..9660c59 100644 --- a/Server/Repositories/SpaceRaceDbContext.cs +++ b/Server/Repositories/SpaceRaceDbContext.cs @@ -15,29 +15,31 @@ public class SpaceRaceDbContext : DbContext { base.OnModelCreating(modelBuilder); new SpaceRaceInitialiser(modelBuilder).Seed(); - modelBuilder.Entity(pb => { - var pbQuery = $$""" - WITH ranked AS ( - SELECT *, rank() OVER (ORDER BY "Time" ASC) AS "Position", COUNT("Id") OVER () AS "Completions" - FROM "Laps" - ) + var pbQuery = $$""" + WITH ranked AS ( + SELECT *, rank() OVER (ORDER BY "Time" ASC) AS "Position", COUNT("Id") OVER () AS "Completions" + FROM "Laps" + ) - SELECT * FROM ranked - """; - pb.HasNoKey(); - pb.ToSqlQuery(pbQuery); - }); + SELECT * FROM ranked + """; + + modelBuilder.Entity() + .HasNoKey() + .ToSqlQuery(pbQuery) + .ToTable(null as string); } } [Index(nameof(UserId), nameof(Map), IsUnique = true)] [Index(nameof(Map))] public class Lap { - public DateTimeOffset Created { get; set; } - public Guid Id { get; set; } - public Guid UserId { get; set; } - public double Time { get; set; } - [Required] public string Map { get; set; } + 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] public string Map { get; set; } } class SpaceRaceInitialiser { @@ -54,6 +56,7 @@ class SpaceRaceInitialiser { Id = Guid.NewGuid(), UserId = new Guid("11111111-1111-1111-1111-111111111111"), Time = 128f, + Sectors = new List { 64f, 24f, 24f }, Map = "sr_TestTrack", }, new Lap { @@ -61,6 +64,7 @@ class SpaceRaceInitialiser { Id = Guid.NewGuid(), UserId = new Guid("22222222-2222-2222-2222-222222222222"), Time = 132f, + Sectors = new List { 64f, 38f, 24f }, Map = "sr_TestTrack", }, new Lap { @@ -68,6 +72,7 @@ class SpaceRaceInitialiser { Id = Guid.NewGuid(), UserId = new Guid("33333333-3333-3333-3333-333333333333"), Time = 148f, + Sectors = new List { 64f, 64f, 24f }, Map = "sr_TestTrack", } ); diff --git a/docker-compose.yaml b/docker-compose.yaml index c7ff806..2704c5d 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -4,17 +4,17 @@ services: file: common.yaml service: pg - server: - image: mcr.microsoft.com/dotnet/sdk:7.0 - depends_on: - - 'pg' - ports: - - '40080:80' - environment: - CONNECTIONSTRINGS__SPACERACE: "Server=pg;Port=5432;Database=${POSTGRES_DB};User Id=${POSTGRES_USER};Password=${POSTGRES_PASSWORD}" - DOTNET_WATCH_RESTART_ON_RUDE_EDIT: 1 - command: dotnet watch - working_dir: "/Server" - volumes: - - "./Server:/Server" + # server: + # image: mcr.microsoft.com/dotnet/sdk:7.0 + # depends_on: + # - 'pg' + # ports: + # - '40080:80' + # environment: + # CONNECTIONSTRINGS__SPACERACE: "Server=pg;Port=5432;Database=${POSTGRES_DB};User Id=${POSTGRES_USER};Password=${POSTGRES_PASSWORD}" + # DOTNET_WATCH_RESTART_ON_RUDE_EDIT: 1 + # command: dotnet watch + # working_dir: "/Server" + # volumes: + # - "./Server:/Server"