@@ -1,5 +1,6 @@
|
|||||||
<component name="ProjectRunConfigurationManager">
|
<component name="ProjectRunConfigurationManager">
|
||||||
<configuration default="false" name="Application" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot">
|
<configuration default="false" name="Application" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot">
|
||||||
|
<option name="ACTIVE_PROFILES" value="dev" />
|
||||||
<envs>
|
<envs>
|
||||||
<env name="EUREKA" value="http://localhost:8761/eureka" />
|
<env name="EUREKA" value="http://localhost:8761/eureka" />
|
||||||
</envs>
|
</envs>
|
||||||
|
4
pom.xml
4
pom.xml
@@ -82,6 +82,10 @@
|
|||||||
<groupId>org.springframework.cloud</groupId>
|
<groupId>org.springframework.cloud</groupId>
|
||||||
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
|
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-hateoas</artifactId>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.github.ben-manes.caffeine</groupId>
|
<groupId>com.github.ben-manes.caffeine</groupId>
|
||||||
<artifactId>caffeine</artifactId>
|
<artifactId>caffeine</artifactId>
|
||||||
|
@@ -9,8 +9,8 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
|||||||
@EnableWebMvc
|
@EnableWebMvc
|
||||||
public class WebConfig implements WebMvcConfigurer {
|
public class WebConfig implements WebMvcConfigurer {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addCorsMappings(CorsRegistry registry) {
|
public void addCorsMappings(CorsRegistry registry) {
|
||||||
registry.addMapping("/**");
|
registry.addMapping("/**");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
package dev.mars3142.fhq.timezone_service.timezone.web.controllers;
|
package dev.mars3142.fhq.timezone_service.timezone.controllers;
|
||||||
|
|
||||||
import dev.mars3142.fhq.timezone_service.timezone.domain.entities.response.TimeApiTimezoneZoneResponse;
|
import dev.mars3142.fhq.timezone_service.timezone.domain.entities.response.TimeApiTimezoneZoneResponse;
|
||||||
import dev.mars3142.fhq.timezone_service.timezone.domain.model.response.LocationResponse;
|
import dev.mars3142.fhq.timezone_service.timezone.domain.model.response.LocationResponse;
|
||||||
@@ -7,6 +7,9 @@ import dev.mars3142.fhq.timezone_service.timezone.service.TimeZoneService;
|
|||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.val;
|
import lombok.val;
|
||||||
|
import org.springframework.http.HttpEntity;
|
||||||
|
import org.springframework.http.HttpStatus;
|
||||||
|
import org.springframework.http.ResponseEntity;
|
||||||
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;
|
||||||
import org.springframework.web.bind.annotation.RequestHeader;
|
import org.springframework.web.bind.annotation.RequestHeader;
|
||||||
@@ -21,12 +24,15 @@ public class TimeZoneController {
|
|||||||
private final TimeZoneService timeZoneService;
|
private final TimeZoneService timeZoneService;
|
||||||
|
|
||||||
@GetMapping
|
@GetMapping
|
||||||
public TimeZoneResponse getTimeZone(@RequestHeader(value = "X-Forwarded-For", defaultValue = "127.0.0.1") String header) {
|
public HttpEntity<TimeZoneResponse> getTimeZone(
|
||||||
|
@RequestHeader(value = "X-Forwarded-For", defaultValue = "127.0.0.1") String header) {
|
||||||
val clientIp = header.split(",")[0];
|
val clientIp = header.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());
|
||||||
return new TimeZoneResponse(timezoneInfo.timezone(), timezoneInfo.abbreviation(), posix);
|
return new ResponseEntity<>(
|
||||||
|
TimeZoneResponse.builder().timezone(timezoneInfo.timezone()).abbreviation(timezoneInfo.abbreviation())
|
||||||
|
.posix_tz(posix).build(), HttpStatus.OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("{area}")
|
@GetMapping("{area}")
|
||||||
@@ -36,11 +42,14 @@ public class TimeZoneController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("{area}/{location}")
|
@GetMapping("{area}/{location}")
|
||||||
public TimeZoneResponse getTimeZoneForLocation(@PathVariable String area, @PathVariable String location) {
|
public HttpEntity<TimeZoneResponse> getTimeZoneForLocation(@PathVariable String area, @PathVariable String location) {
|
||||||
val timezone = area + "/" + location;
|
val timezone = area + "/" + location;
|
||||||
val timezoneInfo = timeZoneService.getTimeZoneInfo(timezone);
|
val timezoneInfo = timeZoneService.getTimeZoneInfo(timezone);
|
||||||
val abbreviation = Objects.requireNonNullElse(timezoneInfo.dstInterval(), new TimeApiTimezoneZoneResponse.Interval(null)).dstName();
|
val abbreviation = Objects.requireNonNullElse(timezoneInfo.dstInterval(),
|
||||||
|
new TimeApiTimezoneZoneResponse.Interval(null)).dstName();
|
||||||
val posix = timeZoneService.getPosixTimeZone(timezone);
|
val posix = timeZoneService.getPosixTimeZone(timezone);
|
||||||
return new TimeZoneResponse(timezone, abbreviation, posix);
|
return new ResponseEntity<>(
|
||||||
|
TimeZoneResponse.builder().timezone(timezone).abbreviation(abbreviation).posix_tz(posix).build(),
|
||||||
|
HttpStatus.OK);
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -1,5 +1,16 @@
|
|||||||
package dev.mars3142.fhq.timezone_service.timezone.domain.model.response;
|
package dev.mars3142.fhq.timezone_service.timezone.domain.model.response;
|
||||||
|
|
||||||
public record TimeZoneResponse(String timezone, String abbreviation, String posix_tz) {
|
import lombok.Builder;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.springframework.hateoas.RepresentationModel;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Builder
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class TimeZoneResponse extends RepresentationModel<TimeZoneResponse> {
|
||||||
|
|
||||||
|
private final String timezone;
|
||||||
|
private final String abbreviation;
|
||||||
|
private final String posix_tz;
|
||||||
}
|
}
|
||||||
|
@@ -5,13 +5,6 @@ import dev.mars3142.fhq.timezone_service.timezone.domain.entities.response.Ipify
|
|||||||
import dev.mars3142.fhq.timezone_service.timezone.domain.entities.response.TimeApiTimezoneZoneResponse;
|
import dev.mars3142.fhq.timezone_service.timezone.domain.entities.response.TimeApiTimezoneZoneResponse;
|
||||||
import dev.mars3142.fhq.timezone_service.timezone.domain.entities.response.WorldTimeApiIpResponse;
|
import dev.mars3142.fhq.timezone_service.timezone.domain.entities.response.WorldTimeApiIpResponse;
|
||||||
import dev.mars3142.fhq.timezone_service.timezone.service.TimeZoneService;
|
import dev.mars3142.fhq.timezone_service.timezone.service.TimeZoneService;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
|
||||||
import lombok.val;
|
|
||||||
import org.springframework.cache.annotation.Cacheable;
|
|
||||||
import org.springframework.http.HttpStatusCode;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
import org.springframework.web.client.RestClient;
|
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
@@ -19,6 +12,12 @@ import java.nio.file.Path;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import lombok.val;
|
||||||
|
import org.springframework.cache.annotation.Cacheable;
|
||||||
|
import org.springframework.http.HttpStatusCode;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.web.client.RestClient;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
@Slf4j
|
@Slf4j
|
||||||
|
Reference in New Issue
Block a user