From 038ee7c3f544e750213b2e327477fedeb51cc25c Mon Sep 17 00:00:00 2001 From: meonwax Date: Fri, 19 Apr 2024 01:11:45 +0200 Subject: [PATCH] Add database support --- .editorconfig | 12 ++++ README.md | 7 +- docker-compose-database.yml | 16 +++++ pom.xml | 64 ++++++++++++++++--- .../predictr/controller/ConfigController.java | 25 ++++++++ .../de/meonwax/predictr/entity/Config.java | 22 +++++++ .../predictr/repository/ConfigRepository.java | 10 +++ src/main/resources/application.properties | 2 - src/main/resources/application.yml | 20 ++++++ .../db/changelog/01-create-config-schema.xml | 39 +++++++++++ .../db/changelog/02-insert-config.xml | 20 ++++++ src/main/resources/db/liquibase-changelog.xml | 9 +++ src/main/resources/micronaut-banner.txt | 6 ++ start-db.sh | 7 ++ 14 files changed, 246 insertions(+), 13 deletions(-) create mode 100644 .editorconfig create mode 100644 docker-compose-database.yml create mode 100644 src/main/java/de/meonwax/predictr/controller/ConfigController.java create mode 100644 src/main/java/de/meonwax/predictr/entity/Config.java create mode 100644 src/main/java/de/meonwax/predictr/repository/ConfigRepository.java delete mode 100644 src/main/resources/application.properties create mode 100644 src/main/resources/application.yml create mode 100644 src/main/resources/db/changelog/01-create-config-schema.xml create mode 100644 src/main/resources/db/changelog/02-insert-config.xml create mode 100644 src/main/resources/db/liquibase-changelog.xml create mode 100644 src/main/resources/micronaut-banner.txt create mode 100755 start-db.sh diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..998c211 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +trim_trailing_whitespace = true +insert_final_newline = true +charset = utf-8 +indent_style = space +end_of_line = lf +indent_size = 2 + +[*.java] +indent_size = 4 diff --git a/README.md b/README.md index c402942..668147d 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,11 @@ # Predictr -A football prediction game. +A football prediction game. Data for UEFA Euro 2024 included. ## Run locally ``` -./mvnw mn:run -``` \ No newline at end of file +./start-db.sh # Database +./mvnw mn:run # Application +``` diff --git a/docker-compose-database.yml b/docker-compose-database.yml new file mode 100644 index 0000000..4818a0c --- /dev/null +++ b/docker-compose-database.yml @@ -0,0 +1,16 @@ +services: + db: + image: postgres:16.2-alpine + restart: always + shm_size: 128mb + environment: + POSTGRES_USER: predictr + POSTGRES_PASSWORD: s3cret + POSTGRES_DB: predictr + ports: + - 5432:5432 + adminer: + image: adminer:4.8.1-standalone + restart: always + ports: + - 9000:8080 diff --git a/pom.xml b/pom.xml index f3fa552..d262fda 100644 --- a/pom.xml +++ b/pom.xml @@ -2,24 +2,25 @@ 4.0.0 - de.meonwax.predictr + de.meonwax predictr - 0.1 + 0.1.0 ${packaging} io.micronaut.platform micronaut-parent - 4.3.8 + 4.4.0 jar 21 21 - 4.3.8 - false - de.meonwax.predictr.aot.generated + 4.4.0 + true netty + false + de.meonwax.aot.generated de.meonwax.predictr.Application @@ -36,16 +37,41 @@ micronaut-http-server-netty compile + + io.micronaut.data + micronaut-data-jdbc + compile + + + io.micronaut.liquibase + micronaut-liquibase + compile + io.micronaut.serde micronaut-serde-jackson compile + + io.micronaut.sql + micronaut-jdbc-hikari + compile + ch.qos.logback logback-classic runtime + + org.postgresql + postgresql + runtime + + + io.micronaut.testresources + micronaut-test-resources-client + provided + io.micronaut micronaut-http-client @@ -67,6 +93,7 @@ test + @@ -87,7 +114,28 @@ - + + + io.micronaut + micronaut-inject-java + ${micronaut.core.version} + + + io.micronaut.data + micronaut-data-processor + ${micronaut.data.version} + + + io.micronaut + micronaut-inject + + + + + io.micronaut + micronaut-graal + ${micronaut.core.version} + io.micronaut micronaut-http-validation @@ -106,7 +154,7 @@ - -Amicronaut.processing.group=de.meonwax.predictr + -Amicronaut.processing.group=de.meonwax -Amicronaut.processing.module=predictr diff --git a/src/main/java/de/meonwax/predictr/controller/ConfigController.java b/src/main/java/de/meonwax/predictr/controller/ConfigController.java new file mode 100644 index 0000000..3b423f5 --- /dev/null +++ b/src/main/java/de/meonwax/predictr/controller/ConfigController.java @@ -0,0 +1,25 @@ +package de.meonwax.predictr.controller; + +import de.meonwax.predictr.entity.Config; +import de.meonwax.predictr.repository.ConfigRepository; +import io.micronaut.http.annotation.Controller; +import io.micronaut.http.annotation.Get; + +import java.util.Optional; + +@Controller("/config") +public class ConfigController { + + private final ConfigRepository configRepository; + + ConfigController(ConfigRepository configRepository) { + this.configRepository = configRepository; + } + + @Get + Optional index() { + return configRepository.findAll() + .stream() + .findFirst(); + } +} diff --git a/src/main/java/de/meonwax/predictr/entity/Config.java b/src/main/java/de/meonwax/predictr/entity/Config.java new file mode 100644 index 0000000..74c1542 --- /dev/null +++ b/src/main/java/de/meonwax/predictr/entity/Config.java @@ -0,0 +1,22 @@ +package de.meonwax.predictr.entity; + +import io.micronaut.core.annotation.Nullable; +import io.micronaut.data.annotation.Id; +import io.micronaut.data.annotation.MappedEntity; +import io.micronaut.serde.annotation.Serdeable; + +@MappedEntity +@Serdeable +public record Config( + @Id Long id, + String title, + String owner, + String adminEmail, + Boolean showImportantMessage, + Integer pointsResult, + Integer pointsTendency, + Integer pointsTendencySpread, + @Nullable String rulesEn, + @Nullable String rulesDe +) { +} diff --git a/src/main/java/de/meonwax/predictr/repository/ConfigRepository.java b/src/main/java/de/meonwax/predictr/repository/ConfigRepository.java new file mode 100644 index 0000000..1d89537 --- /dev/null +++ b/src/main/java/de/meonwax/predictr/repository/ConfigRepository.java @@ -0,0 +1,10 @@ +package de.meonwax.predictr.repository; + +import de.meonwax.predictr.entity.Config; +import io.micronaut.data.jdbc.annotation.JdbcRepository; +import io.micronaut.data.model.query.builder.sql.Dialect; +import io.micronaut.data.repository.CrudRepository; + +@JdbcRepository(dialect = Dialect.POSTGRES) +public interface ConfigRepository extends CrudRepository { +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties deleted file mode 100644 index 7eacd0b..0000000 --- a/src/main/resources/application.properties +++ /dev/null @@ -1,2 +0,0 @@ -#Wed Apr 17 21:23:00 UTC 2024 -micronaut.application.name=predictr diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml new file mode 100644 index 0000000..1043051 --- /dev/null +++ b/src/main/resources/application.yml @@ -0,0 +1,20 @@ +micronaut: + application: + name: predictr + server: + port: 8081 + +datasources: + default: + url: jdbc:postgresql://localhost:5432/predictr + username: predictr + password: s3cret + driverClassName: org.postgresql.Driver + dialect: POSTGRES + schema-generate: NONE + +liquibase: + enabled: true + datasources: + default: + change-log: 'classpath:db/liquibase-changelog.xml' diff --git a/src/main/resources/db/changelog/01-create-config-schema.xml b/src/main/resources/db/changelog/01-create-config-schema.xml new file mode 100644 index 0000000..6dc4f27 --- /dev/null +++ b/src/main/resources/db/changelog/01-create-config-schema.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/db/changelog/02-insert-config.xml b/src/main/resources/db/changelog/02-insert-config.xml new file mode 100644 index 0000000..65462ef --- /dev/null +++ b/src/main/resources/db/changelog/02-insert-config.xml @@ -0,0 +1,20 @@ + + + + + + Predictr + John Doe + admin@example.com + true + 5 + 2 + 3 + + + + diff --git a/src/main/resources/db/liquibase-changelog.xml b/src/main/resources/db/liquibase-changelog.xml new file mode 100644 index 0000000..1db1fb9 --- /dev/null +++ b/src/main/resources/db/liquibase-changelog.xml @@ -0,0 +1,9 @@ + + + + + diff --git a/src/main/resources/micronaut-banner.txt b/src/main/resources/micronaut-banner.txt new file mode 100644 index 0000000..b05e2a1 --- /dev/null +++ b/src/main/resources/micronaut-banner.txt @@ -0,0 +1,6 @@ + + ▄▄▄·▄▄▄ ▄▄▄ .·▄▄▄▄ ▪ ▄▄· ▄▄▄▄▄▄▄▄ + ▐█ ▄█▀▄ █·▀▄.▀·██▪ ██ ██ ▐█ ▌▪•██ ▀▄ █· + ██▀·▐▀▀▄ ▐▀▀▪▄▐█· ▐█▌▐█·██ ▄▄ ▐█.▪▐▀▀▄ + ▐█▪·•▐█•█▌▐█▄▄▌██. ██ ▐█▌▐███▌ ▐█▌·▐█•█▌ + .▀ .▀ ▀ ▀▀▀ ▀▀▀▀▀• ▀▀▀·▀▀▀ ▀▀▀ .▀ ▀ diff --git a/start-db.sh b/start-db.sh new file mode 100755 index 0000000..ac98066 --- /dev/null +++ b/start-db.sh @@ -0,0 +1,7 @@ +#!/bin/bash +set -eu +cleanup() { + docker compose -f docker-compose-database.yml rm -fsv +} +trap cleanup EXIT +docker compose -f docker-compose-database.yml up