feat(brand): add brand sort order and drag-to-reorder

Add a sort_order column to brands with a migration, expose a
PUT /api/tenant/brands/order reorder endpoint, and wire the
admin-web BrandsView with drag-and-drop reordering plus i18n.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-08 21:48:20 +08:00
parent fbc69c01b0
commit 71233b6715
16 changed files with 608 additions and 31 deletions
@@ -1,18 +1,18 @@
-- name: ListBrands :many
SELECT id, tenant_id, name, description, status, created_at, updated_at
SELECT id, tenant_id, name, description, status, sort_order, created_at, updated_at
FROM brands
WHERE tenant_id = sqlc.arg(tenant_id) AND deleted_at IS NULL
ORDER BY created_at DESC;
ORDER BY sort_order ASC, created_at DESC, id DESC;
-- name: GetBrandByID :one
SELECT id, tenant_id, name, description, status, created_at, updated_at
SELECT id, tenant_id, name, description, status, sort_order, created_at, updated_at
FROM brands
WHERE id = sqlc.arg(id) AND tenant_id = sqlc.arg(tenant_id) AND deleted_at IS NULL;
-- name: CreateBrand :one
INSERT INTO brands (tenant_id, name, description, status)
VALUES (sqlc.arg(tenant_id), sqlc.arg(name), sqlc.arg(description), 'active')
RETURNING id, created_at;
INSERT INTO brands (tenant_id, name, description, status, sort_order)
VALUES (sqlc.arg(tenant_id), sqlc.arg(name), sqlc.arg(description), 'active', sqlc.arg(sort_order))
RETURNING id, sort_order, created_at;
-- name: UpdateBrand :exec
UPDATE brands SET name = sqlc.arg(name), description = sqlc.arg(description), updated_at = NOW()