Add Identity and Notification
This commit is contained in:
parent
8383104d53
commit
8dae1384af
150
migration/src/identity/m20230603_120814_identity.rs
Normal file
150
migration/src/identity/m20230603_120814_identity.rs
Normal file
@ -0,0 +1,150 @@
|
|||||||
|
use sea_orm_migration::prelude::*;
|
||||||
|
use sea_query::expr::SimpleExpr;
|
||||||
|
|
||||||
|
use crate::{auto_uuid_not_null, ts_def_now_not_null, CreateBridgeTable, 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_customers(m).await?;
|
||||||
|
self.create_customer_groups(m).await?;
|
||||||
|
self.create_customer_group_customers(m).await?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn down(&self, m: &SchemaManager) -> Result<(), DbErr> {
|
||||||
|
self.drop_table(m, Customer::Customers).await?;
|
||||||
|
self.drop_table(m, CustomerGroup::CustomerGroups).await?;
|
||||||
|
self.drop_table(m, CustomerGroupCustomer::CustomerGroupCustomers)
|
||||||
|
.await?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Migration {
|
||||||
|
/// ```sql
|
||||||
|
/// CREATE TABLE 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
|
||||||
|
/// );
|
||||||
|
/// ```
|
||||||
|
async fn create_customers(&self, m: &SchemaManager<'_>) -> Result<(), DbErr> {
|
||||||
|
use Customer::*;
|
||||||
|
|
||||||
|
m.create_table(
|
||||||
|
Table::create()
|
||||||
|
.table(Customers)
|
||||||
|
.col(auto_uuid_not_null!(Id))
|
||||||
|
.col(Email.col().string().not_null())
|
||||||
|
.col(FirstName.col().string())
|
||||||
|
.col(LastName.col().string())
|
||||||
|
.col(BillingAddressId.col().uuid())
|
||||||
|
.col(PasswordHash.col().string())
|
||||||
|
.col(Phone.col().string())
|
||||||
|
.col(HasAccount.col().boolean().default(false).not_null())
|
||||||
|
.col(ts_def_now_not_null!(CreatedAt))
|
||||||
|
.col(ts_def_now_not_null!(UpdatedAt))
|
||||||
|
.col(DeletedAt.col().timestamp())
|
||||||
|
.col(Metadata.col().json_binary())
|
||||||
|
.to_owned(),
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
/// ```sql
|
||||||
|
/// CREATE TABLE 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
|
||||||
|
/// );
|
||||||
|
/// ```
|
||||||
|
async fn create_customer_groups(&self, m: &SchemaManager<'_>) -> Result<(), DbErr> {
|
||||||
|
use CustomerGroup::*;
|
||||||
|
|
||||||
|
m.create_table(
|
||||||
|
Table::create()
|
||||||
|
.table(CustomerGroups)
|
||||||
|
.col(auto_uuid_not_null!(Id))
|
||||||
|
.col(Name.col().string().not_null())
|
||||||
|
.col(ts_def_now_not_null!(CreatedAt))
|
||||||
|
.col(ts_def_now_not_null!(UpdatedAt))
|
||||||
|
.col(DeletedAt.col().timestamp())
|
||||||
|
.col(Metadata.col().json_binary())
|
||||||
|
.to_owned(),
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
/// ```sql
|
||||||
|
/// CREATE TABLE customer_group_customers
|
||||||
|
/// (
|
||||||
|
/// customer_group_id uuid NOT NULL,
|
||||||
|
/// customer_id uuid NOT NULL
|
||||||
|
/// );
|
||||||
|
/// ```
|
||||||
|
async fn create_customer_group_customers(&self, m: &SchemaManager<'_>) -> Result<(), DbErr> {
|
||||||
|
use CustomerGroupCustomer::*;
|
||||||
|
|
||||||
|
m.create_bridge_table(CustomerGroupCustomers, CustomerGroupId, CustomerId)
|
||||||
|
.await?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Iden, Copy, Clone)]
|
||||||
|
pub enum Customer {
|
||||||
|
Customers,
|
||||||
|
Id,
|
||||||
|
Email,
|
||||||
|
FirstName,
|
||||||
|
LastName,
|
||||||
|
BillingAddressId,
|
||||||
|
PasswordHash,
|
||||||
|
Phone,
|
||||||
|
HasAccount,
|
||||||
|
CreatedAt,
|
||||||
|
UpdatedAt,
|
||||||
|
DeletedAt,
|
||||||
|
Metadata,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Iden, Copy, Clone)]
|
||||||
|
pub enum CustomerGroup {
|
||||||
|
CustomerGroups,
|
||||||
|
Id,
|
||||||
|
Name,
|
||||||
|
CreatedAt,
|
||||||
|
UpdatedAt,
|
||||||
|
DeletedAt,
|
||||||
|
Metadata,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Iden, Copy, Clone)]
|
||||||
|
pub enum CustomerGroupCustomer {
|
||||||
|
CustomerGroupCustomers,
|
||||||
|
CustomerGroupId,
|
||||||
|
CustomerId,
|
||||||
|
}
|
12
migration/src/identity/mod.rs
Normal file
12
migration/src/identity/mod.rs
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
use sea_orm_migration::{MigrationTrait, MigratorTrait};
|
||||||
|
|
||||||
|
mod m20230603_120814_identity;
|
||||||
|
|
||||||
|
pub struct IdentityMigrator;
|
||||||
|
|
||||||
|
#[async_trait::async_trait]
|
||||||
|
impl MigratorTrait for IdentityMigrator {
|
||||||
|
fn migrations() -> Vec<Box<dyn MigrationTrait>> {
|
||||||
|
vec![Box::new(m20230603_120814_identity::Migration)]
|
||||||
|
}
|
||||||
|
}
|
@ -22,6 +22,8 @@ pub mod stocks;
|
|||||||
pub use stocks::*;
|
pub use stocks::*;
|
||||||
pub mod notifications;
|
pub mod notifications;
|
||||||
pub use notifications::*;
|
pub use notifications::*;
|
||||||
|
pub mod identity;
|
||||||
|
pub use identity::*;
|
||||||
pub mod types;
|
pub mod types;
|
||||||
|
|
||||||
pub use types::*;
|
pub use types::*;
|
||||||
|
@ -40,6 +40,8 @@ async fn main() {
|
|||||||
migrate_schema!(cli, Checkouts, CheckoutsMigrator);
|
migrate_schema!(cli, Checkouts, CheckoutsMigrator);
|
||||||
migrate_schema!(cli, Shipping, ShippingMigrator);
|
migrate_schema!(cli, Shipping, ShippingMigrator);
|
||||||
migrate_schema!(cli, Stocks, StocksMigrator);
|
migrate_schema!(cli, Stocks, StocksMigrator);
|
||||||
|
migrate_schema!(cli, Identity, IdentityMigrator);
|
||||||
|
migrate_schema!(cli, Notifications, NotificationsMigrator);
|
||||||
}
|
}
|
||||||
|
|
||||||
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)
|
||||||
|
109
migration/src/notifications/m20230603_120814_notifications.rs
Normal file
109
migration/src/notifications/m20230603_120814_notifications.rs
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
use sea_orm_migration::prelude::*;
|
||||||
|
use sea_query::expr::SimpleExpr;
|
||||||
|
|
||||||
|
use crate::{auto_uuid_not_null, 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_notifications(m).await?;
|
||||||
|
self.create_notification_providers(m).await?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn down(&self, m: &SchemaManager) -> Result<(), DbErr> {
|
||||||
|
self.drop_table(m, Notification::Notifications).await?;
|
||||||
|
self.drop_table(m, NotificationProvider::NotificationProviders)
|
||||||
|
.await?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Migration {
|
||||||
|
/// ```sql
|
||||||
|
/// CREATE TABLE notifications
|
||||||
|
/// (
|
||||||
|
/// id uuid NOT NULL,
|
||||||
|
/// event_name character varying,
|
||||||
|
/// resource_type character varying NOT NULL,
|
||||||
|
/// resource_id uuid NOT NULL,
|
||||||
|
/// customer_id uuid,
|
||||||
|
/// "to" character varying NOT NULL,
|
||||||
|
/// data jsonb NOT NULL,
|
||||||
|
/// parent_id uuid,
|
||||||
|
/// provider_id uuid,
|
||||||
|
/// created_at timestamp with time zone DEFAULT now() NOT NULL,
|
||||||
|
/// updated_at timestamp with time zone DEFAULT now() NOT NULL
|
||||||
|
/// );
|
||||||
|
/// ```
|
||||||
|
async fn create_notifications(&self, m: &SchemaManager<'_>) -> Result<(), DbErr> {
|
||||||
|
use Notification::*;
|
||||||
|
|
||||||
|
m.create_table(
|
||||||
|
Table::create()
|
||||||
|
.table(Notifications)
|
||||||
|
.col(auto_uuid_not_null!(Id))
|
||||||
|
.col(EventName.col().string().not_null())
|
||||||
|
.col(ResourceType.col().string().not_null())
|
||||||
|
.col(ResourceId.col().uuid().not_null())
|
||||||
|
.col(CustomerId.col().uuid())
|
||||||
|
.col(To.col().string().not_null())
|
||||||
|
.col(Data.col().json_binary().not_null())
|
||||||
|
.col(ParentId.col().uuid())
|
||||||
|
.col(ProviderId.col().uuid())
|
||||||
|
.col(ts_def_now_not_null!(CreatedAt))
|
||||||
|
.col(ts_def_now_not_null!(UpdatedAt))
|
||||||
|
.to_owned(),
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
/// ```sql
|
||||||
|
/// CREATE TABLE notification_providers
|
||||||
|
/// (
|
||||||
|
/// id uuid NOT NULL,
|
||||||
|
/// is_installed boolean DEFAULT true NOT NULL
|
||||||
|
/// );
|
||||||
|
/// ```
|
||||||
|
async fn create_notification_providers(&self, m: &SchemaManager<'_>) -> Result<(), DbErr> {
|
||||||
|
use NotificationProvider::*;
|
||||||
|
|
||||||
|
m.create_table(
|
||||||
|
Table::create()
|
||||||
|
.table(NotificationProviders)
|
||||||
|
.col(auto_uuid_not_null!(Id))
|
||||||
|
.col(IsInstalled.col().boolean().default(true).not_null())
|
||||||
|
.to_owned(),
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Iden)]
|
||||||
|
pub enum Notification {
|
||||||
|
Notifications,
|
||||||
|
Id,
|
||||||
|
EventName,
|
||||||
|
ResourceType,
|
||||||
|
ResourceId,
|
||||||
|
CustomerId,
|
||||||
|
To,
|
||||||
|
Data,
|
||||||
|
ParentId,
|
||||||
|
ProviderId,
|
||||||
|
CreatedAt,
|
||||||
|
UpdatedAt,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Iden)]
|
||||||
|
pub enum NotificationProvider {
|
||||||
|
NotificationProviders,
|
||||||
|
Id,
|
||||||
|
IsInstalled,
|
||||||
|
}
|
@ -0,0 +1,12 @@
|
|||||||
|
use sea_orm_migration::{MigrationTrait, MigratorTrait};
|
||||||
|
|
||||||
|
mod m20230603_120814_notifications;
|
||||||
|
|
||||||
|
pub struct NotificationsMigrator;
|
||||||
|
|
||||||
|
#[async_trait::async_trait]
|
||||||
|
impl MigratorTrait for NotificationsMigrator {
|
||||||
|
fn migrations() -> Vec<Box<dyn MigrationTrait>> {
|
||||||
|
vec![Box::new(m20230603_120814_notifications::Migration)]
|
||||||
|
}
|
||||||
|
}
|
@ -11,6 +11,8 @@ pub enum PostgreSQLSchema {
|
|||||||
Checkouts,
|
Checkouts,
|
||||||
Shipping,
|
Shipping,
|
||||||
Stocks,
|
Stocks,
|
||||||
|
Identity,
|
||||||
|
Notifications,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl PostgreSQLSchema {
|
impl PostgreSQLSchema {
|
||||||
@ -23,6 +25,8 @@ impl PostgreSQLSchema {
|
|||||||
PostgreSQLSchema::Checkouts => "checkouts",
|
PostgreSQLSchema::Checkouts => "checkouts",
|
||||||
PostgreSQLSchema::Shipping => "shipping",
|
PostgreSQLSchema::Shipping => "shipping",
|
||||||
PostgreSQLSchema::Stocks => "stocks",
|
PostgreSQLSchema::Stocks => "stocks",
|
||||||
|
PostgreSQLSchema::Identity => "identity",
|
||||||
|
PostgreSQLSchema::Notifications => "notifications",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
------ PENDING
|
|
||||||
|
|
||||||
CREATE TABLE customers
|
CREATE TABLE customers
|
||||||
(
|
(
|
||||||
id uuid NOT NULL,
|
id uuid NOT NULL,
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
---- PENDING
|
|
||||||
|
|
||||||
CREATE TABLE notifications
|
CREATE TABLE notifications
|
||||||
(
|
(
|
||||||
id uuid NOT NULL,
|
id uuid NOT NULL,
|
||||||
|
Loading…
Reference in New Issue
Block a user