Esempio n. 1
0
        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;
                }
            }
        }
Esempio n. 3
0
 public Task AddCityWalk([FromBody] CityWalk walk, string travelIdentity)
 {
     return(_travelService.AddCityWalk(walk, travelIdentity));
 }