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)); }
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) })); }