Skip to content

Commit

Permalink
Enable user service to communicate with the core service (#377)
Browse files Browse the repository at this point in the history
* Add spring openfeign dependency to user service

* Enable user service to communicate with core service

* Remove unused code from shared library

* Add rest-client.svg to the draw.io library

* Update challenge-library.xml

* Update draw.io lib

* Update .gitignore

* Added challenge-user-service-requests.drawio.svg

* Update challenge-user-service-requests.drawio.svg

* Rename java shared library

* Cleanup UserController

* Minor update

* Update challenge db config

* Fix db connection

* Rename mariadb tables

* Update mariadb config for core service

* Added data-model.drawio.svg

* Update data-model.drawio.svg

* Update data-model.drawio.svg

* Make request via API gateway

* Update data-model.drawio.svg
  • Loading branch information
tschaffter committed Jul 1, 2022
1 parent 5cdcea2 commit 897f711
Show file tree
Hide file tree
Showing 45 changed files with 226 additions and 188 deletions.
20 changes: 4 additions & 16 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
"."
],
"java.configuration.updateBuildConfiguration": "disabled",
"sqltools.autoOpenSessionFiles": false,
"sqltools.connections": [
{
"previewLimit": 50,
Expand All @@ -53,22 +54,9 @@
"server": "challenge-mariadb",
"port": 3306,
"driver": "MariaDB",
"name": "challenge-core-service-db",
"database": "challenge_core_service",
"username": "challenge_core_service",
"password": "changeme"
},
{
"mysqlOptions": {
"authProtocol": "default"
},
"previewLimit": 50,
"server": "challenge-mariadb",
"port": 3306,
"driver": "MariaDB",
"name": "challenge-user-service-db",
"database": "challenge_user_service",
"username": "challenge_user_service",
"name": "challenge-mariadb",
"database": "challenge",
"username": "maria",
"password": "changeme"
}
],
Expand Down
2 changes: 1 addition & 1 deletion apps/challenge-core-service/.env.example
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
SERVICE_REGISTRY_URL=http://challenge-service-registry:8081/eureka
DB_URL=jdbc:mysql://challenge-mariadb:3306/challenge_core_service
DB_URL=jdbc:mysql://challenge-mariadb:3306/challenge
5 changes: 2 additions & 3 deletions apps/challenge-core-service/.gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
lib/*.jar

HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
Expand Down Expand Up @@ -31,6 +33,3 @@ build/

### VS Code ###
.vscode/

### This project ###
lib/*.jar
4 changes: 2 additions & 2 deletions apps/challenge-core-service/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -71,10 +71,10 @@

<dependency>
<groupId>org.sagebionetworks.challenge</groupId>
<artifactId>data-access-java</artifactId>
<artifactId>challenge-util</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scope>system</scope>
<systemPath>${pom.basedir}/lib/data-access-java-0.0.1-SNAPSHOT.jar</systemPath>
<systemPath>${pom.basedir}/lib/challenge-util-0.0.1-SNAPSHOT.jar</systemPath>
</dependency>
</dependencies>

Expand Down
2 changes: 1 addition & 1 deletion apps/challenge-core-service/project.json
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,6 @@
"challenge-keycloak",
"challenge-service-registry",
"challenge-api-gateway",
"shared-data-access-java"
"shared-java-challenge-util"
]
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.sagebionetworks.challenge.model.mapper;

import org.sagebionetworks.challenge.util.model.mapper.BaseMapper;
import org.sagebionetworks.challenge.model.dto.ChallengeAccount;
import org.sagebionetworks.challenge.model.entity.ChallengeAccountEntity;
import org.springframework.beans.BeanUtils;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.sagebionetworks.challenge.model.mapper;

import org.sagebionetworks.challenge.util.model.mapper.BaseMapper;
import org.sagebionetworks.challenge.model.dto.User;
import org.sagebionetworks.challenge.model.entity.UserEntity;
import org.springframework.beans.BeanUtils;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
-- challenge_core_service.challenge_core_user definition
-- challenge.challenge_core_user definition

CREATE TABLE `challenge_core_user`
(
Expand All @@ -10,7 +10,7 @@ CREATE TABLE `challenge_core_user`
PRIMARY KEY (`id`)
);

-- challenge_core_service.challenge_core_account definition
-- challenge.challenge_core_account definition

CREATE TABLE `challenge_core_account`
(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
INSERT INTO challenge_core_user (id, email, first_name, identification_number, last_name)
VALUES ('1', 'sam@gmail.com', 'Sam', '808829932V', 'Silva');
INSERT INTO challenge_core_service.challenge_core_user (id, email, first_name, identification_number, last_name)
INSERT INTO challenge.challenge_core_user (id, email, first_name, identification_number, last_name)
VALUES ('2', 'guru@gmail.com', 'Guru', '901830556V', 'Darmaraj');
INSERT INTO challenge_core_service.challenge_core_user (id, email, first_name, identification_number, last_name)
INSERT INTO challenge.challenge_core_user (id, email, first_name, identification_number, last_name)
VALUES ('3', 'ragu@gmail.com', 'Ragu', '348829932V', 'Sivaraj');
INSERT INTO challenge_core_service.challenge_core_user (id, email, first_name, identification_number, last_name)
INSERT INTO challenge.challenge_core_user (id, email, first_name, identification_number, last_name)
VALUES ('4', 'randor@gmail.com', 'Randor', '842829932V', 'Manoon');

INSERT INTO challenge_core_account
Expand Down
24 changes: 12 additions & 12 deletions apps/challenge-mariadb/docker-entrypoint-initdb.d/init-db.sql
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
create database challenge;
create role challenge_role_admin;
grant all on challenge.* to challenge_role_admin;

-- maria
grant challenge_role_admin to maria;
set default role challenge_role_admin for maria;

-- challenge-core-service
create user challenge_core_service identified by 'changeme';
create role challenge_core_service_role_admin;
create database challenge_core_service;

grant all on challenge_core_service.* to challenge_core_service_role_admin;
grant challenge_core_service_role_admin to challenge_core_service;
set default role challenge_core_service_role_admin for challenge_core_service;
grant challenge_role_admin to challenge_core_service;
set default role challenge_role_admin for challenge_core_service;

-- challenge-user-service
create user challenge_user_service identified by 'changeme';
create role challenge_user_service_role_admin;
create database challenge_user_service;

grant all on challenge_user_service.* to challenge_user_service_role_admin;
grant challenge_user_service_role_admin to challenge_user_service;
set default role challenge_user_service_role_admin for challenge_user_service;
grant challenge_role_admin to challenge_user_service;
set default role challenge_role_admin for challenge_user_service;
5 changes: 2 additions & 3 deletions apps/challenge-user-service/.gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
lib/*.jar

HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
Expand Down Expand Up @@ -31,6 +33,3 @@ build/

### VS Code ###
.vscode/

### This project ###
lib/*.jar
9 changes: 7 additions & 2 deletions apps/challenge-user-service/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,11 @@
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
Expand Down Expand Up @@ -80,10 +85,10 @@

<dependency>
<groupId>org.sagebionetworks.challenge</groupId>
<artifactId>data-access-java</artifactId>
<artifactId>challenge-util</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scope>system</scope>
<systemPath>${pom.basedir}/lib/data-access-java-0.0.1-SNAPSHOT.jar</systemPath>
<systemPath>${pom.basedir}/lib/challenge-util-0.0.1-SNAPSHOT.jar</systemPath>
</dependency>
</dependencies>

Expand Down
3 changes: 2 additions & 1 deletion apps/challenge-user-service/project.json
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,7 @@
"challenge-keycloak",
"challenge-service-registry",
"challenge-api-gateway",
"shared-data-access-java"
// "challenge-core-service",
"shared-java-challenge-util"
]
}
18 changes: 10 additions & 8 deletions apps/challenge-user-service/requests.http
Original file line number Diff line number Diff line change
Expand Up @@ -44,20 +44,22 @@ Authorization: Bearer {{login.response.body.$.access_token}}

### Create user

# POST {{apiGatewayHost}}/user/api/v1/users/register
POST {{userServiceHost}}/api/v1/users/register
# POST {{userServiceHost}}/api/v1/users/register

POST {{apiGatewayHost}}/user/api/v1/users/register
Authorization: Bearer {{login.response.body.$.access_token}}
Content-Type: application/json

{
"email": "test4@gmail.com",
"email": "sam@gmail.com",
"password": "changeme",
"identification": "12345"
"identification": "808829932V"
}

### List all the users

# from the API gateway => requires authentication / unauthorized
# from the user service => works
# GET {{userServiceHost}}/api/v1/users

GET {{apiGatewayHost}}/user/api/v1/users
Authorization: Bearer {{login.response.body.$.access_token}}

# GET {{apiGatewayHost}}/user/api/v1/users
GET {{userServiceHost}}/api/v1/users
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.openfeign.EnableFeignClients;

@EnableFeignClients
@EnableEurekaClient
@SpringBootApplication
public class ChallengeUserServiceApplication {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,46 +1,44 @@
package org.sagebionetworks.challenge.controller;

import com.fasterxml.jackson.annotation.JsonView;
import org.sagebionetworks.challenge.model.dto.User;
import org.sagebionetworks.challenge.model.dto.UserUpdateRequest;
import org.sagebionetworks.challenge.service.KeycloakUserService;
import org.sagebionetworks.challenge.service.UserService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.domain.Pageable;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;

@Slf4j
@RestController
@RequestMapping(value = "/api/v1/users")
@RequiredArgsConstructor
public class UserController {

private final KeycloakUserService keycloakUserService;
private final UserService userService;

@PostMapping(value = "/register")
public ResponseEntity createUser(@RequestBody User request) {
public ResponseEntity<User> createUser(@RequestBody User request) {
log.info("Creating user with {}", request.toString());
return ResponseEntity.ok(userService.createUser(request));
}

@PatchMapping(value = "/update/{id}")
public ResponseEntity updateUser(@PathVariable("id") Long userId,
public ResponseEntity<User> updateUser(@PathVariable("id") Long userId,
@RequestBody UserUpdateRequest userUpdateRequest) {
log.info("Updating user with {}", userUpdateRequest.toString());
return ResponseEntity.ok(userService.updateUser(userId, userUpdateRequest));
}

@GetMapping
public ResponseEntity readUsers(Pageable pageable) {
public ResponseEntity<List<User>> readUsers(Pageable pageable) {
log.info("Reading all users from API");
return ResponseEntity.ok(userService.readUsers(pageable));
}

@GetMapping(value = "/{id}")
public ResponseEntity readUser(@PathVariable("id") Long id) {
public ResponseEntity<User> readUser(@PathVariable("id") Long id) {
log.info("Reading user by id {}", id);
return ResponseEntity.ok(userService.readUser(id));
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package org.sagebionetworks.challenge.exception;

public class GlobalErrorCode {
public static final String ERROR_ENTITY_NOT_FOUND = "CHALLENGE-USER-SERVICE-1000";
public static final String ERROR_EMAIL_REGISTERED = "CHALLENGE-USER-SERVICE-1001";
public static final String ERROR_INVALID_EMAIL = "CHALLENGE-USER-SERVICE-1002";
public static final String ERROR_USER_NOT_FOUND_UNDER_NIC = "CHALLENGE-USER-SERVICE-1003";
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package org.sagebionetworks.challenge.exception;

public class InvalidChallengeUserException extends SimpleChallengeGlobalException {
public InvalidChallengeUserException(String message, String code) {
super(message, code);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package org.sagebionetworks.challenge.exception;

public class InvalidEmailException extends SimpleChallengeGlobalException {
public InvalidEmailException(String message, String code) {
super(message, code);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package org.sagebionetworks.challenge.exception;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class SimpleChallengeGlobalException extends RuntimeException {

private String code;
private String message;

public SimpleChallengeGlobalException(String message) {
super(message);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package org.sagebionetworks.challenge.exception;

public class UserAlreadyRegisteredException extends SimpleChallengeGlobalException {
public UserAlreadyRegisteredException(String message, String code) {
super(message, code);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,14 @@
@Getter
@Setter
@Entity
@Table(name = "user")
@Table(name = "challenge_user")
public class UserEntity {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

// generated by Keycloak
private String authId;

private String identification;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.sagebionetworks.challenge.model.mapper;

import org.sagebionetworks.challenge.util.model.mapper.BaseMapper;
import org.sagebionetworks.challenge.model.dto.User;
import org.sagebionetworks.challenge.model.entity.UserEntity;
import org.springframework.beans.BeanUtils;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package org.sagebionetworks.challenge.model.rest.response;

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class AccountResponse {
private String number;
private Integer id;
private String type;
private String status;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package org.sagebionetworks.challenge.model.rest.response;

import lombok.Getter;
import lombok.Setter;
import java.util.List;

@Getter
@Setter
public class UserResponse {
private String firstName;
private String lastName;
private List<AccountResponse> challengeAccounts;
private String identificationNumber;
private Integer id;
private String email;
}
Loading

0 comments on commit 897f711

Please sign in to comment.