DomainTemplate CRUD
This monorepo demonstrates one business object from persistence to user interface. A Spring Boot API stores DomainTemplate objects in PostgreSQL, three reusable clients expose the same contract, and a React console provides day-to-day CRUD and bulk data operations.
What You Will Run
The tutorial starts a complete local stack and creates one DomainTemplate. The resulting object has a server-generated Long identifier, a unique immutable code, a required label, an optional description, and server-owned Instant timestamps.
Modules
| Module | Purpose |
|---|---|
api |
Spring Boot CRUD API backed by JPA and PostgreSQL. |
java-client |
Maven client library using Java HttpClient. |
react-client |
TypeScript client library for React or browser apps. |
backend |
React + Vite management console. |
dart-client |
Dart package for Flutter or Dart services. |
docs |
MkDocs project documentation. |
presentation |
Marp overview of the solution and its architecture. |
See Recommended Copilot Skills for the skills to use when extending or maintaining each part of the monorepo.
Supported Stack Versions
Use these maintained baseline versions for local development and CI. Newer compatible patch releases are supported unless a module pins a version explicitly.
| Technology | Version |
|---|---|
| Node.js | 24 |
| pnpm | 11 |
| Java | 25 |
| Maven | 3.9.16 |
| Dart SDK | 3.12.2 |
| Spring Boot | 4.1.1 |
| Vite | 8.2.2 |
| Vitest | 4.1.11 |
| Vite React plugin | 6.1.1 |
| Redux Toolkit / RTK Query | 2.12 |
Tutorial: Run the Solution
1. Start the stack
From the repository root:
make docker-up
Compose publishes the documentation on 8000, the API on 8989, and the console on 5173.
2. Create a DomainTemplate
curl -X POST http://localhost:8989/api/v1/domaintemplate \
-H "Content-Type: application/json" \
-d '{"code":"CUSTOMER","label":"Customer","description":"Customer master data"}'
The response resembles:
{
"id": 1,
"code": "CUSTOMER",
"label": "Customer",
"description": "Customer master data",
"createdDate": "2026-08-30T17:00:00Z",
"lastModifiedDate": "2026-08-30T17:00:00Z"
}
The exact identifier and timestamps are assigned by the server.
3. Use the console
Open http://localhost:5173, select DomainTemplates, and open the new object by its ID. From this page you can create, inspect, update, delete, seed, import, and export DomainTemplates.
Swagger UI is available at http://localhost:8989/swagger-ui.html.
4. Stop the stack
make docker-down
The PostgreSQL volume is retained. Follow Reset the demo database when you need a clean database.
Develop and Verify
make setup
make test
make build
Generate Java, React, and Dart coverage reports:
make coverage
Run only the API locally against PostgreSQL on localhost:5432:
make java-run
Then open http://localhost:8080/swagger-ui.html.
Continue with the API reference, architecture explanation, web console guide, or deployment guide.