Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| ae66fe3c61 |
@@ -1,5 +1,10 @@
|
|||||||
plugins {
|
plugins {
|
||||||
id 'java'
|
id 'java'
|
||||||
|
//id 'application'
|
||||||
|
id 'jacoco'
|
||||||
|
id 'test-report-aggregation'
|
||||||
|
id 'jacoco-report-aggregation'
|
||||||
|
alias(libs.plugins.lombok)
|
||||||
}
|
}
|
||||||
|
|
||||||
repositories {
|
repositories {
|
||||||
@@ -7,14 +12,92 @@ repositories {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation libs.javalin // Pulling in Javalin
|
implementation libs.javalin.bundle
|
||||||
|
compileOnly 'org.projectlombok:lombok'
|
||||||
|
annotationProcessor 'org.projectlombok:lombok'
|
||||||
|
implementation libs.postgresql
|
||||||
|
implementation libs.hibernate
|
||||||
|
annotationProcessor libs.hibernate.modelgen
|
||||||
|
testImplementation( platform( libs.junit.bom.get().toString() ))
|
||||||
|
testImplementation "org.junit.jupiter:junit-jupiter"
|
||||||
|
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
|
||||||
implementation libs.jackson // For JSON serialization of persons
|
implementation libs.jackson // For JSON serialization of persons
|
||||||
implementation libs.slf4j // To see some Javalin logging
|
implementation libs.slf4j // To see some Javalin logging
|
||||||
}
|
}
|
||||||
|
|
||||||
|
testing {
|
||||||
|
suites {
|
||||||
|
configureEach {
|
||||||
|
useJUnitJupiter()
|
||||||
|
dependencies {
|
||||||
|
implementation project()
|
||||||
|
implementation libs.hsqldb
|
||||||
|
implementation libs.sqlite.jdbc
|
||||||
|
runtimeOnly 'org.junit.platform:junit-platform-launcher'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
test(JvmTestSuite) {
|
||||||
|
targets {
|
||||||
|
all {
|
||||||
|
testTask.configure {
|
||||||
|
reports {
|
||||||
|
junitXml {
|
||||||
|
outputPerTestCase = true // defaults to false
|
||||||
|
mergeReruns = true // defaults to false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
finalizedBy(jacocoTestReport)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
integrationTest(JvmTestSuite) {
|
||||||
|
targets {
|
||||||
|
all {
|
||||||
|
testTask.configure {
|
||||||
|
shouldRunAfter(test)
|
||||||
|
finalizedBy(jacocoTestReport)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks.named('check') {
|
||||||
|
dependsOn(testing.suites.integrationTest)
|
||||||
|
dependsOn(testing.suites.test)
|
||||||
|
dependsOn tasks.named('testAggregateTestReport', TestReport)
|
||||||
|
dependsOn tasks.named('integrationTestAggregateTestReport', TestReport)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
jacocoTestReport {
|
||||||
|
dependsOn test, integrationTest
|
||||||
|
reports {
|
||||||
|
xml.required = true
|
||||||
|
csv.required = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
reporting {
|
||||||
|
reports {
|
||||||
|
testAggregateTestReport(AggregateTestReport) {
|
||||||
|
}
|
||||||
|
integrationTestAggregateTestReport(AggregateTestReport) {
|
||||||
|
}
|
||||||
|
integrationTestCodeCoverageReport(JacocoCoverageReport) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// application {
|
||||||
|
// mainClass = 'de.thpeetz.kontor.api.Main'
|
||||||
|
// }
|
||||||
|
|
||||||
task fatJar(type: Jar) {
|
task fatJar(type: Jar) {
|
||||||
manifest {
|
manifest {
|
||||||
attributes 'Main-Class': 'de.thpeetz.kontor.api.Main'
|
attributes 'Main-Class': 'de.thpeetz.kontor.Main'
|
||||||
}
|
}
|
||||||
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
|
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
|
||||||
from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } }
|
from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } }
|
||||||
@@ -22,6 +105,9 @@ task fatJar(type: Jar) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
build.dependsOn fatJar
|
build.dependsOn fatJar
|
||||||
|
// distZip.dependsOn fatJar
|
||||||
|
// distTar.dependsOn fatJar
|
||||||
|
// startScripts.dependsOn fatJar
|
||||||
|
|
||||||
wrapper {
|
wrapper {
|
||||||
gradleVersion = "9.2.1"
|
gradleVersion = "9.2.1"
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
description='Kontor with Spring Boot'
|
description='Kontor with Spring Boot'
|
||||||
version=0.2.0-SNAPSHOT
|
version=0.2.0-SNAPSHOT
|
||||||
group=de.thpeetz
|
group=de.thpeetz
|
||||||
|
org.gradle.warning.mode=none
|
||||||
|
|
||||||
|
|||||||
@@ -1,18 +1,32 @@
|
|||||||
[versions]
|
[versions]
|
||||||
gradle = "8.6"
|
gradle = "8.6"
|
||||||
junit = "5.8.2"
|
hibernate = "6.4.4.Final"
|
||||||
#slf4j = "1.7.36"
|
|
||||||
slf4j = "2.0.16"
|
|
||||||
hsqldb = "2.7.1"
|
hsqldb = "2.7.1"
|
||||||
sqlite = "3.25.2"
|
|
||||||
jackson = "2.16.1"
|
jackson = "2.16.1"
|
||||||
#javalin = "4.6.4"
|
|
||||||
javalin = "6.7.0"
|
javalin = "6.7.0"
|
||||||
|
junit = "5.8.2"
|
||||||
|
lombok = "8.6"
|
||||||
|
postgresql = "42.6.2"
|
||||||
|
slf4j = "2.0.16"
|
||||||
|
sonarqube = "3.3"
|
||||||
|
spotbugs = "6.0.7"
|
||||||
|
sqlite = "3.25.2"
|
||||||
|
|
||||||
[libraries]
|
[libraries]
|
||||||
junit = { module = "org.junit.jupiter:junit-jupiter", version.ref = "junit" }
|
hibernate = { module = "org.hibernate.orm:hibernate-core", version.ref = "hibernate" }
|
||||||
slf4j = { module = "org.slf4j:slf4j-simple", version.ref = "slf4j" }
|
hibernate-modelgen = { module = "org.hibernate.orm:hibernate-jpamodelgen", version.ref = "hibernate" }
|
||||||
hsqldb = { module = "org.hsqldb:hsqldb", version.ref = "hsqldb" }
|
hsqldb = { module = "org.hsqldb:hsqldb", version.ref = "hsqldb" }
|
||||||
jackson = { module = "com.fasterxml.jackson.core:jackson-databind", version.ref = "jackson" }
|
jackson = { module = "com.fasterxml.jackson.core:jackson-databind", version.ref = "jackson" }
|
||||||
sqlite-jdbc = { module = "org.xerial:sqlite-jdbc", version.ref = "sqlite" }
|
|
||||||
javalin = { module = "io.javalin:javalin", version.ref = "javalin" }
|
javalin = { module = "io.javalin:javalin", version.ref = "javalin" }
|
||||||
|
javalin-bundle = { module = "io.javalin:javalin-bundle", version.ref = "javalin" }
|
||||||
|
junit = { module = "org.junit.jupiter:junit-jupiter", version.ref = "junit" }
|
||||||
|
junit-bom = { module = "org.junit:junit-bom", version.ref = "junit" }
|
||||||
|
lombok = { module = "org.projectlombok:lombok", version.ref = "lombok" }
|
||||||
|
postgresql = { module = "org.postgresql:postgresql", version.ref = "postgresql" }
|
||||||
|
slf4j = { module = "org.slf4j:slf4j-simple", version.ref = "slf4j" }
|
||||||
|
sqlite-jdbc = { module = "org.xerial:sqlite-jdbc", version.ref = "sqlite" }
|
||||||
|
|
||||||
|
[plugins]
|
||||||
|
spotbugs = { id = "com.github.spotbugs", version.ref = "spotbugs" }
|
||||||
|
sonarqube = { id = "org.sonarqube", version.ref = "sonarqube" }
|
||||||
|
lombok = { id = "io.freefair.lombok", version.ref = "lombok" }
|
||||||
|
|||||||
@@ -0,0 +1,26 @@
|
|||||||
|
package de.thpeetz.kontor;
|
||||||
|
|
||||||
|
import io.javalin.Javalin;
|
||||||
|
|
||||||
|
import static io.javalin.apibuilder.ApiBuilder.get;
|
||||||
|
import static io.javalin.apibuilder.ApiBuilder.path;
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
import de.thpeetz.kontor.web.PersonHandler;
|
||||||
|
|
||||||
|
public class JavalinApp {
|
||||||
|
|
||||||
|
public static Javalin create() {
|
||||||
|
return Javalin.create((var config) -> config.router.apiBuilder(() -> {
|
||||||
|
|
||||||
|
path("/health", () -> get(ctx -> {
|
||||||
|
HashMap<String, String> status = new HashMap<>();
|
||||||
|
status.put("status", "ok");
|
||||||
|
ctx.json(status);
|
||||||
|
}));
|
||||||
|
path("/persons", () -> {
|
||||||
|
get(PersonHandler.listAll);
|
||||||
|
});
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
package de.thpeetz.kontor;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
public class Main {
|
||||||
|
|
||||||
|
private static Logger logger = LoggerFactory.getLogger(Main.class);
|
||||||
|
private static short port = 8400;
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
JavalinApp.create().start(port);
|
||||||
|
logger.info("API's alive for real :-)))");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,37 +0,0 @@
|
|||||||
package de.thpeetz.kontor.api;
|
|
||||||
|
|
||||||
import de.thpeetz.kontor.services.inmemory.InMemoryPersonReader;
|
|
||||||
import io.javalin.Javalin;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
||||||
|
|
||||||
public class Main {
|
|
||||||
private static Logger logger = LoggerFactory.getLogger(Main.class);
|
|
||||||
private static short port = 8400;
|
|
||||||
|
|
||||||
public static void main(String[] args) {
|
|
||||||
var personReader = new InMemoryPersonReader();
|
|
||||||
var objMapper = new ObjectMapper();
|
|
||||||
var result = objMapper.valueToTree(personReader.getAll());
|
|
||||||
|
|
||||||
logger.info("API: found {} people.", personReader.getAll().size());
|
|
||||||
|
|
||||||
var app = Javalin.create().start(port);
|
|
||||||
app.get("/ping", ctx -> ctx.result("pong"));
|
|
||||||
app.get("/health", ctx -> {
|
|
||||||
HashMap<String, String> status = new HashMap<>();
|
|
||||||
status.put("status", "ok");
|
|
||||||
ctx.json(status);
|
|
||||||
});
|
|
||||||
app.get("/persons", ctx -> {
|
|
||||||
logger.info("persons called");
|
|
||||||
ctx.json(result);
|
|
||||||
});
|
|
||||||
|
|
||||||
logger.info("API's alive for real :-)))");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
package de.thpeetz.kontor.web;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
|
||||||
|
import de.thpeetz.kontor.services.inmemory.InMemoryPersonReader;
|
||||||
|
import io.javalin.http.Handler;
|
||||||
|
|
||||||
|
public class PersonHandler {
|
||||||
|
|
||||||
|
public static Handler listAll = (context) -> {
|
||||||
|
var personReader = new InMemoryPersonReader();
|
||||||
|
var objMapper = new ObjectMapper();
|
||||||
|
var result = objMapper.valueToTree(personReader.getAll());
|
||||||
|
context.json(result);
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
<configuration>
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder>
|
||||||
|
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<root level="info">
|
||||||
|
<appender-ref ref="STDOUT"/>
|
||||||
|
</root>
|
||||||
|
|
||||||
|
<logger name="org.hibernate.SQL" level="debug" additivity="false">
|
||||||
|
<appender-ref ref="STDOUT"/>
|
||||||
|
</logger>
|
||||||
|
|
||||||
|
<!-- <logger name="org.hibernate.orm.jdbc.bind" level="trace" additivity="false">-->
|
||||||
|
<!-- <appender-ref ref="STDOUT" />-->
|
||||||
|
<!-- </logger>-->
|
||||||
|
|
||||||
|
<!-- <logger name="org.hibernate.orm.jdbc.extract" level="trace" additivity="false">-->
|
||||||
|
<!-- <appender-ref ref="STDOUT" />-->
|
||||||
|
<!-- </logger>-->
|
||||||
|
|
||||||
|
</configuration>
|
||||||
Reference in New Issue
Block a user