feat(17-01): tree reorder page and singleton admin controllers

- cabana: config_reorder.yaml (title, nameFrom, modelClass, parentColumn,
  sortColumn, maxDepth, partition) with fail-loud boot checks and the
  built-in reorder toolbar button; list schema carries reorder
- GET/POST {controller}/reorder: scoped set (ListExtendQuery plus the
  partition) locked FOR UPDATE, 409 reorder_stale on any set difference,
  422 for duplicates, foreign parents, cycles and maxDepth, both columns
  written without model hooks
- pact.AdminSingleton: GET {controller}/singleton (first or create, form
  scope checked), form schema singleton, list/create/bulk/delete 404,
  no config_list.yaml needed
- swag, inventories, token classes, CSRF walk, conformance cases, backend
  lang reorder.stale and load_failed, reorder and singleton smoke tests, docs
This commit is contained in:
2026-10-12 15:35:43 +02:00
parent 46835fd064
commit 23f33c3911
31 changed files with 1905 additions and 15 deletions

View File

@@ -4,4 +4,4 @@ title: Links
recordUrl: acme/companions/links/update/:id
recordsPerPage: 20
toolbar:
buttons: [create]
buttons: [create, reorder]

View File

@@ -0,0 +1,10 @@
title: Reorder links
nameFrom: title
modelClass: Link
parentColumn: parent_id
sortColumn: sort_order
maxDepth: 3
partition:
column: group_id
relation: group
label: Group

View File

@@ -0,0 +1,4 @@
name: Site profile
form: ~/plugins/acme/companions/models/profile/fields.yaml
modelClass: Profile
defaultRedirect: acme/companions/profiles

View File

@@ -3,6 +3,11 @@ fields:
label: Title
type: text
required: true
group:
label: Group
type: relation
nameFrom: title
emptyOption: backend::lang.form.none
type:
label: Type
type: dropdown

View File

@@ -0,0 +1,4 @@
fields:
title:
label: Title
type: text