{"id":21697803,"url":"https://github.com/zenwave360/spring-boot-jpa-demo","last_synced_at":"2026-04-17T02:33:56.210Z","repository":{"id":154631660,"uuid":"632070283","full_name":"ZenWave360/spring-boot-jpa-demo","owner":"ZenWave360","description":"ZenWave SDK Demo: Baseline with instructions.","archived":false,"fork":false,"pushed_at":"2023-09-07T13:27:30.000Z","size":62,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-03-20T15:17:34.288Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ZenWave360.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-04-24T16:41:15.000Z","updated_at":"2023-04-24T16:44:31.000Z","dependencies_parsed_at":null,"dependency_job_id":"f83c3975-bf19-4d68-89e5-da2f8b3f1bf5","html_url":"https://github.com/ZenWave360/spring-boot-jpa-demo","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ZenWave360/spring-boot-jpa-demo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZenWave360%2Fspring-boot-jpa-demo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZenWave360%2Fspring-boot-jpa-demo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZenWave360%2Fspring-boot-jpa-demo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZenWave360%2Fspring-boot-jpa-demo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ZenWave360","download_url":"https://codeload.github.com/ZenWave360/spring-boot-jpa-demo/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ZenWave360%2Fspring-boot-jpa-demo/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31912513,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-16T18:22:33.417Z","status":"online","status_checked_at":"2026-04-17T02:00:06.879Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-25T19:29:37.444Z","updated_at":"2026-04-17T02:33:55.230Z","avatar_url":"https://github.com/ZenWave360.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ZenWave Example\n\n\u003c!-- TOC --\u003e\n* [ZenWave Example](#zenwave-example)\n* [Install ZenWave SDK](#install-zenwave-sdk)\n* [Starting Docker Infrastructure](#starting-docker-infrastructure)\n* [Generate Backend Application](#generate-backend-application)\n* [JDL To OpenAPI](#jdl-to-openapi)\n* [SpringMVC Controllers](#springmvc-controllers)\n* [Spring WebTestClient](#spring-webtestclient)\n* [JDL To AsyncAPI](#jdl-to-asyncapi)\n* [ZenWave Maven Plugin for AsyncAPI](#zenwave-maven-plugin-for-asyncapi)\n\u003c!-- TOC --\u003e\n\n# Install ZenWave SDK\n\n```shell\njbang alias add --fresh --name=zw release@zenwave360/zenwave-sdk\n```\n\nor if you prefer to use the latest **snapshot** versions:\n\n```shell\njbang alias add --fresh --name=zw snapshots@zenwave360/zenwave-sdk\n```\nPrint help with a list of all available plugins:\n\n```shell\njbang zw -h list\n```\n\n# Starting Docker Infrastructure\n\n```shell\ncd src/main/docker\ndocker-compose -f all-dependencies.yml up -d\n```\n\n# Generate Backend Application\n\n```shell\njbang zw -p io.zenwave360.sdk.plugins.JDLBackendApplicationDefaultPlugin \\\n    specFile=src/main/resources/model/orders-model.jdl \\\n    basePackage=io.zenwave360.example \\\n    persistence=jpa \\\n    databaseType=mariadb \\\n    style=imperative \\\n    targetFolder=. \\\n    --force\n```\n\n# JDL To OpenAPI\n\nGenerate OpenAPI definition from JDL entities:\n\n- Component Schemas for entities, plain and paginated lists\n- CRUD operations for entities\n\n```shell\njbang zw -p io.zenwave360.sdk.plugins.JDLToOpenAPIPlugin \\\n    specFile=src/main/resources/model/orders-model.jdl \\\n    idType=integer \\\n    idTypeFormat=int64 \\\n    targetFile=src/main/resources/model/openapi.yml\n```\nGenerate SpringMVC interfaces from OpenAPI:\n\n```shell\nmvn clean generate-sources\n```\n# SpringMVC Controllers\n\nGenerate new SpringMVC controllers from OpenAPI:\n\n```shell\njbang zw -p io.zenwave360.sdk.plugins.JDLOpenAPIControllersPlugin \\\n    specFile=src/main/resources/model/openapi.yml \\\n    jdlFile=src/main/resources/model/orders-model.jdl \\\n    basePackage=io.zenwave360.example \\\n    openApiApiPackage=io.zenwave360.example.adapters.web \\\n    openApiModelPackage=io.zenwave360.example.adapters.web.model \\\n    openApiModelNameSuffix=DTO \\\n    targetFolder=.\n```\n\nEdit `TODO` tags in the generated controllers to connect API with business logic:\n\n```java\npackage io.zenwave360.example.adapters.web;\n\n@Override\npublic ResponseEntity\u003cCustomerDTO\u003e createCustomer(CustomerDTO reqBody) {\n    CustomerInput customerInput = mapper.asCustomerInput(reqBody);\n    Customer customer = null; // TODO: customerUseCases.createCustomer(customerInput);\n    CustomerDTO responseDTO = mapper.asCustomerDTO(customer);\n    return ResponseEntity.status(201).body(responseDTO);\n}\n```\n\n# Spring WebTestClient\n\nGenerates test for SpringMVC or Spring WebFlux using WebTestClient based on OpenAPI specification.\n\n```shell\njbang zw -p io.zenwave360.sdk.plugins.SpringWebTestClientPlugin \\\n    specFile=src/main/resources/model/openapi.yml \\\n    targetFolder=src/test/java \\\n    testsPackage=io.zenwave360.example.adapters.web \\\n    openApiApiPackage=io.zenwave360.example.adapters.web \\\n    openApiModelPackage=io.zenwave360.example.adapters.web.model \\\n    openApiModelNameSuffix=DTO \\\n    groupBy=service\n```\n\nGenerate Customer CRUD Integration Test:\n\n```shell\njbang zw -p io.zenwave360.sdk.plugins.SpringWebTestClientPlugin \\\n    specFile=src/main/resources/model/openapi.yml \\\n    targetFolder=src/test/java \\\n    testsPackage=io.zenwave360.example.adapters.web \\\n    openApiApiPackage=io.zenwave360.example.adapters.web \\\n    openApiModelPackage=io.zenwave360.example.adapters.web.model \\\n    openApiModelNameSuffix=DTO \\\n    groupBy=businessFlow \\\n    businessFlowTestName=Customer_CRUD_IT \\\n    operationIds=createCustomer,getCustomer,updateCustomer,deleteCustomer\n```\n\nGenerate CustomerOrder CRUD Integration Test:\n\n```shell\njbang zw -p io.zenwave360.sdk.plugins.SpringWebTestClientPlugin \\\n    specFile=src/main/resources/model/openapi.yml \\\n    targetFolder=src/test/java \\\n    testsPackage=io.zenwave360.example.adapters.web \\\n    openApiApiPackage=io.zenwave360.example.adapters.web \\\n    openApiModelPackage=io.zenwave360.example.adapters.web.model \\\n    openApiModelNameSuffix=DTO \\\n    groupBy=businessFlow \\\n    businessFlowTestName=CustomerOrder_CRUD_IT \\\n    operationIds=createCustomerOrder,getCustomerOrder,updateCustomerOrder,deleteCustomerOrder\n```\n\n# JDL To AsyncAPI\n\nGenerate AsyncAPI definition from JDL entities:\n\n- One channel for each entity update events\n- Messages and payloads for each entity Create/Update/Delete events (AVRO and AsyncAPI schema)\n\n```shell\njbang zw -p io.zenwave360.sdk.plugins.JDLToAsyncAPIPlugin \\\n    includeCommands=false \\\n    specFile=src/main/resources/model/orders-model.jdl \\\n    idType=integer \\\n    idTypeFormat=int64 \\\n    annotations=aggregate \\\n    payloadStyle=event \\\n    targetFile=src/main/resources/model/asyncapi.yml\n```\n\n# ZenWave Maven Plugin for AsyncAPI\n\nEnable ZenWave Maven plugins for AsyncAPI editing pom.xml:\n\n```xml\n\u003cplugin\u003e\n    \u003cgroupId\u003eio.github.zenwave360.zenwave-sdk\u003c/groupId\u003e\n    \u003cartifactId\u003ezenwave-sdk-maven-plugin\u003c/artifactId\u003e\n    \u003cversion\u003e${zenwave.version}\u003c/version\u003e\n    \u003cconfiguration\u003e\n        \u003cinputSpec\u003e${pom.basedir}/src/main/resources/model/asyncapi.yml\u003c/inputSpec\u003e\n        \u003cskip\u003etrue\u003c/skip\u003e\u003c!-- set to false to generate sources --\u003e\n```\n\nGenerate Spring Cloud Streams DTOs, business interfaces and producer implementations from AsyncAPI:\n\n```shell\nmvn clean generate-sources\n```\n\nFollow instructions: \n\n[Spring Cloud Streams Producer: Using generated code to produce messages](https://zenwave360.github.io/Event-Driven-Architectures/AsyncAPI-Code-Generator#spring-cloud-streams-producer-using-generated-code-to-produce-messages)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzenwave360%2Fspring-boot-jpa-demo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzenwave360%2Fspring-boot-jpa-demo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzenwave360%2Fspring-boot-jpa-demo/lists"}