Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions cookiecutter.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@
"app_title": "{{cookiecutter.app_name.capitalize()}}",
"domain": "{{cookiecutter.domain}}",
"domain_capitalized": "{{cookiecutter.domain.capitalize()}}",
"domain_uppercase": "{{cookiecutter.domain.upper()}}",
"domain_plural": "{%- if cookiecutter.app_name.endswith('y') -%}{{cookiecutter.domain.replace('y','')}}ies{% else %}{{cookiecutter.domain.lower()}}s{% endif %}",
"domain_plural_capitalized": "{{cookiecutter.domain_plural.capitalize()}}",
"domain_plural_uppercase": "{{cookiecutter.domain_plural.upper()}}",
"group_id": "org.{{cookiecutter.domain}}",
"artifact_id": "{{cookiecutter.domain}}",
"package_name": "{{cookiecutter.domain}}"
Expand Down
77 changes: 77 additions & 0 deletions {{cookiecutter.app_name}}/jpa-adapter/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>{{cookiecutter.group_id}}</groupId>
<artifactId>{{cookiecutter.artifact_id}}-parent</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>jpa-adapter</artifactId>
<dependencies>
<!-- Domain -->
<dependency>
<groupId>{{cookiecutter.group_id}}</groupId>
<artifactId>domain-api</artifactId>
</dependency>
<!-- Frameworks & Libraries -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-core</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-envers</artifactId>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
</dependency>
<dependency>
<groupId>net.lbruun.springboot</groupId>
<artifactId>preliquibase-spring-boot-starter</artifactId>
</dependency>
<!-- Test -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>com.societegenerale.commons</groupId>
<artifactId>arch-unit-maven-plugin</artifactId>
<configuration>
<rules>
<preConfiguredRules>
<rule>com.societegenerale.commons.plugin.rules.NoJunitAssertRuleTest</rule>
<rule>com.societegenerale.commons.plugin.rules.NoPowerMockRuleTest</rule>
<rule>com.societegenerale.commons.plugin.rules.NoTestIgnoreRuleTest</rule>
<rule>com.societegenerale.commons.plugin.rules.NoTestIgnoreWithoutCommentRuleTest
</rule>
<rule>com.societegenerale.commons.plugin.rules.NoStandardStreamRuleTest</rule>
<rule>com.societegenerale.commons.plugin.rules.NoJodaTimeRuleTest</rule>
<rule>com.societegenerale.commons.plugin.rules.NoJavaUtilDateRuleTest</rule>
<rule>com.societegenerale.commons.plugin.rules.NoPrefixForInterfacesRuleTest</rule>
<rule>com.societegenerale.commons.plugin.rules.NoPublicFieldRuleTest</rule>
<rule>com.societegenerale.commons.plugin.rules.NoInjectedFieldTest</rule>
<rule>com.societegenerale.commons.plugin.rules.NoAutowiredFieldTest</rule>
</preConfiguredRules>
</rules>
</configuration>
</plugin>
</plugins>
</build>
</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package {{cookiecutter.package_name}}.repository.config;

import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.envers.repository.support.EnversRevisionRepositoryFactoryBean;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import {{cookiecutter.package_name}}.domain.port.Obtain{{cookiecutter.domain_capitalized}};
import {{cookiecutter.package_name}}.repository.{{cookiecutter.domain_capitalized}}Repository;
import {{cookiecutter.package_name}}.repository.dao.{{cookiecutter.domain_capitalized}}Dao;

