Esempio n. 1
0
        public async Task <IActionResult> PostBosaAddressRepresentations(
            [FromServices] LegacyContext context,
            [FromServices] SyndicationContext syndicationContext,
            [FromServices] IOptions <ResponseOptions> responseOptions,
            [FromBody] BosaAddressRepresentationRequest request,
            CancellationToken cancellationToken = default)
        {
            if (Request.ContentLength.HasValue && Request.ContentLength > 0 && request == null)
            {
                return(Ok(new AddressRepresentationBosaResponse()));
            }

            if (string.IsNullOrEmpty(request?.AdresCode?.ObjectId) || !int.TryParse(request.AdresCode.ObjectId, out var addressId))
            {
                return(BadRequest("Valid objectId is required"));
            }

            var address = await context.AddressDetail.FirstOrDefaultAsync(x => x.PersistentLocalId == addressId, cancellationToken);

            if (address == null)
            {
                return(NotFound());
            }

            var streetName = await syndicationContext
                             .StreetNameBosaItems
                             .FirstOrDefaultAsync(x => x.StreetNameId == address.StreetNameId, cancellationToken);

            var municipality = await syndicationContext
                               .MunicipalityBosaItems
                               .FirstOrDefaultAsync(x => x.NisCode == streetName.NisCode, cancellationToken);

            var response = new AddressRepresentationBosaResponse
            {
                Identificator = new AdresIdentificator(responseOptions.Value.Naamruimte, address.PersistentLocalId.ToString(), address.VersionTimestamp.ToBelgianDateTimeOffset())
            };

            if (!request.Taal.HasValue || request.Taal.Value == municipality.PrimaryLanguage)
            {
                response.AdresVoorstellingen = new List <BosaAddressRepresentation>
                {
                    new BosaAddressRepresentation(
                        municipality.PrimaryLanguage.Value,
                        address.HouseNumber,
                        address.BoxNumber,
                        AddressMapper.GetVolledigAdres(address.HouseNumber, address.BoxNumber, address.PostalCode, streetName, municipality).GeografischeNaam.Spelling,
                        AddressMapper.GetDefaultMunicipalityName(municipality).Value,
                        AddressMapper.GetDefaultStreetNameName(streetName, municipality.PrimaryLanguage).Value,
                        address.PostalCode)
                };
            }

            return(Ok(response));
        }
Esempio n. 2
0
        public async Task <IActionResult> List(
            [FromServices] LegacyContext context,
            [FromServices] AddressQueryContext queryContext,
            [FromServices] IOptions <ResponseOptions> responseOptions,
            Taal?taal,
            CancellationToken cancellationToken = default)
        {
            var filtering  = Request.ExtractFilteringRequest <AddressFilter>();
            var sorting    = Request.ExtractSortingRequest();
            var pagination = Request.ExtractPaginationRequest();

            var pagedAddresses = new AddressListQuery(queryContext)
                                 .Fetch(filtering, sorting, pagination);

            Response.AddPagedQueryResultHeaders(pagedAddresses);

            var addresses = await pagedAddresses.Items
                            .Select(a =>
                                    new
            {
                a.PersistentLocalId,
                a.StreetNameId,
                a.HouseNumber,
                a.BoxNumber,
                a.PostalCode,
                a.VersionTimestamp
            })
                            .ToListAsync(cancellationToken);

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

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

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

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

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

            return(Ok(new AddressListResponse
            {
                Adressen = addressListItemResponses,
                Volgende = pagedAddresses.PaginationInfo.BuildNextUri(responseOptions.Value.VolgendeUrl)
            }));
        }