Esempio n. 1
0
        public IHttpActionResult Post([FromBody] Koordinat koordinat)
        {
            try
            {
                if (koordinat == null)
                {
                    return(BadRequest("koordinat cannot be null"));
                }

                if (koordinat.Longitude == 0.0 || koordinat.Latitude == 0.0)
                {
                    return(BadRequest("Feil format. Send inn på formen { latitude: 59.676035, longitude: 10.604844 } - ikke noe mer rundt. Også Content-Type: application/json"));
                }

                if (!ModelState.IsValid)
                {
                    return(BadRequest(ModelState));
                }

                DeltakerPosisjon deltakerPosisjon = _posisjonsService.RegistrerPosisjon(LagId, DeltakerId, koordinat.Latitude, koordinat.Longitude);
                if (deltakerPosisjon == null)
                {
                    return(Conflict());
                }
                return(Ok());
            }
            catch (Exception ex)
            {
                return(InternalServerError(ex));
            }
        }
Esempio n. 2
0
 protected virtual void Lagre(DeltakerPosisjon posisjon)
 {
     using (var context = _dataContextFactory.Create())
     {
         context.DeltakerPosisjoner.Add(posisjon);
         context.SaveChanges();
     }
 }
Esempio n. 3
0
 private EksternDeltakerPosisjon TilEksternDeltakerPosisjon(DeltakerPosisjon posisjon)
 {
     return(new EksternDeltakerPosisjon
     {
         DeltakerId = posisjon.DeltakerId,
         LagId = posisjon.LagId,
         Latitude = posisjon.Latitude,
         Longitude = posisjon.Longitude,
         Tidspunkt = posisjon.Tidspunkt
     });
 }
Esempio n. 4
0
        private bool ErForKortEllerHyppig(EksternDeltakerPosisjon forrige, DeltakerPosisjon posisjon)
        {
            var avstandIMeter    = DistanseKalkulator.MeterMellom(forrige.Latitude, forrige.Longitude, posisjon.Latitude, posisjon.Longitude);
            var avstandISekunder = posisjon.Tidspunkt.Subtract(forrige.Tidspunkt).TotalSeconds;

            if (avstandISekunder < _appSettings.MinstTidMellomPosisjoner)
            {
                return(true);
            }

            return(avstandIMeter < _appSettings.MinstAvstandMellomPosisjoner);
        }
Esempio n. 5
0
        private void LagrePosisjonTilDatabasen(DeltakerPosisjon posisjon)
        {
            if (LagretPosisjon.ContainsKey(posisjon.DeltakerId) &&
                ErForKortEllerHyppig(LagretPosisjon[posisjon.DeltakerId], posisjon))
            {
                return;
            }

            // Oppdater før skriving til databasen - eventual consistent, men strammer inn muligheten for å smette forbi under lagring
            LagretPosisjon[posisjon.DeltakerId] = TilEksternDeltakerPosisjon(posisjon);

            Lagre(posisjon);
        }
Esempio n. 6
0
        public DeltakerPosisjon RegistrerPosisjon(string lagId, string deltakerId, double latitude, double longitude)
        {
            var deltakerPosisjon = new DeltakerPosisjon
            {
                DeltakerId = deltakerId,
                LagId      = lagId,
                Latitude   = latitude,
                Longitude  = longitude,
                Tidspunkt  = TimeService.Now
            };

            LagrePosisjonTilDatabasen(deltakerPosisjon);

            GjeldendePosisjon[deltakerId] = TilEksternDeltakerPosisjon(deltakerPosisjon);
            return(deltakerPosisjon);
        }
 protected override void Lagre(DeltakerPosisjon posisjon)
 {
 }