@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 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
- ### Exemplo: `catalog_product`
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` e `content`.
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
+ ```