@hed-hog/catalog 0.0.278 → 0.0.285
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.
- package/README.md +118 -8
- package/hedhog/frontend/app/[resource]/page.tsx.ejs +648 -684
- package/hedhog/frontend/app/_components/catalog-resource-form-sheet.tsx.ejs +964 -0
- package/hedhog/frontend/app/_lib/catalog-resources.tsx.ejs +1154 -569
- package/hedhog/frontend/app/dashboard/page.tsx.ejs +562 -566
- package/hedhog/frontend/app/page.tsx.ejs +5 -5
- package/hedhog/frontend/messages/en.json +296 -293
- package/hedhog/frontend/messages/pt.json +296 -293
- package/package.json +7 -7
- package/hedhog/frontend/app/_components/catalog-nav.tsx.ejs +0 -85
package/README.md
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
```markdown
|
|
1
2
|
# @hed-hog/catalog
|
|
2
3
|
|
|
3
4
|
## 1. Visão geral do módulo
|
|
@@ -153,7 +154,7 @@ O módulo `@hed-hog/catalog` é responsável pela gestão centralizada dos recur
|
|
|
153
154
|
- **Request Body:**
|
|
154
155
|
- Campos aceitos são somente os definidos na configuração do recurso (`catalogResourceConfig`), ignorando campos extras.
|
|
155
156
|
- 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
|
+
- Valores numéricos podem ser enviados como strings numéricas e serão convertidos automaticamente.
|
|
157
158
|
- **Response:**
|
|
158
159
|
- Objetos JSON com os campos do recurso conforme tabelas do banco.
|
|
159
160
|
- Listagens paginadas seguem o padrão do serviço de paginação do HedHog.
|
|
@@ -166,27 +167,134 @@ O módulo `@hed-hog/catalog` é responsável pela gestão centralizada dos recur
|
|
|
166
167
|
|
|
167
168
|
## 7. Banco de dados (tabelas YAML)
|
|
168
169
|
|
|
169
|
-
###
|
|
170
|
+
### catalog_product
|
|
170
171
|
|
|
171
172
|
- **Finalidade:** Armazena os produtos do catálogo.
|
|
172
173
|
- **Colunas principais:**
|
|
173
174
|
- `id` (PK)
|
|
174
175
|
- `brand_id` (FK para `catalog_brand`, nullable)
|
|
175
176
|
- `category_id` (FK para `category`)
|
|
177
|
+
- `primary_content_id` (FK para `content`, nullable)
|
|
176
178
|
- `slug` (varchar 255, único)
|
|
177
179
|
- `name` (varchar 255)
|
|
178
180
|
- `short_description` (varchar 500, nullable)
|
|
179
181
|
- `description` (text, nullable)
|
|
182
|
+
- `model_name` (varchar 255, nullable)
|
|
183
|
+
- `sku` (varchar 120, nullable)
|
|
184
|
+
- `gtin` (varchar 120, nullable)
|
|
180
185
|
- `status` (enum: `draft`, `published`, `archived`, default `draft`)
|
|
181
186
|
- `comparison_status` (enum: `draft`, `ready`, `disabled`, default `draft`)
|
|
187
|
+
- `release_date` (datetime, nullable)
|
|
188
|
+
- `spec_snapshot_json` (json, nullable)
|
|
189
|
+
- `comparison_snapshot_json` (json, nullable)
|
|
182
190
|
- `is_active` (boolean, default `true`)
|
|
183
191
|
- `created_at`, `updated_at` (timestamps)
|
|
184
192
|
- **Defaults:** Conforme descrito acima.
|
|
185
|
-
- **Nulabilidade:** Campos como `brand_id`, `short_description`, `description` são opcionais.
|
|
186
|
-
- **Integridade:** FK para `catalog_brand`, `category
|
|
193
|
+
- **Nulabilidade:** Campos como `brand_id`, `primary_content_id`, `short_description`, `description`, `model_name`, `sku`, `gtin`, `release_date`, `spec_snapshot_json`, `comparison_snapshot_json` são opcionais.
|
|
194
|
+
- **Integridade:** FK para `catalog_brand`, `category`, `content`.
|
|
187
195
|
- **Índices:**
|
|
188
196
|
- Único em `slug`
|
|
189
|
-
- Índices em `category_id` + `status`, `brand_id` + `status`, `is_active`
|
|
197
|
+
- Índices em `category_id` + `status`, `brand_id` + `status`, `primary_content_id`, `is_active`
|
|
198
|
+
|
|
199
|
+
---
|
|
200
|
+
|
|
201
|
+
### catalog_product_image
|
|
202
|
+
|
|
203
|
+
- **Finalidade:** Armazena imagens associadas a produtos.
|
|
204
|
+
- **Colunas principais:**
|
|
205
|
+
- `id` (PK)
|
|
206
|
+
- `product_id` (FK para `catalog_product`)
|
|
207
|
+
- `file_id` (FK para `file`)
|
|
208
|
+
- `role` (enum: `primary`, `gallery`, `thumbnail`, `lifestyle`, `technical`, default `gallery`)
|
|
209
|
+
- `sort_order` (int, default 0)
|
|
210
|
+
- `is_primary` (boolean, default false)
|
|
211
|
+
- `alt_text` (varchar 255, nullable)
|
|
212
|
+
- `created_at`, `updated_at` (timestamps)
|
|
213
|
+
- **Defaults:** Conforme descrito acima.
|
|
214
|
+
- **Nulabilidade:** `alt_text` é opcional.
|
|
215
|
+
- **Integridade:** FK para `catalog_product` e `file`.
|
|
216
|
+
- **Índices:**
|
|
217
|
+
- Índices em `product_id` + `sort_order`, `product_id` + `is_primary`, `file_id`
|
|
218
|
+
|
|
219
|
+
---
|
|
220
|
+
|
|
221
|
+
### catalog_brand
|
|
222
|
+
|
|
223
|
+
- **Finalidade:** Armazena marcas do catálogo.
|
|
224
|
+
- **Colunas principais:**
|
|
225
|
+
- `id` (PK)
|
|
226
|
+
- `slug` (varchar 255, único)
|
|
227
|
+
- `name` (varchar 255)
|
|
228
|
+
- `normalized_name` (varchar 255)
|
|
229
|
+
- `logo_file_id` (FK para `file`, nullable)
|
|
230
|
+
- `status` (enum: `active`, `inactive`, default `active`)
|
|
231
|
+
- `website_url` (varchar 500, nullable)
|
|
232
|
+
- `created_at`, `updated_at` (timestamps)
|
|
233
|
+
- **Defaults:** Conforme descrito acima.
|
|
234
|
+
- **Nulabilidade:** `logo_file_id` e `website_url` são opcionais.
|
|
235
|
+
- **Integridade:** FK para `file`.
|
|
236
|
+
- **Índices:**
|
|
237
|
+
- Único em `slug`
|
|
238
|
+
- Índices em `normalized_name`, `logo_file_id`, `status`
|
|
239
|
+
|
|
240
|
+
---
|
|
241
|
+
|
|
242
|
+
### catalog_offer
|
|
243
|
+
|
|
244
|
+
- **Finalidade:** Armazena ofertas vinculadas a produtos e comerciantes.
|
|
245
|
+
- **Colunas principais:**
|
|
246
|
+
- `id` (PK)
|
|
247
|
+
- `product_id` (FK para `catalog_product`)
|
|
248
|
+
- `merchant_id` (FK para `catalog_merchant`)
|
|
249
|
+
- `affiliate_program_id` (FK para `catalog_affiliate_program`, nullable)
|
|
250
|
+
- `site_id` (FK para `catalog_site`, nullable)
|
|
251
|
+
- `external_offer_id` (varchar 255)
|
|
252
|
+
- `title` (varchar 255)
|
|
253
|
+
- `price_amount` (decimal 14,2)
|
|
254
|
+
- `price_currency` (varchar 3)
|
|
255
|
+
- `original_price_amount` (decimal 14,2, nullable)
|
|
256
|
+
- `installment_json` (json, nullable)
|
|
257
|
+
- `availability_status` (enum: `in_stock`, `out_of_stock`, `pre_order`, `unknown`, default `unknown`)
|
|
258
|
+
- `affiliate_url` (varchar 500, nullable)
|
|
259
|
+
- `deep_link_url` (varchar 500, nullable)
|
|
260
|
+
- `priority_score` (int, default 0)
|
|
261
|
+
- `is_featured` (boolean, default false)
|
|
262
|
+
- `valid_from` (datetime, nullable)
|
|
263
|
+
- `valid_until` (datetime, nullable)
|
|
264
|
+
- `last_seen_at` (datetime, nullable)
|
|
265
|
+
- `created_at`, `updated_at` (timestamps)
|
|
266
|
+
- **Defaults:** Conforme descrito acima.
|
|
267
|
+
- **Nulabilidade:** Campos como `affiliate_program_id`, `site_id`, `original_price_amount`, `installment_json`, `affiliate_url`, `deep_link_url`, `valid_from`, `valid_until`, `last_seen_at` são opcionais.
|
|
268
|
+
- **Integridade:** FK para `catalog_product`, `catalog_merchant`, `catalog_affiliate_program`, `catalog_site`.
|
|
269
|
+
- **Índices:**
|
|
270
|
+
- Único em `product_id`, `merchant_id`, `external_offer_id`
|
|
271
|
+
- Índices em `product_id`, `availability_status`, `price_amount`
|
|
272
|
+
- Índices em `site_id`, `is_featured`
|
|
273
|
+
|
|
274
|
+
---
|
|
275
|
+
|
|
276
|
+
### catalog_affiliate_program
|
|
277
|
+
|
|
278
|
+
- **Finalidade:** Armazena programas de afiliados vinculados a comerciantes.
|
|
279
|
+
- **Colunas principais:**
|
|
280
|
+
- `id` (PK)
|
|
281
|
+
- `merchant_id` (FK para `catalog_merchant`, nullable)
|
|
282
|
+
- `slug` (varchar 255, único)
|
|
283
|
+
- `name` (varchar 255)
|
|
284
|
+
- `network_type` (enum: `amazon`, `mercado_livre`, `aliexpress`, `kabum`, `direct`, `network`, default `direct`)
|
|
285
|
+
- `tracking_template` (text, nullable)
|
|
286
|
+
- `commission_type` (enum: `percentage`, `fixed`, default `percentage`)
|
|
287
|
+
- `default_commission_value` (decimal 8,2, default 0)
|
|
288
|
+
- `status` (enum: `active`, `inactive`, default `active`)
|
|
289
|
+
- `created_at`, `updated_at` (timestamps)
|
|
290
|
+
- **Defaults:** Conforme descrito acima.
|
|
291
|
+
- **Nulabilidade:** `merchant_id` e `tracking_template` são opcionais.
|
|
292
|
+
- **Integridade:** FK para `catalog_merchant`.
|
|
293
|
+
- **Índices:**
|
|
294
|
+
- Único em `slug`
|
|
295
|
+
- Índices em `merchant_id`, `status`
|
|
296
|
+
|
|
297
|
+
---
|
|
190
298
|
|
|
191
299
|
*(Outras tabelas seguem padrão similar, com chaves primárias, estrangeiras, enums e índices conforme arquivos YAML fornecidos.)*
|
|
192
300
|
|
|
@@ -194,11 +302,12 @@ O módulo `@hed-hog/catalog` é responsável pela gestão centralizada dos recur
|
|
|
194
302
|
|
|
195
303
|
- O módulo suporta múltiplos recursos configurados dinamicamente via `catalogResourceMap`.
|
|
196
304
|
- 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.
|
|
305
|
+
- Campos booleanos e numéricos são normalizados automaticamente no payload (ex: strings `"true"`, `"false"` e números em string são convertidos).
|
|
306
|
+
- Exclusão e atualização verificam existência prévia do registro, retornando erro 404 se não encontrado.
|
|
199
307
|
- Estatísticas incluem contagem total e contagem por status ativo quando aplicável.
|
|
200
308
|
- 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
|
|
309
|
+
- O sistema suporta múltiplos idiomas via parâmetro `locale` (header `Accept-Language`).
|
|
310
|
+
- Autorização é restrita a usuários com papéis `admin` e `admin-catalog`.
|
|
202
311
|
|
|
203
312
|
## 9. Guia rápido de uso (exemplos)
|
|
204
313
|
|
|
@@ -267,3 +376,4 @@ Accept-Language: pt-BR
|
|
|
267
376
|
---
|
|
268
377
|
|
|
269
378
|
Este módulo deve ser utilizado por administradores do catálogo para gerenciar os dados essenciais do sistema de forma segura e consistente.
|
|
379
|
+
```
|