@hed-hog/catalog 0.0.276 → 0.0.278

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/README.md +269 -0
  2. package/package.json +6 -6
package/README.md ADDED
@@ -0,0 +1,269 @@
1
+ # @hed-hog/catalog
2
+
3
+ ## 1. Visão geral do módulo
4
+
5
+ O módulo `@hed-hog/catalog` é responsável pela gestão centralizada dos recursos do catálogo, incluindo produtos, ofertas, marcas, atributos, comparações, imagens e regras relacionadas. Ele oferece uma API REST para operações CRUD, listagem paginada, estatísticas e manipulação de imagens de produtos, integrando-se com outros módulos do monorepo HedHog.
6
+
7
+ ## 2. Escopo e responsabilidades
8
+
9
+ - Gerenciar recursos do catálogo como produtos, ofertas, marcas, atributos, comparações, imagens, entre outros.
10
+ - Fornecer endpoints para criação, leitura, atualização, exclusão e listagem paginada de recursos.
11
+ - Aplicar filtros e buscas sensíveis a campos configurados para cada recurso.
12
+ - Gerar estatísticas básicas dos recursos.
13
+ - Controlar imagens associadas a produtos.
14
+ - Garantir autenticação e autorização baseadas em papéis específicos.
15
+ - Integrar com serviços de paginação, localização e banco de dados Prisma.
16
+
17
+ ## 3. Endpoints
18
+
19
+ ### Listar imagens de um produto
20
+
21
+ - **Método:** GET
22
+ - **Path:** `/catalog/products/:id/images`
23
+ - **Autenticação:** Sim (roles: `admin`, `admin-catalog`)
24
+ - **Descrição:** Lista imagens associadas a um produto, com paginação e ordenação por `sort_order`.
25
+ - **Parâmetros:**
26
+ - `id` (path): ID numérico do produto
27
+ - Query params de paginação (ex: `page`, `limit`)
28
+ - Header `Accept-Language` para locale (ex: `pt-BR`)
29
+ - **Resposta:** Lista paginada de imagens do produto com campos conforme tabela `catalog_product_image`.
30
+ - **Erros:**
31
+ - 400 Bad Request: recurso não suportado
32
+ - 401 Unauthorized: acesso não autorizado
33
+
34
+ ---
35
+
36
+ ### Obter estatísticas de um recurso
37
+
38
+ - **Método:** GET
39
+ - **Path:** `/catalog/:resource/stats`
40
+ - **Autenticação:** Sim (roles: `admin`, `admin-catalog`)
41
+ - **Descrição:** Retorna estatísticas básicas do recurso, como total de registros e quantidade ativa (se aplicável).
42
+ - **Parâmetros:**
43
+ - `resource` (path): nome do recurso (ex: `product`, `brand`)
44
+ - Header `Accept-Language` para locale
45
+ - **Resposta:**
46
+ ```json
47
+ {
48
+ "total": number,
49
+ "active": number (opcional)
50
+ }
51
+ ```
52
+ - **Erros:**
53
+ - 400 Bad Request: recurso não suportado
54
+ - 401 Unauthorized
55
+
56
+ ---
57
+
58
+ ### Obter recurso por ID
59
+
60
+ - **Método:** GET
61
+ - **Path:** `/catalog/:resource/:id`
62
+ - **Autenticação:** Sim (roles: `admin`, `admin-catalog`)
63
+ - **Descrição:** Retorna um registro específico do recurso pelo ID.
64
+ - **Parâmetros:**
65
+ - `resource` (path): nome do recurso
66
+ - `id` (path): ID numérico do registro
67
+ - Header `Accept-Language` para locale
68
+ - **Resposta:** Objeto do recurso com campos conforme configuração.
69
+ - **Erros:**
70
+ - 400 Bad Request: recurso não suportado
71
+ - 404 Not Found: recurso não encontrado
72
+ - 401 Unauthorized
73
+
74
+ ---
75
+
76
+ ### Atualizar recurso por ID
77
+
78
+ - **Método:** PATCH
79
+ - **Path:** `/catalog/:resource/:id`
80
+ - **Autenticação:** Sim (roles: `admin`, `admin-catalog`)
81
+ - **Descrição:** Atualiza campos permitidos de um registro do recurso.
82
+ - **Parâmetros:**
83
+ - `resource` (path): nome do recurso
84
+ - `id` (path): ID do registro
85
+ - Body JSON: campos a atualizar (somente campos configurados para o recurso)
86
+ - Header `Accept-Language` para locale
87
+ - **Resposta:** Objeto atualizado do recurso.
88
+ - **Erros:**
89
+ - 400 Bad Request: recurso não suportado ou payload inválido
90
+ - 404 Not Found: recurso não encontrado
91
+ - 401 Unauthorized
92
+
93
+ ---
94
+
95
+ ### Deletar recurso por ID
96
+
97
+ - **Método:** DELETE
98
+ - **Path:** `/catalog/:resource/:id`
99
+ - **Autenticação:** Sim (roles: `admin`, `admin-catalog`)
100
+ - **Descrição:** Remove um registro do recurso pelo ID.
101
+ - **Parâmetros:**
102
+ - `resource` (path): nome do recurso
103
+ - `id` (path): ID do registro
104
+ - Header `Accept-Language` para locale
105
+ - **Resposta:** Objeto do recurso deletado.
106
+ - **Erros:**
107
+ - 400 Bad Request: recurso não suportado
108
+ - 404 Not Found: recurso não encontrado
109
+ - 401 Unauthorized
110
+
111
+ ---
112
+
113
+ ### Listar recursos com paginação e filtros
114
+
115
+ - **Método:** GET
116
+ - **Path:** `/catalog/:resource`
117
+ - **Autenticação:** Sim (roles: `admin`, `admin-catalog`)
118
+ - **Descrição:** Lista registros do recurso com paginação, ordenação e filtros configurados.
119
+ - **Parâmetros:**
120
+ - `resource` (path): nome do recurso
121
+ - Query params: filtros conforme campos configurados, paginação (`page`, `limit`)
122
+ - Header `Accept-Language` para locale
123
+ - **Resposta:** Lista paginada de registros do recurso.
124
+ - **Erros:**
125
+ - 400 Bad Request: recurso não suportado ou filtro inválido
126
+ - 401 Unauthorized
127
+
128
+ ---
129
+
130
+ ### Criar novo recurso
131
+
132
+ - **Método:** POST
133
+ - **Path:** `/catalog/:resource`
134
+ - **Autenticação:** Sim (roles: `admin`, `admin-catalog`)
135
+ - **Descrição:** Cria um novo registro do recurso com os campos permitidos.
136
+ - **Parâmetros:**
137
+ - `resource` (path): nome do recurso
138
+ - Body JSON: campos para criação (somente campos configurados para o recurso)
139
+ - Header `Accept-Language` para locale
140
+ - **Resposta:** Objeto criado do recurso.
141
+ - **Erros:**
142
+ - 400 Bad Request: recurso não suportado ou payload inválido
143
+ - 401 Unauthorized
144
+
145
+ ## 4. Regras de autenticação e autorização
146
+
147
+ - Todos os endpoints são protegidos e requerem autenticação.
148
+ - Apenas usuários com os papéis `admin` ou `admin-catalog` podem acessar os endpoints do módulo.
149
+ - A autorização é baseada em roles definidas no sistema, conforme arquivo `hedhog/data/role.yaml`.
150
+
151
+ ## 5. Estruturas de request/response
152
+
153
+ - **Request Body:**
154
+ - Campos aceitos são somente os definidos na configuração do recurso (`catalogResourceConfig`), ignorando campos extras.
155
+ - Valores booleanos podem ser enviados como strings `"true"` ou `"false"`.
156
+ - Valores numéricos podem ser enviados como strings numéricas e serão convertidos.
157
+ - **Response:**
158
+ - Objetos JSON com os campos do recurso conforme tabelas do banco.
159
+ - Listagens paginadas seguem o padrão do serviço de paginação do HedHog.
160
+
161
+ ## 6. Erros comuns
162
+
163
+ - **400 Bad Request:** Recurso não suportado, payload inválido ou filtro inválido.
164
+ - **401 Unauthorized:** Usuário não autenticado ou sem permissão.
165
+ - **404 Not Found:** Registro não encontrado para o ID informado.
166
+
167
+ ## 7. Banco de dados (tabelas YAML)
168
+
169
+ ### Exemplo: `catalog_product`
170
+
171
+ - **Finalidade:** Armazena os produtos do catálogo.
172
+ - **Colunas principais:**
173
+ - `id` (PK)
174
+ - `brand_id` (FK para `catalog_brand`, nullable)
175
+ - `category_id` (FK para `category`)
176
+ - `slug` (varchar 255, único)
177
+ - `name` (varchar 255)
178
+ - `short_description` (varchar 500, nullable)
179
+ - `description` (text, nullable)
180
+ - `status` (enum: `draft`, `published`, `archived`, default `draft`)
181
+ - `comparison_status` (enum: `draft`, `ready`, `disabled`, default `draft`)
182
+ - `is_active` (boolean, default `true`)
183
+ - `created_at`, `updated_at` (timestamps)
184
+ - **Defaults:** Conforme descrito acima.
185
+ - **Nulabilidade:** Campos como `brand_id`, `short_description`, `description` são opcionais.
186
+ - **Integridade:** FK para `catalog_brand`, `category` e `content`.
187
+ - **Índices:**
188
+ - Único em `slug`
189
+ - Índices em `category_id` + `status`, `brand_id` + `status`, `is_active`
190
+
191
+ *(Outras tabelas seguem padrão similar, com chaves primárias, estrangeiras, enums e índices conforme arquivos YAML fornecidos.)*
192
+
193
+ ## 8. Regras de negócio relevantes
194
+
195
+ - O módulo suporta múltiplos recursos configurados dinamicamente via `catalogResourceMap`.
196
+ - Campos de busca e filtro são configurados por recurso para permitir consultas eficientes.
197
+ - Campos booleanos e numéricos são normalizados automaticamente no payload.
198
+ - Exclusão e atualização verificam existência prévia do registro.
199
+ - Estatísticas incluem contagem total e contagem por status ativo quando aplicável.
200
+ - Imagens de produtos são ordenadas por `sort_order` e podem ter uma imagem primária.
201
+ - O sistema suporta múltiplos idiomas via parâmetro `locale`.
202
+
203
+ ## 9. Guia rápido de uso (exemplos)
204
+
205
+ ### Listar produtos com paginação e filtro por status
206
+
207
+ ```http
208
+ GET /catalog/product?page=1&limit=10&status=published
209
+ Authorization: Bearer <token>
210
+ Accept-Language: pt-BR
211
+ ```
212
+
213
+ ### Criar uma nova marca
214
+
215
+ ```http
216
+ POST /catalog/brand
217
+ Authorization: Bearer <token>
218
+ Content-Type: application/json
219
+ Accept-Language: pt-BR
220
+
221
+ {
222
+ "slug": "nova-marca",
223
+ "name": "Nova Marca",
224
+ "status": "active",
225
+ "website_url": "https://novamarca.com"
226
+ }
227
+ ```
228
+
229
+ ### Atualizar um produto
230
+
231
+ ```http
232
+ PATCH /catalog/product/123
233
+ Authorization: Bearer <token>
234
+ Content-Type: application/json
235
+ Accept-Language: pt-BR
236
+
237
+ {
238
+ "name": "Nome Atualizado",
239
+ "status": "published"
240
+ }
241
+ ```
242
+
243
+ ### Deletar uma oferta
244
+
245
+ ```http
246
+ DELETE /catalog/offer/456
247
+ Authorization: Bearer <token>
248
+ Accept-Language: pt-BR
249
+ ```
250
+
251
+ ### Obter estatísticas de ofertas
252
+
253
+ ```http
254
+ GET /catalog/offer/stats
255
+ Authorization: Bearer <token>
256
+ Accept-Language: pt-BR
257
+ ```
258
+
259
+ ### Listar imagens de um produto
260
+
261
+ ```http
262
+ GET /catalog/products/123/images?page=1&limit=5
263
+ Authorization: Bearer <token>
264
+ Accept-Language: pt-BR
265
+ ```
266
+
267
+ ---
268
+
269
+ Este módulo deve ser utilizado por administradores do catálogo para gerenciar os dados essenciais do sistema de forma segura e consistente.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hed-hog/catalog",
3
- "version": "0.0.276",
3
+ "version": "0.0.278",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "dependencies": {
@@ -9,14 +9,14 @@
9
9
  "@nestjs/core": "^11",
10
10
  "@nestjs/jwt": "^11",
11
11
  "@nestjs/mapped-types": "*",
12
+ "@hed-hog/api-pagination": "0.0.6",
12
13
  "@hed-hog/api-locale": "0.0.13",
14
+ "@hed-hog/core": "0.0.278",
13
15
  "@hed-hog/api": "0.0.4",
14
- "@hed-hog/core": "0.0.276",
15
- "@hed-hog/api-pagination": "0.0.6",
16
+ "@hed-hog/category": "0.0.278",
16
17
  "@hed-hog/api-prisma": "0.0.5",
17
- "@hed-hog/category": "0.0.276",
18
- "@hed-hog/content": "0.0.276",
19
- "@hed-hog/tag": "0.0.276"
18
+ "@hed-hog/content": "0.0.278",
19
+ "@hed-hog/tag": "0.0.278"
20
20
  },
21
21
  "exports": {
22
22
  ".": {