Files
spacerace/Server/Services/LapTimesService.cs
T
2023-08-30 20:21:08 +10:00

43 lines
1.3 KiB
C#

using Microsoft.EntityFrameworkCore;
using SpaceRace.Shared;
namespace Server.Services;
public class LapTimesService {
private readonly ILogger<LapTimesService> _logger;
private SpaceRaceDbContext _db;
public LapTimesService(ILogger<LapTimesService> 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,
};
}
}