using Microsoft.EntityFrameworkCore; using SpaceRace.Shared; namespace Server.Services; public class LapTimesService { private readonly ILogger _logger; private SpaceRaceDbContext _db; public LapTimesService(ILogger logger, SpaceRaceDbContext db) { _logger = logger; _db = db; } public LapTimesDTO LapTimes(Guid userId, string mapName) { PbDTO pb = _db.PbDTO .FromSql($$""" WITH ranked AS ( SELECT *, rank() OVER (ORDER BY "Time" ASC) AS "Position", COUNT("Id") OVER () AS "Completions" FROM "Laps" WHERE "Map" = {{mapName}} ORDER BY "Position" ASC ) SELECT * FROM ranked WHERE "UserId" = {{userId}} """).FirstOrDefault(); PbDTO lapRecord = _db.PbDTO .FromSql($$""" SELECT *, rank() OVER (ORDER BY "Time" ASC) AS "Position", COUNT("Id") OVER () AS "Completions" FROM "Laps" WHERE "Map" = {{mapName}} ORDER BY "Position" ASC """).FirstOrDefault(); return new LapTimesDTO { Pb = pb, LapRecord = lapRecord, }; } }