@hed-hog/catalog 0.0.295 → 0.0.296

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 (53) hide show
  1. package/README.md +409 -409
  2. package/dist/catalog.controller.d.ts +4 -4
  3. package/dist/catalog.service.d.ts +4 -4
  4. package/hedhog/data/catalog_attribute.yaml +202 -202
  5. package/hedhog/data/catalog_attribute_option.yaml +109 -109
  6. package/hedhog/data/catalog_category.yaml +47 -47
  7. package/hedhog/data/catalog_category_attribute.yaml +209 -209
  8. package/hedhog/data/menu.yaml +133 -133
  9. package/hedhog/data/role.yaml +7 -7
  10. package/hedhog/data/route.yaml +72 -72
  11. package/hedhog/frontend/app/[resource]/page.tsx.ejs +391 -391
  12. package/hedhog/frontend/app/_components/catalog-ai-form-assist-dialog.tsx.ejs +340 -340
  13. package/hedhog/frontend/app/_components/catalog-resource-form-sheet.tsx.ejs +907 -907
  14. package/hedhog/frontend/app/_lib/catalog-resources.tsx.ejs +929 -929
  15. package/hedhog/frontend/messages/en.json +389 -389
  16. package/hedhog/frontend/messages/pt.json +389 -389
  17. package/hedhog/table/catalog_affiliate_program.yaml +41 -41
  18. package/hedhog/table/catalog_attribute.yaml +67 -67
  19. package/hedhog/table/catalog_attribute_group.yaml +18 -18
  20. package/hedhog/table/catalog_attribute_option.yaml +40 -40
  21. package/hedhog/table/catalog_brand.yaml +34 -34
  22. package/hedhog/table/catalog_category.yaml +40 -40
  23. package/hedhog/table/catalog_category_attribute.yaml +37 -37
  24. package/hedhog/table/catalog_click_event.yaml +50 -50
  25. package/hedhog/table/catalog_comparison.yaml +19 -19
  26. package/hedhog/table/catalog_comparison_highlight.yaml +39 -39
  27. package/hedhog/table/catalog_comparison_item.yaml +30 -30
  28. package/hedhog/table/catalog_content_relation.yaml +42 -42
  29. package/hedhog/table/catalog_import_run.yaml +33 -33
  30. package/hedhog/table/catalog_import_source.yaml +24 -24
  31. package/hedhog/table/catalog_merchant.yaml +29 -29
  32. package/hedhog/table/catalog_offer.yaml +83 -83
  33. package/hedhog/table/catalog_price_history.yaml +34 -34
  34. package/hedhog/table/catalog_product.yaml +30 -30
  35. package/hedhog/table/catalog_product_attribute_value.yaml +44 -44
  36. package/hedhog/table/catalog_product_category.yaml +13 -13
  37. package/hedhog/table/catalog_product_image.yaml +34 -34
  38. package/hedhog/table/catalog_product_score.yaml +38 -38
  39. package/hedhog/table/catalog_product_site.yaml +47 -47
  40. package/hedhog/table/catalog_product_tag.yaml +19 -19
  41. package/hedhog/table/catalog_score_criterion.yaml +42 -42
  42. package/hedhog/table/catalog_seo_page_rule.yaml +10 -10
  43. package/hedhog/table/catalog_similarity_rule.yaml +33 -33
  44. package/hedhog/table/catalog_site.yaml +21 -21
  45. package/hedhog/table/catalog_site_category.yaml +12 -12
  46. package/package.json +10 -10
  47. package/src/catalog-resource.config.ts +132 -132
  48. package/src/catalog.controller.ts +91 -91
  49. package/src/catalog.module.ts +16 -16
  50. package/src/catalog.service.ts +3 -3
  51. package/src/index.ts +1 -1
  52. package/src/language/en.json +4 -4
  53. package/src/language/pt.json +4 -4
@@ -1,18 +1,18 @@
1
- columns:
2
- - type: pk
3
- - name: brand_id
1
+ columns:
2
+ - type: pk
3
+ - name: brand_id
4
4
  type: fk
5
5
  isNullable: true
6
6
  references:
7
7
  table: catalog_brand
8
8
  column: id
9
9
  onDelete: SET NULL
