Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
90 commits
Select commit Hold shift + click to select a range
7fb5e24
Add response classes for the SoundEventEntity
theEvilReaper Jun 15, 2025
6736a23
Add rest controller implementation for SoundEvents
theEvilReaper Jun 15, 2025
c40cda1
feat(service): implement SoundService for sound event management and …
TheMeinerLP Jul 15, 2025
c28952f
fix(deps): update vulpes.model version to 1.5.1 in settings.gradle.kts
TheMeinerLP Aug 10, 2025
6f61808
fix(client): Improve api specification to avoid numbers in the client…
theEvilReaper Aug 9, 2025
39c5647
refactor(model): Improve model class generation
theEvilReaper Aug 9, 2025
ce38e16
fix(deps): update vulpes.model version to 1.5.1-beta.1 in settings
TheMeinerLP Aug 11, 2025
617bbe8
refactor(dtos): rename schema names to include 'Response' prefix for …
TheMeinerLP Aug 30, 2025
61b6504
feat(sound): implement pagination for sound sources and add SoundFile…
TheMeinerLP Aug 30, 2025
ede0c68
feat(sound): Add fixup for sounds integration (#24)
TheMeinerLP Aug 31, 2025
c5db22a
feat(release): update publish command to include pushDartClient
TheMeinerLP Aug 31, 2025
828ed37
feat(build): streamline pushDartClient task by consolidating command …
TheMeinerLP Aug 31, 2025
2779a7e
feat(build): add force push to main branch in publish task
TheMeinerLP Aug 31, 2025
fe75cd6
feat(build): refactor pushDartClient task to use providers for comman…
TheMeinerLP Aug 31, 2025
0354f1a
feat(build): update publish command to remove pushDartClient from exe…
TheMeinerLP Aug 31, 2025
2dd2ba0
fix(ci): Retrigger build
TheMeinerLP Aug 31, 2025
81218e9
feat(build): add git push command to publish task for main branch
TheMeinerLP Aug 31, 2025
6fa77ff
feat(api): update response schemas to use ArraySchema for multiple en…
TheMeinerLP Aug 31, 2025
fa1dd2e
feat(build): add Flutter setup and build commands to the CI workflow
TheMeinerLP Aug 31, 2025
7f00309
feat(build): comment out build_runner command in build.gradle.kts
TheMeinerLP Aug 31, 2025
f1192fc
feat(build): comment out flutter pub get command in build.gradle.kts
TheMeinerLP Aug 31, 2025
ed2dd41
fix(FontController): handle null model case in getCharsById method (#30)
TheMeinerLP Sep 19, 2025
cd648f0
fix(sound): Return page instead of a list when retrieving all SoundEv…
theEvilReaper Sep 23, 2025
4f6010d
fix(test): Fix wrong method getAllSoundEvents signature
theEvilReaper Sep 23, 2025
77db1a8
fix(test): update testGetAll to validate paginated response structure
TheMeinerLP Sep 26, 2025
f3a8913
fix: remove unnecessary @Valid annotation from get method (#38)
TheMeinerLP Sep 26, 2025
ea2317a
fix(settings): update vulpes.model version to 1.6.0-beta.9
TheMeinerLP Oct 3, 2025
ffad049
feat(ItemController): update enchantments, flags, and lore endpoints …
TheMeinerLP Oct 3, 2025
135c4be
feat(FontController): add endpoint to update characters of a font
TheMeinerLP Oct 4, 2025
858ad84
feat(ItemController): add endpoints to update enchantments, flags, an…
TheMeinerLP Oct 4, 2025
5e81b4c
fix(sound): remove valid annotation to avoid issues with v7 uuids
theEvilReaper Oct 31, 2025
b344311
feat(deps): update vulpes-model dependency
Joltras Nov 2, 2025
1abcecf
fix(fontservice): update parameter usage to avoid compile issues
Joltras Nov 2, 2025
2e6b21b
fix(application): remove explicit usage of the mariadb dialect. It wi…
Joltras Nov 2, 2025
113c600
fix(soundservice): replace invalid map argument with filter to avoid …
Joltras Nov 2, 2025
d6c6204
chore(imports): remove unused imports
theEvilReaper Nov 4, 2025
16c9ff7
chore(error-handling): improve generic error handling
theEvilReaper Nov 4, 2025
01fb651
chore(deps): update dependency handling
theEvilReaper Nov 4, 2025
df05391
fix(error): update last generic error case to use the constant value
theEvilReaper Nov 4, 2025
fd04968
chore(dto): Rework dto classes to use the record construct from Java …
theEvilReaper Nov 4, 2025
ef3f820
chore(validation): remove validation annotations to avoid issues
theEvilReaper Nov 4, 2025
b200983
chore(dto): rework attribute dto class to a record
theEvilReaper Nov 4, 2025
0b9303a
chore(dto): improve variable naming
theEvilReaper Nov 4, 2025
ee350da
chore(validation): rework dto validation layer (#66)
theEvilReaper Nov 4, 2025
35d0e65
refactor(sound): replace DTO with id in delete request (#64)
theEvilReaper Nov 5, 2025
32c2203
feat(build): integrate CycloneDX BOM generation and upload to Depende…
TheMeinerLP Nov 5, 2025
7f6c951
feat(build): add CycloneDX BOM generation to release workflow
TheMeinerLP Nov 5, 2025
c345a14
fix(ci): correct release version environment variable usage in workflow
TheMeinerLP Nov 5, 2025
24780e8
fix(project): Triggerbuild
TheMeinerLP Nov 5, 2025
6e6c190
chore(dependencies): update Java version to 25 and Micronaut version …
TheMeinerLP Nov 7, 2025
9a11ace
fix(ci): add version check before uploading BOM to Dependency-Track
TheMeinerLP Nov 7, 2025
a7b8a78
chore(dependencies): update Java version to 25 in semantic-releases.yml
TheMeinerLP Nov 7, 2025
42e6c76
chore(imports): cleanup unused imports
theEvilReaper Nov 13, 2025
2cbdbfa
chore(dependencies): update vulpes.model version to 1.6.0-beta.13
TheMeinerLP Nov 11, 2025
b31a716
feat(item): implement enchantment retrieval and response DTO
TheMeinerLP Nov 11, 2025
f37e361
feat(item): refactor item enchantment handling and update response DTOs
TheMeinerLP Nov 12, 2025
a64ec94
feat(item): update ItemEnchantmentDTO to use UUID for enchantment ID
TheMeinerLP Nov 12, 2025
c85d03c
feat(item): add support for item lore management with DTOs and servic…
TheMeinerLP Nov 12, 2025
20e64b7
feat(item): introduce ItemFlagDTO and ItemFlagResponseDTO for flag ma…
TheMeinerLP Nov 12, 2025
879f7c7
fix(item): update error schema reference in ItemController for improv…
TheMeinerLP Nov 12, 2025
6b38ec1
fix(item): update error schema reference in ItemController for improv…
TheMeinerLP Nov 12, 2025
bde3a61
chore(item): cleanup unused imports
theEvilReaper Nov 13, 2025
9c3c362
fix(tests): simplify ItemModelDTOValidationTest by removing redundant…
TheMeinerLP Nov 15, 2025
9946ef9
feat(font): add CRUD operations for font characters in FontController…
TheMeinerLP Nov 15, 2025
a0bedf1
feat(item): implement CRUD operations for items in ItemController
TheMeinerLP Nov 15, 2025
6c70ef8
feat(item): add create and delete enchantment operations in ItemContr…
TheMeinerLP Nov 15, 2025
8897f87
feat(item): add delete operations for single and multiple enchantment…
TheMeinerLP Nov 15, 2025
66bc356
feat(controller): standardize endpoint URIs and update DTO names acro…
TheMeinerLP Nov 15, 2025
04740a8
feat(item): add CRUD operations for item lore in ItemController and I…
TheMeinerLP Nov 15, 2025
491926a
feat(item): add CRUD operations for item flags in ItemController and …
TheMeinerLP Nov 15, 2025
29863c0
feat(item): enhance ItemController with improved CRUD operation descr…
TheMeinerLP Nov 15, 2025
1806f0c
feat(build): remove Micronaut management dependency from build config…
TheMeinerLP Nov 15, 2025
2196cf5
feat(build): update Java version to 25 in build configuration
TheMeinerLP Nov 15, 2025
0995c85
feat(build): update Micronaut version to 4.10.2 and Gradle wrapper to…
TheMeinerLP Nov 16, 2025
8a4885e
feat(build): comment out Micronaut test resources plugin for future fix
TheMeinerLP Nov 16, 2025
603f886
feat(build): remove test execution from Gradle build command
TheMeinerLP Nov 16, 2025
c59a355
chore(model): update vulpes model to beta 14
theEvilReaper Nov 18, 2025
709cd51
chore(dto): rename group to groupName to avoid decoding issues
theEvilReaper Nov 18, 2025
75c1eb8
fix(tests): update property access
theEvilReaper Nov 18, 2025
10f40e2
chore(tests): disable failing test
theEvilReaper Nov 18, 2025
c379db1
chore(enchantment): Add unsafe parameter
theEvilReaper Nov 21, 2025
0e0c225
chore(validation): add ValidationGroup interface
theEvilReaper Nov 5, 2025
5b7a52f
chore(validation): improve validation annotation usage
theEvilReaper Nov 23, 2025
569e3af
chore(validation): update validation calls in the controller implemen…
theEvilReaper Nov 23, 2025
9937759
chore(tests): update given tests to the new validation system
theEvilReaper Nov 24, 2025
7722903
chore(dto): remove unused import
theEvilReaper Nov 24, 2025
a6cfad9
chore(dto): improve annotation usage
theEvilReaper Nov 24, 2025
7735e65
chore(dto): remove unused response definition
theEvilReaper Nov 24, 2025
206482e
fix(test): update FontModel creation in the validation test
theEvilReaper Dec 16, 2025
550139b
refactor(controllers): extract nested endpoints into separate classes…
theEvilReaper Feb 11, 2026
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
4 changes: 2 additions & 2 deletions .github/workflows/build-pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,11 @@ jobs:
uses: actions/setup-java@v5
with:
distribution: temurin
java-version: 24
java-version: 25
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v5
- name: Build on ${{ matrix.os }}
run: ./gradlew clean build test
run: ./gradlew clean build
- name: Generate JaCoCo Coverage Report
if: matrix.os == 'ubuntu-latest'
run: ./gradlew jacocoTestReport
Expand Down
19 changes: 17 additions & 2 deletions .github/workflows/sematic-releases.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ jobs:
uses: actions/setup-java@v5
with:
distribution: temurin
java-version: 24
java-version: 25
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v5
- name: Install dependencies
Expand Down Expand Up @@ -64,6 +64,21 @@ jobs:
VERSION=$(cat version.txt)
echo "release_version=$VERSION" >> $GITHUB_OUTPUT
fi
- name: Get Version
id: get_version_env
run: echo "VERSION=$(cat version.txt)" >> $GITHUB_ENV
- name: Upload BOM to Dependency-Track
if: steps.get_version_env.outputs.VERSION != ''
uses: DependencyTrack/gh-upload-sbom@v3
with:
serverhostname: ${{ secrets.DEPENDENCYTRACK_HOSTNAME }}
apikey: ${{ secrets.DEPENDENCYTRACK_APIKEY }}
projectname: "Vulpes Backend"
projectversion: ${{ env.VERSION }}
projecttags: 'docker,application,micronaut'
bomfilename: "build/reports/cyclonedx/bom.xml"
autocreate: true
parent: 'a5b26cf1-d8e0-4815-b727-0a355a2354f6'
docker:
name: Build Docker Artifacts
runs-on: ubuntu-latest
Expand All @@ -80,7 +95,7 @@ jobs:
uses: actions/setup-java@v5
with:
distribution: temurin
java-version: 24
java-version: 25
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v5
- name: Build Docker Artifacts
Expand Down
2 changes: 1 addition & 1 deletion .releaserc.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
"@semantic-release/exec",
{
"verifyConditionsCmd": "./gradlew check",
"publishCmd": "./gradlew -Pversion=${nextRelease.version} publish && echo '${nextRelease.version}' > version.txt"
"publishCmd": "./gradlew -Pversion=${nextRelease.version} publish cyclonedxBom && echo '${nextRelease.version}' > version.txt"
}
],
"@semantic-release/git",
Expand Down
19 changes: 11 additions & 8 deletions build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
plugins {
alias(libs.plugins.micronaut.application)
alias(libs.plugins.micronaut.aot)
alias(libs.plugins.micronaut.test.resources)
// alias(libs.plugins.micronaut.test.resources) // TODO: Needs be fixed, ref: https://github.com/micronaut-projects/micronaut-gradle-plugin/issues/1195
jacoco
`maven-publish`
id("org.openapi.generator") version "7.20.0"
alias(libs.plugins.cyclonedx)
}

java {
toolchain {
languageVersion.set(JavaLanguageVersion.of(21))
languageVersion.set(JavaLanguageVersion.of(25))
}
}

Expand All @@ -36,7 +37,6 @@ dependencies {
implementation(mn.micronaut.openapi)
implementation(mn.validation)
implementation(mn.swagger.core)
implementation(mn.micronaut.management)
implementation(mn.micronaut.micrometer.core)
implementation(mn.micronaut.micrometer.registry.prometheus)
// External Dependencies
Expand All @@ -52,17 +52,20 @@ dependencies {

testImplementation(mn.junit.jupiter.api)
testImplementation(mn.junit.jupiter.params)
testRuntimeOnly(mn.junit.jupiter.engine)
testImplementation(mn.testcontainers.core)
testImplementation(mn.testcontainers.mariadb)
testImplementation("org.testcontainers:junit-jupiter")
testImplementation(mn.micronaut.test.rest.assured)
testImplementation(mn.micronaut.validation)
testImplementation(mn.micronaut.test.resources.extensions.core)
testImplementation(mn.micronaut.test.resources.extensions.junit.platform)
// Faker library for JUnit tests
testImplementation("net.datafaker:datafaker:2.5.4")
}
testImplementation(libs.testcontainers.junit)
testImplementation(libs.datafaker)
testImplementation(libs.hibernate.validator)
testImplementation(libs.jakarta.validation)

testRuntimeOnly(mn.junit.jupiter.engine)
}

application {
mainClass.set("net.onelitefeather.vulpes.backend.VulpesBackend")
Expand Down Expand Up @@ -91,7 +94,7 @@ micronaut {
tasks {
compileJava {
options.encoding = "UTF-8"
options.release = 21
options.release = 25
options.forkOptions.jvmArgs = listOf("-Dmicronaut.openapi.views.spec=rapidoc.enabled=true,openapi-explorer.enabled=true,swagger-ui.enabled=true,swagger-ui.theme=flattop")
}
jacocoTestReport {
Expand Down
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ org.gradle.parallel=true
# org.gradle.warning.mode=all
# org.gradle.logging.level=info
org.gradle.jvmargs=-Xmx2G -XX:MaxMetaspaceSize=512m -Dfile.encoding=UTF-8 -Dmicronaut.openapi.views.spec=redoc.enabled=true,rapidoc.enabled=true,openapi-explorer.enabled=true,swagger-ui.enabled=true,swagger-ui.theme=flattop
micronautVersion=4.8.0
micronautVersion=4.10.2

# The version of the Vulpes API
version=999.0.0-SNAPSHOT
Expand Down
Binary file modified gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
7 changes: 2 additions & 5 deletions gradlew

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 1 addition & 2 deletions gradlew.bat

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

15 changes: 13 additions & 2 deletions settings.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -33,16 +33,27 @@ dependencyResolutionManagement {
versionCatalogs {
create("libs") {
version("micronaut", "4.6.2")
version("vulpes.model", "1.6.0")
version("vulpes.model", "1.6.0-beta.14")
version("uuid.creator", "6.1.1")
version("datafaker", "2.4.2")
version("jetbrains.annotation", "26.0.2")
version("hibernate.validator", "9.0.1.Final")
version("jakarta.validation", "3.1.1")
version("cyclonedx", "3.0.1")

library("uuid.creator", "com.github.f4b6a3", "uuid-creator").versionRef("uuid.creator")
library("vulpes.api", "net.onelitefeather", "vulpes-model").versionRef("vulpes.model")
library("jetbrains.annotation", "org.jetbrains", "annotations").version("26.1.0")
library("jetbrains.annotation", "org.jetbrains", "annotations").versionRef("jetbrains.annotation")
library("datafaker", "net.datafaker", "datafaker").versionRef("datafaker")
library("testcontainers.junit", "org.testcontainers", "junit-jupiter").withoutVersion()

library("hibernate.validator", "org.hibernate.validator", "hibernate-validator").versionRef("hibernate.validator")
library("jakarta.validation", "jakarta.validation", "jakarta.validation-api").versionRef("jakarta.validation")

plugin("micronaut.application", "io.micronaut.application").versionRef("micronaut")
plugin("micronaut.aot", "io.micronaut.aot").versionRef("micronaut")
plugin("micronaut.test-resources", "io.micronaut.test-resources").versionRef("micronaut")
plugin("cyclonedx", "org.cyclonedx.bom").versionRef("cyclonedx")
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,16 +11,17 @@
import io.micronaut.http.annotation.PathVariable;
import io.micronaut.http.annotation.Post;
import io.micronaut.http.annotation.Produces;
import io.micronaut.validation.Validated;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.ArraySchema;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import jakarta.inject.Inject;
import jakarta.validation.Valid;
import net.onelitefeather.vulpes.backend.domain.attribute.AttributeModelDTO;
import net.onelitefeather.vulpes.backend.domain.attribute.AttributeModelResponseDTO;
import net.onelitefeather.vulpes.backend.service.AttributeService;
import net.onelitefeather.vulpes.backend.validation.ValidationGroup;

import java.util.List;
import java.util.UUID;
Expand Down Expand Up @@ -58,7 +59,8 @@ public AttributeController(AttributeService attributeService) {
)
)
@Post
public HttpResponse<AttributeModelResponseDTO> add(@Valid @Body AttributeModelDTO model) {
@Validated(groups = ValidationGroup.Create.class)
public HttpResponse<AttributeModelResponseDTO> add(@Body AttributeModelDTO model) {
AttributeModelResponseDTO.AttributeModelDTO createdAttribute = attributeService.createAttribute(model);
return HttpResponse.ok(createdAttribute);
}
Expand Down Expand Up @@ -86,7 +88,8 @@ public HttpResponse<AttributeModelResponseDTO> add(@Valid @Body AttributeModelDT
)
)
@Post("/update")
public HttpResponse<AttributeModelResponseDTO> update(@Valid @Body AttributeModelDTO model) {
@Validated(groups = ValidationGroup.Update.class)
public HttpResponse<AttributeModelResponseDTO> update(@Body AttributeModelDTO model) {
AttributeModelResponseDTO result = attributeService.updateAttribute(model);
if (result instanceof AttributeModelResponseDTO.AttributeModelErrorDTO) {
return HttpResponse.notFound(result);
Expand Down Expand Up @@ -144,7 +147,7 @@ public HttpResponse<AttributeModelResponseDTO> delete(@PathVariable UUID id) {
schema = @Schema(implementation = AttributeModelResponseDTO.AttributeModelDTO.class)
)
)
@Delete("/delete/all")
@Delete("/delete")
public HttpResponse<List<AttributeModelResponseDTO>> deleteAll() {
List<AttributeModelResponseDTO> result = attributeService.deleteAllAttributes();
return HttpResponse.ok(result);
Expand Down Expand Up @@ -173,7 +176,7 @@ public HttpResponse<List<AttributeModelResponseDTO>> deleteAll() {
)
)
@Produces(MediaType.APPLICATION_JSON)
@Get(uris = {"/all"})
@Get(uris = {"/"})
public HttpResponse<Page<AttributeModelResponseDTO.AttributeModelDTO>> getAll(Pageable pageable) {
Page<AttributeModelResponseDTO.AttributeModelDTO> models = attributeService.getAllAttributes(pageable);
return HttpResponse.ok(models);
Expand Down
Loading
Loading