# Product Page
## Variant Page
**variant_pages**
step 1
| Name | Type | Desc |
|:------------------ | ----------------------- |:----------------------- |
| product_variant_id | int | index |
| title_id | varchar(255) | index |
| title_en | varchar(255) | index |
| subtitle_id | varchar(255) | index |
| subtitle_en | varchar(255) | index |
| asset_id | int | index |
| slug | varchar(255) | index unique |
| status | varchar(255) | draft, active, archived (index)|
| deleted_at | timestamp with timezone | index |
ketika get detail .../products/sticker-bulat
sticker-bulat -> variant_slug_histories
jika ada return ,
```jsonld=
{
"redirect": true,
//fe suruh pilih return slug ato url
"new_slug": "sticker-circle", //get dari variant-pages
"new_url": "kame.co.id/products/sticker-circle"
}
```
return get detail
check if count slug histories == 3, editable_slug = false
```json=
{
...
"slug_edit_limit_remaining": 1,
"editable_slug": true|false
}
```
**variant_slug_histories**
step 1
| Name | Type |
| --------------- | ------------------------- |
| variant_page_id | references(variant_pages) |
| slug | varchar(255) *unique* |
**variant_page_headers**
step 2,3,4
| Name | Type | Desc |
| ------------------------------- | ----------------------- | --------------------------------- |
| variant_page_id | int | index |
| summary_section_title | jsonb | default:{'id':'','en':''} step 2 |
| video_section_title | jsonb | default: {'id': '', en:''} step 3 |
| video_section_video_url | varchar(255) | step 3 |
| implementation_section_title | jsonb | default: {'id': '', en:''} step 4 |
| implementation_section_subtitle | jsonb | default: {'id': '', en:''} step 4 |
| deleted_at | timestamp with timezone | index |
**variant_page_product_summaries**
step 2
| Name | Type | Desc | |
|:--------------- |:----------------------- | ------------------------- | --- |
| variant_page_id | int | index | |
| title | jsonb | default: {id: '', en: ''} | |
| subtitle | jsonb | default: {id: '', en: ''} | |
| asset_id | int | index | |
| position | int | | |
| cta_name | jsonb | default: {id: '', en: ''} | |
| cta_url | varchar(255) | | |
| deleted_at | timestamp with timezone | index | |
**variant_page_product_videos**
step 3
| Name | Type | Column 3 |
| --------------- |:----------------------- | -------------------------- |
| variant_page_id | int | index |
| title | jsonb | default: {'id': '', en:''} |
| subtitle | jsonb | default: {'id': '', en:''} |
| position | int | |
| asset_id | int | index |
| deleted_at | timestamp with timezone | index |
**variant_page_implementation_details**
step 4
| Name | Type | Column 3 |
| --------------- |:----------------------- |:-------- |
| variant_page_id | int | index |
| asset_id | int | index |
| position | int | |
| deleted_at | timestamp with timezone | index |
**variant_page_seos**
step 6
| Name | Type | Column 3 |
| ---------------- | ----------------------- | -------------------------- |
| variant_page_id | int | index |
| title | jsonb | default: {'id': '', en:''} |
| meta_description | jsonb | default: {'id': '', en:''} |
| keywords | jsonb | default:[] |
| seo_footer | jsonb | default: {'id': '', en:''} |
| deleted_at | timestamp with timezone | index
**variant_page_seo_keywords**
| Name | Type | Column 3 |
| -------- | -------- | -------- |
| variant_page_id | int | index |
| keyword_id | int | index
**variant_page_spec_keys**
step 1
visibility:
- basic show & advance show (1)
- basic hide & advance show (2)
- basic hide & advance hide (3)
| Name | Type | Column 3 |
| --------------- | ----------------------- | -------------------------- |
| variant_page_id | int | index |
| spec_key_id | int | index |
| label | jsonb | default: {'id': '', en:''} |
| visibility | int | 1,2,3 |
| position | int | |
| deleted_at | timestamp with timezone | index |
**variant_page_spec_values**
| Name | Type | Desc |
| ------------------------ | ----------------------- |:-------------------------- |
| variant_page_spec_key_id | int | index |
| label | jsonb | default: {'id': '', en:''} |
| spec_value_id | int | index |
| visibility | int | 1,2,3 |
| position | int | |
| deleted_at | timestamp with timezone | index |
## Category Page
**category_pages**
step 1
| Name | Type | Column 3 |
| ----------- | ----------------------- | ------------------------------- |
| title_id | varchar(255) | index |
| title_en | varchar(255) | index |
| subtitle_id | varchar(255) | index |
| subtitle_en | varchar(255) | index |
| slug | varchar(255) | index unique |
| asset_id | varchar(255) | |
| status | varchar(255) | draft, active, archived (index) |
| deleted_at | timestamp with timezone | index |
**category_variant_pages**
step 1
| Name | Type | Column 3 |
| ---------------- | ----------------------- | -------------------------- |
| category_page_id | int | index |
| variant_page_id | int | index |
| variant_title | jsonb | default: {'id': '', en:''} |
| asset_id | varchar(255) | |
| deleted_at | timestamp with timezone | index |
**category_page_headers**
step 2
| Name | Type | Desc |
| -------------------------------------- | ----------------------- | ------------------------- |
| category_page_id | int | index |
| implementation_detail_section_title | jsonb | default:{'id':'','en':''} |
| implementation_detail_section_subtitle | jsonb | default:{'id':'','en':''} |
| deleted_at | timestamp with timezone | index |
**category_page_product_images**
step 2
| Name | Type | Column 3 |
| ---------------- | ----------------------- | -------- |
| category_page_id | int | index |
| asset_id | int | |
| position | int | |
| deleted_at | timestamp with timezone | index |
**category_page_seos**
step 3
| Name | Type | Column 3 |
| ---------------- | ----------------------- | -------------------------- |
| category_page_id | int | index |
| title | jsonb | default: {'id': '', en:''} |
| meta_description | jsonb | default: {'id': '', en:''} | |
| seo_footer | jsonb | default: {'id': '', en:''} |
| deleted_at | timestamp with timezone | index |
**category_page_seo_keywords**
| Name | Type | Column 3 |
| -------- | -------- | -------- |
| category_page_id | int | index |
| keyword_id | int | index
**keywords**
| Name | Type | Column 3 |
| ------- | ------------ |:------------ |
| keyword | varchar(255) | index unique |
**assets**
| Name | Type | Desc |
| --------- | ------ | ---- |
| filename | string | |
| url | string | |
| file_size | int | |
| width | int | |
| length | int | |
### notes:
default coloumn
- id
- created_at
- created_by
- updated_at
- updated_by
- deleted_at
### to do:
path product images/icons
[***bucket-name***]/img/products/[***2001-01-21***]
### Seeder Membership