43 lines
1.3 KiB
C#
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,
|
|
};
|
|
}
|
|
} |