Ejemplo n.º 1
0
        public AdresMatchScorableItem Map(AddressDetailItem source)
        {
            var streetName        = _latestQueries.GetAllLatestStreetNames().Single(x => x.StreetNameId == source.StreetNameId);
            var municipality      = _latestQueries.GetAllLatestMunicipalities().Single(x => x.NisCode == streetName.NisCode);
            var defaultStreetName = AddressMapper.GetDefaultStreetNameName(streetName, municipality.PrimaryLanguage);
            var homonym           = AddressMapper.GetDefaultHomonymAddition(streetName, municipality.PrimaryLanguage);

            return(new AdresMatchScorableItem
            {
                AddressId = source.AddressId,
                Identificator = new AdresIdentificator(_responseOptions.Naamruimte, source.PersistentLocalId.ToString(), source.VersionTimestamp.ToBelgianDateTimeOffset()),
                Detail = string.Format(_responseOptions.DetailUrl, source.PersistentLocalId.Value.ToString()),
                Gemeente = new AdresMatchItemGemeente
                {
                    ObjectId = municipality.NisCode,
                    Detail = string.Format(_responseOptions.GemeenteDetailUrl, municipality.NisCode),
                    Gemeentenaam = new Gemeentenaam(new GeografischeNaam(municipality.DefaultName.Value, municipality.DefaultName.Key))
                },
                Straatnaam = new AdresMatchItemStraatnaam
                {
                    ObjectId = streetName.PersistentLocalId,
                    Detail = string.Format(_responseOptions.StraatnaamDetailUrl, streetName.PersistentLocalId),
                    Straatnaam = new Straatnaam(new GeografischeNaam(defaultStreetName.Value, defaultStreetName.Key)),
                },
                HomoniemToevoeging = homonym == null ? null : new HomoniemToevoeging(new GeografischeNaam(homonym.Value.Value, homonym.Value.Key)),
                Postinfo = new AdresMatchItemPostinfo
                {
                    ObjectId = source.PostalCode,
                    Detail = string.Format(_responseOptions.PostInfoDetailUrl, source.PostalCode),
                },
                Huisnummer = source.HouseNumber,
                Busnummer = source.BoxNumber,
                VolledigAdres = AddressMapper.GetVolledigAdres(source.HouseNumber, source.BoxNumber, source.PostalCode, streetName, municipality),
                AdresPositie = AddressMapper.GetAddressPoint(source.Position),
                PositieSpecificatie = AddressMapper.ConvertFromGeometrySpecification(source.PositionSpecification),
                PositieGeometrieMethode = AddressMapper.ConvertFromGeometryMethod(source.PositionMethod),
                AdresStatus = AddressMapper.ConvertFromAddressStatus(source.Status),
                OfficieelToegekend = source.OfficiallyAssigned,
            });
        }
        public async Task <IActionResult> Get(
            [FromServices] LegacyContext context,
            [FromServices] SyndicationContext syndicationContext,
            [FromServices] IOptions <ResponseOptions> responseOptions,
            CancellationToken cancellationToken = default)
        {
            var sorting    = Request.ExtractSortingRequest();
            var pagination = Request.ExtractPaginationRequest();
            var filtering  = Request.ExtractFilteringRequest <CrabHouseNumberAddressFilter>();

            var pagedAddresses = new CrabHouseNumberQuery(context)
                                 .Fetch(filtering, sorting, pagination);

            Response.AddPagedQueryResultHeaders(pagedAddresses);

            var addresses = await pagedAddresses
                            .Items
                            .ToListAsync(cancellationToken);

            var streetNameIds = addresses
                                .Select(x => x.StreetNameId)
                                .ToList();

            var streetNames = await syndicationContext
                              .StreetNameLatestItems
                              .AsNoTracking()
                              .Where(x => streetNameIds.Contains(x.StreetNameId))
                              .ToListAsync(cancellationToken);

            var nisCodes = streetNames
                           .Select(x => x.NisCode)
                           .ToList();

            var municipalities = await syndicationContext
                                 .MunicipalityLatestItems
                                 .AsNoTracking()
                                 .Where(x => nisCodes.Contains(x.NisCode))
                                 .ToListAsync(cancellationToken);

            var addressListItemResponses = addresses
                                           .Select(a =>
            {
                var streetName   = streetNames.SingleOrDefault(x => x.StreetNameId == a.StreetNameId);
                var municipality = municipalities.SingleOrDefault(x => x.NisCode == streetName.NisCode);
                return(new CrabHouseNumberAddressListItem(
                           a.HouseNumberId.Value,
                           a.PersistentLocalId.Value,
                           responseOptions.Value.Naamruimte,
                           responseOptions.Value.DetailUrl,
                           a.HouseNumber,
                           AddressMapper.GetVolledigAdres(a.HouseNumber, "", a.PostalCode, streetName, municipality),
                           a.VersionTimestamp.ToBelgianDateTimeOffset(),
                           a.IsComplete));
            })
                                           .ToList();

            return(Ok(new CrabHouseNumberAddressListResponse
            {
                Addresses = addressListItemResponses,
                Volgende = pagedAddresses.PaginationInfo.BuildNextUri(responseOptions.Value.CrabHuisnummersVolgendeUrl)
            }));
        }