feat(products): submenu de Subgrupos aninhado dentro de Grupos

Mesma lógica do submenu "Produtos" já existente: "Grupos" agora expande
seu próprio submenu com "Subgrupos" (AppShell ganha suporte a um
segundo nível de accordion aninhado). Nova tela lista todos os
subgrupos de todos os grupos, com coluna Grupo e criação via dropdown
de grupo explícito — complementa (não substitui) o painel já existente
dentro da tela de um grupo específico.

listProductSubgroups passa a resolver group_name via JOIN.

Suíte: 95/95. pnpm turbo run typecheck build: 28/28 (core-web,
reseller-web e subscriber-web confirmados sem regressão no AppShell
compartilhado).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-18 08:52:19 -03:00
parent f38f2407ff
commit 96200dc2ba
9 changed files with 200 additions and 20 deletions

View File

@@ -130,6 +130,14 @@ describe("product catalogs — types/groups/subgroups/brands/units", () => {
.expect(200);
expect(list.body).toHaveLength(1);
expect(list.body[0].id).toBe(subgroup.body.id);
expect(list.body[0].group_name).toBe(group.body.name);
const unscoped = await agent(app)
.get("/api/v1/products/subgroups")
.set(...bearer(admin.accessToken))
.expect(200);
const found = unscoped.body.find((s: { id: string }) => s.id === subgroup.body.id);
expect(found?.group_name).toBe(group.body.name);
const renamed = `${subgroupName} Renomeado`;
const updated = await agent(app)