public async Task <IActionResult> OnPostSave(Guid Id, string name, string description, string fromdate, string todate, string photo, string newphoto, string[][] files, string[][] notes, string[][] places, string[][] goods, string[][] goals, string[][] purchases) { var token = HttpContext.Request.Cookies["TraverlApp.fun.Token"]; Trip = ((await _trips.Read(Id, token)) as ObjectResult).Value as TravelAppModels.Models.Trip; Trip.Name = name; Trip.TextField = description; Trip.FromDate = fromdate == null ? null : (long?)Convert.ToDateTime(fromdate).Ticks; Trip.ToDate = todate == null ? null : (long?)Convert.ToDateTime(todate).Ticks; switch (newphoto) { case "yes": photo = photo.Substring(photo.IndexOf("base64,") + 7); var newguid = Guid.NewGuid(); Task.Run(async() => await _photos.UploadBase64(photo, token, newguid)); Trip.PhotoIds = new Guid[] { newguid }; break; case "nophoto": Trip.PhotoIds = null; break; default: break; } var fileid = new List <Guid>(); foreach (var file in files) { if (!Guid.TryParse(file[0], out var id)) { id = Guid.NewGuid(); } if (bool.Parse(file[1])) { Task.Run(async() => await _files.UploadBase64(file[2].Substring(file[2].IndexOf("base64,") + 7), file[3], Trip.Id, token, id)); } fileid.Add(id); } Trip.FileIds = fileid.ToArray(); var notestoadd = new List <Note>(); foreach (var note in notes) { var n = new Note { Name = note[0], Description = note[1] }; notestoadd.Add(n); } Trip.Notes = notestoadd.ToArray(); List <Place> newplaces = new List <Place>(); foreach (var place in places) { var Place = new Place(); if (Guid.TryParse(place[0], out var id)) { Place.Id = id; } else { Place.Id = Guid.NewGuid(); } Place.Name = place[1]; Place.Description = place[2]; Place.Adress = place[3]; Place.IsVisited = bool.Parse(place[4]); Place.Date = place[5] == null ? null : (long?)Convert.ToDateTime(place[5]).Ticks; switch (place[7]) { case "yes": place[6] = place[6].Substring(place[6].IndexOf("base64,") + 7); var newguid = Guid.NewGuid(); Task.Run(async() => await _photos.UploadBase64(place[6], token, newguid)); Place.PhotoIds = new Guid[] { newguid }; break; case "nophoto": Place.PhotoIds = null; break; case "no": Place.PhotoIds = new Guid[] { new Guid(Path.ChangeExtension(Path.GetFileName(place[6]), null)) }; break; case "url": var newguidurl = Guid.NewGuid(); Task.Run(async() => await _photos.UploadURL(place[6], token, newguidurl)); Place.PhotoIds = new Guid[] { newguidurl }; break; default: break; } newplaces.Add(Place); } List <Good> newgoods = new List <Good>(); foreach (var good in goods) { var Good = new Good(); if (Guid.TryParse(good[0], out var id)) { Good.Id = id; } else { Good.Id = Guid.NewGuid(); } Good.Name = good[1]; Good.IsTook = bool.Parse(good[2]); Good.Count = int.Parse(good[3]); newgoods.Add(Good); } List <Goal> newgoals = new List <Goal>(); foreach (var goal in goals) { var Goal = new Goal(); if (Guid.TryParse(goal[0], out var id)) { Goal.Id = id; } else { Goal.Id = Guid.NewGuid(); } Goal.Name = goal[1]; Goal.IsDone = bool.Parse(goal[2]); newgoals.Add(Goal); } Categories = ((await _categories.GetAll()) as ObjectResult).Value as Category[]; List <Purchase> newpurchases = new List <Purchase>(); foreach (var purchase in purchases) { var Purchase = new Purchase(); if (Guid.TryParse(purchase[0], out var id)) { Purchase.Id = id; } else { Purchase.Id = Guid.NewGuid(); } Purchase.Name = purchase[1]; Purchase.CategoryId = Guid.Empty; foreach (var cat in Categories) { if (cat.Name == purchase[2]) { Purchase.CategoryId = cat.Id; } } Purchase.Price = double.Parse((purchase[3].Replace('.', ','))); Purchase.IsBought = bool.Parse(purchase[4]); newpurchases.Add(Purchase); } List <Guid> removeplaces = new List <Guid>(); foreach (var id in Trip.PlaceIds ?? new Guid[0]) { var found = newplaces.FirstOrDefault(x => x.Id == id); if (found == null) { removeplaces.Add(id); } } List <Guid> removegoals = new List <Guid>(); foreach (var id in Trip.GoalIds ?? new Guid[0]) { var found = newgoals.FirstOrDefault(x => x.Id == id); if (found == null) { removegoals.Add(id); } } List <Guid> removegoods = new List <Guid>(); foreach (var id in Trip.GoodIds ?? new Guid[0]) { var found = newgoods.FirstOrDefault(x => x.Id == id); if (found == null) { removegoods.Add(id); } } List <Guid> removepurchases = new List <Guid>(); foreach (var id in Trip.PurchaseIds ?? new Guid[0]) { var found = newpurchases.FirstOrDefault(x => x.Id == id); if (found == null) { removepurchases.Add(id); } } Trip.PlaceIds = newplaces.Select(x => x.Id).ToArray(); Trip.GoalIds = newgoals.Select(x => x.Id).ToArray(); Trip.GoodIds = newgoods.Select(x => x.Id).ToArray(); Trip.PurchaseIds = newpurchases.Select(x => x.Id).ToArray(); SynchronizationController.Data data = new SynchronizationController.Data { Update = new SynchronizationController.Update { Trips = new TravelAppModels.Models.Trip[] { Trip }, Places = newplaces.ToArray(), Goods = newgoods.ToArray(), Goals = newgoals.ToArray(), Purchases = newpurchases.ToArray() }, Delete = new SynchronizationController.Delete { PlaceIds = removeplaces.ToArray(), GoodIds = removegoods.ToArray(), GoalIds = removegoals.ToArray(), PurchaseIds = removepurchases.ToArray() } }; await _sync.SetData(data, token); return(StatusCode(StatusCodes.Status200OK, "Ok")); }