Skip to content

Commit

Permalink
#39 - adding mybatis mappers
Browse files Browse the repository at this point in the history
  • Loading branch information
Pieter Van Eeckhout committed Jun 26, 2023
1 parent 822b4a7 commit 9851cf1
Show file tree
Hide file tree
Showing 51 changed files with 981 additions and 57 deletions.
17 changes: 17 additions & 0 deletions docker-compose-localdev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,23 @@ services:
timeout: 5s
retries: 5

trademodule_postgres:
image: "postgres:15-alpine"
restart: on-failure
environment:
- POSTGRES_USER=edpn_usermodule
- POSTGRES_PASSWORD=MSDVq372rNk3AwRq
- POSTGRES_DB=usermodule
volumes:
- "usermodule_postgres:/var/lib/postgresql/data"
ports:
- "54322:5432"
healthcheck:
test: pg_isready
interval: 10s
timeout: 5s
retries: 5

volumes:
zookeeper:
driver: local
Expand Down
15 changes: 15 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,19 @@ services:
timeout: 5s
retries: 5

usermodule_postgres:
image: "postgres:15-alpine"
restart: on-failure
env_file:
- env/.env_usermodule
volumes:
- "usermodule_postgres:/var/lib/postgresql/data"
healthcheck:
test: pg_isready
interval: 10s
timeout: 5s
retries: 5

eddn-message-listener:
image: nexus.edpn.io/edpn/backend/eddn-message-listener:0.0.1-SNAPSHOT
restart: on-failure
Expand Down Expand Up @@ -92,3 +105,5 @@ volumes:
driver: local
trademodule_postgres:
driver: local
usermodule_postgres:
driver: local
6 changes: 6 additions & 0 deletions env/.env_usermodule
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# .env_usermodule file

