Поправил генерацию spec для связывания дочерних сущностей

This commit is contained in:
kirillius 2026-01-28 22:51:48 +03:00
parent b5d021d03c
commit 46e48f0984
6 changed files with 73 additions and 3 deletions

4
.gitignore vendored
View File

@ -46,3 +46,7 @@ api-sandbox/app/api.spec.json
/xcpdata.trace.db
web-ui/vue-app/TODO.md
web-ui/vue-app/src/generated/*
/api-sandbox/src/main/resources/htdocs/api-sandbox/
api-sandbox/app/dist/api.spec.json
api-sandbox/app/node/
api.spec.json

View File

@ -2,6 +2,7 @@ import $ from 'jquery'
let apiSpec = null
let currentUser = null
const apiEndpoint = "/api";
async function loadUserProfile() {
try {
@ -12,7 +13,7 @@ async function loadUserProfile() {
id: Date.now()
}
const response = await fetch('http://localhost:8080/api', {
const response = await fetch(apiEndpoint, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
@ -215,7 +216,7 @@ async function sendRequest() {
$('#request').text('')
try {
const response = await fetch('http://localhost:8080/api', {
const response = await fetch(apiEndpoint, {
method: 'POST',
headers: {
'Content-Type': 'application/json'

View File

@ -5,7 +5,7 @@ import copy from 'rollup-plugin-copy'
export default defineConfig({
root: '.',
build: {
outDir: 'dist',
outDir: '../src/main/resources/htdocs/api-sandbox',
rollupOptions: {
plugins: [
copy({

View File

@ -17,4 +17,48 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<build>
<plugins>
<plugin>
<groupId>com.github.eirslett</groupId>
<artifactId>frontend-maven-plugin</artifactId>
<version>1.15.0</version>
<configuration>
<workingDirectory>app</workingDirectory>
<installDirectory>app</installDirectory>
</configuration>
<executions>
<execution>
<id>install node and npm</id>
<goals>
<goal>install-node-and-npm</goal>
</goals>
<configuration>
<nodeVersion>v22.12.0</nodeVersion>
<npmVersion>10.8.2</npmVersion>
</configuration>
</execution>
<execution>
<id>npm install</id>
<goals>
<goal>npm</goal>
</goals>
<configuration>
<arguments>install</arguments>
</configuration>
</execution>
<execution>
<id>npm build</id>
<goals>
<goal>npm</goal>
</goals>
<configuration>
<arguments>run build</arguments>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@ -122,9 +122,28 @@ public class SpecGenerator {
continue;
}
for (var aClass : classAnnotation.directInheritors()) {
if (!types.contains(aClass)) {
types.add(aClass);
typesQueue.add(aClass);
}
}
var typeDescriptor = typesArray.addObject();
typeDescriptor.put("name", classAnnotation.alias().isEmpty() ? type.getSimpleName() : classAnnotation.alias());
typeDescriptor.put("type", "class");
var parents = typeDescriptor.putArray("parents");
for (var aClass : type.getInterfaces()) {
if (!types.contains(aClass)) {
types.add(aClass);
typesQueue.add(aClass);
}
if (!aClass.isAnnotationPresent(GenerateApiSpec.class)) {
continue;
}
parents.add(aClass.getSimpleName());
}
var fields = typeDescriptor.putArray("fields");
for (var method : type.getMethods()) {
var methodAnnotation = method.getAnnotation(GenerateApiSpec.class);

View File

@ -11,4 +11,6 @@ public @interface GenerateApiSpec {
String alias() default "";
Class<?> type() default void.class;
Class<?>[] directInheritors() default {};
}