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)); } }
protected virtual void Lagre(DeltakerPosisjon posisjon) { using (var context = _dataContextFactory.Create()) { context.DeltakerPosisjoner.Add(posisjon); context.SaveChanges(); } }
private EksternDeltakerPosisjon TilEksternDeltakerPosisjon(DeltakerPosisjon posisjon) { return(new EksternDeltakerPosisjon { DeltakerId = posisjon.DeltakerId, LagId = posisjon.LagId, Latitude = posisjon.Latitude, Longitude = posisjon.Longitude, Tidspunkt = posisjon.Tidspunkt }); }
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); }
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); }
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) { }