From 46e48f0984aa36c447271919bac49e814aee9f83 Mon Sep 17 00:00:00 2001 From: kirillius Date: Wed, 28 Jan 2026 22:51:48 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=BE=D0=BF=D1=80=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=B3=D0=B5=D0=BD=D0=B5=D1=80=D0=B0=D1=86=D0=B8=D1=8E?= =?UTF-8?q?=20spec=20=D0=B4=D0=BB=D1=8F=20=D1=81=D0=B2=D1=8F=D0=B7=D1=8B?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=B4=D0=BE=D1=87=D0=B5=D1=80?= =?UTF-8?q?=D0=BD=D0=B8=D1=85=20=D1=81=D1=83=D1=89=D0=BD=D0=BE=D1=81=D1=82?= =?UTF-8?q?=D0=B5=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 4 ++ api-sandbox/app/main.js | 5 ++- api-sandbox/app/vite.config.js | 2 +- api-sandbox/pom.xml | 44 +++++++++++++++++++ .../XCP/ApiGenerator/SpecGenerator.java | 19 ++++++++ .../XCP/Commons/GenerateApiSpec.java | 2 + 6 files changed, 73 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 9dbe206..1ca1eda 100644 --- a/.gitignore +++ b/.gitignore @@ -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 diff --git a/api-sandbox/app/main.js b/api-sandbox/app/main.js index b710857..81e646e 100644 --- a/api-sandbox/app/main.js +++ b/api-sandbox/app/main.js @@ -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' diff --git a/api-sandbox/app/vite.config.js b/api-sandbox/app/vite.config.js index 30f647c..c826595 100644 --- a/api-sandbox/app/vite.config.js +++ b/api-sandbox/app/vite.config.js @@ -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({ diff --git a/api-sandbox/pom.xml b/api-sandbox/pom.xml index 5976d02..9ee28ae 100644 --- a/api-sandbox/pom.xml +++ b/api-sandbox/pom.xml @@ -17,4 +17,48 @@ UTF-8 + + + + com.github.eirslett + frontend-maven-plugin + 1.15.0 + + app + app + + + + install node and npm + + install-node-and-npm + + + v22.12.0 + 10.8.2 + + + + npm install + + npm + + + install + + + + npm build + + npm + + + run build + + + + + + + \ No newline at end of file diff --git a/api-spec-generator/src/main/java/ru/kirillius/XCP/ApiGenerator/SpecGenerator.java b/api-spec-generator/src/main/java/ru/kirillius/XCP/ApiGenerator/SpecGenerator.java index 54353cb..6b0212b 100644 --- a/api-spec-generator/src/main/java/ru/kirillius/XCP/ApiGenerator/SpecGenerator.java +++ b/api-spec-generator/src/main/java/ru/kirillius/XCP/ApiGenerator/SpecGenerator.java @@ -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); diff --git a/api/src/main/java/ru/kirillius/XCP/Commons/GenerateApiSpec.java b/api/src/main/java/ru/kirillius/XCP/Commons/GenerateApiSpec.java index be9bae8..bd69736 100644 --- a/api/src/main/java/ru/kirillius/XCP/Commons/GenerateApiSpec.java +++ b/api/src/main/java/ru/kirillius/XCP/Commons/GenerateApiSpec.java @@ -11,4 +11,6 @@ public @interface GenerateApiSpec { String alias() default ""; Class type() default void.class; + + Class[] directInheritors() default {}; }