# 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