public async Task AddDayPlan(DayPlan newDayPlan, string travelIdentity)
        {
            var location = await LocationRepository.GetLocation(travelIdentity);

            var dbDayPlan = DayPlanConverter.ToDbDayPlan(newDayPlan);
            await DayPlanRepository.AddDayPlan(dbDayPlan, travelIdentity, location.LocationId);

            foreach (var day in newDayPlan.Days)
            {
                var dbDay = DayPlanConverter.ToDbItinerary(day);
                await DayPlanRepository.AddItinerary(dbDay, newDayPlan.DayPlanId);

                foreach (var item in day.ItineraryItems)
                {
                    var dbItem = DayPlanConverter.ToDbItineraryItem(item);
                    await DayPlanRepository.AddItineraryItem(dbItem, dbDay.ItineraryId);

                    var poi = PoiConverter.ToDbPoi(item.Poi);
                    await PoiRepository.AddPoiToDayItem(poi, item.ItineraryItemId, location.LocationId);

                    if (item.Poi.Attribution != null)
                    {
                        var attributions = item.Poi.Attribution.Select(a => PoiConverter.ToDbAttribution(a)).ToList();
                        await PoiRepository.AddAttributionToPoi(poi.PoiId, attributions);
                    }
                }
            }
        }
        public async Task <IEnumerable <CityWalk> > GetCityWalks(string travelIdentity)
        {
            var dbWalks = await CityWalkRepository.GetCityWalks(travelIdentity);

            if (!dbWalks.Any())
            {
                return(new List <CityWalk>());
            }
            var domainWalks = new List <CityWalk>();

            foreach (var walk in dbWalks)
            {
                var dbPoints = await CityWalkRepository.GetWayPoints(walk.CityWalkId);

                var domainPoints = new List <WayPoint>();
                foreach (var point in dbPoints)
                {
                    var dbPoi = await CityWalkRepository.GetPoi(point.WayPointId);

                    var dbAttributions = await PoiRepository.GetPoiAttributions(dbPoi.PoiId);

                    var domainAttributions = dbAttributions.Select(a => PoiConverter.ToDomainAttribution(a));
                    var domainPoi          = PoiConverter.ToDomainPoi(dbPoi);
                    domainPoi.Attribution = domainAttributions.ToArray();
                    var domainPoint = CityWalkConverter.ToDomainWayPoint(point, domainPoi);
                    domainPoints.Add(domainPoint);
                }
                var domainWalk = CityWalkConverter.ToDomainCityWalk(walk, domainPoints.ToArray());
                domainWalks.Add(domainWalk);
            }
            return(domainWalks.ToArray());
        }
        public async Task <ToSeeItem> UpdateToSeeItem(ToSeeItem newItem)
        {
            var item = ToSeeItemConverter.ToDbToSeeItem(newItem);
            var resp = await ListsRepository.EditToSeeItem(item);

            var poi = await ListsRepository.GetToSeeItemPoi(resp.Id);

            var convertedPoi = PoiConverter.ToDomainPoi(poi);

            return(ToSeeItemConverter.ToDomainToSeeItem(resp, convertedPoi));
        }
        public async Task <ToSeeItem> AddToSeeItem(string poiId, string travelIdentity)
        {
            var toDo = new DbToSeeItem {
                Checked = false,
                Id      = Guid.NewGuid().ToString(),
                Name    = poiId
            };

            var addedItem = await ListsRepository.AddToSeeItem(toDo, travelIdentity);

            var poi = await ListsRepository.GetToSeeItemPoi(addedItem.Id);

            var convertedPoi = PoiConverter.ToDomainPoi(poi);

            return(ToSeeItemConverter.ToDomainToSeeItem(addedItem, convertedPoi));
        }
        public async Task <ToSeeItem[]> GetToSeeItem(string travelIdentity)
        {
            var items = await ListsRepository.GetToSeeItems(travelIdentity);

            var domainItems = new List <ToSeeItem>();

            foreach (var item in items)
            {
                var poi = await ListsRepository.GetToSeeItemPoi(item.Id);

                var dbAttributions = await PoiRepository.GetPoiAttributions(poi.PoiId);

                var domainAttributions = dbAttributions.Select(a => PoiConverter.ToDomainAttribution(a));
                var convertedPoi       = PoiConverter.ToDomainPoi(poi);
                convertedPoi.Attribution = domainAttributions.ToArray();
                var domainItem = ToSeeItemConverter.ToDomainToSeeItem(item, convertedPoi);
                domainItems.Add(domainItem);
            }
            return(domainItems.ToArray());
        }
        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);
            }
        }
        public async Task <IEnumerable <DayPlan> > GetDayPlans(string travelIdentity)
        {
            var dbPlans = await DayPlanRepository.GetDayPlans(travelIdentity);

            if (!dbPlans.Any())
            {
                return(new List <DayPlan>());
            }
            var domainDayPlans = new List <DayPlan>();

            foreach (var plan in dbPlans)
            {
                var dbDays = await DayPlanRepository.GetItineraries(plan.DayPlanId);

                var domainDays = new List <Itinerary>();
                foreach (var day in dbDays)
                {
                    var dbDayItems = await DayPlanRepository.GetItinerariyItems(day.ItineraryId);

                    var domainItems = new List <ItineraryItem>();
                    foreach (var item in dbDayItems)
                    {
                        var dbPoi = await DayPlanRepository.GetPoi(item.ItineraryItemId);

                        var dbAttributions = await PoiRepository.GetPoiAttributions(dbPoi.PoiId);

                        var domainattributions = dbAttributions.Select(a => PoiConverter.ToDomainAttribution(a));
                        var poi = PoiConverter.ToDomainPoi(dbPoi);
                        poi.Attribution = domainattributions.ToArray();
                        var domainItem = DayPlanConverter.ToDomainItineraryItem(item, poi);
                        domainItems.Add(domainItem);
                    }
                    var domainDay = DayPlanConverter.ToDomainItinerary(day, domainItems.ToArray());
                    domainDays.Add(domainDay);
                }
                var domainDayPlan = DayPlanConverter.ToDomainDayPlan(plan, domainDays.ToArray());
                domainDayPlans.Add(domainDayPlan);
            }
            return(domainDayPlans.ToArray());
        }
        public async Task <Poi[]> GetPoisForTravel(string travelIdentity)
        {
            var response = await LocationRepository.GetPoisForLocation(travelIdentity);

            return(response.Select(r => PoiConverter.ToDomainPoi(r)).ToArray());
        }