10
- - name: catalog_category_id
11
- type: fk
12
- references:
13
- table: catalog_category
14
- column: id
15
- onDelete: RESTRICT
10
+ - name: catalog_category_id
11
+ type: fk
12
+ references:
13
+ table: catalog_category
14
+ column: id
15
+ onDelete: RESTRICT
16
16
  - name: primary_content_id
17
17
  type: fk
18
18
  isNullable: true
@@ -53,26 +53,26 @@ columns:
53
53
  type: enum
54
54
  values: [draft, ready, disabled]
55
55
  default: draft
56
- - name: release_date
57
- type: datetime
58
- isNullable: true
59
- # Secondary cache/snapshot used for denormalized reads and legacy payload compatibility.
60
- - name: spec_snapshot_json
61
- type: json
62
- isNullable: true
63
- # Secondary cache/snapshot used for denormalized comparison payloads.
64
- - name: comparison_snapshot_json
65
- type: json
66
- isNullable: true
67
- - name: is_active
68
- type: boolean
69
- default: true
56
+ - name: release_date
57
+ type: datetime
58
+ isNullable: true
59
+ # Secondary cache/snapshot used for denormalized reads and legacy payload compatibility.
60
+ - name: spec_snapshot_json
61
+ type: json
62
+ isNullable: true
63
+ # Secondary cache/snapshot used for denormalized comparison payloads.
64
+ - name: comparison_snapshot_json
65
+ type: json
66
+ isNullable: true
67
+ - name: is_active
68
+ type: boolean
69
+ default: true
70
70
  - type: created_at
71
71
  - type: updated_at
72
- indices:
73
- - columns: [slug]
74
- isUnique: true
75
- - columns: [catalog_category_id, status]
76
- - columns: [brand_id, status]
77
- - columns: [primary_content_id]
78
- - columns: [is_active]
72
+ indices:
73
+ - columns: [slug]
74
+ isUnique: true
75
+ - columns: [catalog_category_id, status]
76
+ - columns: [brand_id, status]
77
+ - columns: [primary_content_id]
78
+ - columns: [is_active]
@@ -1,50 +1,50 @@
1
- columns:
2
- - type: pk
3
- - name: product_id
1
+ columns:
2
+ - type: pk
3
+ - name: product_id
4
4
  type: fk
5
5
  references:
6
6
  table: catalog_product
7
7
  column: id
8
8
  onDelete: CASCADE
9
- - name: attribute_id
10
- type: fk
11
- references:
12
- table: catalog_attribute
13
- column: id
14
- onDelete: CASCADE
15
- - name: attribute_option_id
16
- type: fk
17
- isNullable: true
18
- references:
19
- table: catalog_attribute_option
20
- column: id
21
- onDelete: SET NULL
22
- - name: value_text
23
- type: text
24
- isNullable: true
9
+ - name: attribute_id
10
+ type: fk
11
+ references:
12
+ table: catalog_attribute
13
+ column: id
14
+ onDelete: CASCADE
15
+ - name: attribute_option_id
16
+ type: fk
17
+ isNullable: true
18
+ references:
19
+ table: catalog_attribute_option
20
+ column: id
21
+ onDelete: SET NULL
22
+ - name: value_text
23
+ type: text
24
+ isNullable: true
25
25
  - name: value_number
26
26
  type: decimal
27
27
  precision: 14
28
28
  scale: 4
29
29
  isNullable: true
30
- - name: value_boolean
31
- type: boolean
32
- isNullable: true
33
- - name: raw_value
34
- type: text
35
- isNullable: true
36
- - name: value_unit
37
- type: varchar
38
- length: 63
39
- isNullable: true
40
- - name: normalized_value
41
- type: varchar
42
- length: 255
43
- isNullable: true
44
- - name: normalized_text
45
- type: varchar
46
- length: 255
47
- isNullable: true
30
+ - name: value_boolean
31
+ type: boolean
32
+ isNullable: true
33
+ - name: raw_value
34
+ type: text
35
+ isNullable: true
36
+ - name: value_unit
37
+ type: varchar
38
+ length: 63
39
+ isNullable: true
40
+ - name: normalized_value
41
+ type: varchar
42
+ length: 255
43
+ isNullable: true
44
+ - name: normalized_text
45
+ type: varchar
46
+ length: 255
47
+ isNullable: true
48
48
  - name: normalized_number
49
49
  type: decimal
