public async Task Upsert(string table, TrafikverketTrainMessageModel record) { var collection = db.GetCollection <TrafikverketTrainMessageModel>(table); collection.ReplaceOne(filter: (u => u.EventId == record.EventId), options: new UpdateOptions { IsUpsert = true }, replacement: record); }
public static async void PostTrainMessage(HttpContent data) { string url = "https://api.trafikinfo.trafikverket.se/v2/data.json"; using (HttpResponseMessage response = await ApiHelper.ApiClient.PostAsync(url, data)) { if (response.IsSuccessStatusCode) { string fromTrafikverket = await response.Content.ReadAsStringAsync(); JObject jsonObject = JObject.Parse(fromTrafikverket); // json objectet från trafikverket har strukturen ("RESPONSE") ("RESULT") [ ("TrainStation") ] var trainMessage = jsonObject.SelectToken("RESPONSE").SelectToken("RESULT")[0].SelectToken("TrainMessage"); //Console.WriteLine(trainMessage.ToString()); MongoCRUD db = new MongoCRUD("admin"); foreach (var message in trainMessage) { TrafikverketTrainMessageModel model = new TrafikverketTrainMessageModel(); // sätter in alla värden enligt modellen i TrafikverketModel //model.EventId = message[key: "EventId"].ToString(); model.Header = message[key : "Header"].ToString(); model.ExternalDescription = message[key : "ExternalDescription"].ToString(); JToken geo = message[key : "Geometry"]; JToken wgs84 = geo[key : "WGS84"]; string pointstring = wgs84.ToString(); // Regex för att ta bort "POINT" från fältet och sedan "( )" pointstring = Regex.Replace(pointstring, "POINT", ""); pointstring = Regex.Replace(pointstring, @"[()]", ""); // delar stringen på alla mellanrum. !OBS fältet startar med mellanrum vilket skapar 3! delar string[] substring = Regex.Split(pointstring, " "); // plockar upp och delar ut cordinaterna, mest för läsbarhet och att inte råka skicka med mellanrummet string[] coords = { substring[1], substring[2] }; model.Longitude = float.Parse(coords[0], CultureInfo.InvariantCulture); model.Latitude = float.Parse(coords[1], CultureInfo.InvariantCulture); model.EventId = message[key : "EventId"].ToString(); model.StartDateTime = message[key : "StartDateTime"].ToObject <DateTime>(); model.ModifiedTime = message[key : "ModifiedTime"].ToString(); model.AffectedLocation = message[key : "AffectedLocation"].ToObject <List <string> >(); // försöker lägga till EndDate om detta finns annars skriver ut felmedelande i consolen try { model.EndDateTime = message[key : "EndDateTime"].ToObject <DateTime>(); } catch { //Console.WriteLine("No endate time set for model"); } //db.InsertRecord("TrainMessage", model); await db.Upsert(Trafikverket.trainMessage, model); } } else { Console.WriteLine("!!FEL VID KONTAKT MED API!!"); throw new Exception(response.ReasonPhrase); } } }