From 1ac4327a0ab6849f43398fe19599833a57596f24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrian=20Wo=C5=BAniak?= Date: Fri, 9 Jun 2023 17:30:58 +0200 Subject: [PATCH] Add more shipping, extract products --- .../src/checkouts/m20230603_120815_items.rs | 77 +++ migration/src/checkouts/mod.rs | 6 +- .../discounts/m20230603_120815_gift_carts.rs | 114 +++- migration/src/lib.rs | 3 + migration/src/main.rs | 1 + migration/src/schema_list.rs | 2 + .../src/shipping/m20230603_120810_shipping.rs | 310 +++++++++++ migration/src/shipping/mod.rs | 12 + migrations/20230603073510_init.sql | 526 ++++-------------- migrations/20230603073530_shippings.sql | 82 +++ migrations/202306091717_products.sql | 215 +++++++ 11 files changed, 934 insertions(+), 414 deletions(-) create mode 100644 migration/src/checkouts/m20230603_120815_items.rs create mode 100644 migration/src/shipping/m20230603_120810_shipping.rs create mode 100644 migration/src/shipping/mod.rs create mode 100644 migrations/202306091717_products.sql diff --git a/migration/src/checkouts/m20230603_120815_items.rs b/migration/src/checkouts/m20230603_120815_items.rs new file mode 100644 index 0000000..e779d2e --- /dev/null +++ b/migration/src/checkouts/m20230603_120815_items.rs @@ -0,0 +1,77 @@ +use sea_orm_migration::prelude::*; + +use crate::sea_orm::Iterable; +use crate::{ + auto_uuid_not_null, create_type, drop_type, to_fk_name, to_pk2_name, ts_def_now_not_null, + DropTable, IntoColumnDef, +}; + +#[derive(DeriveMigrationName)] +pub struct Migration; + +#[async_trait::async_trait] +impl MigrationTrait for Migration { + async fn up(&self, m: &SchemaManager) -> Result<(), DbErr> { + Ok(()) + } + + async fn down(&self, m: &SchemaManager) -> Result<(), DbErr> { + Ok(()) + } +} + +impl Migration { + /// CREATE TABLE line_items + /// ( + /// id uuid NOT NULL, + /// cart_id uuid, + /// order_id uuid, + /// swap_id uuid, + /// title character varying NOT NULL, + /// description character varying, + /// thumbnail character varying, + /// is_giftcard boolean DEFAULT false NOT NULL, + /// should_merge boolean DEFAULT true NOT NULL, + /// allow_discounts boolean DEFAULT true NOT NULL, + /// has_shipping boolean, + /// unit_price integer NOT NULL, + /// variant_id uuid, + /// quantity integer NOT NULL, + /// fulfilled_quantity integer, + /// returned_quantity integer, + /// shipped_quantity integer, + /// created_at timestamp with time zone DEFAULT now() NOT NULL, + /// updated_at timestamp with time zone DEFAULT now() NOT NULL, + /// metadata jsonb, + /// claim_order_id uuid, + /// is_return boolean DEFAULT false NOT NULL, + /// original_item_id uuid, + /// order_edit_id uuid, + /// CONSTRAINT "CHK_0cd85e15610d11b553d5e8fda6" CHECK ((shipped_quantity <= fulfilled_quantity)), + /// CONSTRAINT "CHK_64eef00a5064887634f1680866" CHECK ((quantity > 0)), + /// CONSTRAINT "CHK_91f40396d847f6ecfd9f752bf8" CHECK ((returned_quantity <= quantity)), + /// CONSTRAINT "CHK_c61716c68f5ad5de2834c827d3" CHECK ((fulfilled_quantity <= quantity)) + /// ); + /// + /// CREATE TABLE line_item_adjustments + /// ( + /// id uuid NOT NULL, + /// item_id uuid NOT NULL, + /// description character varying NOT NULL, + /// discount_id uuid, + /// amount numeric NOT NULL, + /// metadata jsonb + /// ); + /// + /// CREATE TABLE line_item_tax_lines + /// ( + /// id uuid NOT NULL, + /// rate real NOT NULL, + /// name character varying NOT NULL, + /// code character varying, + /// created_at timestamp with time zone DEFAULT now() NOT NULL, + /// updated_at timestamp with time zone DEFAULT now() NOT NULL, + /// metadata jsonb, + /// item_id uuid NOT NULL + /// ); +} diff --git a/migration/src/checkouts/mod.rs b/migration/src/checkouts/mod.rs index ac09d7b..9895c3c 100644 --- a/migration/src/checkouts/mod.rs +++ b/migration/src/checkouts/mod.rs @@ -1,4 +1,5 @@ mod m20230603_120814_checkouts; +mod m20230603_120815_items; use sea_orm_migration::{MigrationTrait, MigratorTrait}; @@ -7,6 +8,9 @@ pub struct CheckoutsMigrator; #[async_trait::async_trait] impl MigratorTrait for CheckoutsMigrator { fn migrations() -> Vec> { - vec![Box::new(m20230603_120814_checkouts::Migration)] + vec![ + Box::new(m20230603_120814_checkouts::Migration), + Box::new(m20230603_120815_items::Migration), + ] } } diff --git a/migration/src/discounts/m20230603_120815_gift_carts.rs b/migration/src/discounts/m20230603_120815_gift_carts.rs index 922c0d0..a5aebda 100644 --- a/migration/src/discounts/m20230603_120815_gift_carts.rs +++ b/migration/src/discounts/m20230603_120815_gift_carts.rs @@ -1,7 +1,9 @@ use sea_orm_migration::prelude::*; use crate::sea_orm::Iterable; -use crate::{auto_uuid_not_null, create_type, drop_type, ts_def_now_not_null, DropTable}; +use crate::{ + auto_uuid_not_null, create_type, drop_type, ts_def_now_not_null, DropTable, IntoColumnDef, +}; #[derive(DeriveMigrationName)] pub struct Migration; @@ -9,6 +11,8 @@ pub struct Migration; #[async_trait::async_trait] impl MigrationTrait for Migration { async fn up(&self, m: &SchemaManager) -> Result<(), DbErr> { + Self::create_gift_carts(m).await?; + Self::gift_card_transactions(m).await?; Ok(()) } @@ -17,4 +21,110 @@ impl MigrationTrait for Migration { } } -impl Migration {} +impl Migration { + /// ```sql + /// CREATE TABLE gift_cards + /// ( + /// id uuid NOT NULL, + /// code character varying NOT NULL, + /// value integer NOT NULL, + /// balance integer NOT NULL, + /// region_id uuid NOT NULL, + /// order_id uuid, + /// is_disabled boolean DEFAULT false NOT NULL, + /// ends_at timestamp with time zone, + /// created_at timestamp with time zone DEFAULT now() NOT NULL, + /// updated_at timestamp with time zone DEFAULT now() NOT NULL, + /// deleted_at timestamp with time zone, + /// metadata jsonb, + /// tax_rate real + /// ); + /// ``` + async fn create_gift_carts(m: &SchemaManager<'_>) -> Result<(), DbErr> { + m.create_table( + Table::create() + .table(GiftCard::GiftCards) + .col(auto_uuid_not_null!(GiftCard::Id)) + .col(GiftCard::Code.col().string().not_null()) + .col(GiftCard::Value.col().integer().not_null()) + .col(GiftCard::Balance.col().integer().not_null()) + .col(GiftCard::RegionId.col().uuid().not_null()) + .col(GiftCard::OrderId.col().uuid()) + .col( + GiftCard::IsDisabled + .col() + .boolean() + .default(false) + .not_null(), + ) + .col(GiftCard::EndsAt.col().timestamp()) + .col(ts_def_now_not_null!(GiftCard::CreatedAt)) + .col(ts_def_now_not_null!(GiftCard::UpdatedAt)) + .col(GiftCard::DeletedAt.col().uuid()) + .col(GiftCard::Metadata.col().json_binary()) + .col(GiftCard::TaxRate.col().double()) + .to_owned(), + ) + .await?; + Ok(()) + } + + /// ```sql + /// CREATE TABLE gift_card_transactions + /// ( + /// id uuid NOT NULL, + /// gift_card_id uuid NOT NULL, + /// order_id uuid NOT NULL, + /// amount integer NOT NULL, + /// created_at timestamp with time zone DEFAULT now() NOT NULL, + /// is_taxable boolean, + /// tax_rate real + /// ); + /// ``` + async fn gift_card_transactions(m: &SchemaManager<'_>) -> Result<(), DbErr> { + m.create_table( + Table::create() + .table(GiftCardTransaction::GiftCardTransactions) + .col(auto_uuid_not_null!(GiftCardTransaction::Id)) + .col(GiftCardTransaction::GiftCardId.col().uuid().not_null()) + .col(GiftCardTransaction::OrderId.col().uuid().not_null()) + .col(GiftCardTransaction::Amount.col().integer().not_null()) + .col(ts_def_now_not_null!(GiftCardTransaction::CreatedAt)) + .col(GiftCardTransaction::IsTaxable.col().boolean()) + .col(GiftCardTransaction::TaxRate.col().double()) + .to_owned(), + ) + .await?; + Ok(()) + } +} + +#[derive(Iden)] +pub enum GiftCard { + GiftCards, + Id, + Code, + Value, + Balance, + RegionId, + OrderId, + IsDisabled, + EndsAt, + CreatedAt, + UpdatedAt, + DeletedAt, + Metadata, + TaxRate, +} + +#[derive(Iden)] +pub enum GiftCardTransaction { + GiftCardTransactions, + Id, + GiftCardId, + OrderId, + Amount, + CreatedAt, + IsTaxable, + TaxRate, +} diff --git a/migration/src/lib.rs b/migration/src/lib.rs index bbb8160..076b9d2 100644 --- a/migration/src/lib.rs +++ b/migration/src/lib.rs @@ -12,7 +12,10 @@ pub mod schema_list; pub use schema_list::*; pub mod checkouts; pub use checkouts::*; +pub mod shipping; +pub use shipping::*; pub mod types; + pub use types::*; #[macro_export] diff --git a/migration/src/main.rs b/migration/src/main.rs index f4c5af1..9a91331 100644 --- a/migration/src/main.rs +++ b/migration/src/main.rs @@ -38,6 +38,7 @@ async fn main() { migrate_schema!(cli, Carts, CartsMigrator); migrate_schema!(cli, Discounts, DiscountsMigrator); migrate_schema!(cli, Checkouts, CheckoutsMigrator); + migrate_schema!(cli, Shipping, ShippingMigrator); } pub async fn run_cli(cli: &mut Cli, schema: PostgreSQLSchema, migrator: M) diff --git a/migration/src/schema_list.rs b/migration/src/schema_list.rs index f5244aa..5f35118 100644 --- a/migration/src/schema_list.rs +++ b/migration/src/schema_list.rs @@ -9,6 +9,7 @@ pub enum PostgreSQLSchema { Carts, Discounts, Checkouts, + Shipping, } impl PostgreSQLSchema { @@ -19,6 +20,7 @@ impl PostgreSQLSchema { PostgreSQLSchema::Carts => "carts", PostgreSQLSchema::Discounts => "discounts", PostgreSQLSchema::Checkouts => "checkouts", + PostgreSQLSchema::Shipping => "shipping", } } } diff --git a/migration/src/shipping/m20230603_120810_shipping.rs b/migration/src/shipping/m20230603_120810_shipping.rs new file mode 100644 index 0000000..ca5381b --- /dev/null +++ b/migration/src/shipping/m20230603_120810_shipping.rs @@ -0,0 +1,310 @@ +use sea_orm_migration::prelude::*; + +use crate::sea_orm::Iterable; +use crate::{ + auto_uuid_not_null, create_type, drop_type, ts_def_now_not_null, DropTable, IntoColumnDef, +}; + +#[derive(DeriveMigrationName)] +pub struct Migration; + +#[async_trait::async_trait] +impl MigrationTrait for Migration { + async fn up(&self, m: &SchemaManager) -> Result<(), DbErr> { + Self::create_tracking_links(m).await?; + Self::create_custom_shipping_options(m).await?; + Ok(()) + } + + async fn down(&self, m: &SchemaManager) -> Result<(), DbErr> { + m.drop_table(Table::drop().table(TrackingLink::TrackingLinks).to_owned()) + .await?; + m.drop_table( + Table::drop() + .table(CustomShippingOption::CustomShippingOptions) + .to_owned(), + ) + .await?; + Ok(()) + } +} + +impl Migration { + /// ```sql + /// CREATE TABLE tracking_links + /// ( + /// id uuid NOT NULL, + /// url character varying, + /// tracking_number character varying NOT NULL, + /// fulfillment_id uuid NOT NULL, + /// created_at timestamp with time zone DEFAULT now() NOT NULL, + /// updated_at timestamp with time zone DEFAULT now() NOT NULL, + /// deleted_at timestamp with time zone, + /// metadata jsonb, + /// idempotency_key character varying + /// ); + /// ``` + async fn create_tracking_links(m: &SchemaManager<'_>) -> Result<(), DbErr> { + m.create_table( + Table::create() + .table(TrackingLink::TrackingLinks) + .col(auto_uuid_not_null!(TrackingLink::Id)) + .col(TrackingLink::Url.col().string()) + .col(TrackingLink::TrackingNumber.col().string().not_null()) + .col(TrackingLink::FulfillmentId.col().uuid().not_null()) + .col(ts_def_now_not_null!(TrackingLink::CreatedAt)) + .col(ts_def_now_not_null!(TrackingLink::UpdatedAt)) + .col(TrackingLink::DeletedAt.col().timestamp()) + .col(TrackingLink::Metadata.col().json_binary()) + .col(TrackingLink::IdempotencyKey.col().uuid()) + .to_owned(), + ) + .await?; + Ok(()) + } + + /// ```sql + /// CREATE TABLE custom_shipping_options + /// ( + /// id uuid NOT NULL, + /// price integer NOT NULL, + /// shipping_option_id uuid NOT NULL, + /// cart_id uuid, + /// created_at timestamp with time zone DEFAULT now() NOT NULL, + /// updated_at timestamp with time zone DEFAULT now() NOT NULL, + /// deleted_at timestamp with time zone, + /// metadata jsonb + /// ); + /// ``` + async fn create_custom_shipping_options(m: &SchemaManager<'_>) -> Result<(), DbErr> { + m.create_table( + Table::create() + .table(CustomShippingOption::CustomShippingOptions) + .col(auto_uuid_not_null!(CustomShippingOption::Id)) + .col(CustomShippingOption::Price.col().integer().not_null()) + .col( + CustomShippingOption::ShippingOptionId + .col() + .uuid() + .not_null(), + ) + .col(CustomShippingOption::CartId.col().uuid().not_null()) + .col(ts_def_now_not_null!(CustomShippingOption::CreatedAt)) + .col(ts_def_now_not_null!(CustomShippingOption::UpdatedAt)) + .col(CustomShippingOption::DeletedAt.col().timestamp()) + .col(CustomShippingOption::Metadata.col().json_binary()) + .to_owned(), + ) + .await?; + Ok(()) + } + + //########################################### + + /// ```sql + /// CREATE TABLE shipping_methods + /// ( + /// id uuid NOT NULL, + /// shipping_option_id uuid NOT NULL, + /// order_id uuid, + /// cart_id uuid, + /// swap_id uuid, + /// return_id uuid, + /// price integer NOT NULL, + /// data jsonb NOT NULL, + /// claim_order_id uuid, + /// CONSTRAINT "CHK_64c6812fe7815be30d688df513" CHECK ((price >= 0)), + /// CONSTRAINT "CHK_a7020b08665bbd64d84a6641cf" CHECK (((claim_order_id + /// IS NOT NULL) OR (order_id IS NOT NULL) OR + /// (cart_id IS NOT NULL) OR (swap_id IS NOT NULL) OR + /// (return_id IS NOT NULL))) ); + /// ``` + async fn create_shipping_methods(m: &SchemaManager<'_>) -> Result<(), DbErr> { + Ok(()) + } + + /// ```sql + /// CREATE TABLE shipping_method_tax_lines + /// ( + /// id uuid NOT NULL, + /// rate real NOT NULL, + /// name character varying NOT NULL, + /// code character varying, + /// created_at timestamp with time zone DEFAULT now() NOT NULL, + /// updated_at timestamp with time zone DEFAULT now() NOT NULL, + /// metadata jsonb, + /// shipping_method_id uuid NOT NULL + /// ); + /// ``` + async fn create_shipping_method_tax_lines(m: &SchemaManager<'_>) -> Result<(), DbErr> { + Ok(()) + } + + /// ```sql + /// CREATE TABLE shipping_options + /// ( + /// id uuid NOT NULL, + /// name character varying NOT NULL, + /// region_id uuid NOT NULL, + /// profile_id uuid NOT NULL, + /// provider_id uuid NOT NULL, + /// price_type shipping_option_price_types NOT NULL, + /// amount integer, + /// is_return boolean DEFAULT false NOT NULL, + /// data jsonb NOT NULL, + /// created_at timestamp with time zone DEFAULT now() NOT NULL, + /// updated_at timestamp with time zone DEFAULT now() NOT NULL, + /// deleted_at timestamp with time zone, + /// metadata jsonb, + /// admin_only boolean DEFAULT false NOT NULL, + /// CONSTRAINT "CHK_7a367f5901ae0a5b0df75aee38" CHECK ((amount >= 0)) + /// ); + /// ```` + async fn create_shipping_options(m: &SchemaManager<'_>) -> Result<(), DbErr> { + Ok(()) + } + + /// ```sql + /// CREATE TABLE shipping_option_requirements + /// ( + /// id uuid NOT NULL, + /// shipping_option_id uuid NOT NULL, + /// type shipping_option_requirement_types NOT NULL, + /// amount integer NOT NULL, + /// deleted_at timestamp with time zone + /// ); + /// ``` + async fn create_shipping_option_requirements(m: &SchemaManager<'_>) -> Result<(), DbErr> { + Ok(()) + } + + /// ```sql + /// CREATE TABLE shipping_profiles + /// ( + /// id uuid NOT NULL, + /// name character varying NOT NULL, + /// type shipping_profile_types NOT NULL, + /// created_at timestamp with time zone DEFAULT now() NOT NULL, + /// updated_at timestamp with time zone DEFAULT now() NOT NULL, + /// deleted_at timestamp with time zone, + /// metadata jsonb + /// ); + /// ``` + async fn create_shipping_profiles(m: &SchemaManager<'_>) -> Result<(), DbErr> { + Ok(()) + } + + /// ```sql + /// CREATE TABLE shipping_tax_rates + /// ( + /// shipping_option_id uuid NOT NULL, + /// rate_id uuid NOT NULL, + /// created_at timestamp with time zone DEFAULT now() NOT NULL, + /// updated_at timestamp with time zone DEFAULT now() NOT NULL, + /// metadata jsonb + /// ); + /// ``` + async fn create_shipping_tax_rates(m: &SchemaManager<'_>) -> Result<(), DbErr> { + Ok(()) + } +} + +#[derive(Iden)] +pub enum TrackingLink { + TrackingLinks, + Id, + Url, + TrackingNumber, + FulfillmentId, + CreatedAt, + UpdatedAt, + DeletedAt, + Metadata, + IdempotencyKey, +} + +#[derive(Iden)] +pub enum CustomShippingOption { + CustomShippingOptions, + Id, + Price, + ShippingOptionId, + CartId, + CreatedAt, + UpdatedAt, + DeletedAt, + Metadata, +} + +//############################# + +#[derive(Iden)] +pub enum ShippingMethod { + ShippingMethods, + Id, + ShippingOptionId, + OrderId, + CartId, + SwapId, + ReturnId, + Price, + Data, + ClaimOrderId, +} + +#[derive(Iden)] +pub enum ShippingMethodTaxLine { + ShippingMethodTaxLines, + Id, + Rate, + Name, + Code, + CreatedAt, + UpdatedAt, + Metadata, + ShippingMethodId, +} + +#[derive(Iden)] +pub enum ShippingOption { + ShippingOptions, + Id, + Name, + RegionId, + ProfileId, + ProviderId, + PriceType, + Amount, + IsReturn, + Data, + CreatedAt, + UpdatedAt, + DeletedAt, + Metadata, + AdminOnly, +} + +#[derive(Iden)] +pub enum ShippingOptionRequirement { + ShippingOptionRequirements, + Id, + ShippingOptionId, + ShippingOptionRequirementType, + Amount, + DeletedAt, +} + +#[derive(Iden)] +pub enum ShippingProfile { + ShippingProfiles, + Id, + Name, + ShippingProfileType, + DeletedAt, + ShippingTaxRates, + ShippingOptionId, + RateId, + CreatedAt, + UpdatedAt, + Metadata, +} diff --git a/migration/src/shipping/mod.rs b/migration/src/shipping/mod.rs new file mode 100644 index 0000000..d1e4828 --- /dev/null +++ b/migration/src/shipping/mod.rs @@ -0,0 +1,12 @@ +mod m20230603_120810_shipping; + +use sea_orm_migration::{MigrationTrait, MigratorTrait}; + +pub struct ShippingMigrator; + +#[async_trait::async_trait] +impl MigratorTrait for ShippingMigrator { + fn migrations() -> Vec> { + vec![Box::new(m20230603_120810_shipping::Migration)] + } +} diff --git a/migrations/20230603073510_init.sql b/migrations/20230603073510_init.sql index 4908d2d..a6d5b14 100644 --- a/migrations/20230603073510_init.sql +++ b/migrations/20230603073510_init.sql @@ -1,5 +1,5 @@ -CREATE EXTENSION IF NOT EXISTS pg_trgm WITH SCHEMA -COMMENT ON EXTENSION pg_trgm IS 'text similarity measurement and index searching based on trigrams'; +CREATE EXTENSION IF NOT EXISTS pg_trgm WITH SCHEMA + COMMENT ON EXTENSION pg_trgm IS 'text similarity measurement and index searching based on trigrams'; CREATE TYPE payment_collection_statuses AS ENUM ( 'not_paid', @@ -256,17 +256,17 @@ CREATE TABLE batch_jobs CREATE TABLE carts ( - id uuid NOT NULL, + id uuid NOT NULL, email character varying, billing_address_id uuid, shipping_address_id uuid, - region_id uuid NOT NULL, + region_id uuid NOT NULL, customer_id uuid, payment_id uuid, - type cart_types DEFAULT 'default'::cart_types NOT NULL, + type cart_types DEFAULT 'default'::cart_types NOT NULL, completed_at timestamp with time zone, - created_at timestamp with time zone DEFAULT now() NOT NULL, - updated_at timestamp with time zone DEFAULT now() NOT NULL, + created_at timestamp with time zone DEFAULT now() NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL, deleted_at timestamp with time zone, metadata jsonb, idempotency_key character varying, @@ -304,7 +304,7 @@ CREATE TABLE claim_items claim_order_id uuid NOT NULL, item_id uuid NOT NULL, variant_id uuid NOT NULL, - reason claim_item_reasons NOT NULL, + reason claim_item_reasons NOT NULL, note character varying, quantity integer NOT NULL, created_at timestamp with time zone DEFAULT now() NOT NULL, @@ -321,16 +321,16 @@ CREATE TABLE claim_item_tags CREATE TABLE claim_orders ( - id uuid NOT NULL, + id uuid NOT NULL, payment_status claim_order_payment_statuses DEFAULT 'na'::claim_order_payment_statuses NOT NULL, fulfillment_status claim_order_fulfillment_statuses DEFAULT 'not_fulfilled'::claim_order_fulfillment_statuses NOT NULL, - type claim_order_types NOT NULL, - order_id uuid NOT NULL, + type claim_order_types NOT NULL, + order_id uuid NOT NULL, shipping_address_id uuid, refund_amount integer, canceled_at timestamp with time zone, - created_at timestamp with time zone DEFAULT now() NOT NULL, - updated_at timestamp with time zone DEFAULT now() NOT NULL, + created_at timestamp with time zone DEFAULT now() NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL, deleted_at timestamp with time zone, metadata jsonb, idempotency_key character varying, @@ -405,8 +405,8 @@ CREATE TABLE discounts CREATE TABLE discount_conditions ( id uuid NOT NULL, - type discount_condition_types NOT NULL, - operator discount_condition_operators NOT NULL, + type discount_condition_types NOT NULL, + operator discount_condition_operators NOT NULL, discount_rule_id uuid NOT NULL, created_at timestamp with time zone DEFAULT now() NOT NULL, updated_at timestamp with time zone DEFAULT now() NOT NULL, @@ -469,7 +469,7 @@ CREATE TABLE discount_rules ( id uuid NOT NULL, description character varying, - type discount_rule_types NOT NULL, + type discount_rule_types NOT NULL, value integer NOT NULL, allocation discount_rule_allocations, created_at timestamp with time zone DEFAULT now() NOT NULL, @@ -486,22 +486,22 @@ CREATE TABLE discount_rule_products CREATE TABLE orders ( - id uuid NOT NULL, + id uuid NOT NULL, status order_statuses DEFAULT 'pending'::order_statuses NOT NULL, fulfillment_status order_fulfillment_statuses DEFAULT 'not_fulfilled'::order_fulfillment_statuses NOT NULL, payment_status order_payment_statuses DEFAULT 'not_paid'::order_payment_statuses NOT NULL, - display_id integer NOT NULL, + display_id integer NOT NULL, cart_id uuid, - customer_id uuid NOT NULL, - email character varying NOT NULL, + customer_id uuid NOT NULL, + email character varying NOT NULL, billing_address_id uuid, shipping_address_id uuid, - region_id uuid NOT NULL, - currency_code character varying NOT NULL, + region_id uuid NOT NULL, + currency_code character varying NOT NULL, tax_rate real, canceled_at timestamp with time zone, - created_at timestamp with time zone DEFAULT now() NOT NULL, - updated_at timestamp with time zone DEFAULT now() NOT NULL, + created_at timestamp with time zone DEFAULT now() NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL, metadata jsonb, idempotency_key character varying, draft_order_id uuid, @@ -548,7 +548,7 @@ CREATE TABLE order_item_changes created_at timestamp with time zone DEFAULT now() NOT NULL, updated_at timestamp with time zone DEFAULT now() NOT NULL, deleted_at timestamp with time zone, - type order_item_change_types NOT NULL, + type order_item_change_types NOT NULL, order_edit_id uuid NOT NULL, original_line_item_id uuid, line_item_id uuid @@ -579,8 +579,8 @@ CREATE TABLE payment_collections created_at timestamp with time zone DEFAULT now() NOT NULL, updated_at timestamp with time zone DEFAULT now() NOT NULL, deleted_at timestamp with time zone, - type payment_collection_types NOT NULL, - status payment_collection_statuses NOT NULL, + type payment_collection_types NOT NULL, + status payment_collection_statuses NOT NULL, description text, amount integer NOT NULL, authorized_amount integer, @@ -614,7 +614,7 @@ CREATE TABLE payment_sessions cart_id uuid, provider_id uuid NOT NULL, is_selected boolean, - status payment_session_statuses NOT NULL, + status payment_session_statuses NOT NULL, data jsonb NOT NULL, created_at timestamp with time zone DEFAULT now() NOT NULL, updated_at timestamp with time zone DEFAULT now() NOT NULL, @@ -624,15 +624,6 @@ CREATE TABLE payment_sessions is_initiated boolean DEFAULT false NOT NULL ); ----- ########################################################### ----- ########################################################### ----- ########################################################### ----- ########################################################### ----- ########################################################### ----- ########################################################### ----- ########################################################### ----- ########################################################### - CREATE TABLE gift_cards ( id uuid NOT NULL, @@ -661,82 +652,6 @@ CREATE TABLE gift_card_transactions tax_rate real ); ---------------------------- ---------------------------- ---------------------------- - -CREATE TABLE draft_orders -( - id uuid NOT NULL, - status draft_order_statuses DEFAULT 'open'::draft_order_statuses NOT NULL, - display_id sequence NOT NULL, - cart_id uuid, - order_id uuid, - canceled_at timestamp with time zone, - created_at timestamp with time zone DEFAULT now() NOT NULL, - updated_at timestamp with time zone DEFAULT now() NOT NULL, - completed_at timestamp with time zone, - metadata jsonb, - idempotency_key character varying, - no_notification_order boolean -); - -CREATE TABLE fulfillments -( - id uuid NOT NULL, - swap_id uuid, - order_id uuid, - tracking_numbers jsonb DEFAULT '[]'::jsonb NOT NULL, - data jsonb NOT NULL, - shipped_at timestamp with time zone, - canceled_at timestamp with time zone, - created_at timestamp with time zone DEFAULT now() NOT NULL, - updated_at timestamp with time zone DEFAULT now() NOT NULL, - metadata jsonb, - idempotency_key character varying, - provider_id uuid, - claim_order_id uuid, - no_notification boolean, - location_id uuid -); - -CREATE TABLE fulfillment_items -( - fulfillment_id uuid NOT NULL, - item_id uuid NOT NULL, - quantity integer NOT NULL -); - -CREATE TABLE fulfillment_providers -( - id uuid NOT NULL, - is_installed boolean DEFAULT true NOT NULL -); - -CREATE TABLE images -( - id uuid NOT NULL, - url character varying NOT NULL, - created_at timestamp with time zone DEFAULT now() NOT NULL, - updated_at timestamp with time zone DEFAULT now() NOT NULL, - deleted_at timestamp with time zone, - metadata jsonb -); - -CREATE TABLE invites -( - id uuid NOT NULL, - user_email character varying NOT NULL, - role invite_roles DEFAULT 'member'::invite_roles, - accepted boolean DEFAULT false NOT NULL, - created_at timestamp with time zone DEFAULT now() NOT NULL, - updated_at timestamp with time zone DEFAULT now() NOT NULL, - deleted_at timestamp with time zone, - metadata jsonb, - token character varying NOT NULL, - expires_at timestamp with time zone DEFAULT now() NOT NULL -); - CREATE TABLE line_items ( id uuid NOT NULL, @@ -791,19 +706,85 @@ CREATE TABLE line_item_tax_lines item_id uuid NOT NULL ); -CREATE TABLE money_amounts +---- ########################################################### +---- ########################################################### +---- ########################################################### +---- ########################################################### +---- ########################################################### +---- ########################################################### +---- ########################################################### +---- ########################################################### + +CREATE TABLE draft_orders ( - id uuid NOT NULL, - currency_code character varying NOT NULL, - amount integer NOT NULL, - variant_id uuid, - region_id uuid, - created_at timestamp with time zone DEFAULT now() NOT NULL, - updated_at timestamp with time zone DEFAULT now() NOT NULL, - deleted_at timestamp with time zone, - min_quantity integer, - max_quantity integer, - price_list_id uuid + id uuid NOT NULL, + status draft_order_statuses DEFAULT 'open'::draft_order_statuses NOT NULL, + display_id sequence NOT NULL, + cart_id uuid, + order_id uuid, + canceled_at timestamp with time zone, + created_at timestamp with time zone DEFAULT now() NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL, + completed_at timestamp with time zone, + metadata jsonb, + idempotency_key character varying, + no_notification_order boolean +); + +CREATE TABLE fulfillments +( + id uuid NOT NULL, + swap_id uuid, + order_id uuid, + tracking_numbers jsonb DEFAULT '[]'::jsonb NOT NULL, + data jsonb NOT NULL, + shipped_at timestamp with time zone, + canceled_at timestamp with time zone, + created_at timestamp with time zone DEFAULT now() NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL, + metadata jsonb, + idempotency_key character varying, + provider_id uuid, + claim_order_id uuid, + no_notification boolean, + location_id uuid +); + +CREATE TABLE fulfillment_items +( + fulfillment_id uuid NOT NULL, + item_id uuid NOT NULL, + quantity integer NOT NULL +); + +CREATE TABLE fulfillment_providers +( + id uuid NOT NULL, + is_installed boolean DEFAULT true NOT NULL +); + +CREATE TABLE images +( + id uuid NOT NULL, + url character varying NOT NULL, + created_at timestamp with time zone DEFAULT now() NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL, + deleted_at timestamp with time zone, + metadata jsonb +); + +CREATE TABLE invites +( + id uuid NOT NULL, + user_email character varying NOT NULL, + role invite_roles DEFAULT 'member'::invite_roles, + accepted boolean DEFAULT false NOT NULL, + created_at timestamp with time zone DEFAULT now() NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL, + deleted_at timestamp with time zone, + metadata jsonb, + token character varying NOT NULL, + expires_at timestamp with time zone DEFAULT now() NOT NULL ); CREATE TABLE notes @@ -819,7 +800,6 @@ CREATE TABLE notes metadata jsonb ); - CREATE TABLE oauth ( id uuid NOT NULL, @@ -830,205 +810,6 @@ CREATE TABLE oauth data jsonb ); -CREATE TABLE price_lists -( - id uuid NOT NULL, - name character varying NOT NULL, - description character varying NOT NULL, - type price_list_types DEFAULT 'sale'::price_list_types NOT NULL, - status price_list_statuses DEFAULT 'draft'::price_list_statuses NOT NULL, - starts_at timestamp with time zone, - ends_at timestamp with time zone, - created_at timestamp with time zone DEFAULT now() NOT NULL, - updated_at timestamp with time zone DEFAULT now() NOT NULL, - deleted_at timestamp with time zone -); - -CREATE TABLE price_list_customer_groups -( - price_list_id uuid NOT NULL, - customer_group_id uuid NOT NULL -); - -CREATE TABLE products -( - id uuid NOT NULL, - title character varying NOT NULL, - subtitle character varying, - description character varying, - handle character varying, - is_giftcard boolean DEFAULT false NOT NULL, - thumbnail character varying, - profile_id uuid NOT NULL, - weight integer, - length integer, - height integer, - width integer, - hs_code character varying, - origin_country character varying, - mid_code character varying, - material character varying, - created_at timestamp with time zone DEFAULT now() NOT NULL, - updated_at timestamp with time zone DEFAULT now() NOT NULL, - deleted_at timestamp with time zone, - metadata jsonb, - collection_id uuid, - type_id uuid, - discountable boolean DEFAULT true NOT NULL, - status product_statuses DEFAULT 'draft'::product_statuses NOT NULL, - external_id uuid -); - -CREATE TABLE product_categories -( - id uuid NOT NULL, - name text NOT NULL, - handle text NOT NULL, - parent_category_id uuid, - mpath text, - is_active boolean DEFAULT false, - is_internal boolean DEFAULT false, - created_at timestamp with time zone DEFAULT now() NOT NULL, - updated_at timestamp with time zone DEFAULT now() NOT NULL, - rank integer DEFAULT 0 NOT NULL, - description text DEFAULT ''::text NOT NULL, - CONSTRAINT product_category_rank_check CHECK ((rank >= 0)) -); - -CREATE TABLE product_category_products -( - product_category_id uuid NOT NULL, - product_id uuid NOT NULL -); - -CREATE TABLE product_collections -( - id uuid NOT NULL, - title character varying NOT NULL, - handle character varying, - created_at timestamp with time zone DEFAULT now() NOT NULL, - updated_at timestamp with time zone DEFAULT now() NOT NULL, - deleted_at timestamp with time zone, - metadata jsonb -); - -CREATE TABLE product_images -( - product_id uuid NOT NULL, - image_id uuid NOT NULL -); - -CREATE TABLE product_options -( - id uuid NOT NULL, - title character varying NOT NULL, - created_at timestamp with time zone DEFAULT now() NOT NULL, - updated_at timestamp with time zone DEFAULT now() NOT NULL, - deleted_at timestamp with time zone, - metadata jsonb, - product_id uuid -); - -CREATE TABLE product_option_values -( - id uuid NOT NULL, - value character varying NOT NULL, - option_id uuid NOT NULL, - variant_id uuid NOT NULL, - created_at timestamp with time zone DEFAULT now() NOT NULL, - updated_at timestamp with time zone DEFAULT now() NOT NULL, - deleted_at timestamp with time zone, - metadata jsonb -); - -CREATE TABLE product_sales_channels -( - product_id uuid NOT NULL, - sales_channel_id uuid NOT NULL -); - -CREATE TABLE product_tags -( - id uuid NOT NULL, - value character varying NOT NULL, - created_at timestamp with time zone DEFAULT now() NOT NULL, - updated_at timestamp with time zone DEFAULT now() NOT NULL, - deleted_at timestamp with time zone, - metadata jsonb -); - -CREATE TABLE product_to_tags -( - product_id uuid NOT NULL, - product_tag_id uuid NOT NULL -); - -CREATE TABLE product_tax_rates -( - product_id uuid NOT NULL, - rate_id uuid NOT NULL, - created_at timestamp with time zone DEFAULT now() NOT NULL, - updated_at timestamp with time zone DEFAULT now() NOT NULL, - metadata jsonb -); - -CREATE TABLE product_types -( - id uuid NOT NULL, - value character varying NOT NULL, - created_at timestamp with time zone DEFAULT now() NOT NULL, - updated_at timestamp with time zone DEFAULT now() NOT NULL, - deleted_at timestamp with time zone, - metadata jsonb -); - -CREATE TABLE product_type_tax_rates -( - product_type_id uuid NOT NULL, - rate_id uuid NOT NULL, - created_at timestamp with time zone DEFAULT now() NOT NULL, - updated_at timestamp with time zone DEFAULT now() NOT NULL, - metadata jsonb -); - -CREATE TABLE product_variants -( - id uuid NOT NULL, - title character varying NOT NULL, - product_id uuid NOT NULL, - sku character varying, - barcode character varying, - ean character varying, - upc character varying, - inventory_quantity integer NOT NULL, - allow_backorder boolean DEFAULT false NOT NULL, - manage_inventory boolean DEFAULT true NOT NULL, - hs_code character varying, - origin_country character varying, - mid_code character varying, - material character varying, - weight integer, - length integer, - height integer, - width integer, - created_at timestamp with time zone DEFAULT now() NOT NULL, - updated_at timestamp with time zone DEFAULT now() NOT NULL, - deleted_at timestamp with time zone, - metadata jsonb, - variant_rank integer DEFAULT 0 -); - -CREATE TABLE product_variant_inventory_items -( - id uuid NOT NULL, - created_at timestamp with time zone DEFAULT now() NOT NULL, - updated_at timestamp with time zone DEFAULT now() NOT NULL, - inventory_item_id text NOT NULL, - variant_id text NOT NULL, - required_quantity integer DEFAULT 1 NOT NULL, - deleted_at timestamp with time zone -); - CREATE TABLE publishable_api_keys ( id uuid NOT NULL, @@ -1052,7 +833,7 @@ CREATE TABLE refunds order_id uuid, amount integer NOT NULL, note character varying, - reason refund_reasons NOT NULL, + reason refund_reasons NOT NULL, created_at timestamp with time zone DEFAULT now() NOT NULL, updated_at timestamp with time zone DEFAULT now() NOT NULL, metadata jsonb, @@ -1074,15 +855,15 @@ CREATE TABLE region_payment_providers CREATE TABLE returns ( - id uuid NOT NULL, - status return_statuses DEFAULT 'requested'::return_statuses NOT NULL, + id uuid NOT NULL, + status return_statuses DEFAULT 'requested'::return_statuses NOT NULL, swap_id uuid, order_id uuid, shipping_data jsonb, - refund_amount integer NOT NULL, + refund_amount integer NOT NULL, received_at timestamp with time zone, - created_at timestamp with time zone DEFAULT now() NOT NULL, - updated_at timestamp with time zone DEFAULT now() NOT NULL, + created_at timestamp with time zone DEFAULT now() NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL, metadata jsonb, idempotency_key character varying, claim_order_id uuid, @@ -1138,83 +919,6 @@ CREATE TABLE sales_channel_locations deleted_at timestamp with time zone ); -CREATE TABLE shipping_methods -( - id uuid NOT NULL, - shipping_option_id uuid NOT NULL, - order_id uuid, - cart_id uuid, - swap_id uuid, - return_id uuid, - price integer NOT NULL, - data jsonb NOT NULL, - claim_order_id uuid, - CONSTRAINT "CHK_64c6812fe7815be30d688df513" CHECK ((price >= 0)), - CONSTRAINT "CHK_a7020b08665bbd64d84a6641cf" CHECK (((claim_order_id IS NOT NULL) OR (order_id IS NOT NULL) OR - (cart_id IS NOT NULL) OR (swap_id IS NOT NULL) OR - (return_id IS NOT NULL))) -); - -CREATE TABLE shipping_method_tax_lines -( - id uuid NOT NULL, - rate real NOT NULL, - name character varying NOT NULL, - code character varying, - created_at timestamp with time zone DEFAULT now() NOT NULL, - updated_at timestamp with time zone DEFAULT now() NOT NULL, - metadata jsonb, - shipping_method_id uuid NOT NULL -); - -CREATE TABLE shipping_options -( - id uuid NOT NULL, - name character varying NOT NULL, - region_id uuid NOT NULL, - profile_id uuid NOT NULL, - provider_id uuid NOT NULL, - price_type shipping_option_price_types NOT NULL, - amount integer, - is_return boolean DEFAULT false NOT NULL, - data jsonb NOT NULL, - created_at timestamp with time zone DEFAULT now() NOT NULL, - updated_at timestamp with time zone DEFAULT now() NOT NULL, - deleted_at timestamp with time zone, - metadata jsonb, - admin_only boolean DEFAULT false NOT NULL, - CONSTRAINT "CHK_7a367f5901ae0a5b0df75aee38" CHECK ((amount >= 0)) -); - -CREATE TABLE shipping_option_requirements -( - id uuid NOT NULL, - shipping_option_id uuid NOT NULL, - type shipping_option_requirement_types NOT NULL, - amount integer NOT NULL, - deleted_at timestamp with time zone -); - -CREATE TABLE shipping_profiles -( - id uuid NOT NULL, - name character varying NOT NULL, - type shipping_profile_types NOT NULL, - created_at timestamp with time zone DEFAULT now() NOT NULL, - updated_at timestamp with time zone DEFAULT now() NOT NULL, - deleted_at timestamp with time zone, - metadata jsonb -); - -CREATE TABLE shipping_tax_rates -( - shipping_option_id uuid NOT NULL, - rate_id uuid NOT NULL, - created_at timestamp with time zone DEFAULT now() NOT NULL, - updated_at timestamp with time zone DEFAULT now() NOT NULL, - metadata jsonb -); - CREATE TABLE staged_jobs ( id uuid NOT NULL, @@ -1247,8 +951,8 @@ CREATE TABLE store_currencies CREATE TABLE swaps ( id uuid NOT NULL, - fulfillment_status swap_fulfillment_statuses NOT NULL, - payment_status swap_payment_statuses NOT NULL, + fulfillment_status swap_fulfillment_statuses NOT NULL, + payment_status swap_payment_statuses NOT NULL, order_id uuid NOT NULL, difference_due integer, shipping_address_id uuid, @@ -1294,5 +998,5 @@ CREATE TABLE users updated_at timestamp with time zone DEFAULT now() NOT NULL, deleted_at timestamp with time zone, metadata jsonb, - role user_roles DEFAULT 'member'::user_roles + role user_roles DEFAULT 'member'::user_roles ); diff --git a/migrations/20230603073530_shippings.sql b/migrations/20230603073530_shippings.sql index ce71ed3..cf18e37 100644 --- a/migrations/20230603073530_shippings.sql +++ b/migrations/20230603073530_shippings.sql @@ -22,3 +22,85 @@ CREATE TABLE custom_shipping_options deleted_at timestamp with time zone, metadata jsonb ); + +--------- +--------- +--------- +--------- + +CREATE TABLE shipping_methods +( + id uuid NOT NULL, + shipping_option_id uuid NOT NULL, + order_id uuid, + cart_id uuid, + swap_id uuid, + return_id uuid, + price integer NOT NULL, + data jsonb NOT NULL, + claim_order_id uuid, + CONSTRAINT "CHK_64c6812fe7815be30d688df513" CHECK ((price >= 0)), + CONSTRAINT "CHK_a7020b08665bbd64d84a6641cf" CHECK (((claim_order_id IS NOT NULL) OR (order_id IS NOT NULL) OR + (cart_id IS NOT NULL) OR (swap_id IS NOT NULL) OR + (return_id IS NOT NULL))) +); + +CREATE TABLE shipping_method_tax_lines +( + id uuid NOT NULL, + rate real NOT NULL, + name character varying NOT NULL, + code character varying, + created_at timestamp with time zone DEFAULT now() NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL, + metadata jsonb, + shipping_method_id uuid NOT NULL +); + +CREATE TABLE shipping_options +( + id uuid NOT NULL, + name character varying NOT NULL, + region_id uuid NOT NULL, + profile_id uuid NOT NULL, + provider_id uuid NOT NULL, + price_type shipping_option_price_types NOT NULL, + amount integer, + is_return boolean DEFAULT false NOT NULL, + data jsonb NOT NULL, + created_at timestamp with time zone DEFAULT now() NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL, + deleted_at timestamp with time zone, + metadata jsonb, + admin_only boolean DEFAULT false NOT NULL, + CONSTRAINT "CHK_7a367f5901ae0a5b0df75aee38" CHECK ((amount >= 0)) +); + +CREATE TABLE shipping_option_requirements +( + id uuid NOT NULL, + shipping_option_id uuid NOT NULL, + type shipping_option_requirement_types NOT NULL, + amount integer NOT NULL, + deleted_at timestamp with time zone +); + +CREATE TABLE shipping_profiles +( + id uuid NOT NULL, + name character varying NOT NULL, + type shipping_profile_types NOT NULL, + created_at timestamp with time zone DEFAULT now() NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL, + deleted_at timestamp with time zone, + metadata jsonb +); + +CREATE TABLE shipping_tax_rates +( + shipping_option_id uuid NOT NULL, + rate_id uuid NOT NULL, + created_at timestamp with time zone DEFAULT now() NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL, + metadata jsonb +); diff --git a/migrations/202306091717_products.sql b/migrations/202306091717_products.sql new file mode 100644 index 0000000..372ea08 --- /dev/null +++ b/migrations/202306091717_products.sql @@ -0,0 +1,215 @@ +-- PENDING + +CREATE TABLE price_lists +( + id uuid NOT NULL, + name character varying NOT NULL, + description character varying NOT NULL, + type price_list_types DEFAULT 'sale'::price_list_types NOT NULL, + status price_list_statuses DEFAULT 'draft'::price_list_statuses NOT NULL, + starts_at timestamp with time zone, + ends_at timestamp with time zone, + created_at timestamp with time zone DEFAULT now() NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL, + deleted_at timestamp with time zone +); + +CREATE TABLE price_list_customer_groups +( + price_list_id uuid NOT NULL, + customer_group_id uuid NOT NULL +); + +CREATE TABLE products +( + id uuid NOT NULL, + title character varying NOT NULL, + subtitle character varying, + description character varying, + handle character varying, + is_giftcard boolean DEFAULT false NOT NULL, + thumbnail character varying, + profile_id uuid NOT NULL, + weight integer, + length integer, + height integer, + width integer, + hs_code character varying, + origin_country character varying, + mid_code character varying, + material character varying, + created_at timestamp with time zone DEFAULT now() NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL, + deleted_at timestamp with time zone, + metadata jsonb, + collection_id uuid, + type_id uuid, + discountable boolean DEFAULT true NOT NULL, + status product_statuses DEFAULT 'draft'::product_statuses NOT NULL, + external_id uuid +); + +CREATE TABLE product_categories +( + id uuid NOT NULL, + name text NOT NULL, + handle text NOT NULL, + parent_category_id uuid, + mpath text, + is_active boolean DEFAULT false, + is_internal boolean DEFAULT false, + created_at timestamp with time zone DEFAULT now() NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL, + rank integer DEFAULT 0 NOT NULL, + description text DEFAULT ''::text NOT NULL, + CONSTRAINT product_category_rank_check CHECK ((rank >= 0)) +); + +CREATE TABLE product_category_products +( + product_category_id uuid NOT NULL, + product_id uuid NOT NULL +); + +CREATE TABLE product_collections +( + id uuid NOT NULL, + title character varying NOT NULL, + handle character varying, + created_at timestamp with time zone DEFAULT now() NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL, + deleted_at timestamp with time zone, + metadata jsonb +); + +CREATE TABLE product_images +( + product_id uuid NOT NULL, + image_id uuid NOT NULL +); + +CREATE TABLE product_options +( + id uuid NOT NULL, + title character varying NOT NULL, + created_at timestamp with time zone DEFAULT now() NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL, + deleted_at timestamp with time zone, + metadata jsonb, + product_id uuid +); + +CREATE TABLE product_option_values +( + id uuid NOT NULL, + value character varying NOT NULL, + option_id uuid NOT NULL, + variant_id uuid NOT NULL, + created_at timestamp with time zone DEFAULT now() NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL, + deleted_at timestamp with time zone, + metadata jsonb +); + +CREATE TABLE product_sales_channels +( + product_id uuid NOT NULL, + sales_channel_id uuid NOT NULL +); + +CREATE TABLE product_tags +( + id uuid NOT NULL, + value character varying NOT NULL, + created_at timestamp with time zone DEFAULT now() NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL, + deleted_at timestamp with time zone, + metadata jsonb +); + +CREATE TABLE product_to_tags +( + product_id uuid NOT NULL, + product_tag_id uuid NOT NULL +); + +CREATE TABLE product_tax_rates +( + product_id uuid NOT NULL, + rate_id uuid NOT NULL, + created_at timestamp with time zone DEFAULT now() NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL, + metadata jsonb +); + +CREATE TABLE product_types +( + id uuid NOT NULL, + value character varying NOT NULL, + created_at timestamp with time zone DEFAULT now() NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL, + deleted_at timestamp with time zone, + metadata jsonb +); + +CREATE TABLE product_type_tax_rates +( + product_type_id uuid NOT NULL, + rate_id uuid NOT NULL, + created_at timestamp with time zone DEFAULT now() NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL, + metadata jsonb +); + +CREATE TABLE product_variants +( + id uuid NOT NULL, + title character varying NOT NULL, + product_id uuid NOT NULL, + sku character varying, + barcode character varying, + ean character varying, + upc character varying, + inventory_quantity integer NOT NULL, + allow_backorder boolean DEFAULT false NOT NULL, + manage_inventory boolean DEFAULT true NOT NULL, + hs_code character varying, + origin_country character varying, + mid_code character varying, + material character varying, + weight integer, + length integer, + height integer, + width integer, + created_at timestamp with time zone DEFAULT now() NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL, + deleted_at timestamp with time zone, + metadata jsonb, + variant_rank integer DEFAULT 0 +); + +CREATE TABLE product_variant_inventory_items +( + id uuid NOT NULL, + created_at timestamp with time zone DEFAULT now() NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL, + inventory_item_id text NOT NULL, + variant_id text NOT NULL, + required_quantity integer DEFAULT 1 NOT NULL, + deleted_at timestamp with time zone +); + +CREATE TABLE money_amounts +( + id uuid NOT NULL, + currency_code character varying NOT NULL, + amount integer NOT NULL, + variant_id uuid, + region_id uuid, + created_at timestamp with time zone DEFAULT now() NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL, + deleted_at timestamp with time zone, + min_quantity integer, + max_quantity integer, + price_list_id uuid +);