50
50
  precision: 14
@@ -64,10 +64,10 @@ columns:
64
64
  default: false
65
65
  - type: created_at
66
66
  - type: updated_at
67
- indices:
68
- - columns: [product_id, attribute_id]
69
- isUnique: true
70
- - columns: [attribute_id, attribute_option_id]
71
- - columns: [attribute_id, normalized_value]
72
- - columns: [attribute_id, normalized_number]
73
- - columns: [attribute_id, normalized_text]
67
+ indices:
68
+ - columns: [product_id, attribute_id]
69
+ isUnique: true
70
+ - columns: [attribute_id, attribute_option_id]
71
+ - columns: [attribute_id, normalized_value]
72
+ - columns: [attribute_id, normalized_number]
73
+ - columns: [attribute_id, normalized_text]
@@ -1,17 +1,17 @@
1
- columns:
2
- - type: pk
3
- - name: product_id
1
+ columns:
2
+ - type: pk
3
+ - name: product_id
4
4
  type: fk
5
5
  references:
6
6
  table: catalog_product
7
7
  column: id
8
8
  onDelete: CASCADE
9
- - name: catalog_category_id
10
- type: fk
11
- references:
12
- table: catalog_category
13
- column: id
14
- onDelete: CASCADE
9
+ - name: catalog_category_id
10
+ type: fk
11
+ references:
12
+ table: catalog_category
13
+ column: id
14
+ onDelete: CASCADE
15
15
  - name: is_primary
16
16
  type: boolean
17
17
  default: false
@@ -20,7 +20,7 @@ columns:
20
20
  default: 0
21
21
  - type: created_at
22
22
  - type: updated_at
