예제 #1
0
        public async Task <Result <Accommodation> > Get(string supplier, string supplierAccommodationCode,
                                                        string languageCode)
        {
            var searchJson    = "{" + $"\"{supplier}\":\"{supplierAccommodationCode}\"" + "}";
            var accommodation = await _context.Accommodations
                                .Where(ac => ac.IsActive && EF.Functions.JsonContains(ac.SupplierAccommodationCodes, searchJson))
                                .Select(ac => new
            {
                Id             = ac.Id,
                CountryId      = ac.CountryId,
                LocalityId     = ac.LocalityId,
                LocalityZoneId = ac.LocalityZoneId,
                Data           = ac.FinalAccommodation,
                SupplierCodes  = ac.SupplierAccommodationCodes,
                Modified       = ac.Modified
            })
                                .SingleOrDefaultAsync();

            if (accommodation == null)
            {
                return(Result.Failure <Accommodation>("Accommodation does not exists"));
            }

            return(AccommodationConverter.Convert(accommodation.Id, accommodation.CountryId,
                                                  accommodation.LocalityId, accommodation.LocalityZoneId,
                                                  accommodation.Data, languageCode, accommodation.SupplierCodes, accommodation.Modified));
        }
예제 #2
0
 public async Task <List <SlimAccommodation> > Get(List <string> htIds, string languageCode)
 {
     return((await GetRichDetails(htIds))
            .Select(a => AccommodationConverter.ConvertToSlim(htId: a.Id,
                                                              htCountryId: a.CountryId,
                                                              htLocalityId: a.LocalityId,
                                                              htLocalityZoneId: a.LocalityZoneId,
                                                              accommodation: a.FinalAccommodation,
                                                              language: languageCode))
            .ToList());
 }
예제 #3
0
        public async Task <List <Accommodation> > Get(int skip, int top, IEnumerable <string> suppliersFilter,
                                                      bool?hasDirectContractFilter, DateTimeOffset?modifiedDate, string languageCode)
        {
            var suppliersKeys       = suppliersFilter.ToArray();
            var accommodationsQuery = _context.Accommodations
                                      .Where(ac => ac.IsActive);

            if (modifiedDate.HasValue)
            {
                accommodationsQuery = accommodationsQuery.Where(a => a.Modified > modifiedDate);
            }

            if (suppliersKeys.Any())
            {
                accommodationsQuery = accommodationsQuery.Where(ac
                                                                => EF.Functions.JsonExistAny(ac.SupplierAccommodationCodes, suppliersKeys));
            }

            if (hasDirectContractFilter != null)
            {
                accommodationsQuery =
                    accommodationsQuery.Where(ac => ac.HasDirectContract == hasDirectContractFilter.Value);
            }

            accommodationsQuery = accommodationsQuery
                                  .OrderBy(ac => ac.Id)
                                  .Skip(skip)
                                  .Take(top);

            var accommodations = await accommodationsQuery
                                 .Select(ac => new
            {
                Id             = ac.Id,
                CountryId      = ac.CountryId,
                LocalityId     = ac.LocalityId,
                LocalityZoneId = ac.LocalityZoneId,
                Data           = ac.FinalAccommodation,
                SupplierCodes  = ac.SupplierAccommodationCodes,
                ModifiedDate   = ac.Modified
            })
                                 .ToListAsync();

            return(accommodations.Select(ac
                                         => AccommodationConverter.Convert(ac.Id, ac.CountryId, ac.LocalityId, ac.LocalityZoneId, ac.Data,
                                                                           languageCode, ac.SupplierCodes, ac.ModifiedDate))
                   .ToList());
        }
예제 #4
0
        public async Task <Result <Accommodation> > Get(string htId, string languageCode)
        {
            var accommodations = await GetRichDetails(new List <string> {
                htId
            });

            var accommodation = accommodations.SingleOrDefault();

            if (accommodation == default)
            {
                return(Result.Failure <Accommodation>("Accommodation does not exists"));
            }

            return(AccommodationConverter.Convert(accommodation.Id, accommodation.CountryId,
                                                  accommodation.LocalityId, accommodation.LocalityZoneId, accommodation.FinalAccommodation,
                                                  languageCode, accommodation.SupplierAccommodationCodes,
                                                  accommodation.Modified));
        }
예제 #5
0
        public static AccommodationData Convert(MultilingualAccommodation accommodation, string language)
        {
            var name = accommodation.Name.GetValueOrDefault(language);
            var accommodationAmenities = accommodation.AccommodationAmenities.GetValueOrDefault(language);
            var additionalInfo         = accommodation.AdditionalInfo.GetValueOrDefault(language);
            var category            = accommodation.Category.GetValueOrDefault(language);
            var address             = accommodation.Location.Address.GetValueOrDefault(language);
            var localityName        = accommodation.Location.Locality?.GetValueOrDefault(language);
            var countryName         = accommodation.Location.Country.GetValueOrDefault(language);
            var localityZoneName    = accommodation.Location.LocalityZone?.GetValueOrDefault(language);
            var textualDescriptions = new List <TextualDescription>();

            foreach (var descriptions in accommodation.TextualDescriptions)
            {
                var description = descriptions.Description.GetValueOrDefault(language);
                textualDescriptions.Add(new TextualDescription(AccommodationConverter.GetTextualDescriptionType(descriptions.Type), description));
            }

            return(new AccommodationData {
                Name = name,
                AccommodationAmenities = accommodationAmenities,
                AdditionalInfo = additionalInfo,
                Category = category,
                Contacts = AccommodationConverter.GetContacts(accommodation.Contacts),
                Location = new LocationInfo {
                    CountryCode = accommodation.Location.CountryCode,
                    CountryName = countryName,
                    LocalityName = localityName,
                    LocalityZoneName = localityZoneName,
                    Coordinates = new GeoPoint(accommodation.Location.Coordinates.Longitude, accommodation.Location.Coordinates.Latitude),
                    Address = address,
                    LocationDescriptionCode = AccommodationConverter.GetLocationDescriptionCode(accommodation.Location.LocationDescriptionCode),
                    PointsOfInterests = AccommodationConverter.GetPoiInfos(accommodation.Location.PointsOfInterests),
                    IsHistoricalBuilding = accommodation.Location.IsHistoricalBuilding
                },
                Photos = AccommodationConverter.GetPhotos(accommodation.Photos),
                Rating = AccommodationConverter.GetRating(accommodation.Rating),
                Schedule = AccommodationConverter.GetScheduleInfo(accommodation.Schedule),
                TextualDescriptions = textualDescriptions,
                Type = AccommodationConverter.GetPropertyType(accommodation.Type)
            });
        }
예제 #6
0
        public static SlimAccommodationData Convert(int id, MultilingualAccommodation accommodation, bool isActive, string language)
        {
            var name             = accommodation.Name.GetValueOrDefault(language);
            var address          = accommodation.Location.Address.GetValueOrDefault(language);
            var localityName     = accommodation.Location.Locality?.GetValueOrDefault(language);
            var countryName      = accommodation.Location.Country.GetValueOrDefault(language);
            var localityZoneName = accommodation.Location.LocalityZone?.GetValueOrDefault(language);
            var rating           = AccommodationConverter.GetRating(accommodation.Rating);

            return(new SlimAccommodationData
            {
                HtId = HtId.Create(MapperLocationTypes.Accommodation, id),
                Name = name,
                Address = address,
                CountryName = countryName,
                LocalityName = localityName,
                LocalityZoneName = localityZoneName,
                Rating = rating,
                IsActive = isActive
            });
        }