pure sql baybeee

This commit is contained in:
ntr committed 2023-08-30 20:21:08 +10:00
1 parent b7ad479ead
commit 5a7e493d92
12 files changed
+173 -39

No files matched your search

+33 -6
View File
@@ -1,6 +1,8 @@
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System.Data.SqlClient;
using Server.Services;
using SpaceRace.Shared;
namespace Server.Controllers;
@@ -10,10 +12,16 @@ namespace Server.Controllers;
public class LapController : ControllerBase {
private readonly ILogger<LapController> _logger;
private SpaceRaceDbContext _db;
private LapTimesService _lapTimes;
public LapController(ILogger<LapController> logger, SpaceRaceDbContext db) {
public LapController(
ILogger<LapController> logger,
SpaceRaceDbContext db,
LapTimesService lapTimes
){
_logger = logger;
_db = db;
_lapTimes = lapTimes;
}
[HttpGet()]
@@ -28,11 +36,25 @@ public class LapController : ControllerBase {
}
[HttpPost()]
public async Task<Lap> Post(LapDTO dto) {
public async Task<LapTimesDTO> Post(LapDTO dto) {
Lap existing = _db.Laps
.SingleOrDefault(l => l.UserId == dto.UserId && l.Map == dto.Map);
Lap v = new Lap {
Lap NotFaster(Lap e) {
_logger.LogInformation($"Lap was not a PB.");
return e;
}
Lap UpdateValues(Lap e) => new Lap {
Id = e.Id,
UserId = e.UserId,
Map = e.Map,
Time = dto.Time,
Sectors = dto.Sectors,
Created = DateTimeOffset.Now,
};
Lap Create() => new Lap {
Id = Guid.NewGuid(),
UserId = dto.UserId,
Map = dto.Map,
@@ -41,8 +63,13 @@ public class LapController : ControllerBase {
Created = DateTimeOffset.UtcNow,
};
_db.Laps.Add(v);
await _db.SaveChangesAsync();
return v;
Lap v = existing switch {
null => Create(),
Lap e when dto.Time < e.Time => UpdateValues(e),
_ => NotFaster(existing),
};
await _db.Laps.Upsert(v).RunAsync();
return _lapTimes.LapTimes(v.UserId, v.Map);
}
}
+10 -16
View File
@@ -1,6 +1,8 @@
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System.Data.SqlClient;
using Server.Services;
using SpaceRace.Shared;
namespace Server.Controllers;
@@ -10,29 +12,21 @@ namespace Server.Controllers;
public class LapTimesController : ControllerBase {
private readonly ILogger<LapTimesController> _logger;
private SpaceRaceDbContext _db;
private LapTimesService _lapTimes;
public LapTimesController(ILogger<LapTimesController> logger, SpaceRaceDbContext db) {
public LapTimesController(
ILogger<LapTimesController> logger,
SpaceRaceDbContext db,
LapTimesService lapTimes
){
_logger = logger;
_db = db;
_lapTimes = lapTimes;
}
[HttpGet()]
public LapTimesDTO LapTimes(Guid userId, string mapName) {
_logger.LogInformation($"{userId} {mapName}");
PbDTO pb = _db.PbDTO
.Where(pb => pb.UserId == userId)
.Where(pb => pb.Map == mapName)
.SingleOrDefault();
PbDTO lapRecord = _db.PbDTO
.Where(pb => pb.Map == mapName)
.OrderBy(pb => pb.Position)
.FirstOrDefault();
return new LapTimesDTO {
Pb = pb,
LapRecord = lapRecord,
};
return _lapTimes.LapTimes(userId, mapName);
}
}