diff --git a/src/main/java/io/autoinvestor/application/RequestUserById/GetUserByIdCommandHandler.java b/src/main/java/io/autoinvestor/application/RequestUserById/GetUserByIdCommandHandler.java new file mode 100644 index 0000000..bbd01ff --- /dev/null +++ b/src/main/java/io/autoinvestor/application/RequestUserById/GetUserByIdCommandHandler.java @@ -0,0 +1,16 @@ +package io.autoinvestor.application.RequestUserById; + +import io.autoinvestor.application.UsersReadModel; +import io.autoinvestor.ui.user.UserResponse; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class GetUserByIdCommandHandler { + private final UsersReadModel readModel; + + public UserResponse handle (GetUserByIdQuery query) { + return readModel.getById(query.userId()); + } +} diff --git a/src/main/java/io/autoinvestor/application/RequestUserById/GetUserByIdQuery.java b/src/main/java/io/autoinvestor/application/RequestUserById/GetUserByIdQuery.java new file mode 100644 index 0000000..0aacafe --- /dev/null +++ b/src/main/java/io/autoinvestor/application/RequestUserById/GetUserByIdQuery.java @@ -0,0 +1,4 @@ +package io.autoinvestor.application.RequestUserById; + +public record GetUserByIdQuery(String userId) { +} diff --git a/src/main/java/io/autoinvestor/application/UsersReadModel.java b/src/main/java/io/autoinvestor/application/UsersReadModel.java index 6e4ef43..a546ccc 100644 --- a/src/main/java/io/autoinvestor/application/UsersReadModel.java +++ b/src/main/java/io/autoinvestor/application/UsersReadModel.java @@ -8,4 +8,5 @@ public interface UsersReadModel { void add(UserReadModelDocument document); UserResponse get(String email); + UserResponse getById(String userId); } diff --git a/src/main/java/io/autoinvestor/infrastructure/UserReadModelDocument.java b/src/main/java/io/autoinvestor/infrastructure/UserReadModelDocument.java index 50efef7..db34155 100644 --- a/src/main/java/io/autoinvestor/infrastructure/UserReadModelDocument.java +++ b/src/main/java/io/autoinvestor/infrastructure/UserReadModelDocument.java @@ -5,7 +5,7 @@ @Document(collection = "users") public record UserReadModelDocument( - @Id String userId, + String userId, String email, String firstName, String lastName, diff --git a/src/main/java/io/autoinvestor/infrastructure/UserReadModelInMemory.java b/src/main/java/io/autoinvestor/infrastructure/UserReadModelInMemory.java index 6ae9e39..779cc39 100644 --- a/src/main/java/io/autoinvestor/infrastructure/UserReadModelInMemory.java +++ b/src/main/java/io/autoinvestor/infrastructure/UserReadModelInMemory.java @@ -28,4 +28,9 @@ public UserResponse get(String email) { .map(UserResponseDocumentMapper::map) .orElse(null); } + + @Override + public UserResponse getById(String userId) { + return null; + } } diff --git a/src/main/java/io/autoinvestor/infrastructure/UserReadModelMongo.java b/src/main/java/io/autoinvestor/infrastructure/UserReadModelMongo.java index 6acb6e4..394630c 100644 --- a/src/main/java/io/autoinvestor/infrastructure/UserReadModelMongo.java +++ b/src/main/java/io/autoinvestor/infrastructure/UserReadModelMongo.java @@ -32,4 +32,14 @@ public UserResponse get(String email) { } return UserResponseDocumentMapper.map(document); } + + @Override + public UserResponse getById(String userId) { + Query query = new Query(Criteria.where("userId").is(userId)); + UserReadModelDocument document = mongoTemplate.findOne(query, UserReadModelDocument.class, "users"); + if (document == null) { + return null; + } + return UserResponseDocumentMapper.map(document); + } } diff --git a/src/main/java/io/autoinvestor/ui/user/UserController.java b/src/main/java/io/autoinvestor/ui/user/UserController.java index 2215314..b3d96b8 100644 --- a/src/main/java/io/autoinvestor/ui/user/UserController.java +++ b/src/main/java/io/autoinvestor/ui/user/UserController.java @@ -2,6 +2,8 @@ import io.autoinvestor.application.RegisterUserUseCase.RegisterUserCommand; import io.autoinvestor.application.RegisterUserUseCase.RegisterUserCommandHandler; +import io.autoinvestor.application.RequestUserById.GetUserByIdCommandHandler; +import io.autoinvestor.application.RequestUserById.GetUserByIdQuery; import io.autoinvestor.application.RequestUserUseCase.GetUserQuery; import io.autoinvestor.application.RequestUserUseCase.GetUserQueryHandler; import lombok.RequiredArgsConstructor; @@ -17,6 +19,7 @@ public class UserController { private static final Integer DEFAULT_RISK_LEVEL = 1; private final GetUserQueryHandler getUserCommandHandler; + private final GetUserByIdCommandHandler getUserByIdCommandHandler; private final RegisterUserCommandHandler registerUserCommandHandler; @GetMapping @@ -25,8 +28,7 @@ public ResponseEntity getUser( @RequestParam(value = "email", required = false) String email ) { if (userId != null) { - // TODO: return user by userId - return ResponseEntity.ok(new UserResponse(userId, null, null, null, null)); + return ResponseEntity.ok(getUserByIdCommandHandler.handle(new GetUserByIdQuery(userId))); } if (email != null) { return ResponseEntity.ok(getUserCommandHandler.handle(new GetUserQuery(email))); } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 282edf2..a0f2694 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,4 +1,4 @@ spring.application.name=users spring.cloud.gcp.pubsub.project-id=autoinvestor-tfm -spring.data.mongodb.uri=${MONGODB_URI} -spring.data.mongodb.database=${MONGODB_DB} \ No newline at end of file +spring.data.mongodb.uri=mongodb://localhost:27017 +spring.data.mongodb.database=mydatabase \ No newline at end of file