diff --git a/.run/Testing.run.xml b/.run/Testing.run.xml new file mode 100644 index 0000000..25c6c38 --- /dev/null +++ b/.run/Testing.run.xml @@ -0,0 +1,12 @@ + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index 240b07a..f975148 100644 --- a/pom.xml +++ b/pom.xml @@ -14,6 +14,7 @@ 24.4.0.beta4 2023.0.1 5.4.1 + 1.1.6 @@ -72,6 +73,13 @@ pom import + + org.springframework.modulith + spring-modulith-bom + ${spring-modulith.version} + pom + import + @@ -110,10 +118,6 @@ com.google.cloud spring-cloud-gcp-starter - - org.springframework.cloud - spring-cloud-starter-openfeign - org.projectlombok lombok @@ -123,6 +127,25 @@ org.springframework.boot spring-boot-starter-actuator + + org.springframework.modulith + spring-modulith-starter-core + + + org.springframework.modulith + spring-modulith-starter-test + test + + + org.springframework.modulith + spring-modulith-actuator + runtime + + + org.springframework.modulith + spring-modulith-observability + runtime + diff --git a/src/main/java/dev/mars3142/fhq/account/AccountService.java b/src/main/java/dev/mars3142/fhq/account/AccountService.java new file mode 100644 index 0000000..fc4bb50 --- /dev/null +++ b/src/main/java/dev/mars3142/fhq/account/AccountService.java @@ -0,0 +1,4 @@ +package dev.mars3142.fhq.account; + +public interface AccountService{ +} diff --git a/src/main/java/dev/mars3142/fhq/account/repositories/AccountRepository.java b/src/main/java/dev/mars3142/fhq/account/repositories/AccountRepository.java new file mode 100644 index 0000000..3d6ae18 --- /dev/null +++ b/src/main/java/dev/mars3142/fhq/account/repositories/AccountRepository.java @@ -0,0 +1,17 @@ +package dev.mars3142.fhq.account.repositories; + +import dev.mars3142.fhq.account.repositories.impl.responses.LoginResponse; +import dev.mars3142.fhq.account.repositories.impl.responses.AccountDeleteResponse; +import dev.mars3142.fhq.account.repositories.impl.responses.AccountRegisterResponse; +import dev.mars3142.fhq.account.repositories.impl.responses.RefreshTokenResponse; + +public interface AccountRepository { + + AccountRegisterResponse register(String username, String email, String password); + + LoginResponse login(String username, String password); + + RefreshTokenResponse refreshToken(String token); + + AccountDeleteResponse 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 new file mode 100644 index 0000000..b94eeee --- /dev/null +++ b/src/main/java/dev/mars3142/fhq/account/repositories/impl/AccountRepositoryImpl.java @@ -0,0 +1,68 @@ +package dev.mars3142.fhq.account.repositories.impl; + +import dev.mars3142.fhq.account.repositories.impl.responses.AccountRegisterResponse; +import dev.mars3142.fhq.account.repositories.impl.responses.LoginResponse; +import dev.mars3142.fhq.account.repositories.AccountRepository; +import dev.mars3142.fhq.account.repositories.impl.requests.AccountDeleteRequest; +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.AccountDeleteResponse; +import dev.mars3142.fhq.account.repositories.impl.responses.RefreshTokenResponse; +import dev.mars3142.fhq.account.repositories.impl.requests.AccountRegisterRequest; +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 AccountRegisterResponse 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(AccountRegisterResponse.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/account/refresh") + .body(request) + .retrieve() + .body(RefreshTokenResponse.class); + } + + @Override + public AccountDeleteResponse delete(String token) { + val request = new AccountDeleteRequest(token); + return client + .post() + .uri("/v1/account/delete") + .body(request) + .retrieve() + .body(AccountDeleteResponse.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 new file mode 100644 index 0000000..065b3f0 --- /dev/null +++ b/src/main/java/dev/mars3142/fhq/account/repositories/impl/requests/AccountDeleteRequest.java @@ -0,0 +1,4 @@ +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 new file mode 100644 index 0000000..fa4f209 --- /dev/null +++ b/src/main/java/dev/mars3142/fhq/account/repositories/impl/requests/AccountRegisterRequest.java @@ -0,0 +1,4 @@ +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 new file mode 100644 index 0000000..e8a4223 --- /dev/null +++ b/src/main/java/dev/mars3142/fhq/account/repositories/impl/requests/LoginRequest.java @@ -0,0 +1,4 @@ +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 new file mode 100644 index 0000000..25d39e2 --- /dev/null +++ b/src/main/java/dev/mars3142/fhq/account/repositories/impl/requests/RefreshTokenRequest.java @@ -0,0 +1,4 @@ +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/AccountDeleteResponse.java b/src/main/java/dev/mars3142/fhq/account/repositories/impl/responses/AccountDeleteResponse.java new file mode 100644 index 0000000..ef3d386 --- /dev/null +++ b/src/main/java/dev/mars3142/fhq/account/repositories/impl/responses/AccountDeleteResponse.java @@ -0,0 +1,4 @@ +package dev.mars3142.fhq.account.repositories.impl.responses; + +public record AccountDeleteResponse() { +} diff --git a/src/main/java/dev/mars3142/fhq/account/repositories/impl/responses/AccountRegisterResponse.java b/src/main/java/dev/mars3142/fhq/account/repositories/impl/responses/AccountRegisterResponse.java new file mode 100644 index 0000000..4985ece --- /dev/null +++ b/src/main/java/dev/mars3142/fhq/account/repositories/impl/responses/AccountRegisterResponse.java @@ -0,0 +1,4 @@ +package dev.mars3142.fhq.account.repositories.impl.responses; + +public record AccountRegisterResponse() { +} 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 new file mode 100644 index 0000000..61adc03 --- /dev/null +++ b/src/main/java/dev/mars3142/fhq/account/repositories/impl/responses/LoginResponse.java @@ -0,0 +1,4 @@ +package dev.mars3142.fhq.account.repositories.impl.responses; + +public record LoginResponse() { +} 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 new file mode 100644 index 0000000..5bccd9f --- /dev/null +++ b/src/main/java/dev/mars3142/fhq/account/repositories/impl/responses/RefreshTokenResponse.java @@ -0,0 +1,4 @@ +package dev.mars3142.fhq.account.repositories.impl.responses; + +public record RefreshTokenResponse() { +} diff --git a/src/main/java/dev/mars3142/fhq/account/services/AccountServiceImpl.java b/src/main/java/dev/mars3142/fhq/account/services/AccountServiceImpl.java new file mode 100644 index 0000000..f0faa83 --- /dev/null +++ b/src/main/java/dev/mars3142/fhq/account/services/AccountServiceImpl.java @@ -0,0 +1,14 @@ +package dev.mars3142.fhq.account.services; + +import dev.mars3142.fhq.account.repositories.AccountRepository; +import dev.mars3142.fhq.account.AccountService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class AccountServiceImpl implements AccountService { + + private final AccountRepository repository; + +} diff --git a/src/main/java/dev/mars3142/fhq/config/AppConfig.java b/src/main/java/dev/mars3142/fhq/config/AppConfig.java new file mode 100644 index 0000000..ce555d4 --- /dev/null +++ b/src/main/java/dev/mars3142/fhq/config/AppConfig.java @@ -0,0 +1,18 @@ +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/views/MainLayout.java b/src/main/java/dev/mars3142/fhq/views/MainLayout.java index f10d12a..bafc391 100644 --- a/src/main/java/dev/mars3142/fhq/views/MainLayout.java +++ b/src/main/java/dev/mars3142/fhq/views/MainLayout.java @@ -26,8 +26,8 @@ import com.vaadin.flow.theme.lumo.LumoUtility.Padding; import com.vaadin.flow.theme.lumo.LumoUtility.TextColor; import com.vaadin.flow.theme.lumo.LumoUtility.Whitespace; import com.vaadin.flow.theme.lumo.LumoUtility.Width; -import dev.mars3142.fhq.views.checkoutform.CheckoutFormView; -import dev.mars3142.fhq.views.myview.MyViewView; +import dev.mars3142.fhq.views.checkout_form.CheckoutFormView; +import dev.mars3142.fhq.views.my_view.MyViewView; import org.vaadin.lineawesome.LineAwesomeIcon; /** diff --git a/src/main/java/dev/mars3142/fhq/views/checkoutform/CheckoutFormView.java b/src/main/java/dev/mars3142/fhq/views/checkout_form/CheckoutFormView.java similarity index 99% rename from src/main/java/dev/mars3142/fhq/views/checkoutform/CheckoutFormView.java rename to src/main/java/dev/mars3142/fhq/views/checkout_form/CheckoutFormView.java index 041bb43..c7ec03e 100644 --- a/src/main/java/dev/mars3142/fhq/views/checkoutform/CheckoutFormView.java +++ b/src/main/java/dev/mars3142/fhq/views/checkout_form/CheckoutFormView.java @@ -1,4 +1,4 @@ -package dev.mars3142.fhq.views.checkoutform; +package dev.mars3142.fhq.views.checkout_form; import com.vaadin.flow.component.Component; import com.vaadin.flow.component.button.Button; diff --git a/src/main/java/dev/mars3142/fhq/views/landingpage/LandingPageLayout.java b/src/main/java/dev/mars3142/fhq/views/landing_page/LandingPageLayout.java similarity index 94% rename from src/main/java/dev/mars3142/fhq/views/landingpage/LandingPageLayout.java rename to src/main/java/dev/mars3142/fhq/views/landing_page/LandingPageLayout.java index 266a748..8cf8cbb 100644 --- a/src/main/java/dev/mars3142/fhq/views/landingpage/LandingPageLayout.java +++ b/src/main/java/dev/mars3142/fhq/views/landing_page/LandingPageLayout.java @@ -1,4 +1,4 @@ -package dev.mars3142.fhq.views.landingpage; +package dev.mars3142.fhq.views.landing_page; import com.vaadin.flow.component.applayout.AppLayout; import com.vaadin.flow.component.html.Div; 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 new file mode 100644 index 0000000..ce762e1 --- /dev/null +++ b/src/main/java/dev/mars3142/fhq/views/landing_page/LandingPageView.java @@ -0,0 +1,17 @@ +package dev.mars3142.fhq.views.landing_page; + +import com.vaadin.flow.component.Composite; +import com.vaadin.flow.component.orderedlayout.VerticalLayout; +import com.vaadin.flow.router.PageTitle; +import com.vaadin.flow.router.Route; +import lombok.extern.slf4j.Slf4j; + +@PageTitle("Firmware HQ") +@Route(value = "", layout = LandingPageLayout.class) +@Slf4j +public class LandingPageView extends Composite { + + public LandingPageView() { + + } +} diff --git a/src/main/java/dev/mars3142/fhq/views/landingpage/LandingPageView.java b/src/main/java/dev/mars3142/fhq/views/landingpage/LandingPageView.java deleted file mode 100644 index 2582690..0000000 --- a/src/main/java/dev/mars3142/fhq/views/landingpage/LandingPageView.java +++ /dev/null @@ -1,26 +0,0 @@ -package dev.mars3142.fhq.views.landingpage; - -import com.vaadin.flow.component.Composite; -import com.vaadin.flow.component.orderedlayout.VerticalLayout; -import com.vaadin.flow.router.PageTitle; -import com.vaadin.flow.router.Route; -import lombok.extern.slf4j.Slf4j; -import lombok.val; -import org.springframework.web.client.RestClient; - -@PageTitle("Firmware HQ") -@Route(value = "", layout = LandingPageLayout.class) -@Slf4j -public class LandingPageView extends Composite { - public LandingPageView() { - val client = RestClient - .builder() - .baseUrl("https://user-service-ggxookssmq-ew.a.run.app/v1") - .build(); - val response = client.get() - .uri("/users") - .retrieve() - .body(String.class); - log.info("Response: {}", response); - } -} diff --git a/src/main/java/dev/mars3142/fhq/views/myview/MyViewView.java b/src/main/java/dev/mars3142/fhq/views/my_view/MyViewView.java similarity index 97% rename from src/main/java/dev/mars3142/fhq/views/myview/MyViewView.java rename to src/main/java/dev/mars3142/fhq/views/my_view/MyViewView.java index d0d5483..05f4384 100644 --- a/src/main/java/dev/mars3142/fhq/views/myview/MyViewView.java +++ b/src/main/java/dev/mars3142/fhq/views/my_view/MyViewView.java @@ -1,4 +1,4 @@ -package dev.mars3142.fhq.views.myview; +package dev.mars3142.fhq.views.my_view; import com.vaadin.flow.component.Composite; import com.vaadin.flow.component.orderedlayout.HorizontalLayout; diff --git a/src/main/resources/application-dev.yaml b/src/main/resources/application-dev.yaml index f506a59..01df4d0 100644 --- a/src/main/resources/application-dev.yaml +++ b/src/main/resources/application-dev.yaml @@ -5,3 +5,6 @@ vaadin: # To improve the performance during development. # For more information https://vaadin.com/docs/latest/integrations/spring/configuration#special-configuration-parameters allowed-packages : com.vaadin,org.vaadin,dev.hilla,dev.mars3142 + +backend: + uri: http://localhost:8091/v1 diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index 264c5bc..175e134 100644 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -10,3 +10,6 @@ spring: check-template-location: false jpa: defer-datasource-initialization: true + +backend: + uri: https://api.firmware-hq.dev/v1 diff --git a/src/test/java/dev/mars3142/fhq/ApplicationTest.java b/src/test/java/dev/mars3142/fhq/ApplicationTest.java new file mode 100644 index 0000000..b92f07d --- /dev/null +++ b/src/test/java/dev/mars3142/fhq/ApplicationTest.java @@ -0,0 +1,35 @@ +package dev.mars3142.fhq; + +import lombok.val; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.modulith.core.ApplicationModules; +import org.springframework.modulith.docs.Documenter; + +@SpringBootTest +class ApplicationTests { + + @Test + void contextLoads() { + } + + @Test + void modules() { + ApplicationModules.of(Application.class).forEach(System.out::println); + } + + @Test + void verify() { + ApplicationModules.of(Application.class).verify(); + } + + @Test + void documentation() { + val modules = ApplicationModules.of(Application.class); + + new Documenter(modules) + .writeDocumentation() + .writeModuleCanvases() + .writeModulesAsPlantUml(); + } +}