@Configuration
@EntityScan("{{cookiecutter.package_name}}.repository.entity")
@EnableJpaRepositories(
basePackages = "{{cookiecutter.package_name}}.repository.dao",
repositoryFactoryBeanClass = EnversRevisionRepositoryFactoryBean.class)
public class JpaAdapterConfig {

@Bean
public Obtain{{cookiecutter.domain_capitalized}} get{{cookiecutter.domain_capitalized}}Repository({{cookiecutter.domain_capitalized}}Dao {{cookiecutter.domain}}Dao) {
return new {{cookiecutter.domain_capitalized}}Repository({{cookiecutter.domain}}Dao);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package {{cookiecutter.package_name}}.repository.dao;

import java.util.Optional;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.repository.history.RevisionRepository;
import org.springframework.stereotype.Repository;
import {{cookiecutter.package_name}}.repository.entity.{{cookiecutter.domain_capitalized}}Entity;

@Repository
public interface {{cookiecutter.domain_capitalized}}Dao
extends JpaRepository<{{cookiecutter.domain_capitalized}}Entity, Long>, RevisionRepository<{{cookiecutter.domain_capitalized}}Entity, Long, Long> {

Optional<{{cookiecutter.domain_capitalized}}Entity> findByCode(Long code);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package {{cookiecutter.package_name}}.repository.entity;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.SequenceGenerator;
import jakarta.persistence.Table;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Table(name = "REVISION_INFO", schema = "{{cookiecutter.domain_uppercase}}_AUDIT")
@Entity
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@SequenceGenerator(
schema = "{{cookiecutter.domain_uppercase}}_AUDIT",
name = "SEQ_REVISION_INFO",
sequenceName = "{{cookiecutter.domain_uppercase}}_AUDIT.SEQ_REVISION_INFO",
allocationSize = 1)
public class EnversRevisionEntity {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_REVISION_INFO")
@Column(name = "REV")
private Long rev;

@Column(name = "TIMESTAMP")
private Long code;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package {{cookiecutter.package_name}}.repository.entity;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.SequenceGenerator;
import jakarta.persistence.Table;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.envers.Audited;
import {{cookiecutter.package_name}}.domain.model.{{cookiecutter.domain_capitalized}};

@Table(name = "T_{{cookiecutter.domain_uppercase}}")
@Entity
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Audited
public class {{cookiecutter.domain_capitalized}}Entity {

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_T_{{cookiecutter.domain_uppercase}}")
@SequenceGenerator(
name = "SEQ_T_{{cookiecutter.domain_uppercase}}",
sequenceName = "SEQ_T_{{cookiecutter.domain_uppercase}}",
allocationSize = 1,
initialValue = 1)
@Column(name = "TECH_ID")
private Long techId;

@Column(name = "CODE")
private Long code;

@Column(name = "DESCRIPTION")
private String description;

public {{cookiecutter.domain_capitalized}} toModel() {
return {{cookiecutter.domain_capitalized}}.builder().code(code).description(description).build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package {{cookiecutter.package_name}}.repository;

import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
import {{cookiecutter.package_name}}.domain.model.{{cookiecutter.domain_capitalized}};
import {{cookiecutter.package_name}}.domain.port.Obtain{{cookiecutter.domain_capitalized}};
import {{cookiecutter.package_name}}.repository.dao.{{cookiecutter.domain_capitalized}}Dao;
import {{cookiecutter.package_name}}.repository.entity.{{cookiecutter.domain_capitalized}}Entity;

public class {{cookiecutter.domain_capitalized}}Repository implements Obtain{{cookiecutter.domain_capitalized}} {

private final {{cookiecutter.domain_capitalized}}Dao {{cookiecutter.domain}}Dao;

public {{cookiecutter.domain_capitalized}}Repository({{cookiecutter.domain_capitalized}}Dao {{cookiecutter.domain}}Dao) {
this.{{cookiecutter.domain}}Dao = {{cookiecutter.domain}}Dao;
}

@Override
public List<{{cookiecutter.domain_capitalized}}> getAll{{cookiecutter.domain_plural_capitalized}}() {
return {{cookiecutter.domain}}Dao.findAll().stream().map({{cookiecutter.domain_capitalized}}Entity::toModel).collect(Collectors.toList());
}

@Override
public Optional<{{cookiecutter.domain_capitalized}}> get{{cookiecutter.domain_capitalized}}ByCode(Long code) {
var {{cookiecutter.domain}}Entity = {{cookiecutter.domain}}Dao.findByCode(code);
return {{cookiecutter.domain}}Entity.map({{cookiecutter.domain_capitalized}}Entity::toModel);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
spring:
datasource:
driver-class-name: ${database.driver-class-name:org.postgresql.Driver}
url: ${database.url}
username: ${database.username}
password: ${database.password}
jpa:
generate-ddl: false
hibernate:
ddl-auto: none
database-platform: org.hibernate.dialect.PostgreSQLDialect
show-sql: ${database.show_sql:false}
properties:
hibernate:
default_schema: ${database.default_schema:{{cookiecutter.domain_uppercase}}}
show_sql: ${database.show_sql:false}
use_sql_comments: ${database.use_sql_comments:false}
format_sql: ${database.format_sql:false}
org:
hibernate:
envers:
default_schema: ${database.default_audit_schema:{{cookiecutter.domain_uppercase}}_AUDIT}
store_data_at_delete: true
liquibase:
enabled: true
liquibase-schema: ${database.liquibase_schema:LIQUIBASE}
default-schema: ${database.default_schema:{{cookiecutter.domain_uppercase}}}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
databaseChangeLog:
- include:
file: db/changelog/includes/240720211408009-create-revision.yaml
- include:
file: db/changelog/includes/110720212155010-create-{{cookiecutter.domain}}.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
databaseChangeLog:
- changeSet:
id: create-table-t_{{cookiecutter.domain}}
author: Paul WILLIAMS
changes:
- createTable:
tableName: T_{{cookiecutter.domain_uppercase}}
columns:
- column:
name: TECH_ID
type: BIGINT
constraints:
primaryKey: true
nullable: false
- column:
name: CODE
type: BIGINT
constraints:
nullable: false
- column:
name: DESCRIPTION
type: VARCHAR(255)
constraints:
nullable: false
createSequence:
sequenceName: SEQ_T_{{cookiecutter.domain_uppercase}}
startValue: 1
incrementBy: 1
rollback:
- dropSequence:
sequenceName: SEQ_T_{{cookiecutter.domain_uppercase}}
- dropTable:
tableName: T_{{cookiecutter.domain_uppercase}}
- changeSet:
id: create-table-t_{{cookiecutter.domain}}_aud
author: Paul WILLIAMS
changes:
- createTable:
schemaName: {{cookiecutter.domain_uppercase}}_AUDIT
tableName: T_{{cookiecutter.domain_uppercase}}_AUD
columns:
- column:
name: TECH_ID
type: BIGINT
constraints:
nullable: false
- column:
name: CODE
type: BIGINT
constraints:
nullable: false
- column:
name: DESCRIPTION
type: VARCHAR(255)
constraints:
nullable: false
- column:
name: REV
type: BIGINT
constraints:
nullable: false
foreignKeyName: FK_T_{{cookiecutter.domain_uppercase}}_AUD_REV
references: {{cookiecutter.domain_uppercase}}_AUDIT.REVINFO(REV)
- column:
name: REVTYPE
type: INTEGER
constraints:
nullable: false
- addPrimaryKey:
schemaName: {{cookiecutter.domain_uppercase}}_AUDIT
tableName: T_{{cookiecutter.domain_uppercase}}_AUD
columnNames: TECH_ID, REV
rollback:
- dropTable:
schemaName: {{cookiecutter.domain_uppercase}}_AUDIT
tableName: T_{{cookiecutter.domain_uppercase}}_AUD
cascadeConstraints: true
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
databaseChangeLog:
- changeSet:
id: create-table-t_{{cookiecutter.domain}}_audit
author: Anup Baranwal
changes:
- createTable:
schemaName: {{cookiecutter.domain_uppercase}}_AUDIT
tableName: REVINFO
columns:
- column:
name: REV
type: BIGINT
constraints:
primaryKey: true
nullable: false
autoIncrement: true
- column:
name: REVTSTMP
type: BIGINT
constraints:
nullable: false
createSequence:
schemaName: {{cookiecutter.domain_uppercase}}_AUDIT
sequenceName: SEQ_REVISION_INFO
startValue: 1
incrementBy: 1
rollback:
- dropTable:
schemaName: {{cookiecutter.domain_uppercase}}_AUDIT
tableName: REVINFO
cascadeConstraints: true
- dropSequence:
schemaName: {{cookiecutter.domain_uppercase}}_AUDIT
sequenceName: SEQ_REVISION_INFO
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
CREATE SCHEMA IF NOT EXISTS ${spring.liquibase.liquibase-schema:LIQUIBASE};
CREATE SCHEMA IF NOT EXISTS ${spring.liquibase.default-schema:{{cookiecutter.domain_uppercase}}};
CREATE SCHEMA IF NOT EXISTS ${spring.jpa.properties.org.hibernate.envers:{{cookiecutter.domain_uppercase}}_AUDIT};
Loading
Loading