245 lines
7.0 KiB
Rust
245 lines
7.0 KiB
Rust
use sea_orm_migration::prelude::*;
|
|
|
|
use crate::*;
|
|
|
|
#[derive(DeriveMigrationName)]
|
|
pub struct Migration;
|
|
|
|
#[async_trait::async_trait]
|
|
impl MigrationTrait for Migration {
|
|
async fn up(&self, m: &SchemaManager) -> Result<(), DbErr> {
|
|
self.create_stores(m).await?;
|
|
self.create_store_currencies(m).await?;
|
|
self.create_tax_providers(m).await?;
|
|
self.create_tax_rates(m).await?;
|
|
self.create_region_fulfillment_providers(m).await?;
|
|
self.create_region_payment_providers(m).await?;
|
|
|
|
Ok(())
|
|
}
|
|
|
|
async fn down(&self, m: &SchemaManager) -> Result<(), DbErr> {
|
|
self.drop_table(m, Store::Stores).await?;
|
|
self.drop_table(m, StoreCurrency::StoreCurrencies).await?;
|
|
self.drop_table(m, TaxProvider::TaxProviders).await?;
|
|
self.drop_table(m, TaxRate::TaxRates).await?;
|
|
self.drop_table(m, RegionFulfillmentProvider::RegionFulfillmentProviders)
|
|
.await?;
|
|
self.drop_table(m, RegionPaymentProvider::RegionPaymentProviders)
|
|
.await?;
|
|
Ok(())
|
|
}
|
|
}
|
|
|
|
impl Migration {
|
|
/// ```sql
|
|
/// CREATE TABLE stores
|
|
/// (
|
|
/// id uuid NOT NULL,
|
|
/// name character varying DEFAULT 'Bazaar'::character varying NOT NULL,
|
|
/// default_currency_code character varying DEFAULT 'pln'::character varying NOT NULL,
|
|
/// swap_link_template character varying,
|
|
/// created_at timestamp with time zone DEFAULT now() NOT NULL,
|
|
/// updated_at timestamp with time zone DEFAULT now() NOT NULL,
|
|
/// metadata jsonb,
|
|
/// payment_link_template character varying,
|
|
/// invite_link_template character varying,
|
|
/// default_sales_channel_id uuid,
|
|
/// default_location_id uuid
|
|
/// );
|
|
/// ```
|
|
async fn create_stores(&self, m: &SchemaManager<'_>) -> Result<(), DbErr> {
|
|
use Store::*;
|
|
|
|
m.build_table(
|
|
Stores,
|
|
&mut [
|
|
Id.col().uuid().not_null().primary_key().default_gen_uuid(),
|
|
Name.col().string().default("Bazzar".to_string()).not_null(),
|
|
DefaultCurrencyCode.col().string().default("pln").not_null(),
|
|
SwapLinkTemplate.col().string(),
|
|
CreatedAt.col().timestamp().not_null().default_now(),
|
|
UpdatedAt.col().timestamp().not_null().default_now(),
|
|
Metadata.col().json_binary(),
|
|
PaymentLinkTemplate.col().string(),
|
|
InviteLinkTemplate.col().string(),
|
|
DefaultSalesChannelId.col().uuid(),
|
|
DefaultLocationId.col().uuid(),
|
|
],
|
|
)
|
|
.await?;
|
|
|
|
Ok(())
|
|
}
|
|
|
|
/// ```sql
|
|
/// CREATE TABLE store_currencies
|
|
/// (
|
|
/// store_id uuid NOT NULL,
|
|
/// currency_code character varying NOT NULL
|
|
/// );
|
|
/// ```
|
|
async fn create_store_currencies(&self, m: &SchemaManager<'_>) -> Result<(), DbErr> {
|
|
use StoreCurrency::*;
|
|
|
|
m.create_table(
|
|
Table::create()
|
|
.table(StoreCurrencies)
|
|
.col(StoreId.col().uuid().not_null())
|
|
.col(CurrencyCode.col().string().not_null())
|
|
.primary_key(&mut m.bridge_primary_key(StoreCurrencies, StoreId, CurrencyCode))
|
|
.to_owned(),
|
|
)
|
|
.await?;
|
|
|
|
Ok(())
|
|
}
|
|
|
|
/// ```sql
|
|
/// CREATE TABLE tax_providers
|
|
/// (
|
|
/// id uuid NOT NULL,
|
|
/// is_installed boolean DEFAULT true NOT NULL
|
|
/// );
|
|
/// ```
|
|
async fn create_tax_providers(&self, m: &SchemaManager<'_>) -> Result<(), DbErr> {
|
|
use TaxProvider::*;
|
|
|
|
m.build_table(
|
|
TaxProviders,
|
|
&mut [
|
|
Id.col().uuid().not_null().default_gen_uuid().primary_key(),
|
|
IsInstalled.col().boolean().default(true).not_null(),
|
|
],
|
|
)
|
|
.await?;
|
|
|
|
Ok(())
|
|
}
|
|
|
|
/// ```sql
|
|
/// CREATE TABLE tax_rates
|
|
/// (
|
|
/// id uuid NOT NULL,
|
|
/// rate real,
|
|
/// code character varying,
|
|
/// name character varying NOT NULL,
|
|
/// region_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_tax_rates(&self, m: &SchemaManager<'_>) -> Result<(), DbErr> {
|
|
use TaxRate::*;
|
|
|
|
m.build_table(
|
|
TaxRates,
|
|
&mut [
|
|
Id.col().uuid().primary_key().default_gen_uuid(),
|
|
Rate.col().double(),
|
|
Code.col().string(),
|
|
Name.col().string().not_null(),
|
|
RegionId.col().uuid().not_null(),
|
|
CreatedAt.col().timestamp().not_null().default_now(),
|
|
UpdatedAt.col().timestamp().not_null().default_now(),
|
|
Metadata.col().json_binary(),
|
|
],
|
|
)
|
|
.await?;
|
|
Ok(())
|
|
}
|
|
|
|
/// ```sql
|
|
/// CREATE TABLE region_fulfillment_providers
|
|
/// (
|
|
/// region_id uuid NOT NULL,
|
|
/// provider_id uuid NOT NULL
|
|
/// );
|
|
/// ```
|
|
async fn create_region_fulfillment_providers(
|
|
&self,
|
|
m: &SchemaManager<'_>,
|
|
) -> Result<(), DbErr> {
|
|
use RegionFulfillmentProvider::*;
|
|
|
|
m.create_bridge_table(RegionFulfillmentProviders, RegionId, ProviderId)
|
|
.await?;
|
|
|
|
Ok(())
|
|
}
|
|
|
|
/// ```sql
|
|
/// CREATE TABLE region_payment_providers
|
|
/// (
|
|
/// region_id uuid NOT NULL,
|
|
/// provider_id uuid NOT NULL
|
|
/// );
|
|
/// ```
|
|
async fn create_region_payment_providers(&self, m: &SchemaManager<'_>) -> Result<(), DbErr> {
|
|
use RegionPaymentProvider::*;
|
|
|
|
m.create_bridge_table(RegionPaymentProviders, RegionId, ProviderId)
|
|
.await?;
|
|
|
|
Ok(())
|
|
}
|
|
}
|
|
|
|
#[derive(Iden, Clone, Copy)]
|
|
pub enum Store {
|
|
Stores,
|
|
Id,
|
|
Name,
|
|
DefaultCurrencyCode,
|
|
SwapLinkTemplate,
|
|
CreatedAt,
|
|
UpdatedAt,
|
|
Metadata,
|
|
PaymentLinkTemplate,
|
|
InviteLinkTemplate,
|
|
DefaultSalesChannelId,
|
|
DefaultLocationId,
|
|
}
|
|
|
|
#[derive(Iden, Clone, Copy)]
|
|
pub enum StoreCurrency {
|
|
StoreCurrencies,
|
|
StoreId,
|
|
CurrencyCode,
|
|
}
|
|
|
|
#[derive(Iden, Clone, Copy)]
|
|
pub enum TaxProvider {
|
|
TaxProviders,
|
|
Id,
|
|
IsInstalled,
|
|
}
|
|
|
|
#[derive(Iden, Clone, Copy)]
|
|
pub enum TaxRate {
|
|
TaxRates,
|
|
Id,
|
|
Rate,
|
|
Code,
|
|
Name,
|
|
RegionId,
|
|
CreatedAt,
|
|
UpdatedAt,
|
|
Metadata,
|
|
}
|
|
|
|
#[derive(Iden, Clone, Copy)]
|
|
pub enum RegionFulfillmentProvider {
|
|
RegionFulfillmentProviders,
|
|
RegionId,
|
|
ProviderId,
|
|
}
|
|
|
|
#[derive(Iden, Clone, Copy)]
|
|
pub enum RegionPaymentProvider {
|
|
RegionPaymentProviders,
|
|
RegionId,
|
|
ProviderId,
|
|
}
|