diff --git a/pom.xml b/pom.xml
index b48ffae..3de4f11 100644
--- a/pom.xml
+++ b/pom.xml
@@ -108,6 +108,10 @@
vaadin-testbench-junit5
test
+
+ org.springframework.cloud
+ spring-cloud-starter-bootstrap
+
org.projectlombok
lombok
@@ -117,6 +121,10 @@
org.springframework.boot
spring-boot-starter-actuator
+
+ org.springframework.cloud
+ spring-cloud-starter-loadbalancer
+
org.springframework.modulith
spring-modulith-starter-core
@@ -140,6 +148,15 @@
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
+
+ com.github.ben-manes.caffeine
+ caffeine
+ 3.1.8
+
+
+ org.springframework.cloud
+ spring-cloud-starter-config
+
diff --git a/src/main/java/dev/mars3142/fhq/account/AccountService.java b/src/main/java/dev/mars3142/fhq/account/AccountService.java
deleted file mode 100644
index 2839e3f..0000000
--- a/src/main/java/dev/mars3142/fhq/account/AccountService.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package dev.mars3142.fhq.account;
-
-public interface AccountService {
-
- RegisterResponse register(String username, String email, String password);
-
- LoginResponse login(String email, String password);
-
- RefreshTokenResponse refreshToken(String token);
-
- DeleteResponse delete(String token);
-}
diff --git a/src/main/java/dev/mars3142/fhq/account/DeleteResponse.java b/src/main/java/dev/mars3142/fhq/account/DeleteResponse.java
deleted file mode 100644
index b16d0e4..0000000
--- a/src/main/java/dev/mars3142/fhq/account/DeleteResponse.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package dev.mars3142.fhq.account;
-
-public record DeleteResponse(boolean success) {
-}
diff --git a/src/main/java/dev/mars3142/fhq/account/DeletedCompleted.java b/src/main/java/dev/mars3142/fhq/account/DeletedCompleted.java
deleted file mode 100644
index ddff218..0000000
--- a/src/main/java/dev/mars3142/fhq/account/DeletedCompleted.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package dev.mars3142.fhq.account;
-
-public record DeletedCompleted(String localId) {
-}
diff --git a/src/main/java/dev/mars3142/fhq/account/LoginCompleted.java b/src/main/java/dev/mars3142/fhq/account/LoginCompleted.java
deleted file mode 100644
index d8bf4ab..0000000
--- a/src/main/java/dev/mars3142/fhq/account/LoginCompleted.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package dev.mars3142.fhq.account;
-
-public record LoginCompleted(String localId, String email, String displayName) {
-}
diff --git a/src/main/java/dev/mars3142/fhq/account/LoginResponse.java b/src/main/java/dev/mars3142/fhq/account/LoginResponse.java
deleted file mode 100644
index 407dad6..0000000
--- a/src/main/java/dev/mars3142/fhq/account/LoginResponse.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package dev.mars3142.fhq.account;
-
-public record LoginResponse(String localId, String email, String displayName, String idToken, String registered,
- String refreshToken, String expiresIn) {
-}
diff --git a/src/main/java/dev/mars3142/fhq/account/RefreshTokenCompleted.java b/src/main/java/dev/mars3142/fhq/account/RefreshTokenCompleted.java
deleted file mode 100644
index e7616f4..0000000
--- a/src/main/java/dev/mars3142/fhq/account/RefreshTokenCompleted.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package dev.mars3142.fhq.account;
-
-public record RefreshTokenCompleted(String localId, String token) {
-}
diff --git a/src/main/java/dev/mars3142/fhq/account/RefreshTokenResponse.java b/src/main/java/dev/mars3142/fhq/account/RefreshTokenResponse.java
deleted file mode 100644
index d60bf72..0000000
--- a/src/main/java/dev/mars3142/fhq/account/RefreshTokenResponse.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package dev.mars3142.fhq.account;
-
-public record RefreshTokenResponse(String expiresIn, String tokenType, String refreshToken, String idToken, String userId,
- String projectId) {
-}
diff --git a/src/main/java/dev/mars3142/fhq/account/RegisterResponse.java b/src/main/java/dev/mars3142/fhq/account/RegisterResponse.java
deleted file mode 100644
index 68e931f..0000000
--- a/src/main/java/dev/mars3142/fhq/account/RegisterResponse.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package dev.mars3142.fhq.account;
-
-public record RegisterResponse(String idToken, String email, String refreshToken, String expiresId, String localId) {
-}
diff --git a/src/main/java/dev/mars3142/fhq/account/RegistrationCompleted.java b/src/main/java/dev/mars3142/fhq/account/RegistrationCompleted.java
deleted file mode 100644
index 8593194..0000000
--- a/src/main/java/dev/mars3142/fhq/account/RegistrationCompleted.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package dev.mars3142.fhq.account;
-
-public record RegistrationCompleted(String email, String localId) {
-}
diff --git a/src/main/java/dev/mars3142/fhq/account/repositories/AccountRepository.java b/src/main/java/dev/mars3142/fhq/account/repositories/AccountRepository.java
deleted file mode 100644
index f290f61..0000000
--- a/src/main/java/dev/mars3142/fhq/account/repositories/AccountRepository.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package dev.mars3142.fhq.account.repositories;
-
-import dev.mars3142.fhq.account.repositories.impl.responses.DeleteResponse;
-import dev.mars3142.fhq.account.repositories.impl.responses.LoginResponse;
-import dev.mars3142.fhq.account.repositories.impl.responses.RefreshTokenResponse;
-import dev.mars3142.fhq.account.repositories.impl.responses.RegisterResponse;
-
-public interface AccountRepository {
-
- RegisterResponse register(String username, String email, String password);
-
- LoginResponse login(String username, String password);
-
- RefreshTokenResponse refreshToken(String token);
-
- DeleteResponse delete(String token);
-}
diff --git a/src/main/java/dev/mars3142/fhq/account/repositories/impl/AccountRepositoryImpl.java b/src/main/java/dev/mars3142/fhq/account/repositories/impl/AccountRepositoryImpl.java
deleted file mode 100644
index 2c1628d..0000000
--- a/src/main/java/dev/mars3142/fhq/account/repositories/impl/AccountRepositoryImpl.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package dev.mars3142.fhq.account.repositories.impl;
-
-import dev.mars3142.fhq.account.repositories.AccountRepository;
-import dev.mars3142.fhq.account.repositories.impl.requests.AccountDeleteRequest;
-import dev.mars3142.fhq.account.repositories.impl.requests.AccountRegisterRequest;
-import dev.mars3142.fhq.account.repositories.impl.requests.LoginRequest;
-import dev.mars3142.fhq.account.repositories.impl.requests.RefreshTokenRequest;
-import dev.mars3142.fhq.account.repositories.impl.responses.DeleteResponse;
-import dev.mars3142.fhq.account.repositories.impl.responses.LoginResponse;
-import dev.mars3142.fhq.account.repositories.impl.responses.RefreshTokenResponse;
-import dev.mars3142.fhq.account.repositories.impl.responses.RegisterResponse;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import lombok.val;
-import org.springframework.stereotype.Repository;
-import org.springframework.web.client.RestClient;
-
-@Repository
-@RequiredArgsConstructor
-@Slf4j
-public class AccountRepositoryImpl implements AccountRepository {
-
- private final RestClient client;
-
- @Override
- public RegisterResponse register(String username, String email, String password) {
- val request = new AccountRegisterRequest(username, email, password);
- return client
- .post()
- .uri("/v1/account/register")
- .body(request)
- .retrieve()
- .body(RegisterResponse.class);
- }
-
- @Override
- public LoginResponse login(String email, String password) {
- val request = new LoginRequest(email, password);
- return client
- .post()
- .uri("/v1/account/login")
- .body(request)
- .retrieve()
- .body(LoginResponse.class);
- }
-
- @Override
- public RefreshTokenResponse refreshToken(String token) {
- val request = new RefreshTokenRequest(token);
- return client
- .post()
- .uri("/v1/token/refresh")
- .body(request)
- .retrieve()
- .body(RefreshTokenResponse.class);
- }
-
- @Override
- public DeleteResponse delete(String token) {
- val request = new AccountDeleteRequest(token);
- return client
- .post()
- .uri("/v1/account/delete")
- .body(request)
- .retrieve()
- .body(DeleteResponse.class);
- }
-}
diff --git a/src/main/java/dev/mars3142/fhq/account/repositories/impl/requests/AccountDeleteRequest.java b/src/main/java/dev/mars3142/fhq/account/repositories/impl/requests/AccountDeleteRequest.java
deleted file mode 100644
index 065b3f0..0000000
--- a/src/main/java/dev/mars3142/fhq/account/repositories/impl/requests/AccountDeleteRequest.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package dev.mars3142.fhq.account.repositories.impl.requests;
-
-public record AccountDeleteRequest(String token) {
-}
diff --git a/src/main/java/dev/mars3142/fhq/account/repositories/impl/requests/AccountRegisterRequest.java b/src/main/java/dev/mars3142/fhq/account/repositories/impl/requests/AccountRegisterRequest.java
deleted file mode 100644
index fa4f209..0000000
--- a/src/main/java/dev/mars3142/fhq/account/repositories/impl/requests/AccountRegisterRequest.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package dev.mars3142.fhq.account.repositories.impl.requests;
-
-public record AccountRegisterRequest(String username, String email, String password) {
-}
diff --git a/src/main/java/dev/mars3142/fhq/account/repositories/impl/requests/LoginRequest.java b/src/main/java/dev/mars3142/fhq/account/repositories/impl/requests/LoginRequest.java
deleted file mode 100644
index e8a4223..0000000
--- a/src/main/java/dev/mars3142/fhq/account/repositories/impl/requests/LoginRequest.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package dev.mars3142.fhq.account.repositories.impl.requests;
-
-public record LoginRequest(String email, String password) {
-}
diff --git a/src/main/java/dev/mars3142/fhq/account/repositories/impl/requests/RefreshTokenRequest.java b/src/main/java/dev/mars3142/fhq/account/repositories/impl/requests/RefreshTokenRequest.java
deleted file mode 100644
index 25d39e2..0000000
--- a/src/main/java/dev/mars3142/fhq/account/repositories/impl/requests/RefreshTokenRequest.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package dev.mars3142.fhq.account.repositories.impl.requests;
-
-public record RefreshTokenRequest(String token) {
-}
diff --git a/src/main/java/dev/mars3142/fhq/account/repositories/impl/responses/DeleteResponse.java b/src/main/java/dev/mars3142/fhq/account/repositories/impl/responses/DeleteResponse.java
deleted file mode 100644
index 6e45855..0000000
--- a/src/main/java/dev/mars3142/fhq/account/repositories/impl/responses/DeleteResponse.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package dev.mars3142.fhq.account.repositories.impl.responses;
-
-public record DeleteResponse(boolean deleted) {
-}
diff --git a/src/main/java/dev/mars3142/fhq/account/repositories/impl/responses/LoginResponse.java b/src/main/java/dev/mars3142/fhq/account/repositories/impl/responses/LoginResponse.java
deleted file mode 100644
index d87a4b1..0000000
--- a/src/main/java/dev/mars3142/fhq/account/repositories/impl/responses/LoginResponse.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package dev.mars3142.fhq.account.repositories.impl.responses;
-
-public record LoginResponse(String localId, String email, String displayName, String idToken, String registered,
- String refreshToken, String expiresIn) {
-}
diff --git a/src/main/java/dev/mars3142/fhq/account/repositories/impl/responses/RefreshTokenResponse.java b/src/main/java/dev/mars3142/fhq/account/repositories/impl/responses/RefreshTokenResponse.java
deleted file mode 100644
index 0aab28e..0000000
--- a/src/main/java/dev/mars3142/fhq/account/repositories/impl/responses/RefreshTokenResponse.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package dev.mars3142.fhq.account.repositories.impl.responses;
-
-public record RefreshTokenResponse(String expiresIn, String tokenType, String refreshToken, String idToken, String userId,
- String projectId) {
-}
diff --git a/src/main/java/dev/mars3142/fhq/account/repositories/impl/responses/RegisterResponse.java b/src/main/java/dev/mars3142/fhq/account/repositories/impl/responses/RegisterResponse.java
deleted file mode 100644
index e63cb2b..0000000
--- a/src/main/java/dev/mars3142/fhq/account/repositories/impl/responses/RegisterResponse.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package dev.mars3142.fhq.account.repositories.impl.responses;
-
-public record RegisterResponse(String idToken, String email, String refreshToken, String expiresId, String localId) {
-}
diff --git a/src/main/java/dev/mars3142/fhq/account/services/impl/AccountServiceImpl.java b/src/main/java/dev/mars3142/fhq/account/services/impl/AccountServiceImpl.java
deleted file mode 100644
index 0d0fe51..0000000
--- a/src/main/java/dev/mars3142/fhq/account/services/impl/AccountServiceImpl.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package dev.mars3142.fhq.account.services.impl;
-
-import dev.mars3142.fhq.account.*;
-import dev.mars3142.fhq.account.repositories.AccountRepository;
-import lombok.RequiredArgsConstructor;
-import lombok.val;
-import org.springframework.context.ApplicationEventPublisher;
-import org.springframework.stereotype.Service;
-
-@Service
-@RequiredArgsConstructor
-public class AccountServiceImpl implements AccountService {
-
- private final ApplicationEventPublisher events;
- private final AccountRepository repository;
-
- @Override
- public RegisterResponse register(String username, String email, String password) {
- val response = repository.register(username, email, password);
- events.publishEvent(new RegistrationCompleted(response.email(), response.localId()));
- return new RegisterResponse(response.idToken(), response.email(), response.refreshToken(), response.expiresId(), response.localId());
- }
-
- @Override
- public LoginResponse login(String email, String password) {
- val response = repository.login(email, password);
- events.publishEvent(new LoginCompleted(response.localId(), response.email(), response.displayName()));
- return new LoginResponse(response.localId(), response.email(), response.displayName(), response.idToken(), response.registered(), response.refreshToken(), response.expiresIn());
- }
-
- @Override
- public RefreshTokenResponse refreshToken(String token) {
- val response = repository.refreshToken(token);
- events.publishEvent(new RefreshTokenCompleted(response.userId(), response.idToken()));
- return new RefreshTokenResponse(response.expiresIn(), response.tokenType(), response.refreshToken(), response.idToken(), response.userId(), response.projectId());
- }
-
- @Override
- public DeleteResponse delete(String token) {
- val response = repository.delete(token);
- events.publishEvent(new DeletedCompleted(""));
- return new DeleteResponse(response.deleted());
- }
-}
diff --git a/src/main/java/dev/mars3142/fhq/client/TimeZoneClient.java b/src/main/java/dev/mars3142/fhq/client/TimeZoneClient.java
new file mode 100644
index 0000000..1a8924f
--- /dev/null
+++ b/src/main/java/dev/mars3142/fhq/client/TimeZoneClient.java
@@ -0,0 +1,9 @@
+package dev.mars3142.fhq.client;
+
+import org.springframework.web.service.annotation.GetExchange;
+
+public interface TimeZoneClient {
+
+ @GetExchange("/v1/timezone")
+ String getTimeZone();
+}
diff --git a/src/main/java/dev/mars3142/fhq/config/AppConfig.java b/src/main/java/dev/mars3142/fhq/config/AppConfig.java
deleted file mode 100644
index ce555d4..0000000
--- a/src/main/java/dev/mars3142/fhq/config/AppConfig.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package dev.mars3142.fhq.config;
-
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.web.client.RestClient;
-
-@Configuration
-public class AppConfig {
-
- @Value("${backend.uri}")
- private String baseUri;
-
- @Bean
- public RestClient restClient() {
- return RestClient.builder().baseUrl(baseUri).build();
- }
-}
diff --git a/src/main/java/dev/mars3142/fhq/config/RestClientConfig.java b/src/main/java/dev/mars3142/fhq/config/RestClientConfig.java
new file mode 100644
index 0000000..3173785
--- /dev/null
+++ b/src/main/java/dev/mars3142/fhq/config/RestClientConfig.java
@@ -0,0 +1,38 @@
+package dev.mars3142.fhq.config;
+
+import dev.mars3142.fhq.client.TimeZoneClient;
+import org.springframework.boot.web.client.ClientHttpRequestFactories;
+import org.springframework.boot.web.client.ClientHttpRequestFactorySettings;
+import org.springframework.cloud.client.loadbalancer.LoadBalanced;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.http.client.ClientHttpRequestFactory;
+import org.springframework.web.client.RestClient;
+import org.springframework.web.client.support.RestClientAdapter;
+import org.springframework.web.service.invoker.HttpServiceProxyFactory;
+
+@Configuration
+public class RestClientConfig {
+
+ @LoadBalanced
+ @Bean
+ RestClient.Builder restClientBuilder() {
+ return RestClient.builder();
+ }
+
+ @Bean
+ public TimeZoneClient timeZoneClient(RestClient.Builder restClientBuilder) {
+ RestClient restClient = restClientBuilder
+ .baseUrl("http://timezone-service")
+ .requestFactory(getClientRequestFactory())
+ .build();
+ var restClientAdapter = RestClientAdapter.create(restClient);
+ var httpServiceProxyFactory = HttpServiceProxyFactory.builderFor(restClientAdapter).build();
+ return httpServiceProxyFactory.createClient(TimeZoneClient.class);
+ }
+
+ private ClientHttpRequestFactory getClientRequestFactory() {
+ ClientHttpRequestFactorySettings clientHttpRequestFactorySettings = ClientHttpRequestFactorySettings.DEFAULTS;
+ return ClientHttpRequestFactories.get(clientHttpRequestFactorySettings);
+ }
+}
diff --git a/src/main/java/dev/mars3142/fhq/views/landing_page/LandingPageView.java b/src/main/java/dev/mars3142/fhq/views/landing_page/LandingPageView.java
index ce762e1..d997cf9 100644
--- a/src/main/java/dev/mars3142/fhq/views/landing_page/LandingPageView.java
+++ b/src/main/java/dev/mars3142/fhq/views/landing_page/LandingPageView.java
@@ -1,17 +1,24 @@
package dev.mars3142.fhq.views.landing_page;
import com.vaadin.flow.component.Composite;
+import com.vaadin.flow.component.Text;
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import com.vaadin.flow.router.PageTitle;
import com.vaadin.flow.router.Route;
+import dev.mars3142.fhq.client.TimeZoneClient;
import lombok.extern.slf4j.Slf4j;
+import lombok.val;
@PageTitle("Firmware HQ")
@Route(value = "", layout = LandingPageLayout.class)
@Slf4j
public class LandingPageView extends Composite {
- public LandingPageView() {
-
+ public LandingPageView(TimeZoneClient client) {
+ val timeZone = client.getTimeZone();
+ val verticalLayout = new VerticalLayout();
+ verticalLayout.setSizeFull();
+ verticalLayout.add(new Text(timeZone));
+ getContent().add(verticalLayout);
}
}
diff --git a/src/main/resources/application-dev.yaml b/src/main/resources/_application-dev.yaml
similarity index 100%
rename from src/main/resources/application-dev.yaml
rename to src/main/resources/_application-dev.yaml
diff --git a/src/main/resources/application.yaml b/src/main/resources/_application.yaml
similarity index 100%
rename from src/main/resources/application.yaml
rename to src/main/resources/_application.yaml
diff --git a/src/main/resources/bootstrap.yml b/src/main/resources/bootstrap.yml
new file mode 100644
index 0000000..1aabc98
--- /dev/null
+++ b/src/main/resources/bootstrap.yml
@@ -0,0 +1,16 @@
+eureka:
+ client:
+ register-with-eureka: true
+ fetch-registry: true
+ service-url:
+ defaultZone: ${EUREKA}
+
+spring:
+ application:
+ name: website
+ cloud:
+ config:
+ discovery:
+ enabled: true
+ serviceId: config-service
+ fail-fast: true