more hal+json optimisation

Signed-off-by: Peter Siegmund <developer@mars3142.org>
This commit is contained in:
2024-10-29 09:42:30 +01:00
parent 1438b294ef
commit 46dd36a846
3 changed files with 19 additions and 6 deletions

View File

@@ -1,5 +1,6 @@
package dev.mars3142.fhq.timezone_service.timezone.controllers; package dev.mars3142.fhq.timezone_service.timezone.controllers;
import static org.springframework.beans.support.PagedListHolder.DEFAULT_PAGE_SIZE;
import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo; import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo;
import dev.mars3142.fhq.timezone_service.timezone.domain.model.response.LocationResponse; import dev.mars3142.fhq.timezone_service.timezone.domain.model.response.LocationResponse;
@@ -7,6 +8,7 @@ import dev.mars3142.fhq.timezone_service.timezone.domain.model.response.Timezone
import dev.mars3142.fhq.timezone_service.timezone.service.TimezoneService; import dev.mars3142.fhq.timezone_service.timezone.service.TimezoneService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.val; import lombok.val;
import org.springdoc.core.converters.models.Pageable;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PathVariable;
@@ -25,8 +27,8 @@ public class TimezoneController {
@GetMapping @GetMapping
@ResponseStatus(HttpStatus.OK) @ResponseStatus(HttpStatus.OK)
public TimezoneResponse getTimeZone( public TimezoneResponse getTimeZone(
@RequestHeader(value = "X-Forwarded-For", defaultValue = "127.0.0.1") String header) { @RequestHeader(value = "X-Forwarded-For", defaultValue = "127.0.0.1") String header_ip) {
val clientIp = header.split(",")[0]; val clientIp = header_ip.split(",")[0];
val ip = timeZoneService.getExternalIp(clientIp); val ip = timeZoneService.getExternalIp(clientIp);
val timezoneInfo = timeZoneService.getTimeZoneInfoByIp(ip); val timezoneInfo = timeZoneService.getTimeZoneInfoByIp(ip);
val posix = timeZoneService.getPosixTimeZone(timezoneInfo.timezone()); val posix = timeZoneService.getPosixTimeZone(timezoneInfo.timezone());
@@ -41,7 +43,10 @@ public class TimezoneController {
@ResponseStatus(HttpStatus.OK) @ResponseStatus(HttpStatus.OK)
public LocationResponse getLocations(@PathVariable String area) { public LocationResponse getLocations(@PathVariable String area) {
val locations = timeZoneService.getLocations(area); val locations = timeZoneService.getLocations(area);
return new LocationResponse(locations.size(), locations); val result = new LocationResponse();
result.setLocations(locations);
result.add(linkTo(TimezoneController.class).slash(area).withSelfRel());
return result;
} }
@GetMapping("{area}/{location}") @GetMapping("{area}/{location}")

View File

@@ -1,7 +1,17 @@
package dev.mars3142.fhq.timezone_service.timezone.domain.model.response; package dev.mars3142.fhq.timezone_service.timezone.domain.model.response;
import java.util.List; import java.util.List;
import lombok.Getter;
import org.springframework.hateoas.RepresentationModel;
public record LocationResponse(int count, List<String> locations) { @Getter
public class LocationResponse extends RepresentationModel<LocationResponse> {
private int count;
private List<String> locations;
public void setLocations(List<String> locations) {
this.count = locations.size();
this.locations = locations;
}
} }

View File

@@ -1,13 +1,11 @@
package dev.mars3142.fhq.timezone_service.timezone.domain.model.response; package dev.mars3142.fhq.timezone_service.timezone.domain.model.response;
import lombok.Getter; import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.Setter; import lombok.Setter;
import org.springframework.hateoas.RepresentationModel; import org.springframework.hateoas.RepresentationModel;
@Getter @Getter
@Setter @Setter
@RequiredArgsConstructor
public class TimezoneResponse extends RepresentationModel<TimezoneResponse> { public class TimezoneResponse extends RepresentationModel<TimezoneResponse> {
private String timezone; private String timezone;