Exemple #1
0
        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));
        }
Exemple #2
0
        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);
                }
            }
        }
Exemple #3
0
        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);
        }