# PostgreSQL
POSTGRES_USER=edpn_usermodule
POSTGRES_PASSWORD=hvWYDHqG3yXCKReH
POSTGRES_DB=usermodule
17 changes: 1 addition & 16 deletions user-module/build.gradle
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
dependencies {
implementation 'io.edpn.backend:backend-mybatis-util'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
implementation 'org.springframework.boot:spring-boot-starter-security'
Expand All @@ -18,24 +19,8 @@ dependencies {

extraJavaModuleInfo {
automaticModule("dependency-management-plugin-1.1.0.jar","dependency.management.plugin")
//automaticModule("tomlj-1.0.0.jar","tomlj")
automaticModule("jsr305-3.0.2.jar","jsr305")
automaticModule("snappy-java-1.1.8.4.jar","snappy.java")
automaticModule("liquibase-core-4.17.2.jar","liquibase.core")
automaticModule("jjwt-0.9.1.jar", "io.jsonwebtoken")
/*
automaticModule("jersey-media-json-jackson-3.1.1.jar", "jersy.jackson")
automaticModule("jersey-container-servlet-3.1.1.jar", "jersy.jackson")
automaticModule("jersey-spring6-3.1.1.jar", "jersy.jackson")
automaticModule("jersey-container-servlet-core-3.1.1.jar", "jersy.jackson")
automaticModule("jersey-bean-validation-3.1.1.jar", "jersy.jackson")
automaticModule("jersey-server-3.1.1.jar", "jersy.jackson")
automaticModule("jersey-client-3.1.1.jar", "jersy.jackson")
automaticModule("jersey-hk2-3.1.1.jar", "jersy.jackson")
automaticModule("hk2-3.0.3.jar", "jersy.jackson")
automaticModule("jersey-entity-filtering-3.1.1.jar", "jersy.jackson")
automaticModule("osgi-resource-locator-1.0.3.jar", "jersy.jackson")
automaticModule("javassist-3.29.0-GA.jar", "jersy.jackson")
automaticModule("jersey-common-3.1.1.jar", "jersy.jackson")*/

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
package io.edpn.backend.user.application.model;

import io.edpn.backend.user.domain.model.EdpnUser;
import io.edpn.backend.user.domain.model.UserRole;
import java.time.LocalDateTime;
import java.util.Collection;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import lombok.Data;
import lombok.RequiredArgsConstructor;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;

@Data
@RequiredArgsConstructor
public class EdpnUserDetails implements UserDetails {

private final EdpnUser user;

@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
return Stream.concat(user.getRoles().stream().map(UserRole::getName).map("ROLE_"::concat),
Stream.concat(user.getRoles().stream().map(UserRole::getGrants).flatMap(Set::stream),
user.getGrants().stream().map("GRANT_"::concat)))
.map(SimpleGrantedAuthority::new)
.collect(Collectors.toUnmodifiableSet());
}

@Override
public String getPassword() {
return user.getPassword();
}

@Override
public String getUsername() {
return user.getEmail();
}

@Override
public boolean isAccountNonExpired() {
return Optional.ofNullable(user.getAccountExpiryTimestamp()).map(ts -> LocalDateTime.now().isBefore(ts)).orElse(false);
}

@Override
public boolean isAccountNonLocked() {
return !user.isLocked();
}

@Override
public boolean isCredentialsNonExpired() {
return Optional.ofNullable(user.getPasswordExpiryTimestamp()).map(ts -> LocalDateTime.now().isBefore(ts)).orElse(false);
}

@Override
public boolean isEnabled() {
return user.isEnabled();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package io.edpn.backend.user.application.service;

import io.edpn.backend.user.application.model.EdpnUserDetails;
import io.edpn.backend.user.domain.repository.UserRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;

@RequiredArgsConstructor
public class EdpnUserDetailsService implements UserDetailsService {

private final UserRepository userRepository;

@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
return userRepository.findByUsername(username)
.map(EdpnUserDetails::new)
.orElseThrow(() -> new UsernameNotFoundException("User not found"));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package io.edpn.backend.user.domain.model;

import java.util.UUID;
import lombok.Builder;
import lombok.Value;

@Value
@Builder
public class ApiGrant {

UUID id;
String name;
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public class ApiKey {
String keyHash;
String name;
Set<ApiRole> roles;
Set<String> grants;
Set<ApiGrant> grants;
LocalDateTime expiryTimestamp;
boolean enabled;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,5 @@ public class ApiRole {

UUID id;
String name;
Set<String> grants;
Set<ApiGrant> grants;
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import java.time.LocalDateTime;
import java.util.Set;
import java.util.UUID;

import lombok.Builder;
import lombok.Value;

Expand All @@ -19,6 +18,7 @@ public class EdpnUser {
boolean enabled;
boolean locked;
Set<UserRole> roles;
Set<String> grants;
Set<UserGrant> grants;
Set<ApiKey> apiKeys;
PricingPlan pricingPlan;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package io.edpn.backend.user.domain.model;

import java.util.UUID;
import lombok.Builder;
import lombok.Value;

@Value
@Builder
public class UserGrant {

UUID id;
String name;
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,5 @@ public class UserRole {

UUID id;
String name;
Set<String> grants;
Set<UserGrant> grants;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package io.edpn.backend.user.infrastructure.persistence.entity;

import java.util.UUID;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;

@Getter
@Setter
@ToString
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class ApiGrantEntity {
private UUID id;
private String name;
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package io.edpn.backend.user.infrastructure.entity;
package io.edpn.backend.user.infrastructure.persistence.entity;

import io.edpn.backend.user.domain.model.ApiRole;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
Expand All @@ -25,7 +24,7 @@ public class ApiKeyEntity {
private String keyHash;
private String name;
private Set<ApiRoleEntity> roles;
private Set<String> grants;
private Set<ApiGrantEntity> grants;
private LocalDateTime expiryTimestamp;
private boolean enabled;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package io.edpn.backend.user.infrastructure.entity;
package io.edpn.backend.user.infrastructure.persistence.entity;

import lombok.AllArgsConstructor;
import lombok.Builder;
Expand All @@ -20,5 +20,5 @@ public class ApiRoleEntity {

private UUID id;
private String name;
private Set<String> grants;
private Set<ApiGrantEntity> grants;
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package io.edpn.backend.user.infrastructure.entity;
package io.edpn.backend.user.infrastructure.persistence.entity;

import io.edpn.backend.user.domain.model.ApiKey;
import io.edpn.backend.user.domain.model.UserRole;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
Expand Down Expand Up @@ -29,6 +27,7 @@ public class EdpnUserEntity {
private boolean enabled;
private boolean locked;
private Set<UserRoleEntity> roles;
private Set<String> grants;
private Set<UserGrantEntity> grants;
private Set<ApiKeyEntity> apiKeys;
private PricingPlanEntity pricingPlan;
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package io.edpn.backend.user.infrastructure.entity;
package io.edpn.backend.user.infrastructure.persistence.entity;

import lombok.AllArgsConstructor;
import lombok.Builder;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package io.edpn.backend.user.infrastructure.persistence.entity;

import java.util.UUID;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;

@Getter
@Setter
@ToString
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class UserGrantEntity {
private UUID id;
private String name;
}
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@
package io.edpn.backend.user.infrastructure.entity;
package io.edpn.backend.user.infrastructure.persistence.entity;

import java.util.Set;
import java.util.UUID;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;

import java.util.Set;
import java.util.UUID;

@Getter
@Setter
@ToString
Expand All @@ -20,5 +19,5 @@ public class UserRoleEntity {

private UUID id;
private String name;
private Set<String> grants;
private Set<UserGrantEntity> grants;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package io.edpn.backend.user.infrastructure.persistence.mappers.entity;

import io.edpn.backend.user.domain.model.ApiGrant;
import io.edpn.backend.user.infrastructure.persistence.entity.ApiGrantEntity;
import lombok.RequiredArgsConstructor;

@RequiredArgsConstructor
public class ApiGrantMapper {

public ApiGrant map(ApiGrantEntity entity) {
return ApiGrant.builder()
.id(entity.getId())
.name(entity.getName())
.build();
}

public ApiGrantEntity map(ApiGrant key) {
return ApiGrantEntity.builder()
.id(key.getId())
.name(key.getName())
.build();
}
}
Loading

0 comments on commit 9851cf1

Please sign in to comment.