Recap and next steps#
You’ve built a two-entity admin console end-to-end: annotated schema on the backend, Mantine screens on the frontend, with a foreign-key lookup connecting the two. This page sums up what’s wired and points at where to take the app next.
What’s wired, end to end#
| UI | API call |
|---|---|
| Department grid | GET /api/department?... via SummaryGrid’s internal grid store |
| Department view | GET /api/department/{id} via PalmyraViewForm |
| Department new / save | POST /api/department / POST /api/department/{id} |
| Employee grid | GET /api/employee?... via SummaryGrid — dotted department.code column projects the FK join inline |
| Employee view | GET /api/employee/{id} via PalmyraViewForm |
| Department lookup (inside Employee form) | GET /api/department?name=...&_limit=... via MantineServerLookup’s lookup store |
| Employee new / save | POST /api/employee with payload { department: { id } } |
| Employee edit / save | POST /api/employee/{id} with the same FK shape |
No axios.post, no fetch, no per-entity data layer — every call flows through the single PalmyraStoreFactory configured in the frontend API wiring step.
Where to go next#
Backend#
- Exports — publish a
CsvHandler/ExcelHandlerfor/api/employee/export.csvand let the Mantine grid’s toolbar point at it. - Permissions — replace the open defaults with
@Permissionkeys and plug them into the ACL extension, or register your own SpringPermissionEvaluatorto route through an existing auth layer. - Custom filters — move tenant scoping and soft-delete guards into
applyQueryFilter; see Custom query filters. - Native reports — add a
/api/reports/...endpoint withNativeQueryHandlerwhen a report outgrows the declarative query surface.
Frontend#
- Related sibling grids. Add
EmployeeActivityLog,EmployeeDocuments, orDepartmentMembersgrids under the respectiveview/folders — mirroring how the clinic sample stacksProductPurchaseHistoryandProductStockRequestGridunderproduct/view/. - Richer cell editors. Swap the Mantine
BadgecellRendereron the status column for a popup editor that writes back viauseFormstore(...).put(...); the clinic’sPreferenceEditoris the canonical reference. - Toolbar variant. Ship an
EmpAppDataGridControlswith per-row edit / delete buttons if row-click-to-navigate isn’t enough — pass it throughSummaryGrid’sDataGridControlsprop. - Filter plugin. Extract a shared filter panel using the
FilterFormplugin once multiple grids need the same filter shape. - Auth. Add a login route and a 401 interceptor on the store factory — see the Auth decorators reference.