Start checkout db
This commit is contained in:
parent
eee5d6c22d
commit
c0e8d9da34
@ -1,8 +1,6 @@
|
|||||||
use sea_orm::Iterable;
|
use sea_orm::Iterable;
|
||||||
use sea_orm_migration::prelude::*;
|
use sea_orm_migration::prelude::*;
|
||||||
|
|
||||||
use crate::extension::postgres::Type;
|
|
||||||
use crate::types::*;
|
|
||||||
use crate::{create_type, drop_type};
|
use crate::{create_type, drop_type};
|
||||||
|
|
||||||
#[derive(DeriveMigrationName)]
|
#[derive(DeriveMigrationName)]
|
||||||
|
435
migration/src/checkouts/m20230603_120814_checkouts.rs
Normal file
435
migration/src/checkouts/m20230603_120814_checkouts.rs
Normal file
@ -0,0 +1,435 @@
|
|||||||
|
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};
|
||||||
|
|
||||||
|
#[derive(DeriveMigrationName)]
|
||||||
|
pub struct Migration;
|
||||||
|
|
||||||
|
#[async_trait::async_trait]
|
||||||
|
impl MigrationTrait for Migration {
|
||||||
|
async fn up(&self, m: &SchemaManager) -> Result<(), DbErr> {
|
||||||
|
Self::create_orders(m).await?;
|
||||||
|
Self::create_order_discounts(m).await?;
|
||||||
|
Self::create_order_edits(m).await?;
|
||||||
|
Self::create_order_gift_cards(m).await?;
|
||||||
|
Self::create_order_item_changes(m).await?;
|
||||||
|
Self::create_payments(m).await?;
|
||||||
|
Self::create_payment_collections(m).await?;
|
||||||
|
Self::create_payment_collection_payments(m).await?;
|
||||||
|
Self::create_payment_collection_sessions(m).await?;
|
||||||
|
Self::create_payment_providers(m).await?;
|
||||||
|
Self::create_payment_sessions(m).await?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn down(&self, m: &SchemaManager) -> Result<(), DbErr> {
|
||||||
|
drop_type!(m, crate::types::OrderStatus);
|
||||||
|
drop_type!(m, crate::types::OrderFulfillmentStatus);
|
||||||
|
drop_type!(m, crate::types::OrderPaymentStatus);
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Migration {
|
||||||
|
async fn create_types(m: &SchemaManager<'_>) -> Result<(), DbErr> {
|
||||||
|
create_type!(m, crate::types::OrderStatus);
|
||||||
|
create_type!(m, crate::types::OrderFulfillmentStatus);
|
||||||
|
create_type!(m, crate::types::OrderPaymentStatus);
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
/// ```sql
|
||||||
|
/// CREATE TABLE orders
|
||||||
|
/// (
|
||||||
|
/// 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,
|
||||||
|
/// cart_id uuid,
|
||||||
|
/// 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,
|
||||||
|
/// 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,
|
||||||
|
/// metadata jsonb,
|
||||||
|
/// idempotency_key character varying,
|
||||||
|
/// draft_order_id uuid,
|
||||||
|
/// no_notification boolean,
|
||||||
|
/// external_id uuid,
|
||||||
|
/// sales_channel_id uuid
|
||||||
|
/// }
|
||||||
|
/// ```
|
||||||
|
async fn create_orders(m: &SchemaManager<'_>) -> Result<(), DbErr> {
|
||||||
|
m.create_table(
|
||||||
|
Table::create()
|
||||||
|
.table(Order::Orders)
|
||||||
|
.col(auto_uuid_not_null!(Order::Id))
|
||||||
|
.col(
|
||||||
|
ColumnDef::new(Order::Status)
|
||||||
|
.enumeration(
|
||||||
|
crate::types::OrderStatus::OrderStatuses,
|
||||||
|
crate::types::OrderStatus::iter().skip(1),
|
||||||
|
)
|
||||||
|
.default(crate::types::OrderStatus::Pending)
|
||||||
|
.not_null(),
|
||||||
|
)
|
||||||
|
.col(
|
||||||
|
ColumnDef::new(Order::FulfillmentStatus)
|
||||||
|
.enumeration(
|
||||||
|
crate::types::OrderFulfillmentStatus::OrderFulfillmentStatuses,
|
||||||
|
crate::types::OrderFulfillmentStatus::iter().take(1),
|
||||||
|
)
|
||||||
|
.not_null(),
|
||||||
|
)
|
||||||
|
.col(
|
||||||
|
ColumnDef::new(Order::PaymentStatus)
|
||||||
|
.enumeration(
|
||||||
|
crate::types::OrderPaymentStatus::OrderPaymentStatuses,
|
||||||
|
crate::types::OrderPaymentStatus::iter().take(1),
|
||||||
|
)
|
||||||
|
.not_null(),
|
||||||
|
)
|
||||||
|
.col(ColumnDef::new(Order::DisplayId).uuid())
|
||||||
|
.col(ColumnDef::new(Order::CartId).uuid())
|
||||||
|
.col(ColumnDef::new(Order::CustomerId).uuid())
|
||||||
|
.col(ColumnDef::new(Order::Email).uuid())
|
||||||
|
.col(ColumnDef::new(Order::BillingAddressId).uuid())
|
||||||
|
.col(ColumnDef::new(Order::ShippingAddressId).uuid())
|
||||||
|
.col(ColumnDef::new(Order::RegionId).uuid())
|
||||||
|
.col(ColumnDef::new(Order::CurrencyCode).uuid())
|
||||||
|
.col(ColumnDef::new(Order::TaxRate).uuid())
|
||||||
|
.col(ColumnDef::new(Order::CanceledAt).uuid())
|
||||||
|
.col(ColumnDef::new(Order::CreatedAt).uuid())
|
||||||
|
.col(ColumnDef::new(Order::UpdatedAt).uuid())
|
||||||
|
.col(ColumnDef::new(Order::Metadata).uuid())
|
||||||
|
.col(ColumnDef::new(Order::IdempotencyKey).uuid())
|
||||||
|
.col(ColumnDef::new(Order::DraftOrderId).uuid())
|
||||||
|
.col(ColumnDef::new(Order::NoNotification).uuid())
|
||||||
|
.col(ColumnDef::new(Order::ExternalId).uuid())
|
||||||
|
.col(ColumnDef::new(Order::SalesChannelId).uuid())
|
||||||
|
.to_owned(),
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
/// ```sql
|
||||||
|
/// CREATE TABLE order_discounts
|
||||||
|
/// (
|
||||||
|
/// order_id uuid NOT NULL,
|
||||||
|
/// discount_id uuid NOT NULL
|
||||||
|
/// }
|
||||||
|
async fn create_order_discounts(m: &SchemaManager<'_>) -> Result<(), DbErr> {
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
/// ```sql
|
||||||
|
/// CREATE TABLE order_edits
|
||||||
|
/// (
|
||||||
|
/// id uuid NOT NULL,
|
||||||
|
/// created_at timestamp with time zone DEFAULT now() NOT NULL,
|
||||||
|
/// updated_at timestamp with time zone DEFAULT now() NOT NULL,
|
||||||
|
/// order_id uuid NOT NULL,
|
||||||
|
/// internal_note character varying,
|
||||||
|
/// created_by character varying NOT NULL,
|
||||||
|
/// requested_by character varying,
|
||||||
|
/// requested_at timestamp with time zone,
|
||||||
|
/// confirmed_by character varying,
|
||||||
|
/// confirmed_at timestamp with time zone,
|
||||||
|
/// declined_by character varying,
|
||||||
|
/// declined_reason character varying,
|
||||||
|
/// declined_at timestamp with time zone,
|
||||||
|
/// canceled_by character varying,
|
||||||
|
/// canceled_at timestamp with time zone,
|
||||||
|
/// payment_collection_id uuid
|
||||||
|
/// }
|
||||||
|
/// ```
|
||||||
|
async fn create_order_edits(m: &SchemaManager<'_>) -> Result<(), DbErr> {
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
/// ```sql
|
||||||
|
/// CREATE TABLE order_gift_cards
|
||||||
|
/// (
|
||||||
|
/// order_id uuid NOT NULL,
|
||||||
|
/// gift_card_id uuid NOT NULL
|
||||||
|
/// }
|
||||||
|
/// ```
|
||||||
|
async fn create_order_gift_cards(m: &SchemaManager<'_>) -> Result<(), DbErr> {
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
/// ```sql
|
||||||
|
/// CREATE TABLE order_item_changes
|
||||||
|
/// (
|
||||||
|
/// 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,
|
||||||
|
/// type order_item_change_types NOT NULL,
|
||||||
|
/// order_edit_id uuid NOT NULL,
|
||||||
|
/// original_line_item_id uuid,
|
||||||
|
/// line_item_id uuid
|
||||||
|
/// }
|
||||||
|
/// ```
|
||||||
|
async fn create_order_item_changes(m: &SchemaManager<'_>) -> Result<(), DbErr> {
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
/// ```sql
|
||||||
|
/// CREATE TABLE payments
|
||||||
|
/// (
|
||||||
|
/// id uuid NOT NULL,
|
||||||
|
/// swap_id uuid,
|
||||||
|
/// cart_id uuid,
|
||||||
|
/// order_id uuid,
|
||||||
|
/// amount integer NOT NULL,
|
||||||
|
/// currency_code character varying NOT NULL,
|
||||||
|
/// amount_refunded integer DEFAULT 0 NOT NULL,
|
||||||
|
/// provider_id uuid NOT NULL,
|
||||||
|
/// data jsonb NOT NULL,
|
||||||
|
/// captured_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
|
||||||
|
/// }
|
||||||
|
/// ```
|
||||||
|
async fn create_payments(m: &SchemaManager<'_>) -> Result<(), DbErr> {
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
/// ```sql
|
||||||
|
/// CREATE TABLE payment_collections
|
||||||
|
/// (
|
||||||
|
/// 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,
|
||||||
|
/// type payment_collection_types NOT NULL,
|
||||||
|
/// status payment_collection_statuses NOT NULL,
|
||||||
|
/// description text,
|
||||||
|
/// amount integer NOT NULL,
|
||||||
|
/// authorized_amount integer,
|
||||||
|
/// region_id uuid NOT NULL,
|
||||||
|
/// currency_code character varying NOT NULL,
|
||||||
|
/// metadata jsonb,
|
||||||
|
/// created_by character varying NOT NULL
|
||||||
|
/// }
|
||||||
|
/// ```
|
||||||
|
async fn create_payment_collections(m: &SchemaManager<'_>) -> Result<(), DbErr> {
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
/// ```sql
|
||||||
|
/// CREATE TABLE payment_collection_payments
|
||||||
|
/// (
|
||||||
|
/// payment_collection_id uuid NOT NULL,
|
||||||
|
/// payment_id uuid NOT NULL
|
||||||
|
/// }
|
||||||
|
/// ```
|
||||||
|
async fn create_payment_collection_payments(m: &SchemaManager<'_>) -> Result<(), DbErr> {
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
/// ```sql
|
||||||
|
/// CREATE TABLE payment_collection_sessions
|
||||||
|
/// (
|
||||||
|
/// payment_collection_id uuid NOT NULL,
|
||||||
|
/// payment_session_id uuid NOT NULL
|
||||||
|
/// }
|
||||||
|
/// ````
|
||||||
|
async fn create_payment_collection_sessions(m: &SchemaManager<'_>) -> Result<(), DbErr> {
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
/// ```sql
|
||||||
|
/// CREATE TABLE payment_providers
|
||||||
|
/// (
|
||||||
|
/// id uuid NOT NULL,
|
||||||
|
/// is_installed boolean DEFAULT true NOT NULL
|
||||||
|
/// }
|
||||||
|
/// ```
|
||||||
|
async fn create_payment_providers(m: &SchemaManager<'_>) -> Result<(), DbErr> {
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
/// ```sql
|
||||||
|
/// CREATE TABLE payment_sessions
|
||||||
|
/// (
|
||||||
|
/// id uuid NOT NULL,
|
||||||
|
/// cart_id uuid,
|
||||||
|
/// provider_id uuid NOT NULL,
|
||||||
|
/// is_selected boolean,
|
||||||
|
/// 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,
|
||||||
|
/// idempotency_key character varying,
|
||||||
|
/// payment_authorized_at timestamp with time zone,
|
||||||
|
/// amount integer,
|
||||||
|
/// is_initiated boolean DEFAULT false NOT NULL
|
||||||
|
/// }
|
||||||
|
/// ```
|
||||||
|
async fn create_payment_sessions(m: &SchemaManager<'_>) -> Result<(), DbErr> {
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Inde)]
|
||||||
|
pub enum Order {
|
||||||
|
Orders,
|
||||||
|
Id,
|
||||||
|
Status,
|
||||||
|
FulfillmentStatus,
|
||||||
|
PaymentStatus,
|
||||||
|
DisplayId,
|
||||||
|
CartId,
|
||||||
|
CustomerId,
|
||||||
|
Email,
|
||||||
|
BillingAddressId,
|
||||||
|
ShippingAddressId,
|
||||||
|
RegionId,
|
||||||
|
CurrencyCode,
|
||||||
|
TaxRate,
|
||||||
|
CanceledAt,
|
||||||
|
CreatedAt,
|
||||||
|
UpdatedAt,
|
||||||
|
Metadata,
|
||||||
|
IdempotencyKey,
|
||||||
|
DraftOrderId,
|
||||||
|
NoNotification,
|
||||||
|
ExternalId,
|
||||||
|
SalesChannelId,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Inde)]
|
||||||
|
pub enum OrderDiscount {
|
||||||
|
OrderDiscounts,
|
||||||
|
OrderId,
|
||||||
|
DiscountId,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Inde)]
|
||||||
|
pub enum OrderEdit {
|
||||||
|
OrderEdits,
|
||||||
|
Id,
|
||||||
|
CreatedAt,
|
||||||
|
UpdatedAt,
|
||||||
|
OrderId,
|
||||||
|
InternalNote,
|
||||||
|
CreatedBy,
|
||||||
|
RequestedBy,
|
||||||
|
RequestedAt,
|
||||||
|
ConfirmedBy,
|
||||||
|
ConfirmedAt,
|
||||||
|
DeclinedBy,
|
||||||
|
DeclinedReason,
|
||||||
|
DeclinedAt,
|
||||||
|
CanceledBy,
|
||||||
|
CanceledAt,
|
||||||
|
PaymentCollectionId,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Inde)]
|
||||||
|
pub enum OrderGiftCard {
|
||||||
|
OrderGiftCards,
|
||||||
|
OrderId,
|
||||||
|
GiftCardId,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Inde)]
|
||||||
|
pub enum OrderItemChange {
|
||||||
|
OrderItemChanges,
|
||||||
|
Id,
|
||||||
|
CreatedAt,
|
||||||
|
UpdatedAt,
|
||||||
|
DeletedAt,
|
||||||
|
Type,
|
||||||
|
OrderEditId,
|
||||||
|
OriginalLineItemId,
|
||||||
|
LineItemId,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Inde)]
|
||||||
|
pub enum Payment {
|
||||||
|
Payments,
|
||||||
|
Id,
|
||||||
|
SwapId,
|
||||||
|
CartId,
|
||||||
|
OrderId,
|
||||||
|
Amount,
|
||||||
|
CurrencyCode,
|
||||||
|
AmountRefunded,
|
||||||
|
ProviderId,
|
||||||
|
Data,
|
||||||
|
CapturedAt,
|
||||||
|
CanceledAt,
|
||||||
|
CreatedAt,
|
||||||
|
UpdatedAt,
|
||||||
|
Metadata,
|
||||||
|
IdempotencyKey,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Inde)]
|
||||||
|
pub enum PaymentCollection {
|
||||||
|
PaymentCollections,
|
||||||
|
Id,
|
||||||
|
CreatedAt,
|
||||||
|
UpdatedAt,
|
||||||
|
DeletedAt,
|
||||||
|
Type,
|
||||||
|
Status,
|
||||||
|
Description,
|
||||||
|
Amount,
|
||||||
|
AuthorizedAmount,
|
||||||
|
RegionId,
|
||||||
|
CurrencyCode,
|
||||||
|
Metadata,
|
||||||
|
CreatedBy,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Inde)]
|
||||||
|
pub enum PaymentCollectionPayment {
|
||||||
|
PaymentCollectionPayments,
|
||||||
|
PaymentCollectionId,
|
||||||
|
PaymentId,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Inde)]
|
||||||
|
pub enum PaymentCollectionSession {
|
||||||
|
PaymentCollectionSessions,
|
||||||
|
PaymentCollectionId,
|
||||||
|
PaymentSessionId,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Inde)]
|
||||||
|
pub enum PaymentProvider {
|
||||||
|
PaymentProviders,
|
||||||
|
Id,
|
||||||
|
IsInstalled,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Inde)]
|
||||||
|
pub enum PaymentSession {
|
||||||
|
PaymentSessions,
|
||||||
|
Id,
|
||||||
|
CartId,
|
||||||
|
ProviderId,
|
||||||
|
IsSelected,
|
||||||
|
Status,
|
||||||
|
Data,
|
||||||
|
CreatedAt,
|
||||||
|
UpdatedAt,
|
||||||
|
IdempotencyKey,
|
||||||
|
PaymentAuthorizedAt,
|
||||||
|
Amount,
|
||||||
|
IsInitiated,
|
||||||
|
}
|
12
migration/src/checkouts/mod.rs
Normal file
12
migration/src/checkouts/mod.rs
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
mod m20230603_120814_checkouts;
|
||||||
|
|
||||||
|
use sea_orm_migration::{MigrationTrait, MigratorTrait};
|
||||||
|
|
||||||
|
pub struct CheckoutsMigrator;
|
||||||
|
|
||||||
|
#[async_trait::async_trait]
|
||||||
|
impl MigratorTrait for CheckoutsMigrator {
|
||||||
|
fn migrations() -> Vec<Box<dyn MigrationTrait>> {
|
||||||
|
vec![Box::new(m20230603_120814_checkouts::Migration)]
|
||||||
|
}
|
||||||
|
}
|
544
migration/src/discounts/m20230603_120814_discounts.rs
Normal file
544
migration/src/discounts/m20230603_120814_discounts.rs
Normal file
@ -0,0 +1,544 @@
|
|||||||
|
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};
|
||||||
|
|
||||||
|
#[derive(DeriveMigrationName)]
|
||||||
|
pub struct Migration;
|
||||||
|
|
||||||
|
#[async_trait::async_trait]
|
||||||
|
impl MigrationTrait for Migration {
|
||||||
|
async fn up(&self, m: &SchemaManager) -> Result<(), DbErr> {
|
||||||
|
create_type!(m, DiscountConditionType);
|
||||||
|
create_type!(m, DiscountConditionOperator);
|
||||||
|
create_type!(m, DiscountRuleType);
|
||||||
|
create_type!(m, DiscountRuleAllocation);
|
||||||
|
|
||||||
|
Self::create_discounts(m).await?;
|
||||||
|
Self::create_discount_conditions(m).await?;
|
||||||
|
Self::create_discount_condition_customer_groups(m).await?;
|
||||||
|
Self::create_discount_condition_products(m).await?;
|
||||||
|
Self::create_discount_condition_product_collections(m).await?;
|
||||||
|
Self::create_discount_condition_product_tags(m).await?;
|
||||||
|
Self::create_discount_condition_product_types(m).await?;
|
||||||
|
Self::create_discount_regions(m).await?;
|
||||||
|
Self::create_discount_rules(m).await?;
|
||||||
|
Self::create_discount_rule_products(m).await?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn down(&self, m: &SchemaManager) -> Result<(), DbErr> {
|
||||||
|
self.drop_table(m, Discount::Discounts).await?;
|
||||||
|
self.drop_table(m, DiscountCondition::DiscountConditions)
|
||||||
|
.await?;
|
||||||
|
self.drop_table(
|
||||||
|
m,
|
||||||
|
DiscountConditionCustomerGroup::DiscountConditionCustomerGroups,
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
self.drop_table(m, DiscountConditionProduct::DiscountConditionProducts)
|
||||||
|
.await?;
|
||||||
|
self.drop_table(
|
||||||
|
m,
|
||||||
|
DiscountConditionProductCollection::DiscountConditionProductCollections,
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
self.drop_table(m, DiscountConditionProductTag::DiscountConditionProductTags)
|
||||||
|
.await?;
|
||||||
|
self.drop_table(
|
||||||
|
m,
|
||||||
|
DiscountConditionProductType::DiscountConditionProductTypes,
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
self.drop_table(m, DiscountRegion::DiscountRegions).await?;
|
||||||
|
self.drop_table(m, DiscountRule::DiscountRules).await?;
|
||||||
|
self.drop_table(m, DiscountRuleProduct::DiscountRuleProducts)
|
||||||
|
.await?;
|
||||||
|
|
||||||
|
drop_type!(m, DiscountConditionType);
|
||||||
|
drop_type!(m, DiscountConditionOperator);
|
||||||
|
drop_type!(m, DiscountRuleType);
|
||||||
|
drop_type!(m, DiscountRuleAllocation);
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Migration {
|
||||||
|
/// ```sql
|
||||||
|
/// CREATE TABLE discounts
|
||||||
|
/// (
|
||||||
|
/// id uuid NOT NULL,
|
||||||
|
/// code character varying NOT NULL,
|
||||||
|
/// is_dynamic boolean NOT NULL,
|
||||||
|
/// rule_id uuid,
|
||||||
|
/// is_disabled boolean NOT NULL,
|
||||||
|
/// parent_discount_id uuid,
|
||||||
|
/// starts_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP 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,
|
||||||
|
/// usage_limit integer,
|
||||||
|
/// usage_count integer DEFAULT 0 NOT NULL,
|
||||||
|
/// valid_duration character varying
|
||||||
|
/// );
|
||||||
|
/// ```
|
||||||
|
async fn create_discounts(m: &SchemaManager<'_>) -> Result<(), DbErr> {
|
||||||
|
m.create_table(
|
||||||
|
Table::create()
|
||||||
|
.table(Discount::Discounts)
|
||||||
|
.col(auto_uuid_not_null!(Discount::Id))
|
||||||
|
.col(ColumnDef::new(Discount::Code).string().not_null())
|
||||||
|
.col(ColumnDef::new(Discount::IsDynamic).boolean().not_null())
|
||||||
|
.col(ColumnDef::new(Discount::RuleId).uuid())
|
||||||
|
.col(ColumnDef::new(Discount::IsDisabled).boolean().not_null())
|
||||||
|
.col(ColumnDef::new(Discount::ParentDiscountId).uuid())
|
||||||
|
.col(
|
||||||
|
ColumnDef::new(Discount::StartsAt)
|
||||||
|
.timestamp()
|
||||||
|
.default(SimpleExpr::Custom("CURRENT_TIMESTAMP".into()))
|
||||||
|
.not_null(),
|
||||||
|
)
|
||||||
|
.col(ColumnDef::new(Discount::EndsAt).timestamp())
|
||||||
|
.col(ts_def_now_not_null!(Discount::CreatedAt))
|
||||||
|
.col(ts_def_now_not_null!(Discount::UpdatedAt))
|
||||||
|
.col(ColumnDef::new(Discount::DeletedAt).timestamp())
|
||||||
|
.col(ColumnDef::new(Discount::Metadata).json_binary())
|
||||||
|
.col(ColumnDef::new(Discount::UsageLimit).integer())
|
||||||
|
.col(
|
||||||
|
ColumnDef::new(Discount::UsageCount)
|
||||||
|
.integer()
|
||||||
|
.default(0)
|
||||||
|
.not_null(),
|
||||||
|
)
|
||||||
|
.col(ColumnDef::new(Discount::ValidDuration).string())
|
||||||
|
.to_owned(),
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
/// ```sql
|
||||||
|
/// CREATE TABLE discount_conditions
|
||||||
|
/// (
|
||||||
|
/// id uuid NOT NULL,
|
||||||
|
/// type public.discount_condition_types NOT NULL,
|
||||||
|
/// operator public.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,
|
||||||
|
/// deleted_at timestamp with time zone,
|
||||||
|
/// metadata jsonb
|
||||||
|
/// );
|
||||||
|
/// ```
|
||||||
|
async fn create_discount_conditions(m: &SchemaManager<'_>) -> Result<(), DbErr> {
|
||||||
|
m.create_table(
|
||||||
|
Table::create()
|
||||||
|
.table(DiscountCondition::DiscountConditions)
|
||||||
|
.col(auto_uuid_not_null!(DiscountCondition::Id))
|
||||||
|
.col(
|
||||||
|
ColumnDef::new(DiscountCondition::DiscountConditionType).enumeration(
|
||||||
|
crate::types::DiscountConditionType::DiscountConditionTypes,
|
||||||
|
crate::types::DiscountConditionType::iter().skip(1),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
.col(ColumnDef::new(DiscountCondition::Operator).enumeration(
|
||||||
|
crate::types::DiscountConditionOperator::DiscountConditionOperators,
|
||||||
|
crate::types::DiscountConditionOperator::iter().skip(1),
|
||||||
|
))
|
||||||
|
.col(
|
||||||
|
ColumnDef::new(DiscountCondition::DiscountRuleId)
|
||||||
|
.uuid()
|
||||||
|
.not_null(),
|
||||||
|
)
|
||||||
|
.col(ts_def_now_not_null!(DiscountCondition::CreatedAt))
|
||||||
|
.col(ts_def_now_not_null!(DiscountCondition::UpdatedAt))
|
||||||
|
.col(ColumnDef::new(DiscountCondition::DeletedAt).timestamp())
|
||||||
|
.col(ColumnDef::new(DiscountCondition::Metadata).json_binary())
|
||||||
|
.to_owned(),
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
/// ```sql
|
||||||
|
/// CREATE TABLE discount_condition_customer_groups
|
||||||
|
/// (
|
||||||
|
/// customer_group_id uuid NOT NULL,
|
||||||
|
/// condition_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_discount_condition_customer_groups(m: &SchemaManager<'_>) -> Result<(), DbErr> {
|
||||||
|
m.create_table(
|
||||||
|
Table::create()
|
||||||
|
.table(DiscountConditionCustomerGroup::DiscountConditionCustomerGroups)
|
||||||
|
.col(
|
||||||
|
ColumnDef::new(DiscountConditionCustomerGroup::CustomerGroupId)
|
||||||
|
.uuid()
|
||||||
|
.not_null(),
|
||||||
|
)
|
||||||
|
.col(
|
||||||
|
ColumnDef::new(DiscountConditionCustomerGroup::ConditionId)
|
||||||
|
.uuid()
|
||||||
|
.not_null(),
|
||||||
|
)
|
||||||
|
.col(ts_def_now_not_null!(
|
||||||
|
DiscountConditionCustomerGroup::CreatedAt
|
||||||
|
))
|
||||||
|
.col(ts_def_now_not_null!(
|
||||||
|
DiscountConditionCustomerGroup::UpdatedAt
|
||||||
|
))
|
||||||
|
.col(ColumnDef::new(DiscountConditionCustomerGroup::Metadata).json_binary())
|
||||||
|
.to_owned(),
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
/// ```sql
|
||||||
|
/// CREATE TABLE discount_condition_products
|
||||||
|
/// (
|
||||||
|
/// product_id uuid NOT NULL,
|
||||||
|
/// condition_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_discount_condition_products(m: &SchemaManager<'_>) -> Result<(), DbErr> {
|
||||||
|
m.create_table(
|
||||||
|
Table::create()
|
||||||
|
.table(DiscountConditionProduct::DiscountConditionProducts)
|
||||||
|
.col(
|
||||||
|
ColumnDef::new(DiscountConditionProduct::ProductId)
|
||||||
|
.uuid()
|
||||||
|
.not_null(),
|
||||||
|
)
|
||||||
|
.col(
|
||||||
|
ColumnDef::new(DiscountConditionProduct::ConditionId)
|
||||||
|
.uuid()
|
||||||
|
.not_null(),
|
||||||
|
)
|
||||||
|
.col(ts_def_now_not_null!(DiscountConditionProduct::CreatedAt))
|
||||||
|
.col(ts_def_now_not_null!(DiscountConditionProduct::UpdatedAt))
|
||||||
|
.col(ColumnDef::new(DiscountConditionProduct::Metadata).json_binary())
|
||||||
|
.to_owned(),
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
/// ```sql
|
||||||
|
/// CREATE TABLE discount_condition_product_collections
|
||||||
|
/// (
|
||||||
|
/// product_collection_id uuid NOT NULL,
|
||||||
|
/// condition_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_discount_condition_product_collections(
|
||||||
|
m: &SchemaManager<'_>,
|
||||||
|
) -> Result<(), DbErr> {
|
||||||
|
m.create_table(
|
||||||
|
Table::create()
|
||||||
|
.table(DiscountConditionProductCollection::DiscountConditionProductCollections)
|
||||||
|
.col(
|
||||||
|
ColumnDef::new(DiscountConditionProductCollection::ProductCollectionId)
|
||||||
|
.uuid()
|
||||||
|
.not_null(),
|
||||||
|
)
|
||||||
|
.col(
|
||||||
|
ColumnDef::new(DiscountConditionProductCollection::ConditionId)
|
||||||
|
.uuid()
|
||||||
|
.not_null(),
|
||||||
|
)
|
||||||
|
.col(ts_def_now_not_null!(
|
||||||
|
DiscountConditionProductCollection::CreatedAt
|
||||||
|
))
|
||||||
|
.col(ts_def_now_not_null!(
|
||||||
|
DiscountConditionProductCollection::UpdatedAt
|
||||||
|
))
|
||||||
|
.col(ColumnDef::new(DiscountConditionProductCollection::Metadata).json_binary())
|
||||||
|
.to_owned(),
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
/// ```sql
|
||||||
|
/// CREATE TABLE discount_condition_product_tags
|
||||||
|
/// (
|
||||||
|
/// product_tag_id uuid NOT NULL,
|
||||||
|
/// condition_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_discount_condition_product_tags(m: &SchemaManager<'_>) -> Result<(), DbErr> {
|
||||||
|
m.create_table(
|
||||||
|
Table::create()
|
||||||
|
.table(DiscountConditionProductTag::DiscountConditionProductTags)
|
||||||
|
.col(
|
||||||
|
ColumnDef::new(DiscountConditionProductTag::ProductTagId)
|
||||||
|
.uuid()
|
||||||
|
.not_null(),
|
||||||
|
)
|
||||||
|
.col(
|
||||||
|
ColumnDef::new(DiscountConditionProductTag::ConditionId)
|
||||||
|
.uuid()
|
||||||
|
.not_null(),
|
||||||
|
)
|
||||||
|
.col(ts_def_now_not_null!(DiscountConditionProductTag::CreatedAt))
|
||||||
|
.col(ts_def_now_not_null!(DiscountConditionProductTag::UpdatedAt))
|
||||||
|
.col(ColumnDef::new(DiscountConditionProductTag::Metadata).json_binary())
|
||||||
|
.to_owned(),
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
/// ```sql
|
||||||
|
/// CREATE TABLE discount_condition_product_types
|
||||||
|
/// (
|
||||||
|
/// product_type_id uuid NOT NULL,
|
||||||
|
/// condition_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_discount_condition_product_types(m: &SchemaManager<'_>) -> Result<(), DbErr> {
|
||||||
|
m.create_table(
|
||||||
|
Table::create()
|
||||||
|
.table(DiscountConditionProductType::DiscountConditionProductTypes)
|
||||||
|
.col(
|
||||||
|
ColumnDef::new(DiscountConditionProductType::ProductTypeId)
|
||||||
|
.uuid()
|
||||||
|
.not_null(),
|
||||||
|
)
|
||||||
|
.col(
|
||||||
|
ColumnDef::new(DiscountConditionProductType::ConditionId)
|
||||||
|
.uuid()
|
||||||
|
.not_null(),
|
||||||
|
)
|
||||||
|
.col(ts_def_now_not_null!(
|
||||||
|
DiscountConditionProductType::CreatedAt
|
||||||
|
))
|
||||||
|
.col(ts_def_now_not_null!(
|
||||||
|
DiscountConditionProductType::UpdatedAt
|
||||||
|
))
|
||||||
|
.col(ColumnDef::new(DiscountConditionProductType::Metadata).json_binary())
|
||||||
|
.to_owned(),
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
/// ```sql
|
||||||
|
/// CREATE TABLE discount_regions
|
||||||
|
/// (
|
||||||
|
/// discount_id uuid NOT NULL,
|
||||||
|
/// region_id uuid NOT NULL
|
||||||
|
/// );
|
||||||
|
/// ```
|
||||||
|
async fn create_discount_regions(m: &SchemaManager<'_>) -> Result<(), DbErr> {
|
||||||
|
m.create_table(
|
||||||
|
Table::create()
|
||||||
|
.table(DiscountRegion::DiscountRegions)
|
||||||
|
.col(ColumnDef::new(DiscountRegion::DiscountId).uuid().not_null())
|
||||||
|
.col(ColumnDef::new(DiscountRegion::RegionId).uuid().not_null())
|
||||||
|
.to_owned(),
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
/// ```sql
|
||||||
|
/// CREATE TABLE discount_rules
|
||||||
|
/// (
|
||||||
|
/// id uuid NOT NULL,
|
||||||
|
/// description character varying,
|
||||||
|
/// type public.discount_rule_types NOT NULL,
|
||||||
|
/// value integer NOT NULL,
|
||||||
|
/// allocation public.discount_rule_allocations,
|
||||||
|
/// 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_discount_rules(m: &SchemaManager<'_>) -> Result<(), DbErr> {
|
||||||
|
m.create_table(
|
||||||
|
Table::create()
|
||||||
|
.table(DiscountRule::DiscountRules)
|
||||||
|
.col(auto_uuid_not_null!(DiscountRule::Id))
|
||||||
|
.col(ColumnDef::new(DiscountRule::Description).string())
|
||||||
|
.col(
|
||||||
|
ColumnDef::new(DiscountRule::DiscountRuleType)
|
||||||
|
.enumeration(
|
||||||
|
crate::types::DiscountRuleType::DiscountRuleTypes,
|
||||||
|
crate::types::DiscountRuleType::iter().skip(1),
|
||||||
|
)
|
||||||
|
.not_null(),
|
||||||
|
)
|
||||||
|
.col(ColumnDef::new(DiscountRule::Value).integer().not_null())
|
||||||
|
.col(ColumnDef::new(DiscountRule::Allocation).enumeration(
|
||||||
|
crate::types::DiscountRuleAllocation::DiscountRuleAllocations,
|
||||||
|
crate::types::DiscountRuleAllocation::iter().skip(1),
|
||||||
|
))
|
||||||
|
.col(ts_def_now_not_null!(DiscountRule::CreatedAt))
|
||||||
|
.col(ts_def_now_not_null!(DiscountRule::UpdatedAt))
|
||||||
|
.col(ColumnDef::new(DiscountRule::DeletedAt).timestamp())
|
||||||
|
.col(ColumnDef::new(DiscountRule::Metadata).json_binary())
|
||||||
|
.to_owned(),
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
/// ```sql
|
||||||
|
/// CREATE TABLE discount_rule_products
|
||||||
|
/// (
|
||||||
|
/// discount_rule_id uuid NOT NULL,
|
||||||
|
/// product_id uuid NOT NULL
|
||||||
|
/// );
|
||||||
|
/// ```
|
||||||
|
async fn create_discount_rule_products(m: &SchemaManager<'_>) -> Result<(), DbErr> {
|
||||||
|
m.create_table(
|
||||||
|
Table::create()
|
||||||
|
.table(DiscountRuleProduct::DiscountRuleProducts)
|
||||||
|
.col(
|
||||||
|
ColumnDef::new(DiscountRuleProduct::DiscountRuleId)
|
||||||
|
.uuid()
|
||||||
|
.not_null(),
|
||||||
|
)
|
||||||
|
.col(
|
||||||
|
ColumnDef::new(DiscountRuleProduct::ProductId)
|
||||||
|
.uuid()
|
||||||
|
.not_null(),
|
||||||
|
)
|
||||||
|
.to_owned(),
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Iden)]
|
||||||
|
pub enum Discount {
|
||||||
|
Discounts,
|
||||||
|
Id,
|
||||||
|
Code,
|
||||||
|
IsDynamic,
|
||||||
|
RuleId,
|
||||||
|
IsDisabled,
|
||||||
|
ParentDiscountId,
|
||||||
|
StartsAt,
|
||||||
|
EndsAt,
|
||||||
|
CreatedAt,
|
||||||
|
UpdatedAt,
|
||||||
|
DeletedAt,
|
||||||
|
Metadata,
|
||||||
|
UsageLimit,
|
||||||
|
UsageCount,
|
||||||
|
ValidDuration,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Iden)]
|
||||||
|
pub enum DiscountCondition {
|
||||||
|
DiscountConditions,
|
||||||
|
Id,
|
||||||
|
DiscountConditionType,
|
||||||
|
Operator,
|
||||||
|
DiscountRuleId,
|
||||||
|
CreatedAt,
|
||||||
|
UpdatedAt,
|
||||||
|
DeletedAt,
|
||||||
|
Metadata,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Iden)]
|
||||||
|
pub enum DiscountConditionCustomerGroup {
|
||||||
|
DiscountConditionCustomerGroups,
|
||||||
|
CustomerGroupId,
|
||||||
|
ConditionId,
|
||||||
|
CreatedAt,
|
||||||
|
UpdatedAt,
|
||||||
|
Metadata,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Iden)]
|
||||||
|
pub enum DiscountConditionProduct {
|
||||||
|
DiscountConditionProducts,
|
||||||
|
ProductId,
|
||||||
|
ConditionId,
|
||||||
|
CreatedAt,
|
||||||
|
UpdatedAt,
|
||||||
|
Metadata,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Iden)]
|
||||||
|
pub enum DiscountConditionProductCollection {
|
||||||
|
DiscountConditionProductCollections,
|
||||||
|
ProductCollectionId,
|
||||||
|
ConditionId,
|
||||||
|
CreatedAt,
|
||||||
|
UpdatedAt,
|
||||||
|
Metadata,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Iden)]
|
||||||
|
pub enum DiscountConditionProductTag {
|
||||||
|
DiscountConditionProductTags,
|
||||||
|
ProductTagId,
|
||||||
|
ConditionId,
|
||||||
|
CreatedAt,
|
||||||
|
UpdatedAt,
|
||||||
|
Metadata,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Iden)]
|
||||||
|
pub enum DiscountConditionProductType {
|
||||||
|
DiscountConditionProductTypes,
|
||||||
|
ProductTypeId,
|
||||||
|
ConditionId,
|
||||||
|
CreatedAt,
|
||||||
|
UpdatedAt,
|
||||||
|
Metadata,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Iden)]
|
||||||
|
pub enum DiscountRegion {
|
||||||
|
DiscountRegions,
|
||||||
|
DiscountId,
|
||||||
|
RegionId,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Iden)]
|
||||||
|
pub enum DiscountRule {
|
||||||
|
DiscountRules,
|
||||||
|
Id,
|
||||||
|
Description,
|
||||||
|
DiscountRuleType,
|
||||||
|
Value,
|
||||||
|
Allocation,
|
||||||
|
CreatedAt,
|
||||||
|
UpdatedAt,
|
||||||
|
DeletedAt,
|
||||||
|
Metadata,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Iden)]
|
||||||
|
pub enum DiscountRuleProduct {
|
||||||
|
DiscountRuleProducts,
|
||||||
|
DiscountRuleId,
|
||||||
|
ProductId,
|
||||||
|
}
|
12
migration/src/discounts/mod.rs
Normal file
12
migration/src/discounts/mod.rs
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
mod m20230603_120814_discounts;
|
||||||
|
|
||||||
|
use sea_orm_migration::{MigrationTrait, MigratorTrait};
|
||||||
|
|
||||||
|
pub struct DiscountsMigrator;
|
||||||
|
|
||||||
|
#[async_trait::async_trait]
|
||||||
|
impl MigratorTrait for DiscountsMigrator {
|
||||||
|
fn migrations() -> Vec<Box<dyn MigrationTrait>> {
|
||||||
|
vec![Box::new(m20230603_120814_discounts::Migration)]
|
||||||
|
}
|
||||||
|
}
|
@ -1,10 +1,19 @@
|
|||||||
pub use sea_orm_migration::prelude::*;
|
pub use sea_orm_migration::prelude::*;
|
||||||
|
|
||||||
pub mod carts;
|
pub mod carts;
|
||||||
|
pub use carts::*;
|
||||||
|
pub mod discounts;
|
||||||
|
pub use discounts::*;
|
||||||
pub mod jobs;
|
pub mod jobs;
|
||||||
|
pub use jobs::*;
|
||||||
pub mod public;
|
pub mod public;
|
||||||
|
pub use public::*;
|
||||||
pub mod schema_list;
|
pub mod schema_list;
|
||||||
|
pub use schema_list::*;
|
||||||
|
pub mod checkouts;
|
||||||
|
pub use checkouts::*;
|
||||||
pub mod types;
|
pub mod types;
|
||||||
|
pub use types::*;
|
||||||
|
|
||||||
#[macro_export]
|
#[macro_export]
|
||||||
macro_rules! ts_def_now_not_null {
|
macro_rules! ts_def_now_not_null {
|
||||||
@ -22,7 +31,35 @@ macro_rules! auto_uuid_not_null {
|
|||||||
ColumnDef::new($identifier)
|
ColumnDef::new($identifier)
|
||||||
.uuid()
|
.uuid()
|
||||||
.not_null()
|
.not_null()
|
||||||
.default(SimpleExpr::Custom("uuid_generate_v4()".into()))
|
.default(SimpleExpr::Custom("public.uuid_generate_v4()".into()))
|
||||||
.primary_key()
|
.primary_key()
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// #[macro_export]
|
||||||
|
// macro_rules! col {
|
||||||
|
// ($name: expr $ty: expr) => {
|
||||||
|
// ColumnDef::new($name).$ty()
|
||||||
|
// };
|
||||||
|
// ($name: expr auto uuid) => {
|
||||||
|
// $crate::auto_uuid_not_null!($name)
|
||||||
|
// };
|
||||||
|
// ($name: expr $ty: expr default $value: expr) => {
|
||||||
|
// $crate::col!($name $ty).default($value)
|
||||||
|
// };
|
||||||
|
// }
|
||||||
|
|
||||||
|
#[async_trait::async_trait]
|
||||||
|
pub trait DropTable {
|
||||||
|
async fn drop_table<I: Iden + 'static>(
|
||||||
|
&self,
|
||||||
|
manager: &SchemaManager<'_>,
|
||||||
|
identifier: I,
|
||||||
|
) -> Result<(), DbErr> {
|
||||||
|
manager
|
||||||
|
.drop_table(Table::drop().table(identifier).to_owned())
|
||||||
|
.await
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T: MigrationTrait> DropTable for T {}
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
#![feature(concat_idents)]
|
||||||
|
|
||||||
use std::error::Error;
|
use std::error::Error;
|
||||||
use std::fmt::Display;
|
use std::fmt::Display;
|
||||||
use std::process::exit;
|
use std::process::exit;
|
||||||
@ -13,6 +15,17 @@ use tracing_subscriber::EnvFilter;
|
|||||||
|
|
||||||
// const MIGRATION_DIR: &str = "./";
|
// const MIGRATION_DIR: &str = "./";
|
||||||
|
|
||||||
|
macro_rules! migrate_schema {
|
||||||
|
($cli: expr, $schema_name: ident, $migrator_name: ident) => {{
|
||||||
|
run_cli(
|
||||||
|
&mut $cli,
|
||||||
|
PostgreSQLSchema::$schema_name,
|
||||||
|
migration::$migrator_name,
|
||||||
|
)
|
||||||
|
.await;
|
||||||
|
}};
|
||||||
|
}
|
||||||
|
|
||||||
#[async_std::main]
|
#[async_std::main]
|
||||||
async fn main() {
|
async fn main() {
|
||||||
dotenv().ok();
|
dotenv().ok();
|
||||||
@ -20,24 +33,10 @@ async fn main() {
|
|||||||
|
|
||||||
init_logger(cli.verbose);
|
init_logger(cli.verbose);
|
||||||
|
|
||||||
run_cli(
|
migrate_schema!(cli, Public, PublicMigrator);
|
||||||
&mut cli,
|
migrate_schema!(cli, Jobs, JobsMigrator);
|
||||||
PostgreSQLSchema::Public,
|
migrate_schema!(cli, Carts, CartsMigrator);
|
||||||
migration::public::PublicMigrator,
|
migrate_schema!(cli, Discounts, DiscountsMigrator);
|
||||||
)
|
|
||||||
.await;
|
|
||||||
run_cli(
|
|
||||||
&mut cli,
|
|
||||||
PostgreSQLSchema::Jobs,
|
|
||||||
migration::jobs::JobsMigrator,
|
|
||||||
)
|
|
||||||
.await;
|
|
||||||
run_cli(
|
|
||||||
&mut cli,
|
|
||||||
PostgreSQLSchema::Carts,
|
|
||||||
migration::carts::CartsMigrator,
|
|
||||||
)
|
|
||||||
.await;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn run_cli<M>(cli: &mut Cli, schema: PostgreSQLSchema, migrator: M)
|
pub async fn run_cli<M>(cli: &mut Cli, schema: PostgreSQLSchema, migrator: M)
|
||||||
@ -57,6 +56,10 @@ where
|
|||||||
.await
|
.await
|
||||||
.expect("Fail to acquire database connection");
|
.expect("Fail to acquire database connection");
|
||||||
|
|
||||||
|
db.execute_unprepared(&format!("CREATE SCHEMA {}", schema))
|
||||||
|
.await
|
||||||
|
.ok();
|
||||||
|
|
||||||
db.execute_unprepared(&format!("SET search_path = '{}'", schema))
|
db.execute_unprepared(&format!("SET search_path = '{}'", schema))
|
||||||
.await
|
.await
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
@ -1,37 +0,0 @@
|
|||||||
use sea_orm::Iterable;
|
|
||||||
use sea_orm_migration::prelude::*;
|
|
||||||
use sea_orm_migration::sea_orm::{DatabaseBackend, Statement};
|
|
||||||
|
|
||||||
use crate::schema_list::PostgreSQLSchema;
|
|
||||||
|
|
||||||
#[derive(DeriveMigrationName)]
|
|
||||||
pub struct Migration;
|
|
||||||
|
|
||||||
#[async_trait::async_trait]
|
|
||||||
impl MigrationTrait for Migration {
|
|
||||||
async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> {
|
|
||||||
for schema in PostgreSQLSchema::iter().skip(1) {
|
|
||||||
manager
|
|
||||||
.get_connection()
|
|
||||||
.execute(Statement::from_string(
|
|
||||||
DatabaseBackend::Postgres,
|
|
||||||
format!("CREATE SCHEMA {}", schema.as_str()),
|
|
||||||
))
|
|
||||||
.await?;
|
|
||||||
}
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> {
|
|
||||||
for schema in PostgreSQLSchema::iter().skip(1) {
|
|
||||||
manager
|
|
||||||
.get_connection()
|
|
||||||
.execute(Statement::from_string(
|
|
||||||
DatabaseBackend::Postgres,
|
|
||||||
format!("DROP SCHEMA {}", schema.as_str()),
|
|
||||||
))
|
|
||||||
.await?;
|
|
||||||
}
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,8 +1,6 @@
|
|||||||
use sea_orm::Iterable;
|
use sea_orm::Iterable;
|
||||||
use sea_orm_migration::prelude::*;
|
use sea_orm_migration::prelude::*;
|
||||||
|
|
||||||
use crate::extension::postgres::Type;
|
|
||||||
use crate::types::*;
|
|
||||||
use crate::{create_type, drop_type};
|
use crate::{create_type, drop_type};
|
||||||
|
|
||||||
#[derive(DeriveMigrationName)]
|
#[derive(DeriveMigrationName)]
|
||||||
@ -18,10 +16,6 @@ impl MigrationTrait for Migration {
|
|||||||
create_type!(manager, ClaimOrderFulfillmentStatus);
|
create_type!(manager, ClaimOrderFulfillmentStatus);
|
||||||
create_type!(manager, ClaimOrderPaymentStatus);
|
create_type!(manager, ClaimOrderPaymentStatus);
|
||||||
create_type!(manager, ClaimOrderType);
|
create_type!(manager, ClaimOrderType);
|
||||||
create_type!(manager, DiscountConditionOperator);
|
|
||||||
create_type!(manager, DiscountConditionType);
|
|
||||||
create_type!(manager, DiscountRuleAllocation);
|
|
||||||
create_type!(manager, DiscountRuleType);
|
|
||||||
create_type!(manager, DraftOrderStatus);
|
create_type!(manager, DraftOrderStatus);
|
||||||
create_type!(manager, InviteRole);
|
create_type!(manager, InviteRole);
|
||||||
create_type!(manager, OrderFulfillmentStatus);
|
create_type!(manager, OrderFulfillmentStatus);
|
||||||
@ -50,10 +44,6 @@ impl MigrationTrait for Migration {
|
|||||||
drop_type!(manager, ClaimOrderFulfillmentStatus);
|
drop_type!(manager, ClaimOrderFulfillmentStatus);
|
||||||
drop_type!(manager, ClaimOrderPaymentStatus);
|
drop_type!(manager, ClaimOrderPaymentStatus);
|
||||||
drop_type!(manager, ClaimOrderType);
|
drop_type!(manager, ClaimOrderType);
|
||||||
drop_type!(manager, DiscountConditionOperator);
|
|
||||||
drop_type!(manager, DiscountConditionType);
|
|
||||||
drop_type!(manager, DiscountRuleAllocation);
|
|
||||||
drop_type!(manager, DiscountRuleType);
|
|
||||||
drop_type!(manager, DraftOrderStatus);
|
drop_type!(manager, DraftOrderStatus);
|
||||||
drop_type!(manager, InviteRole);
|
drop_type!(manager, InviteRole);
|
||||||
drop_type!(manager, OrderFulfillmentStatus);
|
drop_type!(manager, OrderFulfillmentStatus);
|
||||||
|
@ -1,22 +1,27 @@
|
|||||||
use sea_orm_migration::prelude::*;
|
use sea_orm_migration::prelude::*;
|
||||||
use sea_orm_migration::sea_orm::Iterable;
|
|
||||||
use sea_query::expr::SimpleExpr;
|
use sea_query::expr::SimpleExpr;
|
||||||
|
|
||||||
use crate::types::*;
|
|
||||||
use crate::{auto_uuid_not_null, ts_def_now_not_null};
|
use crate::{auto_uuid_not_null, ts_def_now_not_null};
|
||||||
|
|
||||||
/// ```sql
|
|
||||||
/// ```
|
|
||||||
#[derive(DeriveMigrationName)]
|
#[derive(DeriveMigrationName)]
|
||||||
pub struct Migration;
|
pub struct Migration;
|
||||||
|
|
||||||
#[async_trait::async_trait]
|
#[async_trait::async_trait]
|
||||||
impl MigrationTrait for Migration {
|
impl MigrationTrait for Migration {
|
||||||
async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> {
|
async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> {
|
||||||
|
Self::create_countries(manager).await?;
|
||||||
|
Self::create_currencies(manager).await?;
|
||||||
|
Self::create_regions(manager).await?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> {
|
async fn down(&self, m: &SchemaManager) -> Result<(), DbErr> {
|
||||||
|
m.drop_table(Table::drop().table(Country::Countries).to_owned())
|
||||||
|
.await?;
|
||||||
|
m.drop_table(Table::drop().table(Currency::Currencies).to_owned())
|
||||||
|
.await?;
|
||||||
|
m.drop_table(Table::drop().table(Currency::Currencies).to_owned())
|
||||||
|
.await?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -34,8 +39,35 @@ impl Migration {
|
|||||||
/// region_id character varying
|
/// region_id character varying
|
||||||
/// );
|
/// );
|
||||||
/// ```
|
/// ```
|
||||||
async fn create_countries(manager: &SchemaManager<'_>) -> Result<(), DbErr> {
|
async fn create_countries(m: &SchemaManager<'_>) -> Result<(), DbErr> {
|
||||||
todo!()
|
m.create_table(
|
||||||
|
Table::create()
|
||||||
|
.table(Country::Countries)
|
||||||
|
.col(auto_uuid_not_null!(Country::Id))
|
||||||
|
.col(ColumnDef::new(Country::Iso2).char_len(2).not_null())
|
||||||
|
.col(ColumnDef::new(Country::Iso3).char_len(3).not_null())
|
||||||
|
.col(ColumnDef::new(Country::NumCode).integer().not_null())
|
||||||
|
.col(ColumnDef::new(Country::Name).string().not_null())
|
||||||
|
.col(ColumnDef::new(Country::DisplayName).string().not_null())
|
||||||
|
.col(ColumnDef::new(Country::RegionId).uuid())
|
||||||
|
.to_owned(),
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
m.create_index(
|
||||||
|
IndexCreateStatement::new()
|
||||||
|
.table(Country::Countries)
|
||||||
|
.col(Country::Iso2)
|
||||||
|
.to_owned(),
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
m.create_index(
|
||||||
|
IndexCreateStatement::new()
|
||||||
|
.table(Country::Countries)
|
||||||
|
.col(Country::Iso3)
|
||||||
|
.to_owned(),
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// ```sql
|
/// ```sql
|
||||||
@ -47,8 +79,25 @@ impl Migration {
|
|||||||
/// name character varying NOT NULL
|
/// name character varying NOT NULL
|
||||||
/// );
|
/// );
|
||||||
/// ```
|
/// ```
|
||||||
async fn create_currencies(manager: &SchemaManager<'_>) -> Result<(), DbErr> {
|
async fn create_currencies(m: &SchemaManager<'_>) -> Result<(), DbErr> {
|
||||||
todo!()
|
m.create_table(
|
||||||
|
Table::create()
|
||||||
|
.table(Currency::Currencies)
|
||||||
|
.col(ColumnDef::new(Currency::Code).string().not_null())
|
||||||
|
.col(ColumnDef::new(Currency::Symbol).string().not_null())
|
||||||
|
.col(ColumnDef::new(Currency::SymbolNative).string().not_null())
|
||||||
|
.col(ColumnDef::new(Currency::Name).string().not_null())
|
||||||
|
.to_owned(),
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
m.create_index(
|
||||||
|
IndexCreateStatement::new()
|
||||||
|
.table(Currency::Currencies)
|
||||||
|
.col(Currency::Code)
|
||||||
|
.to_owned(),
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// CREATE TABLE public.regions
|
/// CREATE TABLE public.regions
|
||||||
@ -66,19 +115,73 @@ impl Migration {
|
|||||||
/// automatic_taxes boolean DEFAULT true NOT NULL,
|
/// automatic_taxes boolean DEFAULT true NOT NULL,
|
||||||
/// tax_provider_id uuid
|
/// tax_provider_id uuid
|
||||||
/// );
|
/// );
|
||||||
async fn create_regions(manager: &SchemaManager<'_>) -> Result<(), DbErr> {
|
async fn create_regions(m: &SchemaManager<'_>) -> Result<(), DbErr> {
|
||||||
todo!()
|
m.create_table(
|
||||||
|
Table::create()
|
||||||
|
.table(Region::Regions)
|
||||||
|
.col(auto_uuid_not_null!(Region::Id))
|
||||||
|
.col(ColumnDef::new(Region::Name).string().not_null())
|
||||||
|
.col(ColumnDef::new(Region::CurrencyCode).string().not_null())
|
||||||
|
.col(ColumnDef::new(Region::TaxRate).double().not_null())
|
||||||
|
.col(ColumnDef::new(Region::TaxCode).string().not_null())
|
||||||
|
.col(ts_def_now_not_null!(Region::CreatedAt))
|
||||||
|
.col(ts_def_now_not_null!(Region::UpdatedAt))
|
||||||
|
.col(ColumnDef::new(Region::DeletedAt).timestamp())
|
||||||
|
.col(ColumnDef::new(Region::Metadata).json_binary())
|
||||||
|
.col(
|
||||||
|
ColumnDef::new(Region::GiftCardsTaxable)
|
||||||
|
.boolean()
|
||||||
|
.default(true)
|
||||||
|
.not_null(),
|
||||||
|
)
|
||||||
|
.col(
|
||||||
|
ColumnDef::new(Region::AutomaticTaxes)
|
||||||
|
.boolean()
|
||||||
|
.default(true)
|
||||||
|
.not_null(),
|
||||||
|
)
|
||||||
|
.col(ColumnDef::new(Region::TaxProviderId).uuid().not_null())
|
||||||
|
.to_owned(),
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Iden)]
|
#[derive(Iden)]
|
||||||
pub enum ClaimImage {
|
pub enum Country {
|
||||||
ClaimImages,
|
Countries,
|
||||||
Id,
|
Id,
|
||||||
ClaimItemId,
|
Iso2,
|
||||||
Url,
|
Iso3,
|
||||||
|
NumCode,
|
||||||
|
Name,
|
||||||
|
DisplayName,
|
||||||
|
RegionId,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Iden)]
|
||||||
|
pub enum Currency {
|
||||||
|
Currencies,
|
||||||
|
Code,
|
||||||
|
Symbol,
|
||||||
|
SymbolNative,
|
||||||
|
Name,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Iden)]
|
||||||
|
pub enum Region {
|
||||||
|
Regions,
|
||||||
|
Id,
|
||||||
|
Name,
|
||||||
|
CurrencyCode,
|
||||||
|
TaxRate,
|
||||||
|
TaxCode,
|
||||||
CreatedAt,
|
CreatedAt,
|
||||||
UpdatedAt,
|
UpdatedAt,
|
||||||
DeletedAt,
|
DeletedAt,
|
||||||
Metadata,
|
Metadata,
|
||||||
|
GiftCardsTaxable,
|
||||||
|
AutomaticTaxes,
|
||||||
|
TaxProviderId,
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
use sea_orm_migration::{MigrationTrait, MigratorTrait};
|
use sea_orm_migration::{MigrationTrait, MigratorTrait};
|
||||||
|
|
||||||
mod m20230603_102630_schema;
|
|
||||||
mod m20230603_102634_types;
|
mod m20230603_102634_types;
|
||||||
mod m20230603_120814_addresses;
|
mod m20230603_120814_addresses;
|
||||||
mod m20230603_120815_claims;
|
mod m20230603_120815_claims;
|
||||||
@ -11,9 +10,7 @@ pub struct PublicMigrator;
|
|||||||
#[async_trait::async_trait]
|
#[async_trait::async_trait]
|
||||||
impl MigratorTrait for PublicMigrator {
|
impl MigratorTrait for PublicMigrator {
|
||||||
fn migrations() -> Vec<Box<dyn MigrationTrait>> {
|
fn migrations() -> Vec<Box<dyn MigrationTrait>> {
|
||||||
eprintln!("PublicMigrator");
|
|
||||||
vec![
|
vec![
|
||||||
Box::new(m20230603_102630_schema::Migration),
|
|
||||||
Box::new(m20230603_102634_types::Migration),
|
Box::new(m20230603_102634_types::Migration),
|
||||||
Box::new(m20230603_120814_addresses::Migration),
|
Box::new(m20230603_120814_addresses::Migration),
|
||||||
Box::new(m20230603_120815_claims::Migration),
|
Box::new(m20230603_120815_claims::Migration),
|
||||||
|
@ -7,6 +7,7 @@ pub enum PostgreSQLSchema {
|
|||||||
Public,
|
Public,
|
||||||
Jobs,
|
Jobs,
|
||||||
Carts,
|
Carts,
|
||||||
|
Discounts,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl PostgreSQLSchema {
|
impl PostgreSQLSchema {
|
||||||
@ -15,6 +16,7 @@ impl PostgreSQLSchema {
|
|||||||
PostgreSQLSchema::Public => "public",
|
PostgreSQLSchema::Public => "public",
|
||||||
PostgreSQLSchema::Jobs => "jobs",
|
PostgreSQLSchema::Jobs => "jobs",
|
||||||
PostgreSQLSchema::Carts => "carts",
|
PostgreSQLSchema::Carts => "carts",
|
||||||
|
PostgreSQLSchema::Discounts => "discounts",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,10 @@ use sea_orm_migration::prelude::*;
|
|||||||
|
|
||||||
#[macro_export]
|
#[macro_export]
|
||||||
macro_rules! create_type {
|
macro_rules! create_type {
|
||||||
($manager: ident, $ty: ident) => {
|
($manager: ident, $ty: ident) => {{
|
||||||
|
use crate::extension::postgres::Type;
|
||||||
|
use crate::types::*;
|
||||||
|
|
||||||
$manager
|
$manager
|
||||||
.create_type(
|
.create_type(
|
||||||
Type::create()
|
Type::create()
|
||||||
@ -12,11 +15,14 @@ macro_rules! create_type {
|
|||||||
.to_owned(),
|
.to_owned(),
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
};
|
}};
|
||||||
}
|
}
|
||||||
#[macro_export]
|
#[macro_export]
|
||||||
macro_rules! drop_type {
|
macro_rules! drop_type {
|
||||||
($manager: ident, $ty: ident) => {
|
($manager: ident, $ty: ident) => {{
|
||||||
|
use crate::extension::postgres::Type;
|
||||||
|
use crate::types::*;
|
||||||
|
|
||||||
$manager
|
$manager
|
||||||
.drop_type(
|
.drop_type(
|
||||||
Type::drop()
|
Type::drop()
|
||||||
@ -26,7 +32,7 @@ macro_rules! drop_type {
|
|||||||
.to_owned(),
|
.to_owned(),
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
};
|
}};
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Iden, EnumIter)]
|
#[derive(Iden, EnumIter)]
|
||||||
|
@ -347,15 +347,6 @@ CREATE TABLE public.claim_tags
|
|||||||
metadata jsonb
|
metadata jsonb
|
||||||
);
|
);
|
||||||
|
|
||||||
---- ###########################################################
|
|
||||||
---- ###########################################################
|
|
||||||
---- ###########################################################
|
|
||||||
---- ###########################################################
|
|
||||||
---- ###########################################################
|
|
||||||
---- ###########################################################
|
|
||||||
---- ###########################################################
|
|
||||||
---- ###########################################################
|
|
||||||
|
|
||||||
|
|
||||||
CREATE TABLE public.regions
|
CREATE TABLE public.regions
|
||||||
(
|
(
|
||||||
@ -392,50 +383,6 @@ CREATE TABLE public.currencies
|
|||||||
name character varying NOT NULL
|
name character varying NOT NULL
|
||||||
);
|
);
|
||||||
|
|
||||||
CREATE TABLE public.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
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE TABLE public.customers
|
|
||||||
(
|
|
||||||
id uuid NOT NULL,
|
|
||||||
email character varying NOT NULL,
|
|
||||||
first_name character varying,
|
|
||||||
last_name character varying,
|
|
||||||
billing_address_id uuid,
|
|
||||||
password_hash character varying,
|
|
||||||
phone character varying,
|
|
||||||
has_account 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
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE TABLE public.customer_groups
|
|
||||||
(
|
|
||||||
id uuid NOT NULL,
|
|
||||||
name 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 public.customer_group_customers
|
|
||||||
(
|
|
||||||
customer_group_id uuid NOT NULL,
|
|
||||||
customer_id uuid NOT NULL
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE TABLE public.discounts
|
CREATE TABLE public.discounts
|
||||||
(
|
(
|
||||||
id uuid NOT NULL,
|
id uuid NOT NULL,
|
||||||
@ -537,6 +484,205 @@ CREATE TABLE public.discount_rule_products
|
|||||||
product_id uuid NOT NULL
|
product_id uuid NOT NULL
|
||||||
);
|
);
|
||||||
|
|
||||||
|
---- ###########################################################
|
||||||
|
---- ###########################################################
|
||||||
|
---- ###########################################################
|
||||||
|
---- ###########################################################
|
||||||
|
---- ###########################################################
|
||||||
|
---- ###########################################################
|
||||||
|
---- ###########################################################
|
||||||
|
---- ###########################################################
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TABLE public.orders
|
||||||
|
(
|
||||||
|
id uuid NOT NULL,
|
||||||
|
status public.order_statuses DEFAULT 'pending'::public.order_statuses NOT NULL,
|
||||||
|
fulfillment_status public.order_fulfillment_statuses DEFAULT 'not_fulfilled'::public.order_fulfillment_statuses NOT NULL,
|
||||||
|
payment_status public.order_payment_statuses DEFAULT 'not_paid'::public.order_payment_statuses NOT NULL,
|
||||||
|
display_id integer NOT NULL,
|
||||||
|
cart_id uuid,
|
||||||
|
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,
|
||||||
|
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,
|
||||||
|
metadata jsonb,
|
||||||
|
idempotency_key character varying,
|
||||||
|
draft_order_id uuid,
|
||||||
|
no_notification boolean,
|
||||||
|
external_id uuid,
|
||||||
|
sales_channel_id uuid
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE public.order_discounts
|
||||||
|
(
|
||||||
|
order_id uuid NOT NULL,
|
||||||
|
discount_id uuid NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE public.order_edits
|
||||||
|
(
|
||||||
|
id uuid NOT NULL,
|
||||||
|
created_at timestamp with time zone DEFAULT now() NOT NULL,
|
||||||
|
updated_at timestamp with time zone DEFAULT now() NOT NULL,
|
||||||
|
order_id uuid NOT NULL,
|
||||||
|
internal_note character varying,
|
||||||
|
created_by character varying NOT NULL,
|
||||||
|
requested_by character varying,
|
||||||
|
requested_at timestamp with time zone,
|
||||||
|
confirmed_by character varying,
|
||||||
|
confirmed_at timestamp with time zone,
|
||||||
|
declined_by character varying,
|
||||||
|
declined_reason character varying,
|
||||||
|
declined_at timestamp with time zone,
|
||||||
|
canceled_by character varying,
|
||||||
|
canceled_at timestamp with time zone,
|
||||||
|
payment_collection_id uuid
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE public.order_gift_cards
|
||||||
|
(
|
||||||
|
order_id uuid NOT NULL,
|
||||||
|
gift_card_id uuid NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE public.order_item_changes
|
||||||
|
(
|
||||||
|
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,
|
||||||
|
type public.order_item_change_types NOT NULL,
|
||||||
|
order_edit_id uuid NOT NULL,
|
||||||
|
original_line_item_id uuid,
|
||||||
|
line_item_id uuid
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE public.payments
|
||||||
|
(
|
||||||
|
id uuid NOT NULL,
|
||||||
|
swap_id uuid,
|
||||||
|
cart_id uuid,
|
||||||
|
order_id uuid,
|
||||||
|
amount integer NOT NULL,
|
||||||
|
currency_code character varying NOT NULL,
|
||||||
|
amount_refunded integer DEFAULT 0 NOT NULL,
|
||||||
|
provider_id uuid NOT NULL,
|
||||||
|
data jsonb NOT NULL,
|
||||||
|
captured_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
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE public.payment_collections
|
||||||
|
(
|
||||||
|
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,
|
||||||
|
type public.payment_collection_types NOT NULL,
|
||||||
|
status public.payment_collection_statuses NOT NULL,
|
||||||
|
description text,
|
||||||
|
amount integer NOT NULL,
|
||||||
|
authorized_amount integer,
|
||||||
|
region_id uuid NOT NULL,
|
||||||
|
currency_code character varying NOT NULL,
|
||||||
|
metadata jsonb,
|
||||||
|
created_by character varying NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE public.payment_collection_payments
|
||||||
|
(
|
||||||
|
payment_collection_id uuid NOT NULL,
|
||||||
|
payment_id uuid NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE public.payment_collection_sessions
|
||||||
|
(
|
||||||
|
payment_collection_id uuid NOT NULL,
|
||||||
|
payment_session_id uuid NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE public.payment_providers
|
||||||
|
(
|
||||||
|
id uuid NOT NULL,
|
||||||
|
is_installed boolean DEFAULT true NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE public.payment_sessions
|
||||||
|
(
|
||||||
|
id uuid NOT NULL,
|
||||||
|
cart_id uuid,
|
||||||
|
provider_id uuid NOT NULL,
|
||||||
|
is_selected boolean,
|
||||||
|
status public.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,
|
||||||
|
idempotency_key character varying,
|
||||||
|
payment_authorized_at timestamp with time zone,
|
||||||
|
amount integer,
|
||||||
|
is_initiated boolean DEFAULT false NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
---------
|
||||||
|
---------
|
||||||
|
---------
|
||||||
|
---------
|
||||||
|
|
||||||
|
CREATE TABLE public.customers
|
||||||
|
(
|
||||||
|
id uuid NOT NULL,
|
||||||
|
email character varying NOT NULL,
|
||||||
|
first_name character varying,
|
||||||
|
last_name character varying,
|
||||||
|
billing_address_id uuid,
|
||||||
|
password_hash character varying,
|
||||||
|
phone character varying,
|
||||||
|
has_account 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
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE public.customer_groups
|
||||||
|
(
|
||||||
|
id uuid NOT NULL,
|
||||||
|
name 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 public.customer_group_customers
|
||||||
|
(
|
||||||
|
customer_group_id uuid NOT NULL,
|
||||||
|
customer_id uuid NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE public.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
|
||||||
|
);
|
||||||
|
|
||||||
CREATE TABLE public.draft_orders
|
CREATE TABLE public.draft_orders
|
||||||
(
|
(
|
||||||
id uuid NOT NULL,
|
id uuid NOT NULL,
|
||||||
@ -771,146 +917,6 @@ CREATE TABLE public.oauth
|
|||||||
data jsonb
|
data jsonb
|
||||||
);
|
);
|
||||||
|
|
||||||
CREATE TABLE public.orders
|
|
||||||
(
|
|
||||||
id uuid NOT NULL,
|
|
||||||
status public.order_statuses DEFAULT 'pending'::public.order_statuses NOT NULL,
|
|
||||||
fulfillment_status public.order_fulfillment_statuses DEFAULT 'not_fulfilled'::public.order_fulfillment_statuses NOT NULL,
|
|
||||||
payment_status public.order_payment_statuses DEFAULT 'not_paid'::public.order_payment_statuses NOT NULL,
|
|
||||||
display_id integer NOT NULL,
|
|
||||||
cart_id uuid,
|
|
||||||
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,
|
|
||||||
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,
|
|
||||||
metadata jsonb,
|
|
||||||
idempotency_key character varying,
|
|
||||||
draft_order_id uuid,
|
|
||||||
no_notification boolean,
|
|
||||||
external_id uuid,
|
|
||||||
sales_channel_id uuid
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE TABLE public.order_discounts
|
|
||||||
(
|
|
||||||
order_id uuid NOT NULL,
|
|
||||||
discount_id uuid NOT NULL
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE TABLE public.order_edits
|
|
||||||
(
|
|
||||||
id uuid NOT NULL,
|
|
||||||
created_at timestamp with time zone DEFAULT now() NOT NULL,
|
|
||||||
updated_at timestamp with time zone DEFAULT now() NOT NULL,
|
|
||||||
order_id uuid NOT NULL,
|
|
||||||
internal_note character varying,
|
|
||||||
created_by character varying NOT NULL,
|
|
||||||
requested_by character varying,
|
|
||||||
requested_at timestamp with time zone,
|
|
||||||
confirmed_by character varying,
|
|
||||||
confirmed_at timestamp with time zone,
|
|
||||||
declined_by character varying,
|
|
||||||
declined_reason character varying,
|
|
||||||
declined_at timestamp with time zone,
|
|
||||||
canceled_by character varying,
|
|
||||||
canceled_at timestamp with time zone,
|
|
||||||
payment_collection_id uuid
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE TABLE public.order_gift_cards
|
|
||||||
(
|
|
||||||
order_id uuid NOT NULL,
|
|
||||||
gift_card_id uuid NOT NULL
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE TABLE public.order_item_changes
|
|
||||||
(
|
|
||||||
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,
|
|
||||||
type public.order_item_change_types NOT NULL,
|
|
||||||
order_edit_id uuid NOT NULL,
|
|
||||||
original_line_item_id uuid,
|
|
||||||
line_item_id uuid
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE TABLE public.payments
|
|
||||||
(
|
|
||||||
id uuid NOT NULL,
|
|
||||||
swap_id uuid,
|
|
||||||
cart_id uuid,
|
|
||||||
order_id uuid,
|
|
||||||
amount integer NOT NULL,
|
|
||||||
currency_code character varying NOT NULL,
|
|
||||||
amount_refunded integer DEFAULT 0 NOT NULL,
|
|
||||||
provider_id uuid NOT NULL,
|
|
||||||
data jsonb NOT NULL,
|
|
||||||
captured_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
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE TABLE public.payment_collections
|
|
||||||
(
|
|
||||||
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,
|
|
||||||
type public.payment_collection_types NOT NULL,
|
|
||||||
status public.payment_collection_statuses NOT NULL,
|
|
||||||
description text,
|
|
||||||
amount integer NOT NULL,
|
|
||||||
authorized_amount integer,
|
|
||||||
region_id uuid NOT NULL,
|
|
||||||
currency_code character varying NOT NULL,
|
|
||||||
metadata jsonb,
|
|
||||||
created_by character varying NOT NULL
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE TABLE public.payment_collection_payments
|
|
||||||
(
|
|
||||||
payment_collection_id uuid NOT NULL,
|
|
||||||
payment_id uuid NOT NULL
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE TABLE public.payment_collection_sessions
|
|
||||||
(
|
|
||||||
payment_collection_id uuid NOT NULL,
|
|
||||||
payment_session_id uuid NOT NULL
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE TABLE public.payment_providers
|
|
||||||
(
|
|
||||||
id uuid NOT NULL,
|
|
||||||
is_installed boolean DEFAULT true NOT NULL
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE TABLE public.payment_sessions
|
|
||||||
(
|
|
||||||
id uuid NOT NULL,
|
|
||||||
cart_id uuid,
|
|
||||||
provider_id uuid NOT NULL,
|
|
||||||
is_selected boolean,
|
|
||||||
status public.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,
|
|
||||||
idempotency_key character varying,
|
|
||||||
payment_authorized_at timestamp with time zone,
|
|
||||||
amount integer,
|
|
||||||
is_initiated boolean DEFAULT false NOT NULL
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE TABLE public.price_lists
|
CREATE TABLE public.price_lists
|
||||||
(
|
(
|
||||||
id uuid NOT NULL,
|
id uuid NOT NULL,
|
||||||
|
Loading…
Reference in New Issue
Block a user