23
- indices:
24
- - columns: [product_id, catalog_category_id]
25
- isUnique: true
26
- - columns: [product_id, is_primary]
23
+ indices:
24
+ - columns: [product_id, catalog_category_id]
25
+ isUnique: true
26
+ - columns: [product_id, is_primary]
@@ -1,34 +1,34 @@
1
- columns:
2
- - type: pk
3
- - name: product_id
4
- type: fk
5
- references:
6
- table: catalog_product
7
- column: id
8
- onDelete: CASCADE
9
- - name: file_id
10
- type: fk
11
- references:
12
- table: file
13
- column: id
14
- onDelete: CASCADE
15
- - name: role
16
- type: enum
17
- values: [primary, gallery, thumbnail, lifestyle, technical]
18
- default: gallery
19
- - name: sort_order
20
- type: int
21
- default: 0
22
- - name: is_primary
23
- type: boolean
24
- default: false
25
- - name: alt_text
26
- type: varchar
27
- length: 255
28
- isNullable: true
29
- - type: created_at
30
- - type: updated_at
31
- indices:
32
- - columns: [product_id, sort_order]
33
- - columns: [product_id, is_primary]
34
- - columns: [file_id]
1
+ columns:
2
+ - type: pk
3
+ - name: product_id
4
+ type: fk
5
+ references:
6
+ table: catalog_product
7
+ column: id
8
+ onDelete: CASCADE
9
+ - name: file_id
10
+ type: fk
11
+ references:
12
+ table: file
13
+ column: id
14
+ onDelete: CASCADE
15
+ - name: role
16
+ type: enum
17
+ values: [primary, gallery, thumbnail, lifestyle, technical]
18
+ default: gallery
19
+ - name: sort_order
20
+ type: int
21
+ default: 0
22
+ - name: is_primary
23
+ type: boolean
24
+ default: false
25
+ - name: alt_text
26
+ type: varchar
27
+ length: 255
28
+ isNullable: true
29
+ - type: created_at
30
+ - type: updated_at
31
+ indices:
32
+ - columns: [product_id, sort_order]
33
+ - columns: [product_id, is_primary]
34
+ - columns: [file_id]
@@ -1,38 +1,38 @@
1
- columns:
2
- - type: pk
3
- - name: product_id
4
- type: fk
5
- references:
6
- table: catalog_product
7
- column: id
8
- onDelete: CASCADE
9
- - name: criterion_id
10
- type: fk
11
- references:
12
- table: catalog_score_criterion
13
- column: id
14
- onDelete: CASCADE
15
- - name: score_value
16
- type: decimal
17
- precision: 5
18
- scale: 2
19
- - name: score_label
20
- type: varchar
21
- length: 255
22
- isNullable: true
23
- - name: summary
24
- type: text
25
- isNullable: true
26
- - name: calculation_source
27
- type: varchar
28
- length: 255
29
- isNullable: true
30
- - name: is_manual_override
31
- type: boolean
32
- default: false
33
- - type: created_at
34
- - type: updated_at
35
- indices:
36
- - columns: [product_id, criterion_id]
37
- isUnique: true
38
- - columns: [criterion_id, score_value]
1
+ columns:
2
+ - type: pk
3
+ - name: product_id
4
+ type: fk
5
+ references:
6
+ table: catalog_product
7
+ column: id
8
+ onDelete: CASCADE
9
+ - name: criterion_id
10
+ type: fk
11
+ references:
12
+ table: catalog_score_criterion
13
+ column: id
14
+ onDelete: CASCADE
15
+ - name: score_value
16
+ type: decimal
17
+ precision: 5
18
+ scale: 2
19
+ - name: score_label
20
+ type: varchar
21
+ length: 255
22
+ isNullable: true
23
+ - name: summary
24
+ type: text
25
+ isNullable: true
26
+ - name: calculation_source
27
+ type: varchar
28
+ length: 255
29
+ isNullable: true
30
+ - name: is_manual_override
31
+ type: boolean
32
+ default: false
33
+ - type: created_at
34
+ - type: updated_at
35
+ indices:
36
+ - columns: [product_id, criterion_id]
37
+ isUnique: true
38
+ - columns: [criterion_id, score_value]
@@ -1,47 +1,47 @@
1
- columns:
2
- - type: pk
3
- - name: product_id
4
- type: fk
5
- references:
6
- table: catalog_product
7
- column: id
8
- onDelete: CASCADE
9
- - name: site_id
10
- type: fk
11
- references:
12
- table: catalog_site
13
- column: id
14
- onDelete: CASCADE
15
- - name: publication_status
16
- type: enum
17
- values: [draft, published, hidden]
18
- default: draft
19
- - name: canonical_slug
20
- type: varchar
21
- length: 255
22
- - name: is_featured
23
- type: boolean
24
- default: false
25
- - name: visibility_score
26
- type: int
27
- default: 0
28
- - name: override_brand_name
29
- type: varchar
30
- length: 255
31
- isNullable: true
32
- - name: seo_title
33
- type: varchar
34
- length: 255
35
- isNullable: true
36
- - name: seo_description
37
- type: varchar
38
- length: 500
39
- isNullable: true
40
- - type: created_at
41
- - type: updated_at
42
- indices:
43
- - columns: [site_id, product_id]
44
- isUnique: true
45
- - columns: [site_id, canonical_slug]
46
- isUnique: true
47
- - columns: [site_id, publication_status]
1
+ columns:
2
+ - type: pk
3
+ - name: product_id
4
+ type: fk
5
+ references:
6
+ table: catalog_product
7
+ column: id
8
+ onDelete: CASCADE
9
+ - name: site_id
10
+ type: fk
11
+ references:
12
+ table: catalog_site
13
+ column: id
14
+ onDelete: CASCADE
15
+ - name: publication_status
16
+ type: enum
17
+ values: [draft, published, hidden]
18
+ default: draft
19
+ - name: canonical_slug
20
+ type: varchar
21
+ length: 255
22
+ - name: is_featured
23
+ type: boolean
24
+ default: false
25
+ - name: visibility_score
26
+ type: int
27
+ default: 0
28
+ - name: override_brand_name
29
+ type: varchar
30
+ length: 255
31
+ isNullable: true
32
+ - name: seo_title
33
+ type: varchar
34
+ length: 255
35
+ isNullable: true
36
+ - name: seo_description
37
+ type: varchar
38
+ length: 500
39
+ isNullable: true
40
+ - type: created_at
41
+ - type: updated_at
42
+ indices:
43
+ - columns: [site_id, product_id]
44
+ isUnique: true
45
+ - columns: [site_id, canonical_slug]
46
+ isUnique: true
47
+ - columns: [site_id, publication_status]
@@ -1,19 +1,19 @@
1
- columns:
2
- - type: pk
3
- - name: product_id
4
- type: fk
5
- references:
6
- table: catalog_product
7
- column: id
8
- onDelete: CASCADE
9
- - name: tag_id
10
- type: fk
11
- references:
12
- table: tag
13
- column: id
14
- onDelete: CASCADE
15
- - type: created_at
16
- - type: updated_at
17
- indices:
18
- - columns: [product_id, tag_id]
19
- isUnique: true
1
+ columns:
2
+ - type: pk
3
+ - name: product_id
4
+ type: fk
5
+ references:
6
+ table: catalog_product
7
+ column: id
8
+ onDelete: CASCADE
9
+ - name: tag_id
10
+ type: fk
11
+ references:
12
+ table: tag
13
+ column: id
14
+ onDelete: CASCADE
15
+ - type: created_at
16
+ - type: updated_at
17
+ indices:
18
+ - columns: [product_id, tag_id]
19
+ isUnique: true
@@ -1,54 +1,54 @@
1
- columns:
2
- - type: pk
3
- - name: catalog_category_id
4
- type: fk
5
- references:
6
- table: catalog_category
7
- column: id
8
- onDelete: CASCADE
9
- - name: attribute_id
10
- type: fk
11
- isNullable: true
12
- references:
13
- table: catalog_attribute
14
- column: id
15
- onDelete: SET NULL
16
- - name: target_option_id
17
- type: fk
18
- isNullable: true
19
- references:
20
- table: catalog_attribute_option
21
- column: id
22
- onDelete: SET NULL
23
- - name: slug
24
- type: varchar
25
- length: 255
1
+ columns:
2
+ - type: pk
3
+ - name: catalog_category_id
4
+ type: fk
5
+ references:
6
+ table: catalog_category
7
+ column: id
8
+ onDelete: CASCADE
9
+ - name: attribute_id
10
+ type: fk
11
+ isNullable: true
12
+ references:
13
+ table: catalog_attribute
14
+ column: id
15
+ onDelete: SET NULL
16
+ - name: target_option_id
17
+ type: fk
18
+ isNullable: true
19
+ references:
20
+ table: catalog_attribute_option
21
+ column: id
22
+ onDelete: SET NULL
23
+ - name: slug
24
+ type: varchar
25
+ length: 255
26
26
  - name: name
