diff --git a/docker-compose.yml b/docker-compose.yml
new file mode 100644
index 0000000..da23e81
--- /dev/null
+++ b/docker-compose.yml
@@ -0,0 +1,13 @@
+version: '3.9'
+
+services:
+ sporthub-database:
+ container_name: "sportshub-database"
+ image: "postgres:16"
+ ports:
+ - "50001:5432"
+ networks:
+ - "sportshub-local-network"
+
+networks:
+ sportshub-local-network:
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 19ce565..7936024 100644
--- a/pom.xml
+++ b/pom.xml
@@ -13,9 +13,14 @@
21
+ 21
+ 21
+ sportshub-domain
+ sportshub-application
+ sportshub-infrastructure
sportshub-exposition
sportshub-launcher
@@ -34,6 +39,21 @@
sportshub-exposition
${project.version}
+
+ org.sportshub
+ sportshub-application
+ ${project.version}
+
+
+ org.sportshub
+ sportshub-domain
+ ${project.version}
+
+
+ org.sportshub
+ sportshub-infrastructure
+ ${project.version}
+
diff --git a/sportshub-application/pom.xml b/sportshub-application/pom.xml
new file mode 100644
index 0000000..1fb543c
--- /dev/null
+++ b/sportshub-application/pom.xml
@@ -0,0 +1,29 @@
+
+
+ 4.0.0
+
+ org.sportshub
+ sportshub-parent
+ 0.0.1-SNAPSHOT
+
+
+
+ sportshub-application
+
+ sportshub-application
+ Demo project for Spring Boot
+
+ jar
+
+
+
+ org.sportshub
+ sportshub-domain
+
+
+ org.springframework
+ spring-context
+
+
+
diff --git a/sportshub-application/src/main/java/org/sportshub/application/user/UserUseCases.java b/sportshub-application/src/main/java/org/sportshub/application/user/UserUseCases.java
new file mode 100644
index 0000000..34ded03
--- /dev/null
+++ b/sportshub-application/src/main/java/org/sportshub/application/user/UserUseCases.java
@@ -0,0 +1,21 @@
+package org.sportshub.application.user;
+
+import java.util.Optional;
+import java.util.UUID;
+
+import org.sportshub.domain.user.model.User;
+import org.sportshub.domain.user.port.UserPort;
+import org.springframework.stereotype.Service;
+
+@Service
+public class UserUseCases {
+ private final UserPort userPort;
+
+ public UserUseCases(final UserPort userPort) {
+ this.userPort = userPort;
+ }
+
+ public Optional findById(UUID userId) {
+ return userPort.findById(userId);
+ }
+}
diff --git a/sportshub-domain/pom.xml b/sportshub-domain/pom.xml
new file mode 100644
index 0000000..6866f2c
--- /dev/null
+++ b/sportshub-domain/pom.xml
@@ -0,0 +1,30 @@
+
+
+ 4.0.0
+
+ org.sportshub
+ sportshub-parent
+ 0.0.1-SNAPSHOT
+
+
+
+ sportshub-domain
+
+ sportshub-domain
+ Demo project for Spring Boot
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ 16
+ 16
+
+
+
+
+
+ jar
+
diff --git a/sportshub-domain/src/main/java/org/sportshub/domain/user/model/User.java b/sportshub-domain/src/main/java/org/sportshub/domain/user/model/User.java
new file mode 100644
index 0000000..556753d
--- /dev/null
+++ b/sportshub-domain/src/main/java/org/sportshub/domain/user/model/User.java
@@ -0,0 +1,8 @@
+package org.sportshub.domain.user.model;
+
+import java.util.UUID;
+
+public record User(
+ UUID id,
+ String password
+) {}
diff --git a/sportshub-domain/src/main/java/org/sportshub/domain/user/port/UserPort.java b/sportshub-domain/src/main/java/org/sportshub/domain/user/port/UserPort.java
new file mode 100644
index 0000000..b1d9872
--- /dev/null
+++ b/sportshub-domain/src/main/java/org/sportshub/domain/user/port/UserPort.java
@@ -0,0 +1,10 @@
+package org.sportshub.domain.user.port;
+
+import java.util.Optional;
+import java.util.UUID;
+
+import org.sportshub.domain.user.model.User;
+
+public interface UserPort {
+ Optional findById(UUID userId);
+}
diff --git a/sportshub-exposition/src/main/java/org/sportshub/exposition/user/UserController.java b/sportshub-exposition/src/main/java/org/sportshub/exposition/user/UserController.java
new file mode 100644
index 0000000..7bc917d
--- /dev/null
+++ b/sportshub-exposition/src/main/java/org/sportshub/exposition/user/UserController.java
@@ -0,0 +1,23 @@
+package org.sportshub.exposition.user;
+
+import java.util.UUID;
+
+import org.sportshub.application.user.UserUseCases;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/api/users")
+public class UserController {
+ private final UserUseCases userUseCases;
+
+ public UserController(final UserUseCases userUseCases) {
+ this.userUseCases = userUseCases;
+ }
+
+ @PostMapping
+ public String login() {
+ return "";
+ }
+}
diff --git a/sportshub-infrastructure/pom.xml b/sportshub-infrastructure/pom.xml
new file mode 100644
index 0000000..d2ee38e
--- /dev/null
+++ b/sportshub-infrastructure/pom.xml
@@ -0,0 +1,29 @@
+
+
+ 4.0.0
+
+ org.sportshub
+ sportshub-parent
+ 0.0.1-SNAPSHOT
+
+
+
+ sportshub-infrastructure
+
+ sportshub-infrastructure
+ Demo project for Spring Boot
+
+ jar
+
+
+
+ org.sportshub
+ sportshub-domain
+
+
+ org.springframework
+ spring-context
+
+
+
diff --git a/sportshub-infrastructure/src/main/java/org/sportshub/infrastructure/user/adapter/UserInMemoryAdapter.java b/sportshub-infrastructure/src/main/java/org/sportshub/infrastructure/user/adapter/UserInMemoryAdapter.java
new file mode 100644
index 0000000..ae8047a
--- /dev/null
+++ b/sportshub-infrastructure/src/main/java/org/sportshub/infrastructure/user/adapter/UserInMemoryAdapter.java
@@ -0,0 +1,25 @@
+package org.sportshub.infrastructure.user.adapter;
+
+import java.util.List;
+import java.util.Optional;
+import java.util.UUID;
+
+import org.sportshub.domain.user.model.User;
+import org.sportshub.domain.user.port.UserPort;
+import org.springframework.stereotype.Component;
+
+@Component
+public class UserInMemoryAdapter implements UserPort {
+ private static final List users = List.of(
+ new User(UUID.fromString("c1a0805f-c618-47dc-bae7-bee70503644e"), "password"),
+ new User(UUID.fromString("4eff194d-dd8e-463e-974f-034bfd509f84"), "password"),
+ new User(UUID.fromString("c78d7d7c-0386-415d-86dc-98a470591e07"), "password")
+ );
+
+ @Override
+ public Optional findById(final UUID userId) {
+ return users.stream()
+ .filter(user -> userId.equals(user.id()))
+ .findFirst();
+ }
+}
diff --git a/sportshub-launcher/pom.xml b/sportshub-launcher/pom.xml
index b85db97..c3ccf13 100644
--- a/sportshub-launcher/pom.xml
+++ b/sportshub-launcher/pom.xml
@@ -21,6 +21,18 @@
org.sportshub
sportshub-exposition
+
+ org.sportshub
+ sportshub-application
+
+
+ org.sportshub
+ sportshub-domain
+
+
+ org.sportshub
+ sportshub-infrastructure
+
diff --git a/sportshub-launcher/src/main/java/org/sportshub/launcher/ApplicationLauncher.java b/sportshub-launcher/src/main/java/org/sportshub/launcher/ApplicationLauncher.java
index ac055ae..44602fe 100644
--- a/sportshub-launcher/src/main/java/org/sportshub/launcher/ApplicationLauncher.java
+++ b/sportshub-launcher/src/main/java/org/sportshub/launcher/ApplicationLauncher.java
@@ -5,7 +5,12 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
@SpringBootApplication
-@ComponentScan(basePackages = "org.sportshub.exposition")
+@ComponentScan(basePackages = {
+ "org.sportshub.exposition",
+ "org.sportshub.application",
+ "org.sportshub.domain",
+ "org.sportshub.infrastructure"
+})
public class ApplicationLauncher {
public static void main(String[] args) {
SpringApplication.run(ApplicationLauncher.class, args);