Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| ae66fe3c61 |
@@ -1,5 +1,10 @@
|
||||
plugins {
|
||||
id 'java'
|
||||
//id 'application'
|
||||
id 'jacoco'
|
||||
id 'test-report-aggregation'
|
||||
id 'jacoco-report-aggregation'
|
||||
alias(libs.plugins.lombok)
|
||||
}
|
||||
|
||||
repositories {
|
||||
@@ -7,14 +12,92 @@ repositories {
|
||||
}
|
||||
|
||||
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.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) {
|
||||
manifest {
|
||||
attributes 'Main-Class': 'de.thpeetz.kontor.api.Main'
|
||||
attributes 'Main-Class': 'de.thpeetz.kontor.Main'
|
||||
}
|
||||
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
|
||||
from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } }
|
||||
@@ -22,6 +105,9 @@ task fatJar(type: Jar) {
|
||||
}
|
||||
|
||||
build.dependsOn fatJar
|
||||
// distZip.dependsOn fatJar
|
||||
// distTar.dependsOn fatJar
|
||||
// startScripts.dependsOn fatJar
|
||||
|
||||
wrapper {
|
||||
gradleVersion = "9.2.1"
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
description='Kontor with Spring Boot'
|
||||
version=0.2.0-SNAPSHOT
|
||||
group=de.thpeetz
|
||||
org.gradle.warning.mode=none
|
||||
|
||||
|
||||
@@ -1,18 +1,32 @@
|
||||
[versions]
|
||||
gradle = "8.6"
|
||||
junit = "5.8.2"
|
||||
#slf4j = "1.7.36"
|
||||
slf4j = "2.0.16"
|
||||
hibernate = "6.4.4.Final"
|
||||
hsqldb = "2.7.1"
|
||||
sqlite = "3.25.2"
|
||||
jackson = "2.16.1"
|
||||
#javalin = "4.6.4"
|
||||
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]
|
||||
junit = { module = "org.junit.jupiter:junit-jupiter", version.ref = "junit" }
|
||||
slf4j = { module = "org.slf4j:slf4j-simple", version.ref = "slf4j" }
|
||||
hibernate = { module = "org.hibernate.orm:hibernate-core", version.ref = "hibernate" }
|
||||
hibernate-modelgen = { module = "org.hibernate.orm:hibernate-jpamodelgen", version.ref = "hibernate" }
|
||||
hsqldb = { module = "org.hsqldb:hsqldb", version.ref = "hsqldb" }
|
||||
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-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