27
27
  type: varchar
28
28
  length: 255
29
29
  - name: weight
30
30
  type: int
31
31
  default: 1
32
- - name: score_type
33
- type: enum
34
- values: [manual, attribute_value, option_match]
35
- default: manual
36
- - name: max_score
37
- type: decimal
38
- precision: 5
39
- scale: 2
40
- default: 10
41
- - name: display_order
42
- type: int
43
- default: 0
32
+ - name: score_type
33
+ type: enum
34
+ values: [manual, attribute_value, option_match]
35
+ default: manual
36
+ - name: max_score
37
+ type: decimal
38
+ precision: 5
39
+ scale: 2
40
+ default: 10
41
+ - name: display_order
42
+ type: int
43
+ default: 0
44
44
  - name: status
45
45
  type: enum
46
46
  values: [active, inactive]
47
47
  default: active
48
48
  - type: created_at
49
49
  - type: updated_at
50
- indices:
51
- - columns: [catalog_category_id, slug]
52
- isUnique: true
53
- - columns: [catalog_category_id, status]
54
- - columns: [attribute_id, status]
50
+ indices:
51
+ - columns: [catalog_category_id, slug]
52
+ isUnique: true
53
+ - columns: [catalog_category_id, status]
54
+ - columns: [attribute_id, status]
@@ -1,18 +1,18 @@
1
- columns:
2
- - type: pk
3
- - name: site_id
1
+ columns:
2
+ - type: pk
3
+ - name: site_id
4
4
  type: fk
5
5
  references:
6
6
  table: catalog_site
7
7
  column: id
8
8
  onDelete: CASCADE
9
- - name: catalog_category_id
10
- type: fk
11
- isNullable: true
12
- references:
13
- table: catalog_category
14
- column: id
15
- onDelete: SET NULL
9
+ - name: catalog_category_id
10
+ type: fk
11
+ isNullable: true
12
+ references:
13
+ table: catalog_category
14
+ column: id
15
+ onDelete: SET NULL
16
16
  - name: page_type
17
17
  type: enum
18
18
  values: [comparison, best_of, cost_benefit, attribute, price_range, brand, use_case]