public async Task AddCityWalk(CityWalk newWalk, string travelIdentity) { var location = await LocationRepository.GetLocation(travelIdentity); var dbWalk = CityWalkConverter.ToDbCityWalk(newWalk); var walk = await CityWalkRepository.AddCityWalk(dbWalk, travelIdentity, location.LocationId); foreach (var domainPoint in newWalk.WayPoints) { var dbPoint = CityWalkConverter.ToDbWayPoint(domainPoint); var point = await CityWalkRepository.AddWayPoint(dbPoint, walk.CityWalkId); var poi = PoiConverter.ToDbPoi(domainPoint.Poi); if (domainPoint.Poi.Attribution != null) { var attributions = domainPoint.Poi.Attribution.Select(a => PoiConverter.ToDbAttribution(a)).ToList(); await PoiRepository.AddAttributionToPoi(poi.PoiId, attributions); } await PoiRepository.AddPoiToWayPoint(poi, point.WayPointId, location.LocationId); } }
async public Task <CityWalk> AddCityWalk(CityWalk newWalk, string travelIdentity, string locationId) { await GraphClient.ConnectAsync(); try { var resp = await GraphClient.Cypher .Match("(travel:Travel)", "(location:Location)") .Where((Location location) => location.LocationId == locationId) .AndWhere((Travel travel) => travel.TravelId == travelIdentity) .Create("(walk:CityWalk $walk)") .WithParam("walk", newWalk) .Create("(travel)-[r:HasCityWalk]->(walk)") .Create("(location)-[k:HasCityWalk]->(walk)") .Return(walk => walk.As <CityWalk>()) .ResultsAsync; if (resp.Any()) { return(resp.First()); } else { return(null); } } catch (ClientException ce) { if (ce.Message.Contains("already exists", StringComparison.InvariantCultureIgnoreCase)) { newWalk.CityWalkId = new Guid().ToString(); return(await AddCityWalk(newWalk, travelIdentity, locationId)); } else { throw ce; } } }
public Task AddCityWalk([FromBody] CityWalk walk, string travelIdentity) { return(_travelService.AddCityWalk(walk, travelIdentity)); }