private static async Task <HttpResponseMessage> PartiPost(HttpRequestMessage req, TraceWriter log) { log.Info("[POST Parti] ble kalt"); var repo = new BekkSjakkRepository(); dynamic data = await req.Content.ReadAsAsync <object>(); if (data == null) { return(req.CreateResponse(HttpStatusCode.BadRequest)); } var hvitSpillerId = (int)data.hvitId; var svartSpillerId = (int)data.svartId; var dato = (DateTimeOffset)data.dato; var resultat = (PartiResultat)Enum.Parse(typeof(PartiResultat), (string)data.resultat); var pgn = (string)data.pgn; var partiDao = new PartiDao(hvitSpillerId, svartSpillerId, dato, resultat, pgn); var suksess = await repo.LeggTilParti(partiDao); await OppdaterEloRatinger(repo, partiDao); var statusCode = suksess ? HttpStatusCode.OK : HttpStatusCode.BadRequest; return(req.CreateResponse(statusCode)); }
public async Task <bool> LeggTilParti(PartiDao parti) { using (SqlConnection conn = new SqlConnection(_connectionString)) { conn.Open(); var query = $@"INSERT INTO Parti (SpillerHvit, SpillerSvart, Dato, Resultat, Pgn) VALUES ({parti.SpillerHvitId}, {parti.SpillerSvartId}, '{parti.Dato:O}', {(int) parti.Resultat}, '{parti.Pgn}')"; using (SqlCommand cmd = new SqlCommand(query, conn)) { var rowsAffected = await cmd.ExecuteNonQueryAsync(); return(rowsAffected == 1); } } }
private static async Task OppdaterEloRatinger(BekkSjakkRepository repo, PartiDao parti) { var hvitTask = repo.HentBekkerPåId(parti.SpillerHvitId); var svartTask = repo.HentBekkerPåId(parti.SpillerSvartId); await Task.WhenAll(hvitTask, svartTask); var hvitBekker = hvitTask.Result; var svartBekker = svartTask.Result; if (!hvitBekker.HarVerdi || !svartBekker.HarVerdi) { throw new Exception("Klarte ikkje å oppdatere ratingar"); } var nyeElo = Elo.FinnNyeEloRatinger(hvitBekker.Verdi, svartBekker.Verdi, parti.Resultat); hvitBekker.Verdi.Elo = nyeElo.Item1; svartBekker.Verdi.Elo = nyeElo.Item2; var oppdaterTask1 = repo.OppdaterBekker(hvitBekker.Verdi); var oppdaterTask2 = repo.OppdaterBekker(svartBekker.Verdi); await Task.WhenAll(oppdaterTask1, oppdaterTask2); }